首页  >  文章  >  后端开发  >  大家有没有发现一个有关问题

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

WBOY
WBOY原创
2016-06-13 13:00:52895浏览

大家有没有发现一个问题
当使用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 />
*/

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn