在 PHP 中,我应该在使用 file_put_contents() 时使用 fclose() 吗?

Posted

技术标签:

【中文标题】在 PHP 中,我应该在使用 file_put_contents() 时使用 fclose() 吗?【英文标题】:In PHP, should I use fclose() when using file_put_contents()? 【发布时间】:2017-04-20 00:52:26 【问题描述】:

我正在使用 php 函数 file_put_contents() 将一些内容放入 txt 文件中。文档中的示例没有完成使用fclose(),我应该关闭文件还是没有必要?

我正在这样做:

        $root = $_SERVER['DOCUMENT_ROOT'];
        $log = $root.'/logs/logsContenido.txt';
        $agregadoLog = "texto a agregar";
        file_put_contents($log, $agregadoLog, FILE_APPEND | LOCK_EX);

仅此而已。我没有关闭任何东西。

我是否应该这样做:

            $root = $_SERVER['DOCUMENT_ROOT'];
            $log = $root.'/logs/logsContenido.txt';
            $agregadoLog = "texto a agregar";
            $file = file_put_contents($log, $agregadoLog, FILE_APPEND | LOCK_EX);
fclose($file);

【问题讨论】:

不可能在file_put_contents 上使用fclose,至少在用户态环境中是这样。没有要关闭的流。 你都经历过吗? php.net/manual/en/function.file-put-contents.php - 一个实例显示 “很明显,这应该只在您进行一次写入时使用,如果您多次写入同一个文件,您应该使用 fopen 和 fwrite 自己处理它,写完后关闭 fclose。""这个函数和依次调用 fopen()、fwrite() 和 fclose() 将数据写入文件是一样的。" "此函数返回写入文件的字节数,失败时返回 FALSE。" – 你希望调用什么fcloseon …? 【参考方案1】:

不,你不应该/不能。 file_put_contents 负责打开文件、写入内容和关闭文件。事实上,它不会向您公开任何句柄,即使您想关闭也可以关闭。

【讨论】:

我一直相信手册,但我注意到如果我运行这个 PHP-CLI 脚本: $test1 = get_resources(); file_put_contents($log, $msg, FILE_APPEND | LOCK_EX); $test2 = get_resources(); $test2 中还有 1 个资源(除了 stdin、stdout、stderr 之前和之后)。手册说 get_resources() 应该只返回活动资源。我的意思不是说 file_put_contents 有问题,可能是 xdebug 让我失败或 get_resources()? 没关系,如果我这样做:$resources = get_resources(); foreach($resources as $resource)fclose($resource); 我得到“fclose():提供的资源不是有效的流资源”。仍然不知道为什么 get_resources() 显示它【参考方案2】:

file_put_contents 中,PHP 会为您处理。所以没必要fclose吧。

但是如果您使用像fopen 这样的句柄,那么您需要关闭它,因为您将在整个脚本执行期间保持文件处于打开状态。哦,完成后关闭手柄也是一个好习惯

【讨论】:

见@alex 的here another response:。他使用:file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));,但他没有说是否应该使用fclose(...)。但是我遇到了 HTTP request failed! 错误的不可预知的问题。

以上是关于在 PHP 中,我应该在使用 file_put_contents() 时使用 fclose() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该对单引号使用 php 引号转义还是在数组中使用双引号?

在 PHP 中,我应该在使用 file_put_contents() 时使用 fclose() 吗?

我应该在 sql 或 php 中使用循环吗? [复制]

在 PHP 中使用 MVC 时,1 控制器应该能够加载整个动态用户配置文件吗?

php/sql ...我应该如何使用 50mb 文件中的数据?

PHP 开发人员应该使用 MySQL 的存储过程吗? [关闭]