gpt4 book ai didi

php - move_uploaded_file 给出 "failed to open stream: Permission denied"错误

转载 作者:IT老高 更新时间:2023-10-28 11:45:03 27 4
gpt4 key购买 nike

在 CentOS 上尝试使用 Apache 2.2 和 PHP 5.3 配置上传目录时,我不断收到此错误。

在 php.ini 中:

upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/

在 httpd.conf 中:

Directory /var/www/html/mysite/tmp_file_upload/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>

CentOS 目录权限:

drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload

无论我做什么,当我上传文件时,我总是从 PHP 收到这个错误:

Warning: move_uploaded_file(images/robot.jpg): failed to open stream: Permission denied in /var/www/html/mysite/process.php on line 78

Warning: move_uploaded_file(): Unable to move '/tmp/phpsKD2Qm' to 'images/robot.jpg' in /var/www/html/mysite/process.php on line 78

如您所见,它从未从 php.ini 文件中获取有关上传文件的配置。

我在这里做错了什么?

最佳答案

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

  1. 检查 apache 进程所有者:$ps aux | grep httpd。第一列是所有者,通常是 nobody
  2. imagestmp_file_upload 的所有者更改为 nobody 或您在步骤 1 中找到的任何所有者。

    $sudo chown nobody /var/www/html/mysite/images/

    $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
  3. Chmod imagestmp_file_upload 现在可以由所有者写入,如果需要的话[似乎你已经有了这个]。在@Dmitry Teplyakov 的回答中提到。

    $ sudo chmod -R 0755 /var/www/html/mysite/images/

    $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
  4. 有关此行为发生原因的更多详细信息,请查看手册 http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir ,注意它还谈到了 open_basedir 指令。

关于php - move_uploaded_file 给出 "failed to open stream: Permission denied"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com