为什么file_put_contents拒绝为以下代码工作?
$f = file_put_contents("files/r.js","Some text here");
if ($f) print 1;
else print 0;
如果您删除该代码,将会发生什么。.页面的其余部分是否正常显示?
谁是"它",谁给你一个错误? 您以什么形式收到此错误? 您确定完全可以看到PHP错误吗?
你读过这个问题吗? 他说错误报告已经打开。 如果您不打算阅读,请不要发表评论或回答问题。
@ jmort253让您知道,如果错误报告确实打开了,则可以看到完整而明确的错误消息。 如果没有,则错误报告未正确打开。 那就是逻辑。
嗯,尽管可以启用error_reporting,但display_errors是否打开? 否则将记录错误,但不会在页面中显示。
可能是权限问题
目录/files是否已更改为777?有时,如果没有足够的权限,php将不允许您访问目录。我不知道空白错误。
尝试查看它是否具有足够的权限(如果没有),然后将其设置为777并尝试。
这是一个不好的答案,也是一个坏主意:stackoverflow.com/questions/2338641/
换句话说,您让任何人都有足够的权限来写东西。 。
惊人 !!!经过数小时的挫折,终于我找到了解决您的方法。非常感谢你!!!!!!!加一
@joemurphy如果您在生产环境中进行测试,然后在其可以正常工作的情况下将777留在那儿,这是一个坏主意,而不是将测试仅仅看作是为了表明或消除许可成为问题的可能性,以此作为前进的一步。我认为答案应该已经清楚了。
Famver,好的答案:您救了我很多痛苦!我建议人们也查看此相关问题,以获取有关正确目录权限的良好建议(请参阅"错误答案"注释):stackoverflow.com/questions/4917811/
@Parapluie但是,当您尝试使用777时,则必须找出应该具有的用户和组,然后解决问题。 777仅是故障排除过程中可以使用的步骤,并且以后不要使用此步骤,因为从安全角度来看这是个坏主意。
@Johan完全正确...我想我应该把这部分明确表示出来:-)
就是这样谢谢
@joemurphy您的链接没有任何意义。无论是否为777,能够执行php文件都是一个巨大的漏洞。至少有人可以通过使用虚拟php消耗资源来连续关闭服务器,直到服务器修复为止。实施用户控制的目录时,应该在htaccess中处理该问题,并且与执行位无关,这只会给伤口带来麻烦。
这里有一些需要注意的地方1。显然,除非该目录是/ tmp,否则您不会将生产目录保留为777。 2.目录需要按顺序可执行,并且可执行目录并不暗示文件是可执行的。 3.这个答案的重点是确定权限是否是问题所在,而不是在777生产环境中运行。
您是使用文件系统上的完整路径还是要使用URI?我认为这个PHP函数希望您提供在文件系统上找到文件的路径。
相对路径应该没问题。
您可能需要确保文件存在并将其权限设置为777。有时我发现仅将目录权限设置为777是不够的,但是文件也必须已经存在。
这不是猜测。这是从我的专业经验中得出的。我遇到了无法写入文件的情况,除非该文件存在。您从哪里获得"猜测"?你甚至读过问答吗?
这是一个不好的答案,也是一个坏主意:stackoverflow.com/questions/2338641/
我们已经经历了这一点,因此需要一种变通方法(无论此处提到的方法,权限和其他任何内容)。当所有其他修复失败时,我们发现它可以链接到SELinux创建的限制。
如果您使用的是Windows,则以下解决方案在运行php 5.5.38的Windows 10上非常适合我
如果您在Windows / IIS上遇到此问题,请尝试以下操作:
转到您要写入的文件夹,然后右键单击它,然后选择属性。
选择安全选项卡
点击编辑
点击添加
点击高级
单击立即查找
从"用户"列表中,选择" IUSR",然后单击"确定"。
再次单击
IUSR将显示在标有"用户名组"的顶部框中
选择IUSR并在" BATCH的权限"列表视图中授予必要的权限。
单击"应用",然后完成。
对于不同版本的Windows,步骤可能会稍有不同。这也适用于ASP.NET,尽管我认为您添加的用户是网络用户(NETWORK AND OR NETWORK SERVICE用户)以及IUSR。