PHP сообщество

любители кода :)

Чтение и обработка бинарного файла

Bloged in Без рубрики от admin Пятница Август 24, 2007 at about 8:35 дп

Мне нужно прочитать содержимое png-файла и вывести его в составе бинарного (не текстового) ответа.

Вариант 1:

$data_len = 0;
 // Общая длина данных

$size = filesize("image.png");
$data{ $data_len++ } = chr( ($size >> 8) & 0xFF );
$data{ $data_len++ } = chr( $size & 0xFF );

if( $handle = fopen($imgFname,"rb") ) {
  $img = fread($handle, $size);
  fclose($handle);

// Если теперь сделать echo $img, то выходной поток выведутся
// именно те байты, которые нужны. Но мне необходимо сначала
// сформировать ответ в массиве, обработать его, а затем уже
// вывести в выходной поток в качестве ответа клиентскому
// приложению. Поэтому я пытаюсь скопировать байты из $img в
// массив $data, в котором я формирую ответ.

  for ($i=0; $i<$size; $i++) {
    $data{ $data_len++ } = $img{ $i };
  }
}

// Отправка подготовленного ответа клиентской программе
for ($i=0; $i<$data_len; $i++) {
  echo $data{$i};
}
// Вместо байтов png-картинки выводятся в основном 0x00,
// изредка перемежаемые байтами 0x07 и 0x09.

Вариант 2 (те же ошибки):

$data_len = 0;  // Общая длина данных

$size = filesize("image.png");
$data{ $data_len++ } = chr( ($size >> 8) & 0xFF );
$data{ $data_len++ } = chr( $size & 0xFF );

$img = file ($imgFname);
for ($i=0; $i<$size; $i++) {
  $data{ $data_len++ } = $img{ $i };
}

// Отправка подготовленного ответа клиентской программе
for ($i=0; $i<$data_len; $i++) {
  echo $data{$i};
}

Как, считав в переменную содержимое бинарного файла с помощью fread() или file(), получить доступ к считанным байтам файла? Вопрос наверняка элементарный, но за 2 дня поиска в инете и чтения документации (Котеров и другие), мне так и не удалось найти правильный вариант решения.

Комментариев нет

Комментариев нет.

Извините, комментирование на данный момент закрыто.

шкафы купе подбор ; самый дешевый хостинг ; Потолочная панель Dune Microlook Supreme кв м