0

XMPメタデータを含むJPG画像があります。
このデータを読みたいのですが、どうやって?

$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でチェックインするにはどうすればよいですか?このファイルには複数の文字列が含まれているかどうかを確認できますか?

4

3 に答える 3

1

Getid3は、XMPメタデータを読み取ることができると主張するPHPパッケージです。

于 2011-09-30T08:03:51.487 に答える
1

基本的に、読んでいるデータの種類は問題ではありませんstrlen()。常に動作するはずです。

ここで起こっていると思うのは、サーバー上strlen()で内部的にオーバーライドされmb_strlen()、内部文字エンコーディングが UTF-8 に設定されていることです。

UTF-8 はマルチバイト エンコーディングであるため、(非常に任意の) バイト ストリーム内の一部の文字はマルチバイト文字として解釈され373821553700.

次のようなシングルバイトエンコーディングを常に明示的に指定するよりも良い回避策は考えられませんiso-8859-1

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

これにより、データ内のすべてのバイトをカウントするように強制されますstrpos()(またはむしろ)。mb_strpos()

これは常に機能します。シングルバイトエンコーディングの使用を強制するよりエレガントな方法があるかどうかはわかりません。

于 2011-09-30T19:31:47.617 に答える
0

exif_read_data() PHP 関数は、XMP メタデータに役立つ可能性があります

詳細はこちら: http://php.net/manual/en/function.exif-read-data.php

于 2011-09-30T08:10:22.533 に答える