文件未上传到目录

时间:2014-04-24 18:51:50

标签: php file-upload

我正在使用表单将图片上传到我的 img 文件夹。照片数组的错误代码是0,这意味着没有任何错误,文件上传成功,但它不是......这是我的代码:

这是HTML:

<form enctype="multipart/form-data" method="post" action="upload.php">
    <label>Thumbnail:</label>
    <input name="thumbnail" type="file">
    <input type="submit">
</form>

这是 upload.php 文件:

<?php
$uploaddir = 'img/';
$uploadfile = $uploaddir . basename($_FILES['thumbnail']['name']);
echo $uploadfile;

echo '<pre>';
if (move_uploaded_file($_FILES['thumbnail']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>

我放了一个print_r($_FILES),因为我想看看数组...这是我上传图片后得到的结果:

Array
(
    [thumbnail] => Array
        (
            [name] => Stack.png
            [type] => image/png
            [tmp_name] => /tmp/phpEo6Gu5
            [error] => 0
            [size] => 482278
        )

)

而且,如果你看here,你会发现错误0对应于:

  

没有错误,文件上传成功。

但我的文件夹中没有任何文件......这是文件夹的树视图:

|test
|||img (folder)
|||||somephoto.png
|||||otherphoto.png
|||upload.php

但那里没有任何照片,因为我无法上传它们......我做错了什么?

谢谢!

编辑:我知道这里存在很多安全风险,但我只是在我的本地机器上进行测试,如果有问题,我将添加所有与安全相关的代码。

2 个答案:

答案 0 :(得分:3)

文件上传到临时文件夹,print_r($_FILES)显示,实际文件为/tmp/phpEo6Gu5

您必须使用move_uploaded_file()将此文件移至其最终目的地。例如:

move_uploaded_file($_FILE['thumbnail']['tmp_name'], 'img/final_name.png');

不要相信$_FILE['thumbnail']['name']$_FILE['thumbnail']['type']是安全有效的,因为这来自客户端,可能会被恶意用户扭曲以利用您网站中的安全问题。

此外,请确保您运行的脚本的用户帐户具有写入最终目录的权限。解决问题的简单方法是在shell中运行chmod 777 img(为文件夹img中的每个人提供完整的读取+写入+执行权限。)

答案 1 :(得分:0)

您是否尝试将文件从Temporary目录移动到当前目录?

PHP上传到服务器上的tmp文件夹。您需要使用move_uploaded_file函数将其传递到另一个目录:

move_uploaded_file($_FILE['thumbnail']['tmp_name'], 'img/image.png');

Move Uploaded File