PHP函数库分类二十一.docx
《PHP函数库分类二十一.docx》由会员分享,可在线阅读,更多相关《PHP函数库分类二十一.docx(16页珍藏版)》请在冰豆网上搜索。
PHP函数库分类二十一
PHP函数库分类二十一
7. Filesystem函数列表4
·fnmatch -用模式匹配文件名
fnmatch
(PHP4>=4.3.0,PHP5)
fnmatch — 用模式匹配文件名
说明
bool fnmatch ( string $pattern , string $string [, int $flags ])
fnmatch() 检查传入的 string 是否匹配给出的shell统配符 pattern。
此函数对于文件名尤其有用,但也可以用于普通的字符串。
普通用户可能习惯于shell模式或者至少其中最简单的形式 '?
' 和 '*' 通配符,因此使用 fnmatch() 来代替 ereg() 或者preg_match() 来进行前端搜索表达式输入对于非程序员用户更加方便。
Example#1用shell中的通配符模式匹配来检查颜色
php
if (fnmatch("*gr[ae]y", $color)) {
echo "some form of gray ...";
}
?
> Warning
目前该函数无法在Windows或其它非POSIX兼容的系统上使用。
·fopen -打开文件或者URL
fopen
(PHP4,PHP5)
fopen — 打开文件或者URL
说明
resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource$zcontext ]])
fopen() 将 filename 指定的名字资源绑定到一个流上。
如果 filename 是"scheme:
//..."的格式,则被当成一个URL,PHP将搜索协议处理器(也被称为封装协议)来处理此模式。
如果该协议尚未注册封装协议,PHP将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。
如果PHP认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。
该文件必须是PHP可以访问的,因此需要确认文件访问权限允许该访问。
如果激活了安全模式或者open_basedir则会应用进一步的限制。
如果PHP认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络URL,PHP将检查并确认allow_url_fopen已被激活。
如果关闭了,PHP将发出一个警告,而fopen的调用则失败。
Note:
所支持的协议列表见SupportedProtocolsandWrappers。
某些协议(也被称为wrappers)支持 context 和/或 php.ini 选项。
参见相应的页面哪些选项可以被设定(例如 php.ini 中用于 http wrapper的 user_agent 值)。
Note:
在PHP5.0.0中增加了对上下文(Context)的支持。
有关 上下文(Context) 的说明参见 Stream函数。
Note:
自PHP4.3.2起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。
如果在升级后脚本碰到问题,尝试暂时使用 't' 标记,直到所有的脚本都照以下所说的改为更具移植性以后。
mode 参数指定了所要求到该流的访问类型。
可以是以下:
fopen() 中 mode 的可能值列表
mode
说明
'r'
只读方式打开,将文件指针指向文件头。
'r+'
读写方式打开,将文件指针指向文件头。
'w'
写入方式打开,将文件指针指向文件头并将文件大小截为零。
如果文件不存在则尝试创建之。
'w+'
读写方式打开,将文件指针指向文件头并将文件大小截为零。
如果文件不存在则尝试创建之。
'a'
写入方式打开,将文件指针指向文件末尾。
如果文件不存在则尝试创建之。
'a+'
读写方式打开,将文件指针指向文件末尾。
如果文件不存在则尝试创建之。
'x'
创建并以写入方式打开,将文件指针指向文件头。
如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。
如果文件不存在则尝试创建之。
这和给底层的 open
(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。
'x+'
创建并以读写方式打开,将文件指针指向文件头。
如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。
如果文件不存在则尝试创建之。
这和给底层的 open
(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。
Note:
不同的操作系统家族具有不同的行结束习惯。
当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。
基于Unix的系统使用 作为行结束字符,基于Windows的系统使用 作为行结束字符,基于Macintosh的系统使用 作为行结束字符。
如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。
Windows下提供了一个文本转换标记('t')可以透明地将 转换为 。
与此对应还可以使用'b' 来强制使用二进制模式,这样就不会转换数据。
要使用这些标记,要么用 'b' 或者用 't'作为 mode 参数的最后一个字符。
默认的转换模式依赖于SAPI和所使用的PHP版本,因此为了便于移植鼓励总是指定恰当的标记。
如果是操作纯文本文件并在脚本中使用了 作为行结束符,但还要期望这些文件可以被其它应用程序例如Notepad读取,则在mode中使用 't'。
在所有其它情况下使用 'b'。
在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 字符的奇怪问题。
Note:
为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记。
Note:
再一次,为移植性考虑,强烈建议你重写那些依赖于 't' 模式的代码使其使用正确的行结束符并改成 'b' 模式。
如果也需要在include_path中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为'1'或 TRUE。
如果打开失败,本函数返回 FALSE。
Example#1 fopen() 例子
php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen(" "r");
$handle = fopen("ftp:
//user:
password@ "w");
?
>
如果在用服务器模块版本的PHP时在打开和写入文件上遇到问题,记住要确保所使用的文件是服务器进程所能够访问的。
在Windows平台上,要小心转义文件路径中的每个反斜线,或者用斜线。
php
$handle = fopen("c:
\data\info.txt", "r");
?
>
Warning
使用SSL时,MicrosoftIIS会违反协议不发送close_notify标记就关闭连接。
PHP会在到达数据尾端时报告“SSL:
FatalProtocolError”。
要解决此问题,error_reporting应设定为降低级别至不包含警告。
PHP4.3.7及更高版本可以在使用 https:
// 包装器打开流时检测出有问题的IIS服务器软件并抑制警告。
在使用 fsockopen() 创建 ssl:
// 套接字时,开发者需检测并抑制此警告。
Note:
当启用安全模式时,PHP会在执行脚本时检查被脚本操作的目录是否与被执行的脚本有相同的UID(所有者)。
·fpassthru -输出文件指针处的所有剩余数据
fpassthru
(PHP4,PHP5)
fpassthru — 输出文件指针处的所有剩余数据
说明
int fpassthru ( resource $handle )
将给定的文件指针从当前的位置读取到EOF并把结果写到输出缓冲区。
如果发生错误, fpassthru() 返回 FALSE。
否则 fpassthru() 返回从 handle 读取并传递到输出的字符数目。
文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由fclose() 关闭)。
如果已经向文件写入数据,就必须调用 rewind() 来将文件指针指向文件头。
如果既不修改文件也不在特定位置检索,只想将文件的内容下载到输出缓冲区,应该使用readfile(),这样可以省去 fopen() 调用。
Note:
当在Windows系统中将 fpassthru() 用于二进制文件时,要确保在用 fopen() 打开文件时在mode中附加了 b 来将文件以二进制方式打开。
鼓励在处理二进制文件时使用 b 标志,即使系统并不需要,这样可以使脚本的移植性更好。
Example#1对二进制文件使用 fpassthru()
php
// 以二进制格式打开文件
$name = './img/ok.png'
$fp = fopen($name, 'rb');
// 发送合适的报头
header("Content-Type:
image/png");
header("Content-Length:
" . filesize($name));
// 发送图片并终止脚本
fpassthru($fp);
exit;
?
>
·fputcsv -将行格式化为CSV并写入文件指针
fputcsv
(PHP5>=5.1.0)
fputcsv — 将行格式化为CSV并写入文件指针
说明
int fputcsv ( resource $handle [, array $fields [, string $delimiter [, string $enclosure]]])
fputcsv() 将一行(用 fields 数组传递)格式化为CSV格式并写入由 handle 指定的文件。
返回写入字符串的长度,出错则返回 FALSE。
可选的 delimiter 参数设定字段分界符(只允许一个字符)。
默认为逗号:
。
可选的 enclosure 参数设定字段字段环绕符(只允许一个字符)。
默认为双引号:
"。
Example#1 fputcsv() 例子
php
$list = array (
'aaa,bbb,ccc,dddd',
'123,456,789',
'"aaa","bbb"'
);
$fp = fopen('file.csv', 'w');
foreach ($list as $line) {
fputcsv($fp, split(',', $line));
}
fclose($fp);
?
>
Note:
在读取在Macintosh电脑中或由其创建的文件时,如果PHP不能正确的识别行结束符,启用运行时配置可选项auto_detect_line_endings也许可以解决此问题。
·fputs -fwrite的别名
fputs
(PHP4,PHP5)
fputs — fwrite() 的别名
说明
此函数是该函数的别名:
fwrite()。
·fread -读取文件(可安全用于二进制文件)
fread
(PHP4,PHP5)
fread — 读取文件(可安全用于二进制文件)
说明
string fread ( int $handle , int $length )
fread() 从文件指针 handle 读取最多 length 个字节。
该函数在读取完最多 length 个字节数,或到达EOF的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了8192个字节时就会停止读取文件,视乎先碰到哪种情况。
返回所读取的字符串,如果出错返回 FALSE。
php
// get contents of a file into a string
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize ($filename));
fclose($handle);
?
>
Warning
在区分二进制文件和文本文件的系统上(如Windows)打开文件时,fopen() 函数的mode参数要加上'b'。
php
$filename = "c:
\files\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize ($filename));
fclose($handle);
?
>
Warning
当从任何不是普通本地文件读取时,例如在读取从远程文件或 popen() 以及 proc_open() 返回的流时,读取会在一个包可用之后停止。
这意味着应该如下例所示将数据收集起来合并成大块。
php
// 对 PHP 5 及更高版本
$handle = fopen(" "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?
>
php
$handle = fopen (" "rb");
$contents = "";
while (!
feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?
>
Note:
如果只是想将一个文件的内容读入到一个字符串中,用 file_get_contents(),它的性能比上面的代码好得多。
·fscanf -从文件中格式化输入
fscanf
(PHP4>=4.0.1,PHP5)
fscanf — 从文件中格式化输入
说明
mixed fscanf ( resource $handle , string $format [, mixed &$... ])
fscanf() 函数和 sscanf() 相似,但是它从与 handle 关联的文件中接受输入并根据指定的format(定义于 sprintf() 的文档中)来解释输入。
如果只给此函数传递了两个参数,解析后的值会被作为数组返回。
否则,如果提供了可选参数,此函数将返回被赋值的数目。
可选参数必须用引用传递。
格式字符串中的任何空白会与输入流中的任何空白匹配。
这意味着甚至格式字符串中的制表符也会与输入流中的一个空格字符匹配。
Example#1 fscanf() 例子
php
$handle = fopen("users.txt","r");
while ($userinfo = fscanf($handle, "%s%s%s")) {
list ($name, $profession, $countrycode) = $userinfo;
//... do something with the values
}
fclose($handle);
?
>
Example#2users.txt的内容
javierargonautpe
hiroshisculptorjp
robertslackerus
luigifloristit
Note:
在PHP4.3.0之前,从文件中读入的最大字符数是512(或者第一个,看先碰到哪种情况)。
从PHP4.3.0起可以读取任意长的行。
·fseek -在文件指针中定位
fseek
(PHP4,PHP5)
fseek — 在文件指针中定位
说明
int fseek ( resource $handle , int $offset [, int $whence ])
在与 handle 关联的文件中设定文件指针位置。
新位置从文件头开始以字节数度量,是以 whence指定的位置加上 offset。
whence 的值定义为:
∙SEEK_SET -设定位置等于 offset 字节。
∙SEEK_CUR -设定位置为当前位置加上 offset。
∙SEEK_END -设定位置为文件尾加上 offset。
(要移动到文件尾之前的位置,需要给 offset传递一个负值。
)
如果没有指定 whence,默认为 SEEK_SET。
成功则返回0;否则返回-1。
注意移动到EOF之后的位置不算错误。
Example#1 fseek() 例子
php
$fp = fopen('somefile.txt', 'r');
// read some data
$data = fgets($fp, 4096);
// move back to the begining of the file
// same as rewind($fp);
fseek($fp, 0);
?
>
可能不能用于在 fopen() 中以"http:
//"或"ftp:
//"格式打开所返回的文件指针。
在附加模式(加参数"a"打开文件)中 ftell() 会返回未定义错误。
Note:
whence 参数是PHP4.0.0之后增加的。
Note:
如果使用附加模试("a"或"a+"),任何写入文件数据都会被附加上去,而文件的位置将会被忽略。
·fstat -通过已打开的文件指针取得文件信息
fstat
(PHP4,PHP5)
fstat — 通过已打开的文件指针取得文件信息
说明
array fstat ( resource $handle )
获取由文件指针 handle 所打开文件的统计信息。
本函数和 stat() 函数相似,除了它是作用于已打开的文件指针而不是文件名。
返回一个数组具有该文件的统计信息,该数组的格式详细说明于手册中 stat() 页面里。
Example#1 fstat() 例子
php
// 打开文件
$fp = fopen("/etc/passwd", "r");
// 取得统计信息
$fstat = fstat($fp);
// 关闭文件
fclose($fp);
// 只显示关联数组部分
print_r(array_slice($fstat, 13));
?
>
以上例程的输出类似于:
Array
(
[dev]=>771
[ino]=>488704
[mode]=>33188
[nlink]=>1
[uid]=>0
[gid]=>0
[rdev]=>0
[size]=>1114
[atime]=>1061067181
[mtime]=>1056136526
[ctime]=>1056136526
[blksize]=>4096
[blocks]=>8
)
Note:
此函数不能作用于远程文件,被检查的文件必须是可通过服务器的文件系统访问的。
·ftell -返回文件指针读/写的位置
ftell
(PHP4,PHP5)
ftell — 返回文件指针读/写的位置
说明
int ftell ( resource $handle )
返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量。
如果出错,返回 FALSE。
文件指针必须是有效的,且必须指向一个通过 fopen() 或 popen() 成功打开的文件。
在附加模式(加参数"a"打开文件)中 ftell() 会返回未定义错误。
Example#1 ftell() 例子
php
// 打开文件并读些数据
$fp = fopen("/etc/passwd", "r");
$data = fgets($fp, 12);
// 现在指针到哪里了?
echo ftell($fp); // 11
fclose($fp);
?
>
·ftruncate -将文件截断到给定的长度
ftruncate
(PHP4,PHP5)
ftruncate — 将文件截断到给定的长度
说明
bool ftruncate ( resource $handle , int $size )
接受文件指针 handle 作为参数,并将文件大小截取为 size。
成功时返回 TRUE,或者在失败时返回 FALSE.
Note:
文件只会在 append 模式下改变。
在 write 模式下,必须加上 fseek() 操作。
Note:
在PHP4.3.3之前,ftruncate() 在成功时返回一个 integer 值1,而不是 boolean的 TRUE。
·fwrite -写入文件(可安全用于二进制文件)
fwrite
(PHP4,PHP5)
fwrite — 写入文件(可安全用于二进制文件)
说明
int fwrite ( resource $handle , string $string [, int $length ])
fwrite() 把 string 的内容写入文件指针 handle 处。
如果指定了 length,当写入了length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。
注意如果给出了 length 参数,则magic_quotes_runtime配置选项将被忽略,而 string中的斜线将不会被抽去。
Note:
在区分二进制文件和文本文件的系统上(如Windows)打开文件时,fopen() 函数的mode参数要加上'b'。
Example#1一个简单的 fwrite() 例子
php
$filename = 'test.txt';
$somecontent = "添加这些文字到文件";
// 首先我们要确定文件存在并且可写。
if (is_writable($filename)) {
// 在这个例子里,我们将使用添加模式打开$filename,
// 因此,文件指针将会在文件的末尾,