调试一段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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
php 验证码制作(网树注释思想)
Jul 20 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
php定时执行任务设置详解
Feb 06 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
开源SNS系统-ThinkSNS
2008/05/18 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
Python 在函数上添加包装器
2020/07/28 Python
Python加速程序运行的方法
2020/07/29 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
客户答谢会活动方案
2014/08/31 职场文书
教师个人年终总结
2015/02/11 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
导游词幽默开场白
2019/06/26 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js