Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php从二进制文件获取字符串_Php_File_Binaryfiles_Strpos - Fatal编程技术网

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

php从二进制文件获取字符串,php,file,binaryfiles,strpos,Php,File,Binaryfiles,Strpos,我有一张JPG图片,里面有XMP元数据。 我想读这些数据,但怎么读呢 $content = file_get_contents($fileName); var_dump($content); 显示实际字节数553700 但是 显示373821 所以,我不能简单的做 $xmpStart = strpos($content, '<x:xmpmeta'); $xmpStart=strpos($content,是一个声称能够读取XMP元数据的PHP包。exif_read_data()PHP函数

我有一张JPG图片,里面有XMP元数据。
我想读这些数据,但怎么读呢

$content = file_get_contents($fileName);
var_dump($content);
显示实际字节数
553700
但是

显示
373821

所以,我不能简单的做

$xmpStart = strpos($content, '<x:xmpmeta');
$xmpStart=strpos($content,是一个声称能够读取XMP元数据的PHP包。

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


这里的更多信息:

本质上,您正在读取的数据类型并不重要-
strlen()
等应该始终有效

我认为这里发生的是,在您的服务器上,
strlen()
被内部覆盖,并且内部字符编码被设置为UTF-8

UTF-8是一种多字节编码,因此您的字节流中的一些字符(任意)被解释为多字节字符-导致长度缩短为
373821
,而不是
553700

我想不出比总是显式指定单字节编码更好的解决方法,比如
iso-8859-1

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

$pos=strpos($content,'好的,谢谢。这会有帮助,但如果我必须从二进制文件中读取自己的字符串,怎么做?@Lari你必须构建自己的JPG解析器。虽然肯定非常有趣,但这可能是一项艰巨的任务。让我们忘掉JPG吧。:)我有一些二进制文件。如何在PHP中签入,该文件是否包含多个字符串?啊,现在更清楚了。本质上,使用的数据类型应该无关紧要。你能试试
strlen($content,“iso-8859-1”)
是否给出了正确的值吗?
$pos=strpos($content,'
 $pos = strpos($content, '<x:xmpmeta', 0, 'iso-8859-1');