move_uploaded_file 无法打开流和权限被拒绝错误

Posted

技术标签:

【中文标题】move_uploaded_file 无法打开流和权限被拒绝错误【英文标题】:move_uploaded_file failed to open stream and Permission denied error 【发布时间】:2014-01-02 03:59:54 【问题描述】:

我正在尝试上传文件,但在浏览器中出现以下错误:

Warning  move_uploaded_file(public/upload/udesignwptheme138.zip) [function.move-uploaded-file]: failed to open stream: Permission denied in <b>/home/monivbr/public_html/classes/system/Util.php on line 1803

Warning:  move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpJtBlbi' to 'public/upload/udesignwptheme138.zip' in /home/monivbr/public_html/classes/system/Util.php on line 1803

这是我的 php 类,可以上传到我的服务器:

            foreach ($files as $file)
            if($file['tmp_name'] != "" && $file['error'] != 4)

                if($file['size'] < 10000000000)
                    $nome_antigo = $file["name"];
                    $novo_nome = strtolower(preg_replace("/[^a-zA-Z0-9_.]/", "", strtr($nome_antigo, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_")));


                    $query = $conexao->prepare('SELECT MAX(id) AS maxId FROM tbArquivo');
                    $query->execute();
                    $arquivo = $query->fetchObject();   

                    $caminhoArquivo = 'public/upload/';
                    $nomeArquivo = substr($novo_nome, 0, strripos($novo_nome, '.')).$arquivo->maxId;
                    if($idTipoArquivo == '6') //6 = arquivos xml de tradução
                        $caminhoArquivo  = 'public/traducao/';
                        $nomeArquivo = substr($novo_nome, 0, strripos($novo_nome, '.'));
                    

                    $extensao = substr($novo_nome, strripos($novo_nome, '.'));

下面这一行是错误所在:

move_uploaded_file($file["tmp_name"],$caminhoArquivo.$nomeArquivo.$extensao);




                    $query = $conexao->prepare("INSERT INTO tbArquivo
                                                (idTipoArquivo, idComplementar, idComplementar2, nomeArquivo, caminhoArquivo, tamanhoArquivo, extencaoArquivo, excluido)
                                                VALUES
                                                (:idTipoArquivo, :idComplementar, :idComplementar2, :nomeArquivo, :caminhoArquivo, :tamanhoArquivo, :extencaoArquivo, 0)");
                    $query->bindParam(":idTipoArquivo", $idTipoArquivo);
                    $query->bindParam(":idComplementar", $idComplementar);
                    $query->bindParam(":idComplementar2", $idComplementar2);
                    $query->bindParam(":nomeArquivo", $nomeArquivo);                
                    $query->bindParam(":caminhoArquivo", $caminhoArquivo);
                    $query->bindParam(":tamanhoArquivo", $file['size']);
                    $query->bindParam(":extencaoArquivo", $extensao);

                    $query->execute();

                
               

这是我的 .htaccess 文件:

php_value upload_max_filesize 30M
php_value post_max_size 30M
php_value max_input_time 6000000
php_value max_execution_time 6000000
php_value memory_limit 35M

这是变量的 var_dump:

var_dump($extensao);
var_dump($file["tmp_name"]);
var_dump($caminhoArquivo);
var_dump($nomeArquivo);

string(4) ".zip" string(14) "/tmp/phpKUpN24" string(14) "public/upload/" string(17) "udesignwptheme139" 

有人知道什么是错的吗?

【问题讨论】:

您的问题已在警告中定义。您的网络服务器运行进程对您尝试移动上传文件的文件夹没有写入权限。 chanchal,响应坦克...但我相信权限不是问题,因为当我尝试上传小文件时,我上传成功了... 你能打印文件信息数组吗?文件大小是多少? 上传文件夹的权限为755,公用文件夹的权限为755 文件大小为 10 mb 【参考方案1】:

不要更改文件夹路径

chmod -R 777 /home/monivbr/public_html/classes/system/Util.php

【讨论】:

【参考方案2】:

也许您可以考虑更改上传文件夹 chmod 755 或 777

chmod 777 folder_path 

通过这个我们设置读取。所有者、组以及其他人的写入和执行权限。

【讨论】:

我遇到了同样的错误,但是我的权限已经是 755 或更高,并且所有内容都归同一个用户所有。 @BrassApparatus 上传文件夹需要具有写入权限,即 6。因此您的权限需要为 765 或更高。在这里解释-elated.com/articles/understanding-permissions。我知道这是一个旧评论,但对于其他可能有这个问题的人来说。 我最终修复了它。 +1 @Craicerjack 评论我应该为后代所拥有的东西。 添加 777 chmod 非常危险,而且绝对是错误的。请考虑了解权限的工作原理。【参考方案3】:

这是因为您对文件夹没有足够的权限。将此权限更改为读写。就是这样!

【讨论】:

如何在 Windows 中为 XAMPP 做到这一点?

以上是关于move_uploaded_file 无法打开流和权限被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

move_uploaded_file 无法打开流:权限被拒绝 - Mac

PHP/IIS copy()/move_uploaded_file() 无法打开流:权限被拒绝警告

在我完成所有配置后,move_uploaded_file给出“无法打开流:权限被拒绝”错误

无法打开流:是一个目录

Ubuntu Server不会使用PHP“move_uploaded_file”上传文件

move_uploaded_file() 无法将文件从 tmp 移动到 dir