调试一段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 基本语法格式
Dec 15 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
php的socket编程详解
Nov 20 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
laravel自定义分页效果
Jul 23 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
php遍历目录方法小结
2015/03/10 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
Jquery中删除元素的实现代码
2011/12/29 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
用实例说明python的*args和**kwargs用法
2013/11/01 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
Python在线运行代码助手
2016/07/15 Python
Python打包可执行文件的方法详解
2016/09/19 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
python pygame模块编写飞机大战
2018/11/20 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
在pycharm中实现删除bookmark
2020/02/14 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
三下乡个人总结
2015/03/04 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS