Чтение и обработка бинарного файла
Мне нужно прочитать содержимое png-файла и вывести его в составе бинарного (не текстового) ответа.
Вариант 1:
$data_len = 0;
// Общая длина данных
$size = filesize("image.png");
$data{ $data_len++ } = chr( ($size >>
& 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 >>
& 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 дня поиска в инете и чтения документации (Котеров и другие), мне так и не удалось найти правильный вариант решения.
Комментариев нет
Комментариев нет.
Извините, комментирование на данный момент закрыто.