调试一段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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
删除无限级目录与文件代码共享
Jul 12 PHP
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
PHP中MVC模式的模板引擎开发经验分享
Mar 23 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
详解PHP中的状态模式编程
Aug 11 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
浅谈js中的this问题
2017/08/31 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
Python随机生成手机号、数字的方法详解
2017/07/21 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
成人毕业生自我鉴定
2013/10/18 职场文书
求职自荐书范文
2013/12/04 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
毕业典礼致辞
2015/07/29 职场文书
办公室卫生管理制度
2015/08/04 职场文书
担保书范文
2019/07/09 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL