1

我正在尝试使用blueimp 的 jQuery 文件上传脚本

文件被发送到“upload.php”:

if (isset($_FILES['file'])) {

    $file = $_FILES['file'];

    // Set variables
    $file_name  = stripslashes($file['name']);

    if (!is_uploaded_file($file['name'])) {
        echo '{"name":"'.$file_name.' is not a uploaded file."}';
        exit;
    }
}

.. 但是脚本在 is_uploaded_file 处失败,尽管通过了 isset($_FILES['file'])。

这可能是什么原因造成的?

编辑:

我从$file['name']to改变了,$file['tmp_name']并且is_uploaded_file通过了。现在脚本在以下位置失败move_uploaded_file

if (move_uploaded_file($file_name, $upload_dir."/".$file_name)) {
    echo "success";
} else {
    echo "failed";
}
4

1 回答 1

3

你应该使用is_uploaded_file($file['tmp_name']). 这是服务器上的实际文件名。

$file['name']是客户端计算机上的文件名,仅用于在文件上传后重命名文件。

有关更多信息,请阅读以下文档is_uploaded_file()

为了正常工作,函数 is_uploaded_file() 需要一个类似 $_FILES['userfile']['tmp_name'] 的参数 - 客户端机器上上传文件的名称 $_FILES['userfile']['name'] 确实不行

此外,您说move_uploaded_file()的效果也不好。正如预期的那样,这是由完全相同的问题引起的:

您正试图移动文件$file_name,但$file_name被设置为$file['name']和不$file['tmp_name']。请理解,$file['name']它只包含一个等于计算机上原始文件名的字符串,而$file['tmp_name']包含一个指向服务器上未临时存储文件名的路径的字符串。

于 2011-03-31T09:17:00.357 回答