--------------------------------
文件的基本操作
------------------------------------
一、文件的打开和关闭
1、打开文件
fopen(文件名,打开模式)
1 /* 2 r: 只读模式打开文件,文件指针执行首位。 3 r+: 可读可写模式打开文件,文件指针执行首位,若文件指针不是在最后,则是覆盖写。 4 w: 以写方式打开文件,文件内容清空,若文件不存在,则尝试创建。 5 w+: 以写和读方式打开文件,文件内容清空,若文件不存在,则尝试创建。(也会覆盖写) 6 a: 以追加内容方式打开文件,指针移至最后,若文件不存在,则尝试创建。 7 a+: 以追加内容和可读方式打开文件,指针移至最后,若文件不存在,则尝试创建。 8 x: 以创建方式打开文件,可写。若文件已存在,则报错。 9 x+: 以创建方式打开文件,可写可读。若文件已存在,则报错。 10 */
模式:读(r,r+)、清空写(w/w+)、追加写(a/a+)、创建模式(x,x+)
2、文件关闭
1 fclose() //打开之后一定要关闭文件
二、读取文件内容
1 fread(打开的文件资源,读取的长度) //读取指定长度的字符串 2 fgetc() //读取一个字符 3 fgets() //读取一行字符 4 file() //不需要打开文件,可直接文件内容
5 readfile() //不需要打开文件,文件内容读取并输出
6 file_get_contents() //不需要打开文件,读取文件内容
7 file_put_contents() //不需要打开文件,将指定内容写入文件
三、写入文件内容
1 fwrite(打开的文件资源,被写入的字串[,长度])
四、访问远程文件
如果访问远程文件,必须在PHP配置文件中记过"allow_url_fopen"选项
1 <?php 2 //通过HTTP打开远程文件 3 $file = fopen('http://www.xxx.com/','r') or die('打开远程文件失败'); 4 //循环从文件中读取的内容 5 while (!feof ($file)){ 6 //读取一行 7 $line = fgets($file,1024); 8 //如果找到远程文件中的标题标记则取出标题,并推出循环,不再读取文件 9 if(preg_match('/title(.*)</title>/',$line,$out)){ 10 //将标题标记中的标记符取出 11 $title = $out[1]; 12 //结束循环 13 break; 14 } 15 } 16 //关闭文件资源 17 fclose($file); 18 //输出标题 19 echo $title; 20 ?>
四、文件指针操作
ftell() --返回文件指针的位置
fseek() --设置文件指针的位置
rewind() --将文件指针移至首位
1 ftell($f) //输出刚打开的默认位置,指针显示为0 2 fseek($f,-2,SEEK_CUR); //从当前指针位置开始,向前移动2位 3 fseek($f,2,SEEK_SET); //从文件指针开始位置,向后移动2位 4 fseek($f,-5,SEEK_END); //从文件指针的最后位置开始,向前移动5位 5 rewind($f) //移动到指针的开头
五、文件的锁定机制
当一个进程在访问文件时加上锁,其他进程想要对该文件进行访问,则必须等到锁定被释放以后。这样可以避免在访问同一个文件时破坏数据
bool flock ( int $handle , int $operation [, int &$wouldblock ] )
轻便的咨询文件锁定
operation参数:
LOCK_SH:取得共享锁定(从文件中读取数据时使用)
LOCK_EX:取得独占锁定(向文件中写入数据时使用)
LOCK_UN:释放锁定(无论共享或独占锁,都用它释放)
LOCK_NB:附加锁定(如果不希望flock()在锁定时堵塞,则应在上述锁定后加上该锁 )
1 <?php 2 $fp = fopen("/tmp/lock.txt", "w+"); 3 //向文件中写入数据时使用 4 if(flock($fp,LOCK_EX)){ 5 fwrite($fp,"Write something here"); 6 //释放锁定 7 flock($fp,LOCK_UN) 8 }else{ 9 echo "Couldn't lock the file !"; 10 } 11 fclose($fp); 12 ?>
六、文件的一些基本操作函数
1、copy(来源文件,目的文件) --复制文件
1 <?php 2 if(copy('./file1.txt'),'../data/file2.txt'){ 3 echo '文件复制成功'; 4 }else{ 5 echo '文件复制失败'; 6 } 7 ?>
2、unlink() --删除文件
1 <?php 2 $filename = "file1.txt" 3 if(file_exists($filename)){ 4 if(unlink($filename)){ 5 echo '文件删除成功'; 6 }else{ 7 echo '文件删除失败'; 8 } 9 }else{ 10 echo '目标文件不存在'; 11 } 12 ?>
3、rename(源文件名,修改的文件名) --重命名文件
1 <?php 2 if(rename('./demo.php','./demo1.php')){ 3 echo '文件重命名成功'; 4 }else{ 5 echo '文件重命名失败'; 6 } 7 ?>
4、ftrunacte(目标文件,截取长度) --将文件截取到指定的长度
1 <?php 2 $fp = fopen('./data.txt','r+') or die ('文件打开失败'); 3 if(ftruncate($fp,1024)){ 4 echo '文件截取成功'; 5 }else{ 6 echo '文件截取失败'; 7 } 8 ?>
七、思维导图