调试一段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 程序员也要学会使用“异常”
Jun 16 PHP
怎样去阅读一份php源代码
Aug 21 PHP
PHP中的float类型使用说明
Jul 27 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
迁移PHP版本到PHP7
Feb 06 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 PHP
phpstorm激活码2020附使用详细教程
Sep 25 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批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
js function定义函数使用心得
2010/04/15 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python2随机数列生成器简单实例
2017/09/04 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
建筑工程专业毕业生自荐信
2013/10/19 职场文书
区级文明单位申报材料
2014/05/15 职场文书
积极向上的团队口号
2014/06/06 职场文书
中文专业自荐书
2014/06/29 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
避暑山庄导游词
2015/02/04 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技