更多优质内容
请关注公众号

PHP基础(十五) PHP操作文件系统(下)-张柏沛IT博客

正文内容

PHP基础(十五) PHP操作文件系统(下)

栏目:PHP 系列:PHP基础系列 发布时间:2019-11-26 15:25 浏览量:2285

续上一节


文件的打开与关闭

fopen -- 打开文件或者 URL 
语法:resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
filename参数需要提供要被打开文件的URL。这个URL可以是脚本所在的服务器中的绝对路径,也可以是相对路径,还可以是网络资源用的文件。 
mode 参数指定了所要求到该流的访问类型,(强烈建议附加b模式)。 
如果也需要在 include_path中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 '1' 或 TRUE。 
如果打开失败,本函数返回 FALSE。


fclose -- 关闭一个已打开的文件指针 
语法:bool fclose ( resource $handle )
将 handle 指向的文件关闭。 成功时返回 TRUE, 或者在失败时返回 FALSE. 

<?php
    //使用绝对路径打开file.txt文件,选择只读模式,并返回资源$handle
    $handle = fopen("/home/rasmus/file.txt", "r");

    //访问文档根目录下的文件,也以只读模式打开
    $handle = fopen("{$_SERVER['DOCUMENT_ROOT']}/data/info.txt", "r");

    //在 Windows 平台上,转义文件路径中的每个反斜线,或者用斜线,
      以二进制和只写模式组合
    $handle = fopen("c:\\data\\file.gif", "wb");

    //使用相对路径打开file.txt文件,选择只读模式,并返回资源$handle
    $handle = fopen("../data/info.txt", "r");

    //打开远程文件, 使用HTTP协议只能以只读的模式打开
    $handle = fopen("http://www.example.com/", "r");

    //使用FTP协议打开远程文件,如果FTP服务器可写,则可以以写的模式打开
    $handle = fopen("ftp://user:password@example.com/somefile.txt", "w");


写入文件

fwrite -- 写入文件(可安全用于二进制文件)
语法:int fwrite ( resource handle, string string [, int length] )
fwrite() 把 string 的内容写入 文件指针 handle 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
返回写入的字符数,出现错误时则返回 FALSE 。

<?php
    //声明一个变量用来保存文件名   
    $fileName = "data.txt";     
    //使用fopen()函数以只写的模式打开文件,如果不存在则创建它,
      打开失败则通过程序
    $handle = fopen($fileName, 'w') or 
                                                die('打开<b>'.$fileName.'</b>文件失败!!');
    
    //循环10次写入10行数据到文件中
    for($row=0; $row<10; $row++) {    
        //写入文件 
        fwrite($handle, $row.": www.lampbrother.net\n");    
    }
    //关闭由fopen()打开的文件指针资源
    fclose($handle);            
?>


读取文件内容

函数名

作用

fread( )

读取文件(可安全用于二进制文件)

file_get_contents()

将文件读入字符串

fgets()

从打开的文件中读取一行

fgetc()

从打开的文件中读取一个字符

file()

把文件读入一个数组中(无需使用fopen打开)

readfile()

读取一个文件,并输出到输出缓冲(无需使用fopen打开)


<?php
    //从文件中读取指定字节数的内容存入到一个变量中
    $filename = "data.txt";                 	 //将本地文件名保存在变量中
    $handle = fopen($filename, "r") or die("文件打开失败");  //以只读的方式打开文件
    $contents = fread($handle, 100);  //读取前100个字节;全部:filesize($filename)
    fclose($handle);                             //关闭文件资源
    echo $contents;                             //将从文件中读取的内容输出
    
    //从文件中读取全部内容存入到一个变量中,每次读取一部分,循环读取
    $filename = "c:\\files\\somepic.gif";//二进制文件的文件
    $handle = fopen ($filename, "rb") or die("文件打开失败");     
				 //以只读的方式,模式加了’b’
    $contents = "";                             
    while (!feof($handle)) {                  //使用feof()判断文件结尾
        $contents .= fread($handle, 1024);     //每次读取1024个字节
    }
    fclose($handle);        		 //关闭文件资源
    echo $contents;         		 //将从文件中读取的全部内容输出
?>


<?php
    echo file_get_contents("data.txt");   //读取文本文件中的内容并输出
    echo file_get_contents("c:\\files\\somepic.gif"); //读取二进制并输出

   $handle = fopen("data.txt", "r")  or die("文件打开失败"); //以只读模式打开文件
    while (!feof($handle)) {                     //循环读取第一行
        $buffer = fgets($handle, 4096);     //一次读取一行内容
        echo $buffer."<br>";                      //输出每一行
    } 
    fclose($handle);                                 //关闭打开的文件资源


   $fp = fopen('data.txt', 'r') or die("文件打开失败");  //以只读模式打开文件    
    while (false !== ($char = fgetc($fp))) {   //在文件中每次循环读取一个字节符
         echo $char."<br>";                             //输出单个字符
    }
    
    print_r( file("test.txt") );        //将文件test.txt中的内容读入到一个数组中,并输出
    
    readfile("data.txt");    	       //直接将文件data.txt中的数据读出并输出到浏览器


