PHP 和 jQuery 文件上传问题

标签 php jquery upload is-uploaded-file

我正在尝试使用 blueimp's jQuery file upload script .

文件被发送到“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;
    }
}

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

可能是什么原因造成的?

编辑:

我从 $file['name'] 更改为 $file['tmp_name'] 并且 is_uploaded_file 被传递。现在脚本在 move_uploaded_file 处失败:

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

最佳答案

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

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

有关更多信息,请阅读 is_uploaded_file() 上的文档:

For proper working, the function is_uploaded_file() needs an argument like $_FILES['userfile']['tmp_name'], - the name of the uploaded file on the client's machine $_FILES['userfile']['name'] does not work

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

您正在尝试移动文件 $file_name,但 $file_name 设置为 $file['name'] 而不是 $file['tmp_name']。请注意,$file['name'] 仅包含与计算机上原始文件名相同的字符串,而 $file['tmp_name'] code> 包含一个字符串,该字符串指向服务器上未临时存储文件名的路径。

关于PHP 和 jQuery 文件上传问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497588/

相关文章:

javascript - 写 "$(' #dialog').modal ('show' );"as plain javascript?

database - 在 Amazon VM 上上传 Postgres 数据库

javascript - 使用填充的下拉列表复制 php 表的新行

php - 使用(DB2php的)Db2PhpEntity类(或类似的)是否可以将DB中的内容获取到类中?

php - astronautic-benchmark.php”病毒脚本

php - 如何调试 move_uploaded_file 的问题?

ios - 从 iOS 应用程序上传文件到服务器

php - 为什么 PHP 使用操作码缓存而 Java 编译为字节码文件?

c# - WCF web服务和getJSON为跨域调用返回空数据

javascript - Angular.js 内存泄漏,我应该什么时候开始担心