当使用fread函数时,如果设置的文件指针指向一个ascii码小于33(十进制)的字符,则无论读取多长都读不出来,即得到一个长度为0的字符串。譬如下面情况:
当设置文件指针为18或者22时,
fseek($file,18,SEEK_SET);
$buffer=fread($file,4);
这个得到的$buffer长度为0
有没有不同看法啊
当设置文件指针为18或者22时,
fseek($file,18,SEEK_SET);
$buffer=fread($file,4);
这个得到的$buffer长度为0
有没有不同看法啊
解决方案 »
- 请教一个正则,试了半天没试出来~~~
- 急!!!高分请教MySQL查询问题
- 用 PHP 进行 HTTP 认证
- 正则去除指定的html代码问题
- 怎么才能实现访问www.**.com/123定向到www.**.com/a.php?id=123能
- 一搜的这个mp3搜索是怎么编码的呀
- 征询个函数,希望大家帮忙,谢谢!
- 今天拿出以前调试好的程序,突然出现这样的提示,傻了。请教高手!
- 怎么取小数点后的数啊?
- 有人用过phplib的template.inc吗?为什么我修改模半页面(ihtml)以后必须清除缓存才能看到效果?
- 本人菜鸟刚接触php,安装安装了XAMPP后,出现了些问题,求大神帮帮忙
- 论坛上的写字板功能如何实现。
<?PHP
$filename = "./1.gif";
$handle = fopen($filename, "rb+");
fseek($handle,12,SEEK_SET);
$buffer=fread($handle,4);
var_dump($buffer);
fseek($handle,12,SEEK_SET);
里的12修改成9,10,11,12 输出的结果都正确.
$s = "424d6c0600000000000036000000280000001c00000014000000010018000000";
$fp = tmpfile();
fwrite($fp, pack('H*', $s));//以十六进制查看
fseek($fp, 0);
$i = 0;
while($i < 32) {
printf('%02x ', ord(fgetc($fp)));
if((++$i % 16) == 0) echo PHP_EOL;
}
/*
42 4d 6c 06 00 00 00 00 00 00 36 00 00 00 28 00
00 00 1c 00 00 00 14 00 00 00 01 00 18 00 00 00
*///进入你的问题
fseek($fp, 18);
$t = fread($fp, 4);
echo strlen($t), ' : ', bin2hex($t);
/*
4 : 1c000000
*/
图1 图2 图3
其中,$offset是偏移,$buffer是读到的四个字节,我将偏移量从1试到34,直到偏移量为30时,才出现图2的情况,之前的偏移量测试情况全为图3,这是IDE不对呢,还是我没有设置好。IDE是eclipse