访问远程文件

如果需要访问远程文件,必须在PHP的配置文件中激活“allow_url_fopen”选项,才能使用fopen( )函数打开运程文件。而且还要确定其他服务器中的文件是否访问权限,如果使用PHP协议对远程文件进行链接,只能以“只读”模式打开。如果需要访问的远程FTP服务器中,对所提供的用户开启了“可写”权限,则使用FTP协议链接远程的文件时,就可以使用“只写”或“只读”模式打开文件。但不可以使用“可读可写”的模式。
使用PHP访问远程文件就像访问本地文件一样,都是使用相同的读写函数处理。
$file=fopen(“http://www.lampbrother.com/”,”r”) or die(“打开远程文件失败!!”);
$file=fopen(“ftp://user:password@ftp.lampbrother.net/path/to/file”,”w”);

<?php
    //通过http打开远程文件
    $file = fopen ("http://www.lampbrother.com/", "r") or die("打开远程文件失败!!");  
    while (!feof ($file)) {    //循环从文件中读取内容
        $line = fgets ($file, 1024);                                //每读取一行
        //如果找到远程文件中的标题标记则取出标题,并退出循环,不在读取文件
        if (preg_match("/<title>(.*)<\/title>/", $line, $out)) {    //使用正则匹配标题标记
            $title = $out[1];    //将标题标记中的标题字符取出
            break;                 //退出循环,结束远程文件读取
        }
    }
    
    fclose($file);                 //关闭文件资源
    echo $title;                  //输出获取到的远程网页的标题


移动文件指针

ftell -- 返回文件指针读/写的位置 
语法:int ftell ( resource handle )
返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量。 如果出错,返回 FALSE。文件指针必须是有效的,且必须指向一个通过 fopen()或 popen()成功打开的文件。

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 之后的位置不算错误

rewind -- 倒回文件指针的位置 
语法:bool rewind ( resource handle )
将 handle 的文件位置指针设为文件流的开头。 如果成功则返回 TRUE,失败则返回 FALSE。 文件指针必须合法,并且指向由 fopen() 成功打开的文件。 

<?php
    //以只读模式打开文件
    $fp = fopen('data.txt', 'r') or die("文件打开失败");  
    
    echo ftell($fp)."<br>";         //输出刚打开文件指针默认位置,指针在文件开头位置为0
    echo fread($fp, 10)."<br>";//读取文件中的前10个字符输出,指针位置发生了变化
    echo ftell($fp)."<br>";         //读取文件前10个字符后,指针移动位置在第10个字节处
    
    fseek($fp, 100, SEEK_CUR); //将文件指针的位置,由当前位置向后移动100个字节数
    echo ftell($fp)."<br>";         //文件位置在110个字节处
    echo fread($fp, 10)."<br>"; //读取110到120字节数位置的字串,读取后指针位置为120
    
    fseek($fp, -10, SEEK_END);   //又将指针移动到倒数10个字节位置处
    echo fread($fp, 10)."<br>";     //输出文件中最后10个字符  
    
    rewind($fp);                       //又移动文件指针到文件的开头
    echo ftell($fp)."<br>";        //指针在文件的开头位置,输出0
    
    fclose($fp);                        //关闭文件资源


文件的锁定机制

flock -- 轻便的咨询文件锁定 
语法: bool flock ( int handle, int operation [, int &wouldblock] )
PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。
handle 必须是一个已经打开的文件指针。 
operation 可以是以下值之一: 
要取得共享锁定(读取程序),将 operation 设为 LOCK_SH。
要取得独占锁定(写入程序),将 operation 设为 LOCK_EX。
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN。
如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB。 
如果成功则返回 TRUE,失败则返回 FALSE。 

文件的一些基本操作函数

copy -- 拷贝文件 
语法:bool copy ( string source, string dest )
将文件从 source 拷贝到 dest。如果成功则返回 TRUE,失败则返回 FALSE。 

unlink -- 删除文件 
语法:bool unlink ( string filename )
删除 filename。和 Unix C 的 unlink() 函数相似。如果成功则返回 TRUE,失败则返回 FALSE。 

ftruncate -- 将文件截断到给定的长度 
语法:bool ftruncate ( resource handle, int size )
接受文件指针 handle 作为参数,并将文件大小截取为 size。如果成功则返回 TRUE,失败则返回 FALSE。 

rename -- 重命名一个文件或目录 
语法:bool rename ( string oldname, string newname [, resource context] )
尝试把 oldname 重命名为 newname。 如果成功则返回 TRUE,失败则返回 FALSE。 




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > PHP基础(十五) PHP操作文件系统(下)

热门推荐
推荐新闻