Это связано с приоритетом оператора . &&
имеет более высокий приоритет, чем ||
, поэтому ваше выражение приводит к:
$type1 == 'image/gif'
|| ($type1 == 'image/png' && $type2 == 'image/gif')
|| $type2 == 'image/png'
Используйте скобки, чтобы прояснить свое намерение:
($type1 == 'image/gif' || $type1 == 'image/png')
&& ($type2 == 'image/gif' || $type2 == 'image/png')
Кроме того, обратите внимание, что тип mime является данными, предоставленными клиентом, и поэтому им очень легко манипулировать. Вместо этого вам следует проверить правильность заголовка файла GIF / PNG (например, используя библиотеку GD .)