首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >move_uploaded_file给出“无法打开流:权限被拒绝”错误

move_uploaded_file给出“无法打开流:权限被拒绝”错误
EN

Stack Overflow用户
提问于 2011-11-12 18:27:07
回答 14查看 524K关注 0票数 155

当我尝试在CentOS上用Apache2.2和PHP5.3配置上传目录时,我一直收到这个错误。

在php.ini中:

代码语言:javascript
复制
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/

在httpd.conf中:

代码语言:javascript
复制
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目录权限:

代码语言:javascript
复制
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文件中获取有关上载文件的配置。

我在这里做错了什么?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-11-12 20:41:50

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

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

现在,如果需要的话,你可以使用/var/www/html/mysite/tmp_file_upload/

  • Chmod $sudo $sudo imagestmp_file_upload,如果需要的话,你应该已经准备好了。在@Dmitry Teplyakov答案中提到。

$ sudo chmod -R 0755 /var/www/html/mysite/image/$ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/

票数 199
EN

Stack Overflow用户

发布于 2013-11-18 21:05:03

您还可以运行此脚本来找出Apache进程的所有者:

<?php echo exec('whoami'); ?>

然后将目标目录的所有者更改为您已获得的目录。使用以下命令:

代码语言:javascript
复制
chown user destination_dir

然后使用命令

代码语言:javascript
复制
chmod 755 destination_dir

要更改目标目录权限,请执行以下操作。

票数 86
EN

Stack Overflow用户

发布于 2017-04-27 15:12:38

这对我很有效。

代码语言:javascript
复制
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

然后注销或重新启动。

如果SELinux出现问题,请尝试以下方法

代码语言:javascript
复制
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
sudo restorecon -Rv '/var/www(/.*)?'
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8103860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档