PHP从二进制文件中获取字符串


php get string from binary file

我有一个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中,这个文件包含几个字符串或不?

本质上,不管你读取的是什么类型的数据- 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())计算数据中的每个字节。

这将始终工作;我不知道是否有一种更优雅的方法来强制使用单字节编码。

Getid3是一个PHP包,它声称能够读取XMP元数据。

exif_read_data() PHP函数可以帮助XMP元数据

更多信息在这里:http://php.net/manual/en/function.exif-read-data.php