我在OSX 10.5.8上运行PHP和Apache的标准安装,我试图在(订单)中打开的文件夹的CHMOD设置是777,该组是_WWW。
$filename = 'orders/54c9942b.txt';
if (!$handle = fopen($filename, 'w')) {
return(false);
}
我得到以下内容:
Warning: fopen(orders/54c9942b.txt) [function.fopen]: failed to open stream: Permission denied in /Users/New/Sites/thisisnothere/order-save.php on line 36
* 编辑:我在我的网络服务器上测试过它(我支付的是一个,而不是我设置的一个),它按预期工作。这让我相信这是配置我的服务器的问题,也许是Apache中的访问问题?还是PHP?我完全不熟悉配置Apache。
答案 0 :(得分:1)
尝试在fopen()命令中使用完整的文件系统路径,看看是否有效。尝试一下你知道也会工作的地方(也许是/tmp
)。
答案 1 :(得分:0)
重要的权限是文件的权限,而不是它所在的目录。我确信这就是你的问题所在。
答案 2 :(得分:0)
“如果你试图让这个程序运行并且你遇到错误,你可能想要检查你是否授予了你的PHP文件访问权限以便将信息写入硬盘驱动器”取自tizag.com所以声音就像你应该设置php文件本身的权限一样,如Tyler所说。
答案 3 :(得分:0)
我有一个解决方案,但我不是安全专家,所以只在你的本地主机上使用这个解决方案,如果你的数据不敏感,如信用卡号,医疗信息等,也许其他一些专家在这里发表评论
如果您直接在控制台上调用php或者通过本地Web服务器调用相同的php文件,则会有所不同。我发现我的mac(lion)通过Web服务器以用户“localaccounts”运行php。
然后我解决了以下问题:
步骤1:将当前目录的组和需要通过Web服务器修改的文件更改为名为“localaccounts”的组。例如。在终端输入以下命令,将其应用于当前目录,子目录“user images”和文件foo.sqlite。
chgrp -R localaccounts . foo.sqlite user\ images/
步骤2:使用commad
授予组成员写入权限chmod g+w -R . foo.sqlite user\ images/
请注意,点表示当前目录。
我在webhoster上尝试了同样的事情,但他们不允许这样做。相反,他们建议我使用PHP CGI。然后PHP将像我的FTP用户访问一样执行。我想这更安全,但我还没试过。