如何使用move_uploaded_file调试问​​题?

时间:2011-03-08 01:38:42

标签: php upload

我有一个像

这样的表格
<form action="send.php" method="post" enctype="multipart/form-data">
    <div>
        <label for="subject">Subject</label>
        <input type="text" name="subject" />
    </div>
    <div>
        <label for="image">Image</label>
        <input type="file" name="image" />
    </div>
    <input type="submit" value="Send" />
</form>

PHP喜欢

echo '<pre>'; print_r($_FILES); echo '</pre>';
if (move_uploaded_file($_FILES['image']['tmp_name'], 'images/' . $_FILES['image']['name'])) {
    echo 'ok';
} else {
    echo 'error!';
};

我一直得到error print_r看起来像

Array
(
    [image] => Array
        (
            [name] => Untitled-1.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/phpprWdjN
            [error] => 0
            [size] => 61768
        )

)

4 个答案:

答案 0 :(得分:4)

激活error reporting,然后您应该会看到move_uploaded_file抛出的错误,告诉您哪里出错了。

答案 1 :(得分:4)

您的$ _FILES外观文件,错误= 0表示上传成功完成。很可能是权限错误。您可以尝试执行以下操作:

if (!is_writeable('images/' . $_FILES['image']['name'])) {
   die("Cannot write to destination file");
}

但是,请注意您使用的是用户提供的文件名,因此如果有人上传“pwn_my_server.php”,您的脚本会将其写入images目录,然后他们只需访问yoursite.com/images/pwn_my_server.php并控制您的网站。

一般来说,信任$ _FILES数组中的任何内容绝对不是一个好主意,或者直接使用它,因为它的全部内容都在远程用户控制之下。服务器创建的唯一内容是错误代码和tmp_name。其余的可能是恶意的。

答案 2 :(得分:0)

也许问题是'image /'文件夹,你可以在这里设置绝对路径并确保路径是可写的,然后试一试。

答案 3 :(得分:0)

使用以下代码: 1.创建名为'uploads'的目录 2.使用.php扩展名保存文件

现在运行代码。

<?php
if (!empty($_FILES))
{
    // PATH TO THE DIRECTORY WHERE FILES UPLOADS
    $file_src   =   'uploads/'.$_FILES['image']['name'];
    // FUNCTION TO UPLOAD THE FILE
    if(move_uploaded_file($_FILES['image']['tmp_name'], $file_src)):
    // SHOW THE SUCCESS MESSAGE AFTER THE MOVE - NO VISIBLE CHANGE
    echo 'Your file have been uploaded sucessfuly';
    else:
    // SHOW ERROR MESSAGE
    echo 'Error';
    endif;

}
?>
<form action="" method="post" enctype="multipart/form-data">
    <div>
        <label for="subject">Subject</label>
        <input type="text" name="subject" />
    </div>
    <div>
        <label for="image">Image</label>
        <input type="file" name="image" />
    </div>
    <input type="submit" value="Send" name='submit' />
</form>

:)