我的JPG图像里面有XMP元数据 我想阅读这些数据,但是怎么样?
$content = file_get_contents($fileName);
var_dump($content);
显示实际字节数553700
但
$len = strlen($content);
var_dump($len);
显示373821
所以,我做不了简单
$xmpStart = strpos($content, '<x:xmpmeta');
因为我错了。
那么,问题是,如何在PHP中从二进制文件中查找和读取字符串?
(我在php.ini中有mb_string选项ON
UPD1:
我有一些二进制文件。如何签入PHP,这个文件是否包含几个字符串?
答案 0 :(得分:1)
Getid3是一个声称能够读取XMP元数据的PHP包。
答案 1 :(得分:1)
基本上,您正在阅读的数据类型无关紧要 - strlen()
等。应该永远有效。
我认为这里发生的是,在您的服务器上,strlen()
在内部被mb_strlen()
覆盖,内部字符编码设置为UTF-8。
UTF-8是一种多字节编码,因此您(非常随意的)字节流中的某些字符被解释为多字节字符 - 导致缩短373821
而不是{{1} }}
除了总是明确指定像553700
这样的单字节编码之外,我想不出更好的解决方法:
iso-8859-1
这会强制 $pos = strpos($content, '<x:xmpmeta', 0, 'iso-8859-1');
(或更确切地说,strpos()
)计算数据中的每个字节。
这将永远有效;我不知道是否有一种更优雅的方式来强制使用单字节编码。
答案 2 :(得分:0)
exif_read_data()PHP函数可以帮助XMP元数据
此处有更多信息:http://php.net/manual/en/function.exif-read-data.php