php - 权限设置为 777,文件仍然不可写

标签 php apache mod-rewrite

我已将文件权限设置为 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/

相关文章:

apache - 当 WCHAN = flock_lock_file_wait 时如何判断 Apache 正在等待哪个文件

php - WAMP 元素中未显示样式表

mod-rewrite - 如何在 JBoss 服务器上重写 URL?

apache - 我需要在 .htaccess 文件中重复 RewriteCond 吗?

php - 将每个 mySQL 结果显示为另一个 php 页面的链接

php - 在laravel中自动检测登录用户的右后卫

用于实时视频流的 PHP + cURL(cURL 可以处理无限数据吗?)

php - 如何在python中找到当前正在执行的脚本文件和路径?

php - 上传文件时发生内部服务器错误

mod-rewrite - mod_rewrite 缩短 url 文件路径