php file_put_contents 函数不起作用

Posted

技术标签:

【中文标题】php file_put_contents 函数不起作用【英文标题】:php file_put_contents function not working 【发布时间】:2011-06-02 09:44:28 【问题描述】:

为什么 file_put_contents 会拒绝为以下代码工作?

$f = file_put_contents("files/r.js", "Some text here");

if ($f) print 1;
else print 0;

【问题讨论】:

如果您删除该代码会发生什么......页面的其余部分是否呈现正常? 谁是“它”,谁给你报错?您以什么形式收到此错误?你确定你能看到 php 错误吗? 你读过这个问题吗?他说错误报告已开启。如果您不打算阅读,请不要制作 cmets 或回答问题。 @jmort253 让您知道,如果错误报告真的打开,可以看到完整且明确的错误消息。如果没有 - 则错误报告未正确打开。这就是逻辑。 嗯,虽然error_reporting可以开启,但是display_errors开启了吗?否则错误将被记录但不会显示在页面中。 【参考方案1】:

可能是权限问题

目录/files chmod 为777 吗?如果目录没有足够的权限,有时 php 将不允许您访问目录。不过我不知道空白错误。

试试看是否有足够的权限,如果没有,则设置为777试试看。

【讨论】:

这是一个糟糕的答案和一个坏主意:***.com/questions/2338641/… 换句话说,你给了任何人足够的权限来写东西。 . @joemurphy 如果您在生产环境中执行此操作,然后将 777 留在那里(如果它有效),这只是一个坏主意,而不是将测试视为简单地旨在显示或消除权限的可能性一个问题作为向前迈出的一步。我认为答案应该已经说清楚了。 很好的答案,Famver:你救了我很多痛苦!我建议人们也看看这个相关的问题,以获得关于正确目录权限的好建议(参见“错误答案”cmets):***.com/questions/4917811/… @Parapluie 但是当您尝试 777 后,您必须找出它应该拥有的用户和组并解决问题。 777 只是故障排除过程中可以使用的一个步骤,以后不能使用它,因为从安全角度来看这是一个坏主意。【参考方案2】:

您是在文件系统上使用完整路径还是尝试使用 URI?我认为这个 PHP 函数希望您在文件系统上找到文件时提供路径。

不过,相对路径应该没问题。

您可能需要确保文件存在并且它的权限设置为 777。有时我发现仅将目录权限设置为 777 是不够的,但文件也必须已经存在。

【讨论】:

这不是猜测。这是我的专业经验。我遇到过无法写入文件的情况,除非该文件存在。你从哪里得到“猜测”???您甚至阅读了问题和答案吗? 这是一个糟糕的答案和一个坏主意:***.com/questions/2338641/…【参考方案3】:

这是因为 SELINUX。

您可以使用此命令将文件夹标记为 httpd_sys_rw_content_t 类型,以允许写入此文件夹。

semanage fcontext -a -t httpd_sys_rw_content_t '/files(/.*)?'; restorecon -RF '/files/'

【讨论】:

【参考方案4】:

我们遇到过这种情况,需要一种解决方法(不管方法、权限和此处提到的任何其他内容)。当所有其他修复都失败时,我们发现它可能与 SELinux 创建的限制有关。

【讨论】:

【参考方案5】:

如果您使用的是 Windows,则以下解决方案在运行 php 5.5.38 的 Windows 10 上非常适合我

如果您在 Windows/IIS 上遇到此问题,请尝试以下操作:

    转到您尝试写入的文件夹并右键单击它,然后选择属性。 选择安全选项卡 点击编辑 点击添加 点击高级 点击立即查找 从用户列表中选择IUSR并点击确定 再次单击“确定”。 IUSR 将显示在标有“用户名组”的顶部框中 在“BATCH 权限”列表视图中选择 IUSR 并授予必要的权限。 单击应用,然后您就完成了。

对于不同版本的 windows,步骤可能会略有不同。这也适用于 ASP.NET,尽管我认为您添加的用户是网络用户(NETWORK AND OR NETWORK SERVICE 用户)以及 IUSR。

【讨论】:

我遇到了类似的问题,我通过选择禁用上传文件夹上的所有继承来管理用户权限,意外删除了所有用户。如果您已经这样做了,那么这些是重新创建 IUSR 的重要说明;但是,在大多数用例中,您应该能够仅禁用 IUSR 上的继承,然后直​​接修改其权限。

以上是关于php file_put_contents 函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP file_put_contents() 函数

php 使用 imagejpeg() 和 file_put_contents()

PHP file_put_contents函数写入不了txt文件 代码如图

php-file_put_contents() 函数

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

php5.6的file_put_contents问题求解