move_uploaded_file返回false,具有正确的路径和权限

时间:2014-01-11 17:28:10

标签: php forms upload

所以我用PHP制作这个文件上传系统。 $ target_path是绝对路径,它将上传到的文件夹的权限设置为777.tmp_name也返回有效的内容,$ _FILES ['file_uploaded']是一个数组。

但是,当我运行以下代码行时。它返回false。

move_uploaded_file($_FILES['file_uploaded']['tmp_name'], $target_path)

我在这里错过了什么吗?

更新[表单HTML代码]

<form action="photos.php" enctype="multipart/form-data" method="POST">

    <input type ="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" />
    <input type ="hidden" name ="upload" value="upload" />
    <input type="file" name="file_upload" />
    <input type="text" name="tags" value="" />

    <input type="radio" name="size" value="_small" checked> Small<br>
    <input type="radio" name="size" value="_medium"> Medium<br>
    <input type="radio" name="size" value="_large"> Large<br>

    <select name="imagelib_id">
    <option value="1">General</option>
    </select>
<input type="submit" name="submit" value="Upload" />

解决方案 我错过了上传文件的文件名。以下行解决了我的问题:

move_uploaded_file($_FILES['file_uploaded']['tmp_name'], $target_path . $_FILES['file_uploaded']['name']);

1 个答案:

答案 0 :(得分:0)

正如PHP manual entry中所述,第二个参数需要是文件名,而不是目录。您可以按照示例代码使用数组的"name"值:

// FIXME: verify filename - see below
$destination = $target_path . $_FILES['file_uploaded']['name'];    
move_uploaded_file($_FILES['file_uploaded']['tmp_name'], $destination);

我强烈建议您按照PHP手册中this comment的提示进行操作,并验证危险字符的文件名和正确的文件扩展名:

// snippet taken from the comment by Yousef Ismaeil Cliprz
function check_file_uploaded_name ($filename) {
    (bool) ((preg_match("`^[-0-9A-Z_\.]+$`i",$filename)) ? true : false);
}