1

Web サイトの 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>';
    }
}
}
4

1 に答える 1

0

たくさんのことがうまくいかないかもしれません。move_uploaded_file は非常に厳選されており、文書化されているように動作しないことがあります。私は一度問題を抱えていましたが、正直なところ、適切に実装されていれば、ほとんどの場合、同じ結果をコピーアーカイブします。

  • 単独のファイル名が問題を引き起こしているという報告があります。$destination の 249 文字が限界のようです。
  • upload_max_filesize だけでなく、post_max_size も設定する必要があります
  • utf-8 名が問題になる可能性があります
  • アップロードされたファイルにアクセスできないように見える問題がある場合は、代わりに copy() を使用してみてください。アップロード直後にファイルを見つけられないという報告があります。move_uploaded_file はコピーのパスを制限するだけで、ユーザー変数を入力しなくても結果は同じです。
于 2013-01-29T14:34:28.633 に答える