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 ο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对象为:attachment.php?aid=Mzk3MTB8YTg5ZTYyNTJ8MTMyNjcyNDEwMXw5NWYydC9aOUE0a05EVm9ydlErSFBRamZJNWJQL1NHdWJLK3ZraU9GTDZYdnBUdw%3D%3D&nothumb=yes

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

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

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

昨晚调试一段PHP程序时遇到的三个问题相关推荐

  1. )类 新建javafx程序时_第三章 第一个OpenCV的JavaFX应用程序.md

    # 第三章 第一个OpenCV的JavaFX应用程序 --- ***注意***:我们假设您现在已经阅读了之前的教程.如果没有,请在[http://opencv-java-tutorials.readt ...

  2. 使用gdb调试当前运行的程序

    http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&varia ...

  3. gdb调试当前运行的程序

    gdb调试当前运行的程序 为什么使用gdb调试正在运行的程序? 因为有时候bug很难复现.或者环境搭建起来比较困难,所以在出现bug的时候可以使用gdb的attach功能调试正在运行的GCC编译出来的 ...

  4. 汇编语言(王爽第三版) 实验5编写、调试具体多个段的程序

    参考:http://blog.sina.com.cn/s/blog_171daf8e00102xclx.html 汇编语言实验答案 (王爽):https://wenku.baidu.com/view/ ...

  5. 测试网络SNMP连接的几个方法(我平时调试SNMP程序时用到的几个解决方案)

    测试网络SNMP连接的几个方法(我平时调试SNMP程序时用到的几个解决方案) 1.如何知道本机的哪些端口是活动的. 有两个工具可以帮助了解系统中有哪些端口是打开的. 一个是在命令行下输入"n ...

  6. debug —— set args调试命令(作为程序运行时的参数)

    debug调试 -- set  args 作为程序运行时候的参数 set args作为程序运行时参数: 源代码: 1 #include <stdio.h>2 int main(int ar ...

  7. 在VS2010调试javascript程序时的各种问题

    1,无法进入断点,首先确认去掉了ie中的禁止调试选项,然后在vs中的web中将调试器中的 asp.net 本机代码都打上对勾. 2,无法启动调试器,找不到microsoft internet expl ...

  8. 要启用实时(jit)调试 该应用计算机,解决%_启用实时(JIT)调试+编译应用程序时还必须启用方法歩骤?谁有最终解决方案?...

    有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.InvalidOperationExce ...

  9. 在VS2010中F5调试Silverlight程序时,提示“无法启动调试,找不到Microsoft Internet Explorer”...

    在VS2010中F5调试Silverlight程序时,提示"无法启动调试,找不到Microsoft Internet Explorer". 原因:是因为注册表中的IE项出了问题 所 ...

最新文章

  1. 鼠标右击 html5,认识HTML--写出第一个简易网页 -------16岁的小前端
  2. Python使用openpyxl读写excel文件
  3. Citrix无法访问本地磁盘
  4. [KMP]一本通(http://ybt.ssoier.cn:8088) 1698:字符串匹配
  5. js获取图片真实尺寸 - 代码篇
  6. MySQL数据库安装Version5.5
  7. debian9.4网络配置及永久静态默认路由
  8. 转SFTP 和FTPS的区别是什么?
  9. kafka的connect实现数据写入到kafka和从kafka写出
  10. plc vb c语言编程,[转载]VB6.0在PLC和上位机通讯中的应用【工控老鬼分享】
  11. 使用 Proteus 仿真单片机
  12. 什么是JavaSE,写给第一次接触Java的人
  13. python re模块findall_python re模块findall()函数实例解析
  14. 【PhotoScan精品教程】任务四:PhotoScan做空三+CC生成正射、三维建模综合案例
  15. [置顶] 程序员面试之道(《程序员面试笔试宝典》)之程序员如何保持身心健康?
  16. cocos2dx3.x的TableView使用
  17. 【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数
  18. 点击按钮1 打开/关闭按钮2
  19. 通达信主窗口显示股票所属板块及概念语句
  20. 河南单招计算机分数线,2017年河南高职院校单招录取分数线

热门文章

  1. python函数测试_Python测试函数的方法之一
  2. Yolov5实现道路裂缝检测,附数据集
  3. virtualbox+vagrant快速创建虚拟机
  4. Android自定义浮框,Android实现全局悬浮框
  5. python celery异步_python celery 异步学习
  6. 计算机专业毕业设计中期考核表,研究生中期考核表导师评语
  7. android 自定义 黑点,Android自定义密码样式 黑点转换成特殊字符
  8. python爬虫JS逆向加密破解之百度翻译
  9. pythoncsv数据类型_从CSV确定数据类型-Python
  10. poj 2922 Honeymoon Hike