Php 移动“上传”文件;无法打开流:权限被拒绝";错误
在CentOS上尝试使用Apache2.2和PHP5.3配置上载目录时,我一直遇到这个错误 在php.ini中:Php 移动“上传”文件;无法打开流:权限被拒绝";错误,php,upload,file-permissions,Php,Upload,File Permissions,在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 A
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>
无论我做什么,当我上传文件时,我总是从PHP中得到这个错误:
警告:移动上传的文件(images/robot.jpg):无法打开流:第78行/var/www/html/mysite/process.php中的权限被拒绝
警告:move_upload_file():无法将第78行的“/tmp/phpsKD2Qm”移动到/var/www/html/mysite/process.php中的“images/robot.jpg”
如您所见,它从未从php.ini文件中获取有关上载文件的配置
我做错了什么?试试这个
find/var/www/html/mysite/images/-type f-print0 | xargs-0 chmod-v 664
更改此文件夹的权限
#chmod-R 0755/var/www/html/mysite/images/
这是因为图像
和tmp文件上传
只能由root
用户写入。为了使上传工作正常进行,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使它们全局可写(糟糕的做法)
$ps aux | grep httpd
。第一列是所有者,通常是nobody
images
和tmp\u file\u upload
的所有者更改为nobody
或步骤1中找到的任何所有者
$sudo chown nobody /var/www/html/mysite/images/
$sudo chown nobody /var/www/html/mysite/tmp_file_upload/
images
和tmp\u文件上传
现在可以由所有者写入,如果需要[看起来您已经准备好了]。在@Dmitry Teplyakov回答中提到
$ sudo chmod -R 0755 /var/www/html/mysite/images/
$ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
open\u basedir
指令只需将tmp_文件上传权限更改为755即可 下面是命令
chmod-R 755 tmp_file_upload您还可以运行此脚本以查找Apache进程所有者:
然后将目标目录的所有者更改为您所拥有的。使用以下命令:
chown user destination_dir
然后使用命令
chmod 755 destination_dir
更改目标目录权限。即使已成功运行composer,我也遇到了此相关问题。我更新了composer,当运行
composer安装
或php composer.phar安装
时,我得到:
…无法打开流:权限被拒绝
经过大量研究后发现,以前关于更改文件夹权限的答案是有效的。它们现在只是略有不同的目录
在我的安装中,在OSX上,缓存文件位于/Users/[USER]/.composer/cache
中,我遇到了问题,因为缓存文件属于root用户。将“.composer”的所有权递归更改为我的用户解决了此问题
这就是我所做的:
sudo chown -R [USER] cache
然后我再次运行了composer安装,瞧 试试这个:
sudo gedit /etc/apache2/envvars
www数据
替换为您的用户名
"export APACHE_RUN_USER=www-data"
取代
export APACHE_RUN_USER='your_username'
当apache用户(www数据)没有在文件夹中写入的权限时,就会发生此问题。要解决此问题,您需要将用户放入组www数据中 我刚做了这个: 执行此php代码以发现apache使用的用户。之后,执行终端中的命令:
user@machine:/# cd /var/www/html
user@machine:/var/www/html# ls -l
它将返回如下内容:
total of files
drwxr-xr-x 7 user group size date folder
我保留了用户,但将组更改为www数据
chown -R user:www-data yourprojectfoldername
chmod 775 yourprojectfoldername
如果您有MacOSX,请转到网站的文件根目录或文件夹 然后右键点击它,进入获取信息,进入最底层(共享和权限),打开它,将所有只读更改为读写。确保打开挂锁,转到设置图标,然后选择应用于所附项目…这对我很有效
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www
我想在前面的建议中添加这一点。如果您使用的是已启用的Linux版本,则还应在shell中执行此操作:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
通过组或更改目录所有者来授予web服务器用户权限。解决方案非常简单。仅在图像(目标)文件夹上单击鼠标右键,转到“属性”,单击“权限”选项卡,然后更改“其他人”访问权限以创建和删除文件。如果启用了
SELinux
,则会发生这种情况。通过设置selinux=disabled
在/etc/selinux/config
中禁用该选项,然后重新启动服务器。我尝试了上述所有解决方案,但以下解决了我的问题
chcon -R -t httpd_sys_rw_content_t your_file_directory
775? 可能您的服务器正在以无人身份运行。在这种情况下,只有root用户可以写入(您的“图像”权限)…这意味着什么?我如何更改它?请记住,所有父目录也需要有正确的权限。它现在是这样的:drwxrwxr-x 2 root root 4096 Nov 11 10:01图像也在:drwxrwxr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload,但仍然是相同的错误Getting:chmod:'664'后缺少操作数谢谢:我们的旧所有者一直是守护程序现在,Apache这个补丁适用于您可能将服务器php类型从fast_CGI、CGI更改为Apache_mod as plesk等的情况。。可以使用原始用户的权限而不是apache继续。这解决了我的问题。我遇到了相同的错误,但进程和文件夹都属于
jacob
(我是本地机器),文件夹都有755
或775
。更改权限后,我不得不重新启动apache进程sudo服务httpd restart
。然后它成功了:)我没有改变所有者chown
而是将我的apache进程添加到一个“www”组,并通过chgrp
将这些目录添加到同一个“www”组,谢谢它对我有用。我第一次使用了Laith Shadeed的方法,但在键入ps aux | grep httpd和
时没有得到相同的结果。有吗
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
chcon -R -t httpd_sys_rw_content_t your_file_directory