PHP получить строку из двоичного файла - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть изображение JPG с метаданными XMP внутри.
Я хотел бы прочитать эти данные, но как?

$content = file_get_contents($fileName);
var_dump($content);

отображает реальное количество байтов 553700, но

$len = strlen($content);
var_dump($len);

отображает 373821

Итак, я не могу просто сделать

$xmpStart = strpos($content, '<x:xmpmeta');

, потому что получаю неправильное смещение.Итак, вопрос в том, как найти и прочитать строку из двоичного файла в PHP?(У меня есть опция mb_string ON в php.ini)

UPD1:

У меня есть некоторый двоичный файл.Как я могу проверить в PHP, этот файл содержит несколько строк или нет?

Ответы [ 3 ]

1 голос
/ 30 сентября 2011

По сути, не имеет значения, какие данные вы читаете - strlen() и др. должен всегда работать.

Я думаю, что здесь происходит то, что на вашем сервере strlen() внутренне перекрывается mb_strlen(), а внутренняя кодировка символов установлена ​​в UTF-8.

UTF-8 является многобайтовой кодировкой, поэтому некоторые символы в вашем (дико произвольном) байтовом потоке интерпретируются как многобайтовые символы - в результате сокращается длина 373821 вместо 553700.

Я не могу придумать лучшего обходного пути, чем всегда явное указание однобайтовой кодировки, такой как iso-8859-1:

 $pos = strpos($content, '<x:xmpmeta', 0, 'iso-8859-1');

это заставляет strpos() (точнее, mb_strpos()) считать каждый байт данных.

Это всегда будет работать; Я не знаю, существует ли более элегантный способ форсировать использование однобайтовой кодировки.

1 голос
/ 30 сентября 2011

Getid3 - это пакет PHP, который утверждает, что может читать метаданные XMP.

0 голосов
/ 30 сентября 2011

Функция PHP exif_read_data () может помочь метаданным XMP

Больше информации здесь: http://php.net/manual/en/function.exif-read-data.php

...