使用PHP写入目录:这是权限问题吗?

时间:2009-03-24 17:24:06

标签: php linux apache file permissions

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

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

我已将此脚本放在新服务器上,但图像永远不会保存。它保存的文件夹的权限是755,但它不拥有它。上次,我认为我通过将目录所有者更改为apache来修复此问题,因为这是PHP运行的。我不能再这样做因为我不是根。

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

感谢大家的帮助

5 个答案:

答案 0 :(得分:8)

  1. 将文件夹的权限更改为777(rwxrwxrwx
  2. 来自PHP的
  3. 使用mkdir
  4. 创建子目录
  5. 将您的目录权限更改回755(rwxr-xr-x)或甚至更好711(rwx--x--x
  6. 从现在起将图像保存在子目录中,该子目录现在由www-data(或Apache使用的任何用户)拥有。
  7. 顺便说一句。你可以减少以下代码:

    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)
    

答案 1 :(得分:1)

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

为了打破它,755是:

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

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

P.S。如果打开失败,fopen应返回错误。

答案 2 :(得分:1)

使用它:

>chown dir_name www-data

答案 3 :(得分:0)

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

检查出来!

答案 4 :(得分:0)

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