当我尝试在CentOS上用Apache2.2和PHP5.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得到这个错误:
警告:图像(move_uploaded_file/robot.jpg):无法打开流:第78行的/var/www/html/mysite/process.php中的权限被拒绝
警告: move_uploaded_file():无法在第78行将'/tmp/phpsKD2Qm‘移动到/var/www/html/mysite/process.php中的'images/robot.jpg’
正如您所看到的,它从未从php.ini文件中获取有关上载文件的配置。
我在这里做错了什么?
发布于 2011-11-12 20:41:50
这是因为只有root
用户才能写入images
和tmp_file_upload
。为了使上传工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使它们全局可写(不好的做法)。
$ps aux | grep httpd
。第一列是所有者,通常是nobody
images
和tmp_file_upload
的所有者成为nobody
或您在步骤1中找到的任何所有者。现在,如果需要的话,你可以使用/var/www/html/mysite/tmp_file_upload/
images
和tmp_file_upload
,如果需要的话,你应该已经准备好了。在@Dmitry Teplyakov答案中提到。$ sudo chmod -R 0755 /var/www/html/mysite/image/$ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
open_basedir
指令。发布于 2013-11-18 21:05:03
您还可以运行此脚本来找出Apache进程的所有者:
<?php echo exec('whoami'); ?>
然后将目标目录的所有者更改为您已获得的目录。使用以下命令:
chown user destination_dir
然后使用命令
chmod 755 destination_dir
要更改目标目录权限,请执行以下操作。
发布于 2017-04-27 15:12:38
这对我很有效。
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www
然后注销或重新启动。
如果SELinux
出现问题,请尝试以下方法
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
sudo restorecon -Rv '/var/www(/.*)?'
https://stackoverflow.com/questions/8103860
复制相似问题