ホームページ  >  記事  >  バックエンド開発  >  関連する問題は見つかりましたか?

関連する問題は見つかりましたか?

WBOY
WBOYオリジナル
2016-06-13 13:00:52932ブラウズ

問題に気づきましたか?
fread 関数を使用するとき、設定されたファイル ポインターが 33 (10 進数) 未満の ASCII コードを持つ文字を指している場合、それをどれだけ読み取っても読み取れません。 、長さ 0 の文字列が得られます。たとえば、次のような状況です:
ファイルポインタを18または22に設定する場合、
fseek($file,18,SEEK_SET);
$buffer=fread($file,4); 結果の $buffer の長さは 0
何か違う意見はありますか?


-----解決策--------------------------------試してみましたが、すべて正常に動作しました。ソースコードは次のとおりです。
$filename = "./1.gif";
$handle = fopen($filename, "rb+");
fseek($handle,12,SEEK_SET);
$buffer=fread($handle,4);
var_dump($buffer);

------解決策----------------------それはあなたがいる場所にあるはずです問題が発生しました

//模拟一个文件<br />
$s = "424d6c0600000000000036000000280000001c00000014000000010018000000";<br />
$fp = tmpfile();<br />
fwrite($fp, pack('H*', $s));<br />
<br />
//以十六进制查看<br />
fseek($fp, 0);<br />
$i = 0;<br />
while($i < 32) {<br />
  printf('%02x ', ord(fgetc($fp)));<br />
  if((++$i % 16) == 0) echo PHP_EOL;<br />
}<br />
/*<br />
42 4d 6c 06 00 00 00 00 00 00 36 00 00 00 28 00 <br />
00 00 1c 00 00 00 14 00 00 00 01 00 18 00 00 00 <br />
*/<br />
<br />
//进入你的问题<br />
fseek($fp, 18);<br />
$t = fread($fp, 4);<br />
echo strlen($t), ' : ', bin2hex($t);<br />
/*<br />
4 : 1c000000<br />
*/

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。