Warning getimagesize и exif_imagetype

MadGreen

meninweb
Warning getimagesize и exif_imagetype

при проверке файла функцией exif_imagetype и использовании getImageSize выдается варнинг:
"Тип ошибки - Warning
Описание ошибки - getimagesize(): Read error!"

происходит только если размер файла меньше 12b.
Причем варнинг не отключается даже заглушкой (@)...

при этом и та и другая функции выполняют свои задачи

-~{}~ 30.11.06 21:31:

в комментах на php.net упомянуто об ошибке, но нет путей решения... неужели придется анализировать размер файла?
 

FreeSpace

Чукча-читатель
Пример файла можно посмотреть?
Он точно существует по заданому пути, доступен для чтения, не битый и поддерживаемого типа?
 

MadGreen

meninweb
файл может быть вообще пустым - только что созданным. exif_imagetype для того и нужна, чтобы определить картинка это или нет. Он точно существует и доступен для чтения. Тип ошибки иначе был бы совершенно другим.

-~{}~ 01.12.06 23:37:

не очень много инфы по этому поводу нашел... вопрос такой: это ошибка определенной версии php или в принципе эти функции с маленькими файлами без варнинга не работают?

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

SiMM

Новичок
> файл может быть вообще пустым
Не воспроизводится.
PHP:
$filename = tempnam(dirname(__FILE__),'');
fclose(fopen($filename,'w'));
print_r(@getimagesize($filename));
unlink($filename);
никаких сообщений об ошибках не видно.
PS: под рукой был PHP 4.4.2
 

MadGreen

meninweb
PHP:
function myErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
	{
    $errortype = array (
               			E_ERROR              => 'Error',
               			E_WARNING            => 'Warning',
               			E_PARSE              => 'Parsing Error',
               			E_NOTICE            => 'Notice',
               			E_CORE_ERROR        => 'Core Error',
               			E_CORE_WARNING      => 'Core Warning',
               			E_COMPILE_ERROR      => 'Compile Error',
               			E_COMPILE_WARNING    => 'Compile Warning',
               			E_USER_ERROR        => 'User Error',
               			E_USER_WARNING      => 'User Warning',
               			E_USER_NOTICE        => 'User Notice'
               			);
    $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

    $err = '';
    $err .= "\tТип ошибки - " . $errortype[$errno] . "\n";
    $err .= "\tОписание ошибки - " . $errmsg . "\n";
    $err .= "\tФайл скрипта - " . $filename . "\n";
    $err .= "\tСтрока ошибки - " . $linenum ."\n";

    	echo '<pre>'.$err.'</pre>';
     }
  set_error_handler('myErrorHandler');

$filename = tempnam(dirname(__FILE__),''); 
fclose(fopen($filename,'w')); 
print_r(@getimagesize($filename)); 
unlink($filename);
тогда воспроизводится...
php 4.3.10

обработчик ошибок отладочный, естественно на экран ничего не выводится в реальном скрипте, но лог забивать этим предупреждением очень не хотелось бы...

-~{}~ 02.12.06 16:29:

видимо решения нет, выход нашел в использовании filesize
 

Андрейка

Senior pomidor developer
MadGreen
а остальные варнинги для своего обработчика ошибок отключаются заглушкой?
 

MadGreen

meninweb
нет, пост с заглушкой я писал не для этого обработчика.

-~{}~ 02.12.06 17:16:

вопрос не в том как его выключить, а почему он выдается... ведь функция exif_imagetype выдает false - то есть файл не изображение, зачем еще выводить предупреждение относящееся к принципу работы самой функции...?
 

SiMM

Новичок
> тогда воспроизводится...
Вот интересно - как об этом должны были догадаться исходя из первого поста? И ведь опять половину приведённого кода абсолютно не имело смысл постить - к проблеме она отношения не имеет.
PHP:
function myErrorHandler($errno, $errmsg, $filename, $linenum, $vars) {
    if ( !($errno & ini_get('error_reporting')) ) return;
    # ...
}
> зачем еще выводить предупреждение относящееся к принципу работы самой функции...?
А вот с этим - к разработчикам. Видимо, решили показать причину более информативно.
 
Сверху