getimagesize() возвращает false на некоторых изображениях
Я бегу getimagesize()
определить, является ли загруженный файл допустимым изображением, а также типом MIME. Пользователь моего веб-приложения сообщил, что после загрузки некоторых из его изображений произошла ошибка "неверный тип файла". Поэтому я попросил его прислать мне некоторые из них для проверки.
Сама строка ошибки не имеет смысла, так как это просто общий текст, написанный мною при сбое функции (возвращает FALSE
). Я попытался увеличить предел памяти PHP безуспешно. Кроме того, журналы не показывают ничего необычного. Есть ли проблема с файлами или это что-то еще? Есть ли лучший способ сделать эту операцию?
Я принимаю любой файл, который getimagesize()
принимает (имеется в виду ширина / высота), я просто проверяю, что он не возвращает FALSE
(хотя моя реальная область была бы jpg|jpeg|png|gif|bmp|tif|tiff). Сервер работает под управлением PHP/5.2.6-1+lenny3. Я повторяю, это происходит только со связанным изображением и некоторыми другими из той же серии, поэтому я склонен думать, что это связано с тем, на что намекает Ящерица.
$_FILES
кажется пустым, прежде чем getimagesize($_FILES['Filedata']['tmp_name'])
поэтому файл никогда не проверяется. Я должен выяснить, почему эти файлы не передаются, как остальные (слишком большой для PHP, возможно, какие-либо идеи).
5 ответов
После осмотра SO я нашел этот проницательный ответ относительно ограничений загрузки PHP. Я соединил это с тем, что я уже знал, и, наконец, заработал, используя следующий код в моем.htaccess (ограничение загрузки до 5 МБ):
php_value upload_max_filesize 5M php_value post_max_size 8M php_value max_input_time 1800 LimitRequestBody 0
Итог: проблема не в PHP getimagesize()
Функция состояла в том, что изображения никогда не загружались на сервер из-за ограничений размера файлов в Apache и PHP. Спасибо всем, кто ответил и прокомментировал, было бы намного более болезненно понять это без вашей помощи!
Пока вы не дадите больше информации, я не могу особо помочь. Следующий код:
$file = "http://img27.imageshack.us/img27/9159/dsc00799e.jpg";
$info = getimagesize($file);
echo "<pre>" . print_r($info,true) . "</pre>";
(Где $file равно расположению изображения, указанного в вопросе), выводит:
Array
(
[0] => 2736
[1] => 3648
[2] => 2
[3] => width="2736" height="3648"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
Это кажется нормальным. Я предполагаю ошибку где-то еще в ваших проверках?
Вы сказали
$_FILES кажется пустым
Вы проверяли на ошибку загрузки? - Если загрузка не удалась, PHP устанавливает error
элемент массива файла. См. Раздел " Загрузка файлов" в документации PHP, где описаны различные коды ошибок.
Я столкнулся с той же проблемой, я использовал ту же ссылку на файл, что и в теге img:
$filename = "/images/logo.jpg";
$size = getimagesize($filename); // <== this fails
<img src="<?echo $filename ?>" /> // <== this works
Когда я удалил первую косую черту в имени файла и попытался снова, это сработало:
$size = getimagesize("/images/logo.jpg"); // <== this fails
$size = getimagesize("images/logo.jpg"); // <== this works!
Я надеюсь, что это работает и для других.
Я не уверен, что это тот ответ, который вы ищете, но я знаю, что у меня есть проблемы с функциями php и изображениями, размер которых превышает 3000 пикселей в любом измерении.
Надеюсь, это поможет!