Heim  >  Artikel  >  Backend-Entwicklung  >  大家有没有发现一个有关问题

大家有没有发现一个有关问题

WBOY
WBOYOriginal
2016-06-13 13:00:52895Durchsuche

大家有没有发现一个问题
当使用fread函数时,如果设置的文件指针指向一个ascii码小于33(十进制)的字符,则无论读取多长都读不出来,即得到一个长度为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 />
*/

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn