PHP 便利功能
示例
原始直接IO
file_get_contents并file_put_contents提供在单个调用中从PHP字符串读取文件或从文件写入PHP字符串的功能。
file_put_contents也可以与FILE_APPENDbitmask标志一起使用,而不是截断和覆盖文件。它可以与LOCK_EX位掩码一起使用,以在继续写入时获取对该文件的排他锁。可以将位掩码标志与|按位或运算符结合在一起。
$path = "file.txt"; //将infile.txt中的内容读取到$contents $contents = file_get_contents($path); //让我们进行一些更改...例如,将CRLF转换为LF! $contents = str_replace("\r\n", "\n", $contents); //现在将其写回到file.txt,替换原始内容 file_put_contents($path, $contents);
FILE_APPEND对于附加到日志文件非常方便,同时LOCK_EX有助于防止多个进程写入文件的竞争情况。例如,要写入有关当前会话的日志文件:
file_put_contents("logins.log", "{$_SESSION["username"]} logged in", FILE_APPEND | LOCK_EX);
CSVIO
fgetcsv($file, $length, $separator)
fgetcsv来自打开文件的分析行,检查csv字段。成功或FALSE失败时,它将在数组中返回CSV字段。
默认情况下,它将仅读取CSV文件的一行。
$file = fopen("contacts.csv","r"); print_r(fgetcsv($file)); print_r(fgetcsv($file,5," ")); fclose($file);
contacts.csv
Kai Jim, Refsnes, Stavanger, Norway Hege, Refsnes, Stavanger, Norway
输出:
Array ( [0] => Kai Jim [1] => Refsnes [2] => Stavanger [3] => Norway ) Array ( [0] => Hege, )
直接读取文件到stdout
readfile将文件复制到输出缓冲区。readfile()即使发送大文件,也不会出现任何内存问题。
$file = 'monkey.gif'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit; }
或从文件指针
或者,要在文件中寻找一个点以开始复制到stdout,请fpassthru改用。在以下示例中,最后1024个字节被复制到stdout:
$fh = fopen("file.txt", "rb"); fseek($fh, -1024, SEEK_END); fpassthru($fh);
将文件读入数组
file返回数组中传递的文件中的行。数组的每个元素对应于文件中的一行,并且换行符仍然附加。
print_r(file("test.txt"));
test.txt
Welcome to File handling This is to test file handling
输出:
Array ( [0] => Welcome to File handling [1] => This is to test file handling )