【原】php读书笔记之处理文件和操作系统

发表于2014-09-30 15:05  |  次阅读  |  0条评论  |   作者:siru90

一、 文件和目录
1、获取路径的文件名
basename() 函数返回路径的文件名部分,形式:
string basename ( string path [, string suffix] )
如果提供了可选参数suffix,当返回的文件名包含这个扩展名时将被忽略该后缀,下面是一个例子:
<?php
$path="/home/www/data/users.txt";
printf("Filename:%s<br/>",basename($path));
printf("Filename sans extension:%s<br/>",basename($path,".txt"));
?>
执行结果:
Filename:users.txt
Filename sans extension:users

2、获取路径的目录
dirname()函数恰好与basename()相反,它提供路径的目录部分。其形式为
string dirname ( string path )
<?php
$path="/home/www/data/users.txt";
printf("Directory path:%s<br/>",dirname($path));
?>
执行结果:
Directory path : /home/www/data

3、了解更多关于路径的信息
pathinfo()函数创建一个关联数组,其中包括路径中的三个部分:目录名,基本名和扩展名。其形式为:
array pathinfo ( string path [, int options] )
pathinfo() 返回一个联合数组包含有 path 的信息。包括以下的数组单元:dirnamebasenameextension
例子:
<?php
$path="/home/www/data/users.txt";
var_dump(pathinfo($path));
?>
["dirname"]=>/home/www/data/
[basename"]=>users.txt
[extension"]=>txt
 

二、计算文件、目录和磁盘大小
1、确定文件的大小
filesize()函数返回指定文件的大小,以字节为单位。
int filesize ( string filename )
返回文件大小的字节数,如果出错返回 FALSE (在错误报告级别为 E_WARNING的情况下)。 
<?php
$file="www/htdocs/book/chapter1.pdf";
$bytes=filesize($file);
$kilobytes=round($bytes/1024,2);
echo $bytes."<br/>";
echo $kilobytes;
?>

2、计算磁盘的可用空间
disk_free_space()函数返回指定的目录所在磁盘分区的可用空间(以字节为单位)。
float disk_free_space ( string directory )
例子:
<?php
$drive = "/usr";
pirntf("Remaining MB on %s:%.2f", $drive,round(disk_free_space($drive/1048576), 2));
?>
返回:Remaining MB on /usr: 2141.29
注意:这里返回的数量是兆字节(MB)

3、计算磁盘的总容量
disk_free_space()函数返回指定目录所在磁盘分区的总容量(以字节为单位)
float disk_total_space ( string directory )

4、获取目录大小
php目前不提供获取目录总大小的标准函数,尽管这比获得磁盘总空间(disk_free_space())更为常见。虽然可以使用exec()或system()做系统级调用du。另一种解决方案,是编写一个定制php函数来完成这个任务,可采用递归函数
注:du命令将获得一个文件或目录的磁盘使用情况,用法信息可以参考适当的手册
<?php
function directory_size($directory)
{
	$directorySize=0;
	if($dh = @opendir($directory))
	{
		while($filename = readdir($dh))
		{
			if($filename != "." && $filename != "..")
			{
				if(is_file($directory."/".$filename))
					$directorySize += filesize($directory."/".$filename);
				if(is_dir($directory."/".$filename))
					$directorySize +=directory_size($directory."/".$filename);
			}
		}
	}
	@closedir($dh);
	return $directorySize;
}

$directory = "/usr/book/chapter10/";
$totalSize = round((directory_size($directory) / 1048576), 2);
printf("Directory %s:%f MB", $directory.":".$totalSize);
?>

三、确定访问和修改时间
1、确定文件的最后访问时间
fileatime()函数返回文件的最后访问时间,采用unix时间格式,有错误时返回false
int fileatime ( string filename )
例子:
<?php
$file = "/usr/local/apache2/htdocs/book/chapter1/stat.php";
printf("file last accessed:%s", date("m-d-y g:i:sa", fileatime($file)));
?>
返回:file last accessed:06-09-03 1:26:14pm

2、确定文件的最后改变时间
int filectime ( string filename ):返回文件上次 inode 被修改的时间,如果出错则返回 FALSE。时间以 Unix 时间戳的方式返回。
注意:“最后改变时间“不同于”最后修改时间",最后改变时间指的是对文件inode数据的任何改变,包括改变权限,所有者,组或其他inode特定的信息。而最后修改时间指对文件内容的修改(特别是以字节为单位的文件大小)

3、确定文件的最后修改时间
int filemtime ( string filename ):返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回,可用于 date()。


四、文件处理
1、识别文件末尾字符
程序需要一种标准的方式来识别何时到达文件的末尾。这个标准通常称为文件末尾,或EOF字符。EOF是非常重要的概念,几乎每种主流编程语言都提供了相应的内置函数,来验证解析器是否到达了文件EOF。在php中,此函数式feof()。feof()函数用来确定是否到达资源末尾。它在文件I/O操作中经常使用。

bool feof ( resource handle )
如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。 
<?php
$fh = fopen("/home/www/data/users.txt","rt");
while(!feof($fh))
      echo fgets($fh);
fclose($fh);
?>

2、打开文件
fopen()函数将文件绑定到一个句柄。绑定之后,脚本就可以通过句柄与此文件交互。
resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
通常情况下,这个函数用来打开文件进行读取和操作。不仅如此,fopen()还能通过一些协议(包括http、https、ftp)打开资源;
打开资源时,如果指定了模式,就可以确定该资源的访问级别。
r:只读。文件指针置于文件开头
r+:读写。文件指针置于文件开头
w:只写。在写入前,删除文件内容,将指针返回文件开头。如果文件不存在,则尝试创建
w+:读写。在读取或写入前,删除文件内容,将指针返回到文件开头。如果文件不存在,则尝试创建
a:只写。文件指针置于文件末尾。如果文件不存在,则尝试创建。此模式称为追加
a+:读写。文件指针置于文件末尾。如果文件不存在,则尝试创建。此过程称为追加到文件
b:以二进制模式打开文件
t:以文本模式打开文件

如果资源位于本地文件系统,php则认为可以使用本地路径或相对路径来访问此资源。或者,可以将fopen()的use_include_path 设置为1,会使php考虑配置指令include_path中指定的路径。

3、关闭文件
bool fclose ( resource handle ):将 handle 指向的文件关闭。 如果成功则返回 TRUE,失败则返回 FALSE。

4、读取文件
1)、将文件读入数组
file()函数能够将文件读取到数组中,各元素由换行符分割,同时换行符附加在每个元素的末尾。
array file ( string filename [, int use_include_path [, resource context]] )
例子:
users.txt
Ale ale@example.com
Nicole nicole@example.com
Laura laura@example.com
<?php
$users = file("uses.txt");
foreach($users as $user)
{
    list($name,$email) = explode(" ", $user);
    $email = trim($email);
    echo "<a href='mailto:$email'>$name</a><br/>"
}
?>

2)、将文件内容读入字符串变量
file_get_contents()函数将文件中的内容读到字符串中。
string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )
修改前面的脚本,用此函数代替file():
<?php
$users = file_get_contents("uses.txt");
$users = explode("\n", $users);
foreach($users as $user)
{
     list($name,$email) = explode(" ", $user);
     $email = trim($email);
     echo "<a href='mailto:$email'>$name</a><br/>"
}
?>

