0

このコードはありますが、このコードではどのような種類のビデオ ファイルもアップロードできません。これは常に「アップロードするファイルを選択してください」と表示されます。

以下に示すファイルをアップロードするためのコード:

$fileElementName = 'ufile';
if (!empty($_FILES[$fileElementName]['error'])) {
    switch ($_FILES[$fileElementName]['error']) {
            case '1':
                $error = 'You Are Not Allowed To Upload File Of This Size';
                break;
            case '2':
                $error = 'You Can Not Not Upload File Of This Size';
                break;
            case '3':
                $error = 'The uploaded file was only partially uploaded';
                break;
            case '4':
                $error = 'Not Able To Upload';
                break;

            case '6':
                $error = 'Server Error Please Try Again Later';
                break;
            case '7':
                $error = 'Failed to write file to disk';
                break;
            case '8':
                $error = 'File upload stopped by extension';
                break;
            case '999':
            default:
                $error = 'Error Found But Did Not Found What Was Problem';
        }
} elseif (empty($_FILES['ufile']['tmp_name']) || $_FILES['ufile']['tmp_name'] == 'none') {
    $error = 'Please Select File To Upload';
    $success = FALSE;
} else {
    $file = $_FILES['ufile']['name'];
    move_uploaded_file($_FILES["ufile"]["tmp_name"], $path);
}

echo json_encode($arr);

上記のコードで $path は upload/ です。これは正しいです。動画を除くすべてのファイルで機能します。

このコードは常に「アップロードするファイルを選択してください」と表示されます

4

3 に答える 3

1

エラー処理が壊れています。アップロードでは、アップロードが成功するとエラー コード 0 (UPLOAD_ERR_OK定数) が返されます。あなたはやっている

if (!empty(...))

empty() はゼロ値に対してブール値 TRUE と評価されるため、基本的には「エラーがなければ、エラーがあったように振る舞う」と言っています。

あなたのコードは本当にあるべきです:

if ($_FILES['ufile']['error'] !== UPLOAD_ERR_OK) {
    ... error handling switch() here ...
    die();
}

その後の empty() チェックtmp_nameも無意味です。ファイルがアップロードされていない場合は、UPLOAD_ERR_NO_FILEとにかくエラー コード 4 ( ) が表示されます。

次に、move_uploaded_file() については、アップロードされたファイル名を に取り出します$fileが、ファイルを に移動します$path。これは、コードのどこにも設定されていません。警告の言葉として、ファイルシステム操作でユーザー提供のファイル名を直接使用しないでください。そのフィールドにパス情報を埋め込むのは簡単なことです。適切なサニタイズ/セキュリティ対策を講じないと、悪意のあるユーザーがサーバー上の任意のファイルに落書きできるようになります。

于 2012-07-13T17:21:36.877 に答える
0

フォームの enctype を定義しましたか?

フォームタグに enctype を次のように挿入します: enctype="multipart/form-data"

于 2012-07-13T16:50:37.280 に答える
0

パーミッションを確認し、$path が存在する場合など

編集:多分同じ問題https://stackoverflow.com/a/3587158/1519436

于 2012-07-13T16:48:15.877 に答える