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

时间:2011-09-30 08:02:43

标签: php file binaryfiles strpos

我的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,这个文件是否包含几个字符串?

3 个答案:

答案 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