php文件上传错误警告move_uploaded_file无法打开流权限被拒绝

时间:2014-08-11 06:55:58

标签: php file-upload file-io xampp

以下是两个错误

  

警告:move_uploaded_file(/uploads53e866b24977d1.48375376.pdf):无法打开流:第28行的C:\ xampp \ htdocs \ file_upload \ upload.php中的权限被拒绝

     

警告:move_uploaded_file():无法移动' C:\ xampp \ tmp \ php7D69.tmp' to' /uploads53e866b24977d1.48375376.pdf'在第28行的C:\ xampp \ htdocs \ file_upload \ upload.php

这是我的HTML

<form method="POST" action="upload.php" enctype="multipart/form-data">
        <label for="">Upload Your Cv</label><input type="file" name="file">
        <input type="submit" value="upload">
</form>

这是我的PHP

if (isset($_FILES['file'])) {
        $file   = $_FILES['file'];
        // print_r($file);  just checking File properties

        // File Properties
        $file_name  = $file['name'];
        $file_tmp   = $file['tmp_name'];
        $fiel_size  = $file['size'];
        $file_error = $file['error'];

        // Working With File Extension
        $file_ext   = explode('.', $file_name);
        $file_fname = explode('.', $file_name);

        $file_fname = strtolower(current($file_fname));
        $file_ext   = strtolower(end($file_ext));
        $allowed    = array('txt','pdf','doc');

        if (in_array($file_ext,$allowed)) {
            if ($file_error === 0) {
                if ($fiel_size <= 5000000) {
                        // $file_name_new     =  $file_fname . uniqid('',true) . '.' . $file_ext;
                        $file_name_new    =  uniqid('',true) . '.' . $file_ext;
                        $file_destination =  '/uploads' . $file_name_new;
                        // echo $file_destination;
                        if (move_uploaded_file($file_tmp, $file_destination)) {
                                echo "Cv uploaded";
                        }
                }
            }
        }
}

4 个答案:

答案 0 :(得分:3)

SELinux可能会阻止写入文件。如果是这种情况,那么您应该将文件的上下文更改为httpd_sys_rw_content_t,这意味着它将转换为Apache使用的可读写目录和文件。

将其分配给可以由应用程序创建或修改文件的目录,或将其分配给files目录以允许应用程序修改它们。

sudo chcon -t httpd_sys_rw_content_t /var/www/html/path/to/writable/folder -R

答案 1 :(得分:2)

目录路径应为 - uploads/,如果它存在于您的php文件所在的同一目录中,并确保此目录具有777权限

$file_destination =  'uploads/' . $file_name_new;
if (move_uploaded_file($file_tmp, $file_destination)) {
    echo "Cv uploaded";
}

答案 2 :(得分:2)

我遇到了同样的问题并找到了此错误的解决方案,它位于move_uploaded_file($file_tmp, $file_destination)

添加以下内容

$root = getcwd();
move_uploaded_file($file_tmp, $root.$file_destination)

事实证明你需要一些设置的完整路径,我使用XAMPP并遇到同样的问题。在玩了一段时间后,我决定将根目录连接到工作目录,结果很好。

答案 3 :(得分:1)

我尝试过相同的代码,它对我有用。我为你做了一些改变。

<form method="POST" enctype="multipart/form-data">
    <label for="">Upload Your Cv</label><input type="file" name="file">
    <input type="submit" name="upload" value="upload">
</form>

之后,您不需要重定向页面;相反,您可以在</form>

下使用 this
if(isset($_REQUEST["upload"]))
{
if (isset($_FILES['file'])) {
        $file   = $_FILES['file'];
        // print_r($file);  just checking File properties

        // File Properties
        $file_name  = $file['name'];
        $file_tmp   = $file['tmp_name'];
        $file_size  = $file['size'];
        $file_error = $file['error'];

        // Working With File Extension
        $file_ext   = explode('.', $file_name);
        $file_fname = explode('.', $file_name);

        $file_fname = strtolower(current($file_fname));
        $file_ext   = strtolower(end($file_ext));
        $allowed    = array('txt','pdf','doc','ods');


        if (in_array($file_ext,$allowed)) {
            //print_r($_FILES);


            if ($file_error === 0) {
                if ($file_size <= 5000000) {
                        $file_name_new     =  $file_fname . uniqid('',true) . '.' . $file_ext;
                        $file_name_new    =  uniqid('',true) . '.' . $file_ext;
                        $file_destination =  'upload/' . $file_name_new;
                        // echo $file_destination;
                        if (move_uploaded_file($file_tmp, $file_destination)) {
                                echo "Cv uploaded";
                        }
                        else
                        {
                            echo "some error in uploading file".mysql_error();
                        }
//                        
                }
                else
                {
                    echo "size must bne less then 5MB";
                }
            }

        }
        else
        {
            echo "invalid file";
        }
}
}

请注意,上传文件夹必须与存储文件的目录位于同一目录中。