上次我在博客里提到xhprof是文锋的一次聚会,其中echo就提出了这个xhprof,轻量级,fackbook常用,当然echo他们用的也 很多。
说实话我在之前没有了解过xhprof,大多数情况下还是用xdebug,但在线上的时候,肯定是不敢开这样耗资源的玩意。所以就对xhprof关 心了一点点。再后来看了一点资料,同时echo那天也贴出了部分代码,也基本上是在用概率的方式提取LOG,或者指定某种具体条件的情况下记录,以节省资 源。
今天在闲逛的时候看到有人把中文手册翻译了。感慨万分,好久没有做过这种事情了。不是我太懒,而是真的做不来。
原文在这里:http://www.162cm.com/p/xhprofdoc.html
作者这样介绍自己:
翻译:徐仁禄 <xurenlu [at] gmail.com >
原文地址: http://mirror.facebook.net/facebook/xhprof/doc.html
初次翻译,大部分是google translate tookit工具给翻的,稍微修改了下。如遇错误,还请来信指出。谢谢!
» 阅读全文
PHP处理COOKIE是一件很方便的事情。print_r($_COOKIE)就可以打印所有的cookie变量。而且cookie也能够存为数组。确实操作和应用都非常方便 。
以前,对于子域和根域下的cookie并没有研究太深。因为都直接设在根域的。以前注意cookie是路径(path),这个的影响也是有的。不过现在大多数程序的cookie都是设在根路径(“/”)下,所以也回避了不少问题。
以下是老王提出的问题和解决方法(子域和根域同名cookie的处理),引伸开的话,你也可以测试一下,根路径与子路径下同名cookie的情况。【果然,老王文章结尾就是这样的提问,呵呵】
我们都知道,在子域下请求时,浏览器会把子域和根域下的Cookie一起发送到服务器,那如果子域和根域下有一个同名Cookie,当我们在PHP里使 用$_COOKIE访问时,到底生效的是哪个呢?下面做试验测试一下,测试使用Firefox,用到了以下插件:SwitchHosts+WebDeveloper+Firebug。
注意:试验结果可能因为浏览器的不同而存在差异。
首先通过SwitchHosts设定虚拟域名:www.foo.com,并且配置好Web服务器,当然,你手动设置Hosts文件也可以,我本意是为了多介绍几个工具。
然后编写设置Cookie的PHP脚本,先设置子域,再设置根域:
PHP代码
- <?php
- setcookie("bar", "www", time() + 10, "/", "www.foo.com");
- setcookie("bar", "foo", time() + 10, "/", ".foo.com");
- ?>
再编写浏览Cookie的脚本:
PHP代码
- <?php
- var_dump($_COOKIE);
- ?>
BTW:最初写脚本的时候我竟然在setcookie前使用了var_dump,也就是在发送请求头之前有了输出,犯了这样的初学者错误实在是罪过,可更令人惊讶的是脚本没有报错,查了半天原来是因为php.ini里缺省output_buffering = 4096。
先设置再浏览,就能看到结果了,结果显示有效的是子域下的Cookie。
重开一个浏览器窗口,并使用WebDeveloper删除Cookie,或手动删除,避免对结果造成影响。
然后调换两次调用setcookie的顺序,也就是先设置根域,再设置子域:
PHP代码
- <?php
- setcookie("bar", "foo", time() + 10, "/", ".foo.com");
- setcookie("bar", "www", time() + 10, "/", "www.foo.com");
- ?>
先设置再浏览,就能看到结果了,结果显示有效的是根域下的Cookie。
重复两次测试过程,并用Firebug记录下请求头的差异:
第一次先设置子域,再设置根域:请求头
Cookie的值是bar=www;bar=foo,结果有效的是bar=www
第二次先设置根域,再设置子域:请求头
Cookie的值是bar=foo;bar=www,结果有效的是bar=foo
也就说,同名Cookie对于服务端PHP来说,在请求头Cookie中,哪个在前哪个生效,后面的会被忽略。
如果使用的不是Firefox,那就用不了Firebug,此时可以用PHP代码来检测Cookie头:
PHP代码
- if (isset($_SERVER['HTTP_COOKIE'])) var_dump($_SERVER['HTTP_COOKIE']);
以上的实验结论是基于Firefox而言的,由于不同的浏览器发送Cookie的策略可能有差异,所以在其他浏览器上结果可能会有所不同,比如在 Safari下就始终是子域有效,其他浏览器如Opera,Chrome等未仔细测试。鉴于这个混乱的结论,所以还是不要在子域和根域下使用同名 Cookie为好!
题外话:类似的情况,如子目录和根目录下的同名Cookie是什么情况,读者可以自行测试。
--EOF--
原文来自:http://hi.baidu.com/thinkinginlamp/blog/item/899551dacd807ad6b6fd48cd.html
这样typecho的SVN源代码更新对我来说,有几个比较重要的地方。其中有一点就是我向70提出来的(我无法改源码)
1、需要能够对插件变量直接修改值,而不是通过config方法的form方式提交(其实我是想用在数据库备份插件中的,记录上次备份时间,以前的话,恐怕只能到option表里找到这个key,并且update这个key对应的value了),该方法目前存在于Helper类中。
2、修正附件的所有权(r1449)
多看看project页面的source中的change,可以看到更多修改记录。好象你有意见也可以去issues里面提(一个人更新。太慢了。。。)
这张图很有意思,你是不是在其中感受到了什么 ?为什么我们做出来的东西客户总不满意?为什么总是要互相扯皮?原因呢?这张图表达了很多。
这个PDF确实不错。只是。。。没有介绍netbeans下如何调试。phped下也没有介绍。仅介绍了zendstudio for eclipse和pdt还有vim的调试。不过。。。还是有很用处的东西。
对于浏览器的测试,除了PHP方面的print_r,var_dump等。他也介绍了firephp这个firefox的插件(基于firebug,如果不知道firebug那我也没啥好说的了)
对于最后简单的测试时间花费,也是用的传统的microtime来取的。额。。。他用的是PHP4的写法。只是最后介绍phpUnit就有点简单了。
XML/HTML代码
- 1 内置API输出调试
- 1.1 基本调试API
- 1.1.1 echo (print):
- 1.1.2 printf
- 1.1.3 print_r、var_dump(var_export)、debug_zval_dump
- 1.2 错误控制和日志记录调试
- 1.2.1 错误选项控制
- 1.2.2 错误抛出和处理
- 1.2.3 使用错误抑制符
- 1.2.4 日志记录
- 2 浏览器调试
- 2.1 页面输出调试
- 2.2 FirePHP 调试
- 2.2.1 普通变量监测
- 2.2.2 调用栈监测
- 2.2.3 监测抛出异常
- 2.2.4 组显示信息
- 3 IDE 调试
- 3.1 基本常用IDE介绍
- 3.1.1 Vim
- 3.1.2 Zend Studio
- 3.1.3 Eclipse
- 3.1.4 NetBeans
- 3.2 IDE调试
- 3.2.1 Zend Studio + Zend Debugger
- 3.2.2 Eclipse (PDT) + Xdebug
- 3.2.3 Vim + Xdebug + DBGp
- 4 PHP 性能调试技术
- 4.1 基本时间占用监测
- 4.2 使用 Xdebug 进行性能分析
- 4.2.1 安装配置:
- 4.3 APD(Advanced PHP Debugger)
- 4.3.1 安装配置
- 4.3.2 使用APD
- 4.4 使用Xhprof 进行性能分析
- 4.4.1 Xhprof 的优点:
- 5 PHP单元测试技术
- 5.1 PHPUnit
下载地址:
http://heiyeluren-doc.googlecode.com/files/PHP-Debug-Manual-public.pdf
本地备份:php-debug-manual-public.pdf
来源网址:http://www.laruence.com/2010/06/21/1608.html