【问题标题】:Can PHP save to a file during __destruct() [duplicate]PHP可以在__destruct()期间保存到文件中吗?
【发布时间】:2019-01-23 23:58:09
【问题描述】:

我想在我的一个类中使用__destruct() 函数将一些信息保存到我服务器上的文件中。

但是,每次我尝试在 __destruct() 中使用 file_put_contents(...) 时,都会收到此错误:

警告:file_put_contents(HTMLcache.txt):无法打开流:/Applications/MAMP/htdocs/time/HJ_Tag.php 第 141 行中的权限被拒绝

file_put_contents(...) 在我的代码的其他部分工作得很好,在完全相同的文件上调用它。在__destruct() 期间可能会导致此错误,我该如何解决?

【问题讨论】:

  • 你确定它是“完全相同的文件”吗?您在这两种情况下都使用什么文件路径?

标签: php destroy file-put-contents


【解决方案1】:

我认为您的意思是 __destruct() 而不是 __destroy(),所以我编辑了您的帖子。

PHP 可以在 __destruct() 期间保存到文件

是的,可以。 但是,当您像这样使用 file_put_contents() 的相对文件名时:

file_put_contents('hello.txt', 'hello world');

该文件实际上可能是在您不期望的地方创建的,并且您可能在那里没有写权限, 这解释了错误消息。

就我而言,它是在C:\Users\Rei\AppData\Local\VirtualStore 中创建的。 这很奇怪,因为我从未指定过该目录。 我必须搜索整个硬盘才能找到它。

为防止这种情况,请始终使用绝对文件名。 例如,在文件名前添加__DIR__

file_put_contents(__DIR__ . 'hello.txt', 'hello world');

并确保您具有写入权限。

【讨论】:

  • 我会说在垃圾收集期间(当__destruct() 将执行时),CWD 发生变化
  • @Phil 是的,很有可能。我在一篇文章中读到过。
猜你喜欢
  • 2010-09-14
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
相关资源
最近更新 更多