Если / еще не работает должным образом - PullRequest
0 голосов
/ 18 марта 2010

У меня есть функция проверки, которую я использую внутри codeigniter.

function valid_image() {
    if ( ($_FILES["file"]["type"] != "image/jpeg") || ($_FILES["file"]["type"] != "image/gif")  ) {
    $this->form_validation->set_message('valid_image', 'Wrong file type..');

    return false;
} else {
    return true;
}

С только частью "image / jpeg" в операторе if все работает нормально. Если я пытаюсь загрузить что-либо, кроме файла JPG, это не удается. Если я запустил приведенный выше код, произойдет сбой как с JPG, так и с GIF-файлом.

И прежде чем кто-то скажет «почему бы не использовать класс загрузки», я не могу. Я сохраняю свои фотографии прямо в MongoDB, поэтому класс загрузки не очень помогает.

Ответы [ 9 ]

5 голосов
/ 18 марта 2010

Вы хотите, а не ИЛИ

Если файл jpg, то это не gif, и вы получите сообщение.
Если файл gif, то это не jpg, и вы по-прежнему получаете сообщение.

У вас "файл не в формате jpg ИЛИ файл не в формате gif". Заменить || с &&, и вы получите сообщение только тогда, когда «файл не является jpg и файл не является gif».

1 голос
/ 18 марта 2010

используйте && вместо ||

1 голос
/ 18 марта 2010

Это на самом деле не отвечает на ваш вопрос, но ...

Параметр $_FILE[blah]["type"] устанавливается веб-браузером и, как таковой, является данными пользователя, которым нельзя доверять.

Вместо этого вы можете использовать exif_imagetype($_FILES["file"]["tmp_name"]) для определения истинного типа изображения.

function valid_image() {
    $type = exif_imagetype($_FILES["file"]["tmp_name"]);
    if (($type != IMAGETYPE_GIF) && ($type != IMAGETYPE_JPEG)) {
        $this->form_validation->set_message('valid_image', 'Wrong file type..');
        return false;
    } else {
        return true;
    }
}

Редактировать: Если расширение exif не установлено, вы также можете сделать это:

$sizes = getimagesize($_FILES["file"]["tmp_name"]);

$sizes[2] будет содержать значение, соответствующее одной из IMAGETYPE констант .

function valid_image() {
    $sizes = getimagesize($_FILES["file"]["tmp_name"]);
    if (($sizes[2] != IMAGETYPE_GIF) && ($sizes[2] != IMAGETYPE_JPEG)) {
        $this->form_validation->set_message('valid_image', 'Wrong file type..');
        return false;
    } else {
        return true;
    }
}
1 голос
/ 18 марта 2010

Вам нужно И вместо ИЛИ

 if (($_FILES["file"]["type"] != "image/jpeg") && 
     ($_FILES["file"]["type"] != "image/gif"))
1 голос
/ 18 марта 2010

ваше состояние должно быть

if ( ( $_FILES["file"]["type"] != "image/jpeg") 
       && ($_FILES["file"]["type"] != "image/gif")  ) {...}

если это не jpeg и это не gif - это не верно

1 голос
/ 18 марта 2010

Ваше утверждение if неверно. Вы должны использовать «&&» вместо «||» (Закон Деморгана).

0 голосов
/ 18 марта 2010

Ну, если вы попробуете это утверждение с помощью .gif, он скажет, что это неправильный файл, потому что он проверяет первый 'или' первый. Кроме того, если вы попытаетесь запустить файл .jpg, он пропустит первый или потерпит неудачу со вторым, поэтому он все равно скажет, что он недействителен. Попробуйте сделать '&&' вместо '||', чтобы он проверял и проверял, что он один из двух каждый раз.

0 голосов
/ 18 марта 2010

вы хотите использовать и, а не или.В приведенном выше коде jpg не работает, потому что это не gif, а gif не работает, потому что это не jpg.

function valid_image() {
if ( ($_FILES["file"]["type"] != "image/jpeg") && ($_FILES["file"]["type"] != "image/gif")  ) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');

return false;
} else {
return true;
}
0 голосов
/ 18 марта 2010

Заявление в том виде, в котором оно у вас есть, гарантирует, что это не jpeg и не gif. Проблема в том, что если это jpeg, он все еще не gif, поэтому он возвращает false. Фактически, он всегда возвращает false, поскольку что-то не может быть двумя вещами одновременно.

Изменить || &&, если это ваше намерение и оно должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...