GetImageSize и swf

зверек

Новичок
GetImageSize и swf

PHP:
$x=GetImageSize('flash.swf');
echo $x[2];
Вот такой код не срабатывает для swf-файлов. Не выводится $x. И ошибок никаких не выдается.
Для gif, jpg все работает.
Причем эта байда только на сервере, на локалке все работает хорошо.
Из-за чего такое может быть?

И еще. В локалке, где работает, флажок ($x[2]) для swf файла равен 13. Хотя в мане сказано что 4 должен быть. Не понятно.
 

зверек

Новичок
спасибо большое!

-~{}~ 19.10.06 14:05:

А как флажок объяснить? Который должен быть 4, а выводится как 13?
 

зверек

Новичок
boombick
еще раз спасибо за отзывчивость :)

-~{}~ 24.10.06 16:33:

Мне мой хостер в ответ на жалобы о неработающей с swf getimagesize ответил следующее:
-------------------------------
эта проблема, с тем, что GetImageSize не работает с SWF при модульном zlib официально признана багом разработчиками PHP. она не решена до сих пор.
для того, чтобы заработала ваша функция, недостаточно будет поставить новейшую версию PHP - нужно перекомпилировать PHP в угоду этому багу. к сожалению, нет никакой гарантии, что после пересборки не откажется работать что-нибудь еще
-------------------------------------

Скажите, это нормальный ответ для хостера?
Надо смириться и придумывать какие-то иные способы решения задачи, либо надо как-то бороться и требовать работоспособности функции?

-~{}~ 24.10.06 17:13:

И может тогда кто посоветует как программно узнать параметры swf-файла? интересуют widht и height. Может существуют какие-то решения? Какая-то альтернатива getimagesize?
 

SiMM

Новичок
PHP:
function get_swf_size($filename) { // (C) by SiMM, 01.12.2005
  if (!$fp = fopen($filename,'rb')) return false;
  $swf = unpack('A3Signature/CVersion/VFileLength',fread($fp,8));
  $tmp = fread($fp,21); // 1+4*4+2*2
  switch ($swf['Signature']){
    case 'CWS':if (false === $tmp = gzuncompress($tmp.fread($fp,filesize($filename)-29))) { // -8-1-4*4-2*2
                  $swf = false;
                  break;
               }
    case 'FWS':$Nbits = ord($tmp{0})>>3;
               $buf = '';
               $i = ($Nbits+3)>>1;
               for ($j = 0; $i--; $j++)
                 $buf .= sprintf('%08b',ord($tmp{$j}));
               foreach (array('Xmin','Xmax','Ymin','Ymax') as $k=>$v)
                 $swf[$v] = bindec(substr($buf,5+$k*$Nbits,$Nbits))/20;
               $swf += unpack('vFrameRate/vFrameCount',substr($tmp,$j,4));
               $swf['FrameRate'] /= 256;
               $swf['Signature'] = strrev($swf['Signature']);
               break;
    default:   $swf = false;
  }
  fclose($fp);
  return $swf;
}
 
Сверху