php – move_uploaded_file给出“无法打开流:权限被拒绝”错误后所有配置我做了

在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文件关于上传文件的配置。

我在这里做错了什么?

最佳答案
这是因为图像和tmp_file_upload只能由root用户写入。要上传到工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或使它们全局可写(不良做法)。

>检查apache进程所有者:$ ps aux | grep httpd。第一列将是所有者通常它将是没人
>将图片的所有者和tmp_file_upload更改为无人或在步骤1中找到的所有者。

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

$ sudo chown nobody / var / www / html / mysite / tmp_file_upload /
> Chmod图像和tmp_file_upload现在被所有者可写,如果需要[似乎你已经有这个到位]。提到在@Dmitry Teplyakov的答案。

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

$ sudo chmod -R 0755 / var / www / html / mysite / tmp_file_upload /
>关于为什么这个行为发生的更多细节,检查手册http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir,注意它也谈论open_basedir指令。

转载注明原文:php – move_uploaded_file给出“无法打开流:权限被拒绝”错误后所有配置我做了 - 代码日志