移动上传的文件失败,无法打开流和权限被拒绝错误。

4

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

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类,用于将文件上传到我的服务器:

这是我用于在服务器上上传文件的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" 

有人知道可能出了什么问题吗?

1
您的问题在警告中定义。您的Web服务器运行的进程没有将上传的文件移动到所需文件夹的写入权限。 - chanchal118
Chanchal,感谢您的回复...但我认为权限不是问题,因为当我尝试上传小文件时,上传成功了... - user2988966
你能打印文件信息数组吗?文件大小是多少? - chanchal118
上传文件夹的权限为755,公共文件夹的权限也为755。 - user2988966
文件大小为10 MB。 - user2988966
3个回答

15

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

chmod 777 folder_path 

通过这样做,我们为所有者、组和其他人设置读、写和执行权限。


2
我遇到了相同的错误,但我的权限已经是755或更高,并且所有权都属于同一用户。 - limeandcoconut
1
@BrassApparatus 上传文件夹需要具有写入权限,即6。因此,您的权限需要为765或更高。这里有解释 - http://www.elated.com/articles/understanding-permissions/。我知道这是一个旧评论,但对于可能遇到该问题的其他人来说,这很重要。 - Craicerjack
1
我最终修复了它。+1 @Craicerjack 因为他评论了我应该为后世留下的东西。 - limeandcoconut
1
添加777 chmod非常危险,绝对是错误的。请考虑学习权限如何工作。 - Kirill Titov

0

不要更改文件夹路径

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

0

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


你如何在Windows上为XAMPP做到这一点? - Pathros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接