我已将文件权限设置为 777,但我无法使用 PHP 写入文件。
我可以在我的 FTP 客户端中清楚地看到该文件具有 0777 权限,当我这样做时:
echo (true === is_writable('file.txt')) ? 'yes' : 'no';
我得到“不”;
我也试过:
echo (true === chmod('file.txt', 0777)) ? 'yes' : 'no';
同样的结果。
目录列表是这样的:
public_html
public 0777
css 0755
js 0755
file.txt 0777
我正在使用 .htaccess 文件将所有流量重定向到公共(public)子文件夹。当然,我已将文件排除在重写之外(可以从我检查过的浏览器访问):
RewriteRule ^(file).* - [L]
这是为什么?
最佳答案
我想 Apache 以不同于拥有该文件的用户/组的用户/组运行。在这种情况下,文件本身需要是 0777
。
public
如果您计划使用 PHP 将文件添加到文件夹,则只需为 0777
。即使文件夹本身不是 0777
,如果文件是并且文件夹至少有 5
供用户使用(读取/执行
),您应该能够写入文件。
最后,你的文件树应该是这样的:
public_html
public
file.txt 0777
当然,您将无法使用 PHP 更改这些权限,但您可以从 FTP 客户端执行此操作。
如果仍然无法运行,则 PHP 可能正在安全模式下运行,或者您可能正在使用 PHP Suhosin 等扩展程序。将文件的所有者更改为运行脚本的同一用户/组可能会获得更好的结果。
要获取执行用户的用户/组 ID,您可以使用以下内容:
<?php
echo getmyuid().':'.getmygid(); //ex:. 0:0
?>
然后,您可以使用 chown
(在终端中)更改文件的所有者:
> chown 0:0 file.txt
关于php - 权限设置为 777,文件仍然不可写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260150/