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;
    }
}

.. 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";
}
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 に答える