调试一段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 相关文章推荐
对盗链说再见...
Oct 09 PHP
MVC模式的PHP实现
Oct 09 PHP
PHP parse_url 一个好用的函数
Oct 03 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
php中分页及SqlHelper类用法实例
Jan 12 PHP
php验证码生成器
May 24 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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
PHP判断是否有Get参数的方法
2014/05/05 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
python缩进区别分析
2014/02/15 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Python paramiko模块的使用示例
2018/04/11 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python 如何批量更新已安装的库
2020/05/26 Python
特教教师先进事迹
2014/05/21 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python
总结一些Java常用的加密算法
2021/06/11 Java/Android