您的位置:首页 > 编程语言 > PHP开发

php的fopen函数打开文件详解以及如何打开中文名文件

2018-01-04 16:44 791 查看
本篇主要学习php的fopen()函数。此函数一般用于打开文件,和file_get_contents()函数的作用差不多。

一、fopen()函数

1、fopen() 函数打开文件或者 URL。如果打开失败,本函数返回 FALSE。打开成功的话,会返回一个资源。

2、fopen(filename,mode,include_path,context)

常用的参数主要是filename和mode。这里的filename代表我们要打开的文件路径或者url的链接。mode是规定要求到该文件/流的访问类型。

具体可参考手册:http://www.w3school.com.cn/php/func_filesystem_fopen.asp

3、常见例子:

1)在E盘下新建文件,text.txt



2)使用下面的代码打开

$file = fopen("E:/text.txt","r");

if ($file){

//接着采用while循环(后面语言结构语句中的循环结构会详细介绍)一行行地读取文件,然后输出每行的文字

while (!feof($file)) { //判断是否到最后一行

$line = fgets($file); //读取一行文本

echo $line; //输出一行文本

echo "<br />"; //换行

}

}

fclose($file);//关闭文件


执行这段代码之后,浏览器上就能输出我们写在text.txt文件中的内容了。

二、feof(),fgets(),fclose()函数讲解

1、feof()函数

1)feof() 函数检测是否已到达文件末尾 (eof)。

如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。我们上面的代码,在获取到$file资源之后,循环判断是否到了文件结尾,没到结尾的话,就继续执行下面的代码。

2)注意

提示:feof() 函数对遍历长度未知的数据很有用。

注意:如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回 TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。

注意:如果传递的文件指针无效可能会陷入无限循环中,因为 EOF 不会返回 TRUE。

2、fgets()函数

1)fgets() 函数从文件指针中读取一行。

3、fclose()

1) fclose() 函数关闭一个打开文件。

fclose() 函数关闭该指针指向的文件。如果成功则返回 true,否则返回 false。文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。

三、使用fopen()打开中文名的文件

1、当我把text.txt改成“哈哈.txt”,指向上面的代码。

报错:



也就是说,不能直接用fopen()来打开中文名的文件,这里,我们需要进行一些处理。

2、修改中文名的编码

//使用这行代码即可解决,可以正常的打开文件
$file = fopen ( iconv ( 'UTF-8', 'GBK', 'E:/哈哈.txt' ), 'r' );


四、fopen()的一些使用问题

1、fopen()函数的使用比起file_get_contents()函数麻烦一些。在大多数情况下,还是使用file_get_contents()函数要方便一些。file_get_contents()的使用方法:http://blog.csdn.net/LJFPHP/article/details/78552961

2、在打开比较大的文件的时候,使用file_get_contents()函数会加大内存的占用率,这是非常不合适的。因此这种情况下,更建议使用fopen()函数。

3、关于为什么每次使用fopen()函数,后面都要用fclose()函数关闭文件的问题。正常来说php的资源会在脚本结束的时候全部释放掉,因此普遍的情况都可以省略fclose。不过如果你fopen了一个很大的文件,早点fclose会比较节省资源。也算是良好编码习惯的一种。

end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: