【问题标题】:php file upload error warning move_uploaded_file failed to open stream permission denied inphp文件上传错误警告move_uploaded_file未能打开流权限被拒绝
【发布时间】:2014-10-03 22:24:42
【问题描述】:

这是两个错误

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

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

这是我的 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";
                        }
                }
            }
        }
}

【问题讨论】:

    标签: php file-upload file-io xampp


    【解决方案1】:

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

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

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

    【讨论】:

    • 你救了我的命。关于这个问题的所有答案都指向目录所有者和权限。
    • 这就是答案
    【解决方案2】:

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

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

    【讨论】:

    • 我应该如何将其权限更改为 777
    • 在 ftp 中转到“上传”文件夹,右键单击并选择“文件权限”,将数值更改为 777 并保存。
    • 我使用的是 Windows 8.1,右键单击时没有文件权限选项
    • 我在本地 xammp 服务器上做。
    • 现在脚本运行了,但是上传的文件没有显示在文件夹中......
    【解决方案3】:

    我遇到了同样的问题并找到了解决这个错误的方法,它在move_uploaded_file($file_tmp, $file_destination)里面

    添加以下内容

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

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

    【讨论】:

    • 在 Windows 7 上使用 XAMPP 本地工作时,至少这个 getcwd();function 在我的情况下是有效的☺
    【解决方案4】:

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

    <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>
    

    之后你就不需要重定向页面了;相反,您可以使用 this,在 &lt;/form&gt;

    下方
    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";
            }
    }
    }
    

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

    【讨论】:

    • 现在代码显示没有错误,但上传文件夹中没有文件显示。
    • 您是否检查过该文件夹是否在您保存文件的同一目录中?
    • 是的,我在有 index.php 文件和 upload.php 文件的目录中有上传文件夹
    • 对不起,我忘记设置提交按钮的名称请设置提交按钮的名称“上传”,它肯定可以工作
    • Thnx 哥们,你拯救了我的一天...... :)
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2015-07-21
    • 2014-01-02
    • 2011-12-27
    相关资源
    最近更新 更多