【问题标题】:move_uploaded_file() permission denied, unable to move PHP [duplicate]move_uploaded_file() 权限被拒绝,无法移动 PHP [重复]
【发布时间】:2016-09-02 21:15:58
【问题描述】:

我正在为我的网站创建个人资料图片上传功能,但由于某种原因,move_uploaded_file() 不想运行。

我尝试了多个论坛并测试了所有可能的不同方法,但都没有运气。

这是我的 PHP 和 HTML:

<?php 
    if(isset($_FILES['avatar'])){
        if(empty($_FILES['avatar']['name'])){
            $errors[] = 'Please select an avatar.';
        } else {
            $ext = array('jpg', 'jpeg', 'png');

            $file       = $_FILES['avatar']['name'];
            $fileext    = strtolower(end(explode('.', $file)));
            $filetmp    = $_FILES['avatar']['tmp_name'];

            if(in_array($fileext, $ext)){
                $file = md5(microtime() . $filetmp) . '.' . $fileext;
                $filepth = './data/user_data/img/udid/prof/' . $file;
                move_uploaded_file($filetmp, $filepth);
            } else {
                $errors[] = 'Please select a valid file type. (JPG, JPEG or PNG)';
            }
        }
    }
?>
<form action="" method="post" class="avatar-form-form" enctype="multipart/form-data">
    <input type="file" name="avatar"><br>
    <input type="submit" value="Upload">
</form>

首先,我正在检查所选文件是否具有有效的扩展名,如果是,它将使用微时间散列文件临时名称(出于安全考虑)。然后,我将扩展名连接到末尾,并在其间加上句号,即输出将是md5hash.png

然后我通过将文件变量连接到我的目录末尾来创建文件路径变量。

然后我通过传递$filetmp$filepth 变量(就像你应该做的那样)继续文件上传功能。

但是,当我在我的页面上测试此功能时,我收到以下错误:

Warning: move_uploaded_file(./data/user_data/img/udid/prof/e4d0cde3c9330222ef3ab651fe797bed.jpg):
failed to open stream: Permission denied in /Applications/XAMPP/xamppfiles/htdocs/test/settings.php
on line 40


Warning: move_uploaded_file(): Unable to move '/Applications/XAMPP/xamppfiles/temp/phpkWSGLy'
to './data/user_data/img/udid/prof/e4d0cde3c9330222ef3ab651fe797bed.jpg'
in /Applications/XAMPP/xamppfiles/htdocs/test/settings.php
on line 40

这是我目前的布局:

设置页面(用户上传图片的页面)在根目录下。

我要放置头像的位置在文件夹内(也在根目录中。

我目前正在运行 XAMPP 的 MacBook 上测试所有这些,并确保在我的 php.ini 文件中将 file_uploads 设置为“on”。

感谢所有帮助。不确定我是否做错了,但我几乎可以肯定我没有。

编辑:

所以,事实证明,默认情况下,在 MacBook 上(运行 XAMPP 时),XAMPP/htdocs 中的所有文件都设置为只读,您必须手动将它们设置为“读写”以允许 move_uploaded_file上班。

【问题讨论】:

    标签: php


    【解决方案1】:

    检查您是否为 MacBook 中上传的图像文件夹设置了正确的写入权限。

    【讨论】:

    • 我该怎么做?
    • 您将上传的图像存储在 xampp 文件夹中的什么位置?如果是MacBook右键文件夹查看文件权限。
    • /Applications/XAMPP/xamppfiles/temp/这是临时文件的目录,如果你是这个意思?
    • 是的。以下是 Yosemite OS X 的说明support.apple.com/kb/PH18894?locale=en_US&viewlocale=en_US
    • 查看我的最新编辑 :)
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2015-11-02
    • 2023-03-18
    • 2012-07-07
    • 2015-05-21
    • 2013-06-19
    相关资源
    最近更新 更多