Move_uploaded_file()权限

时间:2017-02-13 15:38:45

标签: php

我正在制作一个允许我上传图片的简单php脚本。文件上传正确,但是当我打开目录中上传的图片时,您将无权查看此文件,请检查授权并重试"

    <!DOCTYPE html>
<html>
    <head>
        <title> File upload </title>
        <meta charset = "UTF-8" />
    </head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        Seleziona il file:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="submit">
    </form>
</body>
</html>

    <?php
    $target_dir = "C:\Users\test\Desktop\upload_succeeded\\";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $fileType = pathinfo($target_file,PATHINFO_EXTENSION);

    // Controllo se il file esiste gia
    if (file_exists($target_file)) 
    {
        echo "Spiacenti, il file esiste gia'.";
        $uploadOk = 0;
    }

    // Abilitare solo alcuni formati di file
    if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ) 
    {
        echo "Spiacenti, solo file JPG, JPEG, PNG & GIF sono abilitati.";
        $uploadOk = 0;
    }

    // Controllo se $uploadOk e' settato a 0 da un errore
    if ($uploadOk == 0) 
    {
        echo "Spiacenti, il tuo file non e' stato caricato.";
    // Se tutto e' ok prova a caricare il file
    } 
    else 
    {
        if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
        {
            echo "Il file ". basename( $_FILES["fileToUpload"]["name"]). " e' stato correttamente caricato.";
        } 
        else 
        {
            echo "Spiacenti, c'e' stato un errore nel caricamento del file.";
        }
    }
?>

3 个答案:

答案 0 :(得分:1)

您正在运行Windows。下载任何FTP客户端并连接到您的服务器,而不是将文件的权限更改为777(rwe)。

答案 1 :(得分:1)

我想我知道答案,但让我先解释一下这里到底发生了什么。

浏览器通过包含该文件的帖子发送multipart / form-data。 Apache接收所述文件,PHP然后将其放在临时目录中。将其创建为文件系统上的新文件。 你通过PHP获得的是什么; $ _FILES变量中的规范化已检查文件,该变量在被move_uploaded_file函数复制之前会经过一些进一步的测试。

最有可能的问题是:PHP / Apache使用的用户以及写入文件时设置的权限,不允许您当前登录的用户打开它。

2可能的解决方案:

更改Apache / PHP用户以使用权限编写文件,以便您有权打开它。

或者之后更改文件的权限,假设用户用于创建文件具有足够的权限:

Change permissions of file uploaded by PHP

答案 2 :(得分:0)

除了手动授予权限,您可以使用php功能在chmod()授予权限,因为您在上传文件后立即上传任何文件,您可以使用file_path/file_name调用此函数,然后可以提供权限相应地使用0777获取所有读/权限

chmod(IMAGES_DIR.'/'.'image_name.'.$image_file_type, 0777);