PHP 文件处理
数据的存取
数据在服务器上的存取主要有两种方式:文件或者数据库
目前绝大多数应用都是使用数据库来读写数据,但是文件存取在某些场合仍然会使用,譬如:
• 记录错误日志
• 导出数据到文件
从文件导入数据
写文件
写文件主要有三步操作,就如同我们手动操作一样,程序也要遵守下面的步骤:
• 打开文件,使用fopen函数
• 写入文件,使用fwrite函数
• 关闭文件,使用fclose函数
打开文件
fopen() 函数用于在 PHP 中打开文件。
此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:
<html> <body> <?php $file=fopen("welcome.txt","r"); ?> </body> </html>
文件可能通过下列模式来打开:
注释:如果 fopen() 函数无法打开指定文件,则返回 0 (false)。
实例
如果 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:
<html> <body> <?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); ?> </body> </html>
写入文件
fwrite () 函数用于写入文件
fwrite主要也是两个参数,handle是fopen打开成功后返回的Resource变量,string是要写入的数据
int fwrite ( resource $handle , string $string [, int $length ] )
当写入成功后,fwrite会返回写入的字符数,如果写入失败则返回false
实例
<?php $myfile = fopen("newfile.txt", "w") or die("Unable to open file!"); $txt = "Bill Gates\n"; fwrite($myfile, $txt); $txt = "Steve Jobs\n"; fwrite($myfile, $txt); fclose($myfile); ?>
请注意,我们向文件 "newfile.txt" 写了两次。在每次我们向文件写入时,在我们发送的字符串 $txt 中,第一次包含 "Bill Gates",第二次包含 "Steve Jobs"。在写入完成后,我们使用 fclose() 函数来关闭文件。
如果我们打开 "newfile.txt" 文件,它应该是这样的:
Bill Gates
Steve Jobs
读取文件
fread用来读取整个文件,而不用使用while语句进行循环,需要注意,第二个参数是用来控制读取的最大字节数,这个参数是必填的
string fread ( resource $handle , int $length )
执行
echo fread($resource, 1024);
可以读取最大1024个字节的文件内容
关闭文件
fclose() 函数用于关闭打开的文件:
<?php $file = fopen("test.txt","r"); //执行一些代码 fclose($file); ?>
检测文件末尾(EOF)
feof() 函数检测是否已到达文件末尾(EOF)。
在循环遍历未知长度的数据时,feof() 函数很有用。
注释:在 w 、a 和 x 模式下,您无法读取打开的文件!
if (feof($file)) echo "文件结尾";
逐行读取文件
fgets() 函数用于从文件中逐行读取文件。
注释:在调用该函数之后,文件指针会移动到下一行。
实例
下面的实例逐行读取文件,直到文件末尾为止:
<?php $file = fopen("welcome.txt", "r") or exit("无法打开文件!"); // 读取文件每一行,直到文件结尾 while(!feof($file)) { echo fgets($file). "<br>"; } fclose($file); ?>
逐字符读取文件
fgetc() 函数用于从文件中逐字符地读取文件。
注释:在调用该函数之后,文件指针会移动到下一个字符。
实例
下面的实例逐字符地读取文件,直到文件末尾为止:
<?php $file=fopen("welcome.txt","r") or exit("无法打开文件!"); while (!feof($file)) { echo fgetc($file); } fclose($file); ?>
file_put_contents
无论是读还是写,fopen和fclose都是很繁琐的调用,从PHP5开始,引入了新的函数
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
file_put_contents 相当于执行了 fopen + fwrite + fclose
file_put_contents('file', "hello world\n");
file_put_contents('file', "hello world\n", FILE_APPEND);
file_get_contents
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource$context [, int $offset = -1 [, int $maxlen ]]]] )
file_get_contents 相当于执行了 fopen + fread + fclose
echo file_get_contents('file');
其他文件操作函数
S file_exists 将文件地址作为参数传入,可以判断文件是否存在,然后true或者false
S filesize 可以返回参数中文件的大小,以字节为单位
S unlink 可以删除传递给它的文件地址所代表的文件
PHP Filesystem 参考手册
如需查看 PHP 文件系统函数的完整参考手册,请访问我们的PHP Filesystem 参考手册。