PHP move_uploaded_file函数非常挑剔

时间:2013-01-29 14:17:29

标签: php file-upload file-io

我在网站上遇到了move_uploaded_file函数问题。

整个想法是,在表单中,我插入项目的标题,描述和屏幕截图。一切都很好。它将标题和描述与id和创建日期保存在mysql数据库中,并将文件移动到服务器上的文件夹中。

然而问题是某些文件被转移到文件夹而有些文件没有。问题似乎出现在文件中,但我似乎无法弄清问题是什么。

不是文件大小;我有5 / 6MB的文件放在文件夹中没有任何问题,我有大约3MB的文件,没有。扩展也不是问题,它们都是.jpg。

.jpg文件是否应满足其他要求才能上传?

我99%肯定问题不在我的代码中,因为它上传了一些没有问题的文件,但无论如何这里都是我的代码。

HTML部分:

<form action="" method="post" enctype="multipart/form-data">
    <h2>Title*</h2>
    <input type="text" id="title" name="title">
    <h2>Description*</h2>
    <textarea id="descr" name="descr" cols="40" rows="4"></textarea>
    <h2>Add file*</h2>
    <input type="file" id="file" name="file">
    <h2><input type="submit" id="submit" name="submit" value="Uploaden"></h2>
    <p id="requirements">Fields marked with * are required.</p>
</form>

这是PHP部分:

if (isset($_POST['submit'])) {

$destination = "../uploadedfiles/" . basename($_FILES['file']['name']);

if (move_uploaded_file($_FILES['file']['tmp_name'], $destination)) {
    echo '<p id="succes">File has been uploaded</p>';
} else {
    echo '<p id="error">File has not been uploaded</p>';
}

$title = $_POST['title'];
$descr = $_POST['descr'];
$name = ($_FILES['file']['name']);

include "../connect/connect.php";

if ($title == "" || $descr == "") {
    echo '<p id="error">Fill in the required fields</p>';
} else {

    $query = "INSERT INTO file(title, descr, name, created) VALUES ('{$title}', '{$descr}', '{$name}', NOW())";

    $upload = $connect->query($query);

    if ($upload) {
        echo '<p id="succes">Info is stored in database</p>';
    } else {
        echo '<p id=error>Failed to store info in database</p>';
    }
}
}

1 个答案:

答案 0 :(得分:0)

一堆东西可能会出错。 move_uploaded_file是非常挑剔的,有时不表现如何记录。我曾经遇到过一次问题而且老实说,如果正确实施,大多数情况下复制存档的结果相同。

  • 有报道说单个文件名会造成麻烦。 $ destination上的249个字符似乎是限制。
  • 不仅必须设置upload_max_filesize,还要设置post_max_size
  • utf-8名称可能有问题
  • 如果您遇到上传文件似乎无法访问的问题,请尝试使用copy()。有报道说人们上传后无法找到文件,move_uploaded_file只是限制路径复制,如果你没有输入任何用户var,结果是一样的。