调试一段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 相关文章推荐
PHP 压缩文件夹的类代码
Nov 05 PHP
PHP 事件机制(2)
Mar 23 PHP
php Calender(日历)代码分享
Jan 03 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
smarty简单分页的实现方法
Oct 27 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
php生出随机字符串
Jul 06 PHP
php传值和传引用的区别点总结
Nov 19 PHP
详细分析PHP7与PHP5区别
Jun 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
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
jcrop基本参数一览
2013/07/16 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python的常见命令注入威胁
2013/02/18 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python实现批量修改文件名
2020/03/23 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
python实现简单猜单词游戏
2020/12/24 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
华润集团网上药店:健一网
2016/09/19 全球购物
初中生学习的自我评价
2013/11/14 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
合作协议书范本
2014/04/17 职场文书
群众路线个人整改措施
2014/10/24 职场文书
整改落实自查报告
2014/11/05 职场文书
节约用电通知
2015/04/25 职场文书
二审答辩状范文
2015/05/22 职场文书
高中开学感言
2015/08/01 职场文书
离婚民事起诉状
2015/08/03 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