2009-11-09 1 views
2

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

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

Я принимать любой файл, который getimagesize() принимает (то есть он имеет ширину/высоту), я просто проверить, что он не возвращает FALSE (хотя моя реальная сфера будет JPG | JPEG | PNG | GIF | ВМР | TIF | размолвка). На сервере работает PHP/5.2.6-1 + lenny3. Повторяю, это происходит только с связанным изображением и с некоторыми другими из той же серии, поэтому я более склонен думать, что это связано с тем, что намекает Lizard.

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

+0

И какой код вы используете для проверки/проверки изображений? –

+0

Ваше изображение работает для меня с PHP 5.2.10-2ubuntu6.1: 'Content-type: image/jpeg; размер: 2736x3648' – 2009-11-09 21:08:34

ответ

2

Осмотревшись вокруг, я нашел это insightful answer regarding PHP's upload limits. Я соединил его с тем, что я уже знал, и, наконец, получил это работает, используя следующий код в моей .htaccess (ограничение загрузки до 5 МБ):

php_value upload_max_filesize 5M 
php_value post_max_size 8M 
php_value max_input_time 1800 
LimitRequestBody 0

Нижняя линия: проблема была не в getimagesize() функции РНР, его заключалось в том, что изображения никогда не были загружены на сервер из-за ограничений размера файла в Apache и PHP. Спасибо всем, кто ответил и прокомментировал: было бы гораздо больнее понять это без вашей помощи!

+0

Если массив $ _FILES пуст, есть вероятность, что $ _POST тоже так настроен, что * # &% ing вы 'post_max_size'. Поскольку загрузка отправляется с запросом POST, также входит в этот параметр, поэтому PHP опустошает '$ _POST' и как' $ _POST' пуст, PHP не находит ничего, чтобы помещать внутри '$ _FILES'. –

0

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

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

4

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

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

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

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

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

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

+1

Да, такой же результат здесь с PHP 5.2.3 – pablasso

+0

Я получаю одинаковые результаты, поэтому я обновляю вопрос, спасибо рисовому ключу и пабласло! – lima

0

Вы сказали

$ _FILES кажется пустым

ли вы проверить ошибки загрузки? - Когда загрузка не выполняется, PHP устанавливает элемент error массива файла. См. Документацию PHP File Upload section для различных кодов ошибок.

+0

Благодарим вас за ответ johannes, однако файл даже не попал в скрипт, так как PHP не смог обработать его из-за установленных ограничений загрузки. Как я сказал в своем ответе, изменение этих ограничений заставило его работать нормально. – lima

0

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

Это вы путаетесь между веб-путями и дисковыми путями – JamesHalsall