Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 移动“上传”文件;无法打开流:权限被拒绝";错误_Php_Upload_File Permissions - Fatal编程技术网

Php 移动“上传”文件;无法打开流:权限被拒绝";错误

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

在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>
无论我做什么,当我上传文件时,我总是从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进程所有者相同,或者使它们全局可写(糟糕的做法)

  • 检查apache进程所有者:
    $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/
    
  • Chmod
    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安装,瞧

    试试这个:

  • open/etc/apache2/envvars

    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