博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
昨晚调试一段PHP程序时遇到的三个问题
阅读量:5118 次
发布时间:2019-06-13

本文共 1298 字,大约阅读时间需要 4 分钟。

1,filesize()函数返回错误的值。

使用curl将某个页面下载到本地时,需要将下载到的临时文件tmpHtml.txt的内容读取到一个缓冲区中。由于我使用fread()进行读取,需要传入要读取的大小,所以先用filesize(‘./tmpHtml.txt’)获取临时文件大小。怪异的是,获取到的临时文件大小不正确,下断点调试,在filesize()调用后,手工去硬盘上寻找文件,文件大小与filesize()得到的结果不一样。

在php.net上搜索filesize,可以看到函数说明中有这么一句:Note: 此函数的结果会被缓存。参见 以获得更多细节。

再去查阅clearstatcache(),果然找到了原因:

PHP将缓存这些(提供了函数表供查询)函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。

2,在UTF-8编码的PHP脚本中,对GBK编码的中文网页内容做模式匹配时,如何匹配中文。

在昨天的开发中,需要匹配包含GBK编码字符串‘苹果’的内容,所以写出如下代码:

$pat = '/<img οnclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="苹果\.jpg" \/><\/a>/';

$pat = iconv(‘UTF-8’, ‘GB2312’, $pat);

$ret = preg_match_all($pat, $contents, $matches);

可是死活匹配不上,于是尝试先将内容转换成UTF-8编码,如下:

$pat = '/<img οnclick="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对象为:

aid是个什么呢?很可能是个与session有关的东东,变一变也很正常的嘛。后来抓看起来像静态路径的东东就没问题了。

 

以上三个故事中包含两个悲剧,这就是PHP初学者必犯的低级错误。

转载于:https://www.cnblogs.com/tara/archive/2012/01/16/2324152.html

你可能感兴趣的文章
第二阶段个人冲刺01
查看>>
web性能分析
查看>>
认识DataReader对象
查看>>
PHP系统函数
查看>>
TF-卷积函数 tf.nn.conv2d 介绍
查看>>
js算法初窥04(算法模式01-递归)
查看>>
Odd-e CSD Course Day 5
查看>>
face detection and aligh
查看>>
【Win10】页面的导航效果
查看>>
saxReader的列子
查看>>
eclipse集成maven3后,创建java项目详细图解
查看>>
子页面刷新父页面
查看>>
python基础3 字符编码
查看>>
BZOJ1390 CEOI2008 Fences 凸包、Floyd最小环/DP
查看>>
【转发】Java并发编程:Lock
查看>>
(转)用AGG实现高质量图形输出(三)
查看>>
B/S----Repeater控件
查看>>
LNMP基于fastcgi实现nginx,php,mysql的分离
查看>>
mapreduce 二次排序
查看>>
PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
查看>>