3)、读取指定数目的字符
fgets()函数返回通过打开的资源句柄读入若干个字符,或者返回遇到换行或EOF之前读取的所有内容
string fgets ( int handle [, int length] )
<?php
$fh = fopen("/home/www/data/users.txt", "rt");
while(!feof($fh)) echo fgets($fh);
fclose($fh);
?>

4)、从输入中剔除标记
fgetss()函数与fgets()相似,只是它将从输入中清除所有HTML和PHP标记
string fgetss ( resource handle [, int length [, string allowable_tags]] )
提示:如果希望从用户通过表单提交的输入中删除HTML标记,请使用strip_tags()函数

5)、以一次读取一个字符的方式读取文件
fgetc()函数从handle指定的资源中读取一个字符。如果遇到EOF,则返回flase值。
string fgetc ( resource handle )

6)、忽略换行符
fread()函数从handle指定的资源中读取length个字符。当daodaEOF或读取到length个字符时,读取将停止。
string fread ( int handle, int length )
注:与其他读取函数不同,使用fread()时不考虑换行符。因此只要使用filesize()确认了应当读取的字符数,就能很方便地使用这个函数读取整个文件
<?php
$file="/home/www/data/users.txt";
$fh = fopen($file,"rt");
$userdata = fread($fh,filesize($file));
fclose($fh);
?>

7)、读取整个文件
readfile()函数读取由filename指定的整个文件,立即输出到输出缓冲区,并返回读取的字节数。

8)、根据预定义的格式读取文件
fscanf()函数提供了一种方便的方式,可以按照预定义的格式解析资源。
mixed fscanf ( resource handle, string format [, mixed &...] )
例子:
socsecurity.txt
123-45-6789
234-56-7890
345-67-8901
<?php
$fh=fopen("socsecurity.txt","r");
while($user = fscanf($fh, "%d-%d-%d"))
{
      list($part1,$part2,$part3) = $user;
      pirntf("part1:%d part2:%d part3:%d",$part1,$part2,$part3);
}
fclose($fh);
?>

9)、将字符串写入文件
fwrite()函数将字符串的内容输出到指定的资源中
int fwrite ( resource handle, string string [, int length] )
如果给出可选参数length,fwrite()将在写入了length个字符时停止。否则将一直写入,直到到达string结尾才停止。

五、移动文件指针
1、fseek()函数将指针移动到给定的偏移量所指定的位置。
int fseek ( resource handle, int offset [, int whence] )
本站关键字:sunny90 web开发 数据库 移动开发 服务器 Nginx Mysql PHP
Copyright © sunny90版权所有 power by sunny90.com  
湘ICP备14012284号-1,粤公网安备 44030602000307号