调试一段PHP程序时遇到的三个问题


Posted in PHP onJanuary 17, 2012

1,filesize()函数返回错误的值。
使用curl将某个页面下载到本地时,需要将下载到的临时文件tmpHtml.txt的内容读取到一个缓冲区中。由于我使用fread()进行读取,需要传入要读取的大小,所以先用filesize(‘./tmpHtml.txt')获取临时文件大小。怪异的是,获取到的临时文件大小不正确,下断点调试,在filesize()调用后,手工去硬盘上寻找文件,文件大小与filesize()得到的结果不一样。
在php.net上搜索filesize,可以看到函数说明中有这么一句:Note: 此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。
再去查阅clearstatcache(),果然找到了原因:
PHP将缓存这些(提供了函数表供查询)函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。
2,在UTF-8编码的PHP脚本中,对GBK编码的中文网页内容做模式匹配时,如何匹配中文。
在昨天的开发中,需要匹配包含GBK编码字符串‘苹果'的内容,所以写出如下代码:

$pat = '/<img onclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="苹果\.jpg" \/><\/a>/'; 
$pat = iconv(‘UTF-8', ‘GB2312', $pat); 
$ret = preg_match_all($pat, $contents, $matches);

可是死活匹配不上,于是尝试先将内容转换成UTF-8编码,如下:
$pat = '/<img onclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="苹果\.jpg" \/><\/a>/'; 
$contenst = iconv(‘GB2312', ‘UTF-8', $contents); 
$ret = preg_match_all($pat, $contents, $matches);

于是就能匹配上了。但是想不通啊,怀疑这里面有诈。
但悲剧的是,今天又用了第一种方法,又匹配中了。看来问题出在别的地方。
啊!老夫是猪,问题2是由问题1引起的!filesize()获取的不对,自然匹配不上了!第二种方法匹配上,是在解决问题1之后啊!

3,浏览器中审查元素得到的报价图片下载地址,为何与curl得到的下载地址不同。
可能……最后答案依然是:我是猪。
因为URI对象为:attachment.php?aid=Mzk3MTB8YTg5ZTYyNTJ8MTMyNjcyNDEwMXw5NWYydC9aOUE0a05EVm9ydlErSFBRamZJNWJQL1NHdWJLK3ZraU9GTDZYdnBUdw%3D%3D¬humb=yes
aid是个什么呢?很可能是个与session有关的东东,变一变也很正常的嘛。后来抓看起来像静态路径的东东就没问题了。

以上三个故事中包含两个悲剧,这就是PHP初学者必犯的低级错误。

PHP 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
Php注入点构造代码
Jun 14 PHP
PHP中的函数嵌套层数限制分析
Jun 13 PHP
支持中文的php加密解密类代码
Nov 27 PHP
关于php循环跳出的问题
Jul 01 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
10个简化PHP开发的工具
Dec 25 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 #PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 #PHP
php 阴历-农历-转换类代码
Jan 16 #PHP
yii框架中的Url生产问题小结
Jan 16 #PHP
fgetcvs在linux的问题
Jan 15 #PHP
PHP异步调用socket实现代码
Jan 12 #PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 #PHP
You might like
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python基础教程之循环介绍
2014/08/29 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
python购物车程序简单代码
2018/04/18 Python
Django对models里的objects的使用详解
2019/08/17 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
几个数据库方面的面试题
2016/07/01 面试题
学生自我鉴定模板
2013/12/30 职场文书
财产公证书格式
2014/04/10 职场文书
明星员工获奖感言
2014/08/14 职场文书
三好学生事迹材料
2014/12/24 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js