【问题标题】:Write to Directory using PHP: Is this a permissions problem?使用 PHP 写入目录:这是权限问题吗?
【发布时间】:2010-10-15 06:29:47
【问题描述】:

我的 PHP 脚本写入一个文件,以便它可以创建一个 jpg 图像。

fwrite($handle, $GLOBALS['HTTP_RAW_POST_DATA']);
fclose($handle);    
print $newfile.'.jpg';

我已将此脚本放在新服务器上,但图像永远不会保存。它保存到的文件夹的权限是 755 但它不拥有它。上次,我想我通过将目录所有者更改为 apache 解决了这个问题,因为这就是 PHP 运行的方式。我不能再这样做了,因为我不是 root。

首先,还有其他解决方法吗?其次,如果我可以像上次一样更改目录的所有者,这会解决问题吗?

感谢大家的帮助

【问题讨论】:

    标签: php linux apache file permissions


    【解决方案1】:

    几周前我遇到了类似的问题。它最终成为服务器中设置的 PHP 安全模式。

    检查一下!

    【讨论】:

    • 我检查了这个,它没有处于安全模式。
    【解决方案2】:
    1. 将文件夹的权限更改为 777 (rwxrwxrwx)
    2. 从 PHP 创建带有mkdir 的子目录
    3. 将您的目录权限改回 755 (rwxr-xr-x) 甚至更好的 711 (rwx--x--x)
    4. 从现在开始将您的图像保存在子目录中,该子目录现在归 www-data(或 Apache 使用的任何用户)所有。

    顺便说一句。您可以减少以下代码:

    fopen($newfile.'.jpg','wb');
    fwrite($handle, $GLOBALS['HTTP_RAW_POST_DATA']);
    fclose($handle);    
    print $newfile.'.jpg';
    

    到:

    file_put_contents($newfile.'.jpg', 
                      file_get_contents('php://input', 
                                          FILE_BINARY), 
                      FILE_BINARY)
    

    【讨论】:

    • 用户php运行实际上没有写文件的权限,因此不能创建目录。谢谢你的精简版,看起来不错。 :)
    • 只需将目录更改为 777 即可!有点危险,是的,但我只需要它用于测试目的。
    【解决方案3】:

    将 error_reporting(E_ALL) 放在脚本的顶部,并检查它在尝试保存图像时是否打印出任何警报。

    【讨论】:

      【解决方案4】:

      如果你不是所有者,那么是的,目录为 755 是个问题。

      分解一下,755 是:

      • 用户(所有者)已读取 (4)、写入 (2) 和执行 (1)
      • 组已读取 (4) 并执行 (1)
      • 其他人已读取 (4) 并执行 (1)

      请注意,只有所有者拥有 755 的写入权限。

      附:如果打开失败,fopen 应该返回错误。

      【讨论】:

        【解决方案5】:

        使用这个:

        >chown dir_name www-data
        

        【讨论】:

        • 参数(仍然)的顺序是否正确?从chown帮助我看到chown [OPTION]... [OWNER][:[GROUP]] FILE...
        猜你喜欢
        • 2011-11-14
        • 1970-01-01
        • 2020-05-29
        • 2013-09-10
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        相关资源
        最近更新 更多