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

php日常bug 专栏收录该内容
87 篇文章 1 订阅

      本篇主要学习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

  • 4
    点赞
  • 0
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值