调试一段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
php的curl实现get和post的代码
Aug 23 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
Yii框架中使用PHPExcel的方法分析
Jul 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用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
python 随机数生成的代码的详细分析
2011/05/15 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
Django之Mode的外键自关联和引用未定义的Model方法
2018/12/15 Python
pandas计数 value_counts()的使用
2019/06/24 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
财务管理个人自荐书范文
2013/11/24 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
机械专业技术员求职信
2014/06/14 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL