web-dev-qa-db-ja.com

ユーザーがアップロードするファイルを選択したかどうかをテストするにはどうすればよいですか?

ページで、私は持っています:

_if (!empty($_FILES['logo']['name'])) {
    $dossier     = 'upload/';
    $fichier     = basename($_FILES['logo']['name']);
    $taille_maxi = 100000;
    $taille      = filesize($_FILES['logo']['tmp_name']);
    $extensions  = array('.png', '.jpg', '.jpeg');
    $extension   = strrchr($_FILES['logo']['name'], '.');

    if(!in_array($extension, $extensions)) {
        $erreur = 'ERROR you  must upload the right type';
    }

    if($taille>$taille_maxi) {
         $erreur = 'too heavy';
    }

    if(!empty($erreur)) {
      // ...
    }
}
_

問題は、ユーザーがロゴをアップロードせずに情報を編集しようとすると、エラーが発生することです:「エラーは正しいタイプをアップロードする必要があります」

したがって、ユーザーがアップロードするために入力ボックスに何も入力しなかった場合、これらの条件のテストに入力したくない

テスト済み:if (!empty($_FILES['logo']['name'])およびif (isset($_FILES['logo']['name'])

しかし、両方とも機能しないようです。

何か案は?

編集:多分私はそれほど明確ではなかった、私は彼がロゴをアップロードしたかどうかをテストしたくない、彼がアップロードするファイルを選択したかどうかをテストしたいphpは、適切な形式でアップロードする必要があることを示すエラーを発生させます。

ありがとう。

44
sf_tristanb

これは次の方法で確認できます。

if (empty($_FILES['logo']['name'])) {
    // No file was selected for upload, your (re)action goes here
}

または、アップロードフィールドに空の文字列( "")以外の値がある場合にのみ、アップロード/送信ボタンのみを有効にするjavascript構造を使用して、アップロードのないフォームの送信を回避できます。

78
Oldskool

ファイル処理 に関するセクションがphpドキュメントにあります。 find さまざまなエラーをチェックでき、そのうちの1つは

UPLOAD_ERR_OK
    Value: 0; There is no error, the file uploaded with success.
<...>
UPLOAD_ERR_NO_FILE
    Value: 4; No file was uploaded.

あなたの場合、次のようなコードが必要です

if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... }

または

if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... }

他のさまざまなエラーも同様にチェックする(おそらくユーザーに適切な応答を提供する)ことを検討する必要があります。

34
Jonas

is_uploaded_file($ _ FILES ['logo'] ['tmp_name']) を使用して、ファイルが実際にPOSTによってアップロードされたことを確認する必要があります。

14
baloo

if (file_exists($_FILES['logo']['tmp_name']))をテストし、動作するかどうかを確認します。

または、もっと適切に(Bal​​ooに感謝):if (is_uploaded_file($_FILES['logo']['tmp_name']))

7
Jess