已上传但未移动。为什么?上传的文件在哪里?

时间:2013-12-26 00:45:17

标签: php html forms

这是我的PHP代码试图上传和移动图像。我正在我的笔记本电脑上运行它。 图像似乎正在加载(我得到“存在并成功上传。”)。但是move_uploaded_file()没有移动文件,我甚至找不到它。 我已更改目录权限...没有正面结果。 我必须拥有哪些目录权限?假设这是问题。

<?php
// upload.php
echo <<<_END
<html>
<head><meta charset="utf-8"><title>PHP Form Upload</title></head>
<body>
<form method='post' action='upload.php' enctype='multipart/form-data'>
Select File: <input type='file' name='filename' size='10' />
<input type='submit' value='Upload' />
</form>
_END;

if ($_FILES)
{
    $name = $_FILES['filename']['name'];
    $temp = $_FILES['filename']['tmp_name'];
    $theerror = $_FILES['filename']['error'];
    if(file_exists($temp)){
    if(is_uploaded_file($temp)) echo "$temp exists and was uploaded successfully.<br />";
        else echo "$temp exists, but not successfully uploaded. <br />";
        echo "Error code $theerror . <br />";        
    }
    else echo "$temp do not exists. <br />";
    $upload_dir = "/uploads";
    if(move_uploaded_file($temp,  $upload_dir . "/" . $name)) 
        echo "Uploaded image '$upload_dir/$name' <br /> <img src='$upload_dir/$name' />";
    else 
        echo "$temp wasn't moved, why? <br />";
}

echo "</body></html>";
?>

2 个答案:

答案 0 :(得分:0)

您可能想要一个相对于web-root的路径,而不是文件系统。

变化:

$upload_dir = "/uploads";

类似于:

$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/uploads";

您还应该注意清理$_FILES['filename']['name']变量,以避免使用../../../../passwd等名称进行上传。

答案 1 :(得分:0)

试试这个

if (isset($_FILES['filename'])) {
    $name = $_FILES['filename']['name'];
    $temp = $_FILES['filename']['tmp_name'];

    $upload_dir = "uploads";

    if (move_uploaded_file($temp, $upload_dir . "/" . $name))
        echo "Uploaded image '$upload_dir/$name' <br /> <img src='$upload_dir/$name' />";
    else
        echo "{$name} wasn't moved, why? <br />";
}