调试一段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 session常见问题集锦及解决办法总结
Mar 18 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
python 如何对logging日志封装
2020/12/02 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
2016年五一促销广告语
2016/01/28 职场文书
大学生创业计划书
2019/06/24 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android