getimagesize () возвращает false на некоторых изображениях - PullRequest
3 голосов
/ 10 ноября 2009

Я запускаю getimagesize(), чтобы определить, является ли загруженный файл допустимым изображением, а также типом MIME. Пользователь моего веб-приложения сообщил, что некоторые из его изображений, после загрузки, получают ошибку «неверный тип файла». Поэтому я попросил его прислать мне некоторые из них для проверки.

Сама строка ошибки не имеет смысла, так как это просто общий текст, написанный мной при сбое функций (возвращает FALSE). Я попытался увеличить ограничение памяти PHP безуспешно. Кроме того, журналы не показывают ничего необычного. Есть ли проблема с файлами или это что-то еще? Есть ли лучший способ сделать эту операцию?

Я принимаю любой файл, который принимает getimagesize() (имеется в виду, что он имеет ширину / высоту), я просто проверяю, что он не возвращает FALSE (хотя моя реальная область действия будет jpg | jpeg | png | GIF | BMP | TIF | размолвка). Сервер работает под управлением PHP / 5.2.6-1 + lenny3. Я повторяю, это происходит только со связанным изображением и некоторыми другими из той же серии, поэтому я склонен думать, что это связано с тем, на что намекает Ящерица.

$_FILES кажется пустым до перехода к getimagesize($_FILES['Filedata']['tmp_name']), поэтому файл никогда не проверяется. Я должен выяснить, почему эти файлы не передаются, как остальные (возможно, слишком большой для PHP? Есть идеи?).

Ответы [ 5 ]

4 голосов
/ 10 ноября 2009

Пока вы не дадите больше информации, я не могу особо помочь. Следующий код:

<code>$file = "http://img27.imageshack.us/img27/9159/dsc00799e.jpg";
$info = getimagesize($file);

echo "<pre>" . print_r($info,true) . "
";

(где $ file равно расположению изображения, указанного в вопросе), выводит:

Array
(
    [0] => 2736
    [1] => 3648
    [2] => 2
    [3] => width="2736" height="3648"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)

Кажется, все в порядке. Я предполагаю ошибку где-то еще в ваших чеках?

2 голосов
/ 10 ноября 2009

После осмотра 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. Спасибо всем, кто ответил и прокомментировал, было бы намного более болезненно понять это без вашей помощи!

0 голосов
/ 19 июля 2015

Я столкнулся с той же проблемой, я использовал ту же ссылку на файл, что и в теге 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!

Я надеюсь, что это работает и для других.

0 голосов
/ 10 ноября 2009

Вы сказали

$ _ ФАЙЛЫ кажутся пустыми

Проверяли ли вы на ошибку загрузки? - При неудачной загрузке PHP устанавливает элемент error массива файла. См. Раздел документации о загрузке файла в PHP для различных возможных кодов ошибок.

0 голосов
/ 10 ноября 2009

Я не уверен, что это тот ответ, который вы ищете, но я знаю, что у меня есть проблемы с функциями php и изображениями, размер которых превышает 3000 пикселей в любом измерении.

Надеюсь, это поможет!

...