Как протестировать, если пользователь ВЫБРАЛ файл для загрузки?

на странице я имею:

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)) {
      // ...
    }
}

Проблема, если пользователи хотят отредактировать информацию, не загружая ЛОГОТИП, это повышает ошибку: 'ошибка необходимо загрузить правильный тип'

Так, если пользователь ничего не помещал в inputbox для загрузки его, я не хочу вводить в эти условия тест.

я протестировал: if (!empty($_FILES['logo']['name']) и if (isset($_FILES['logo']['name'])

но оба не делают, кажется, работает.

Какие-либо идеи?

редактирование: возможно, я не был так ясен, я не хочу тестировать, если он загрузил логотип, я хочу протестировать, ЕСЛИ он выбрал файл для загрузки, потому что прямо сейчас, если он не выбирает файл для загрузки, php повышает ошибку при сообщении, что он должен загрузить с правильным форматом.

спасибо.

44
задан sf_tristanb 3 October 2013 в 09:21
поделиться

5 ответов

Вы можете проверить это с помощью:

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

Или вы можете использовать конструкцию javascript, которая активирует кнопку загрузки / отправки только тогда, когда поле загрузки имеет значение, отличное от пустой строки (""), чтобы избежать отправки формы с нет загрузки вообще.

78
ответ дан 26 November 2019 в 21:43
поделиться

В документации php есть раздел о работе с файлами. Вы найдете, что вы можете проверить различные ошибки, и одна из них

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
ответ дан 26 November 2019 в 21:43
поделиться

Вам следует использовать is_uploaded_file($_FILES['logo']['tmp_name']), чтобы убедиться, что файл действительно был загружен через POST.

14
ответ дан 26 November 2019 в 21:43
поделиться
if ($_FILES['logo']['error'] === 0)

это единственно правильный путь

-3
ответ дан 26 November 2019 в 21:43
поделиться

Я бы проверил if (file_exists($_FILES['logo']['tmp_name'])) и посмотрел, работает ли это.

Или, более подходящий вариант (спасибо Baloo): if (is_uploaded_file($_FILES['logo']['tmp_name']))

7
ответ дан 26 November 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: