【问题标题】:Unable to save a file due to file permissions由于文件权限,无法保存文件
【发布时间】:2013-03-03 17:43:47
【问题描述】:

我正在尝试上传并保存图像文件。这在过去运行良好,但现在返回错误。

警告:move_uploaded_file(//home/bitnami/htdocs/lookgram/photos/1/22.jpeg):无法打开流:/opt/bitnami/apache2 中的权限被拒绝/htdocs/lookgram/build/classes/Photo.php138 行

警告:move_uploaded_file(): Unable to move '/ tmp/phpAyWyw4' 到 /opt/bitnami/apache2/htdocs/lookgram/build/classes/Photo.php 中的 '//home/bitnami/htdocs/lookgram/photos/1/22.jpeg'上线 138

这看起来像是文件权限错误,所以这里是文件夹的权限:

drwxrwxr-x 6 bitnami bitnami 4096 Mar 15 01:02 photos

有什么想法吗?

【问题讨论】:

  • 当您查看权限值时,您有drwxrwxr-x。所以对于你(bitnami)rwx,对于群组rwx,但对于其他人,只是r-x。因此,不在组中的用户只能读取和执行,而不是写任何东西。我假设你的 PHP 使用的用户不在组中。
  • 如果我的网络服务器正在执行 PHP,那么“用户”是谁?
  • 试试这个:<?php echo exec('whoami'); ?> 在你的脚本中告诉我们它是谁
  • 它返回“守护进程”。守护进程会落入哪些用户?
  • groups bitnami检查bitnami(你)是什么组。然后您可以将您的“守护程序”用户添加到您的组useradd -G group_name daemons。然后你应该能够制作你的move_file。您还可以决定使用chgrp 更改目录组。

标签: php file file-io permissions chmod


【解决方案1】:

这是因为photos/1/ 只能由root 用户写入。为了上传工作,我们需要使该文件夹的所有者与 httpd 进程所有者相同,或者使它们全局可写(不好的做法)。

  1. 检查 apache 进程所有者:$ps aux | grep httpd。第一列是所有者,通常是 nobody

  2. photos/1/ 的所有者更改为nobody 或您在步骤1 中找到的任何所有者。

    $sudo chown nobody /home/bitnami/htdocs/lookgram/photos/1/

  3. Chmod photo/1/ 现在可以由所有者写入,如果需要的话[似乎你已经有了这个]。

    $ sudo chmod -R 0755 /home/bitnami/htdocs/lookgram/photos/1/

  4. 有关此行为发生原因的更多详细信息,请查看手册 http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir,注意它还讨论了 open_basedir 指令。

【讨论】:

  • 这太棒了,谢谢 Sumit。我的用途是“守护进程”。因此,我将为该用户进行这些更改。
猜你喜欢
  • 2011-11-06
  • 2014-05-30
  • 2017-05-14
  • 2020-04-08
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多