调试一段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来处理多个提交任务
Oct 09 PHP
虚拟主机中对PHP的特殊设置
Oct 09 PHP
php桌面中心(一) 创建数据库
Mar 11 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 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实现的替换敏感字符串类实例
2014/09/22 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
jquery自定义表格样式
2015/11/23 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
JS实现简易计算器
2020/02/14 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
py中的目录与文件判别代码
2008/07/16 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
python实现AES加密与解密
2019/03/28 Python
python3.7 sys模块的具体使用
2019/07/22 Python
django实现类似触发器的功能
2019/11/15 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
python openCV自制绘画板
2020/10/27 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
企划专员岗位职责
2013/12/09 职场文书
如何写好建议书
2014/03/13 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
一般党员对照检查材料
2014/09/24 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014年医院工作总结
2014/11/20 职场文书
初中美术教学反思
2016/02/17 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
解析python中的jsonpath 提取器
2022/01/18 Python
Golang 实现WebSockets
2022/04/24 Golang
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python