我已经将文件权限设置为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文件将所有stream量redirect到公共子文件夹。 当然,我已经排除了重写文件(可以从我检查的浏览器访问):
RewriteRule ^(file).* - [L]
这是为什么?
我猜Apache的运行方式与拥有该文件的用户/组不同。 在这种情况下,文件本身需要为0777
。
public
只需要是0777
如果你计划使用PHP添加文件到文件夹。 即使文件夹本身不是0777
,如果文件是,文件夹对用户来说至少有5
( read/execute
),你应该能够写入文件。
最后,你的文件树应该是这样的:
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
在opencart中,我在安装vqmod并给予所有必要的权限后遇到了这个错误。
经过一番研究,找到了它。
“MODS CACHE PATH NOT WRITEABLE”实际上是指vqmod文件夹本身而不是缓存文件夹。
sudo chmod -R 777 vqmod
在你的根目录下…..
创建文件后,您必须立即修改文件。
function Doo_Chmod($path, $chmod = null) { if (file_exists($path) === true) { if (is_null($chmod) === true) { $chmod = (is_file($path) === true) ? 644 : 755; if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true) { $chmod += 22; } } return chmod($path, octdec(intval($chmod))); } return false; }