我有一个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