<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[FirePHP — php版的firebug]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[生活笔记]]></category>
<pubDate>Thu, 03 Jul 2008 06:34:59 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	在friendfeed上找到的了这个名为FirePHP的Firefox插件，是基于Firebug的一个扩展，可以用来在Firebug的console中方便的输出php的调试信息又不影响php程序的正常运行。实际上这东东出来的时间也不短了，只是以前没试用过，现在把玩了一会也挺有趣:<br/>Http://www.firephp.org/<br/><br/>FirePHP的php调试信息都是通过在http头里面添加X-FirePHP-Data信息串来标识，不会直接输出到页面上，这样也就避免对php正常输出产生影响。可以输出的调试信息类型如下:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* 正常的调试字符串，类型有LOG,INFO,WARN,ERROR几种<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 数组array<br/>&nbsp;&nbsp;&nbsp;&nbsp;* object<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 异常Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;* SQL返回数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;* http header<br/>&nbsp;&nbsp;&nbsp;&nbsp;通过使用Firephp你可以在Firebug的Console栏中看到要调试的数据，而不影响php程序的正常执行，所以说，这东西对于Ajax开发是很有帮助的！<br/>如何使用：http://www.blankyao.cn/blog/php-firephp-ajax.html<br/><br/><br/><br/><br/><div class="code">&lt;?php<br/>require(&#039;FirePHPCore/fb.php&#039;);<br/>//echo &#039;FirePHP测试&#039;;<br/>//echo &quot;hello the world!&quot;;<br/>fb(&#039;Hello World&#039;); /* Defaults to FirePHP::LOG */<br/><br/>fb(&#039;Log message&#039;&nbsp;&nbsp;,FirePHP::LOG);<br/>fb(&#039;Info message&#039; ,FirePHP::INFO);<br/>fb(&#039;Warn message&#039; ,FirePHP::WARN);<br/>fb(&#039;Error message&#039;,FirePHP::ERROR);<br/><br/>fb(&#039;Message with label&#039;,&#039;Label&#039;,FirePHP::LOG);<br/><br/>fb(array(&#039;key1&#039;=&gt;&#039;val1&#039;,<br/>&#039;key2&#039;=&gt;array(array(&#039;v1&#039;,&#039;v2&#039;),&#039;v3&#039;)),<br/>&#039;TestArray&#039;,FirePHP::LOG);<br/><br/>function test($Arg1) &#123;<br/>throw new Exception(&#039;Test Exception&#039;);<br/>&#125;<br/>try &#123;<br/>test(array(&#039;Hello&#039;=&gt;&#039;World&#039;));<br/>&#125; catch(Exception $e) &#123;<br/>/* Log exception including stack trace &amp; variables */<br/>fb($e);<br/>&#125;<br/><br/>fb(array(&#039;2 SQL queries took 0.06 seconds&#039;,array(<br/>array(&#039;SQL Statement&#039;,&#039;Time&#039;,&#039;Result&#039;),<br/>array(&#039;SELECT * FROM Foo&#039;,&#039;0.02&#039;,array(&#039;row1&#039;,&#039;row2&#039;)),<br/>array(&#039;SELECT * FROM Bar&#039;,&#039;0.04&#039;,array(&#039;row1&#039;,&#039;row2&#039;))<br/>)),FirePHP::TABLE);<br/><br/> ?&gt;</div><br/><br/>firebug firecookie ietab httpfox<br/><br/><br/><br/>下面一起来看下Firephp的使用方法。<br/> 第一步：安装<br/>&nbsp;&nbsp;&nbsp;&nbsp; 1.如果你的FireFox没有Firebug这个插件的话，首先要安装Firebug这个插件，可以到其官方地址去下载：http://www.getfirebug.com/<br/> 2.安装Firephp，官方地址：http://www.firephp.org/<br/> 3.下载Firephp的php文件。并放在合适的目录。<br/> 第二步：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 包含fb.php，根据你放置的Firephp文件的地址来包含fb.php，比如：<br/>&nbsp;&nbsp;&nbsp;&nbsp;require(’FirePHPCore/fb.php’)<br/> 第三步：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 打开输出缓冲（因为Firephp主要用到的是header函数），有如下三种方法：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在程序的前面加上ob_start()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改php.ini 将output_buffering设为1或者on<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改apache的设置，在配置文件中加上php_flag output_buffering on <br/> 第四步：开始调试：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 可以调试输出以下数据类型：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串，可以分为LOG,INFO,WARN,ERROR四种<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object或者Array<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过sql查询返回的数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抛出的异常信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器返回的信息（不输出在console中，而是NET中 <br/> 如果你感觉还不错的话，可以安装后运行以下程序看下结果:<br/><br/> $var = array(&#039;a&#039;=&gt;&#039;pizza&#039;, &#039;b&#039;=&gt;&#039;cookies&#039;, &#039;c&#039;=&gt;&#039;celery&#039;); <br/>fb($var); <br/>fb($var, &quot;An array&quot;); <br/>fb($var, FirePHP::WARN); <br/>fb($var, FirePHP::INFO); <br/>fb($var, &#039;An array with an Error type&#039;, FirePHP::ERROR); <br/><br/><br/>你也可以使用FirePHP来跟踪你程序的执行情况：通过使用FirePHP::TRACE常量，你可以在 fb被调用的地方查看行数、类名和方法名<br/><br/>function hello() &#123; <br/>&nbsp;&nbsp;fb(&#039;Hello World!&#039;, FirePHP::TRACE); <br/>&#125; <br/>function greet() &#123; <br/>&nbsp;&nbsp;hello(); <br/>&#125; <br/>greet(); <br/><br/>产生的输出如下:<br/><br/>这个跟踪功能可以完美的调试更复杂的代码，让你精确的知道你的方法是在哪里被调用的。<br/>当然，别忘了你需要在你代码发布之前移除你的调试语句。<br/><br/>参考：http://blog.csdn.net/leijuly/archive/2009/05/31/4227613.aspx<br/><br/>自己测试了下，是Ok的，以后就可以用它来调试PHP变量的哇，测试代码如下：<br/><textarea name="code" class="html" rows="15" cols="100">
 &lt;?php
 require_once(&#039;./FirePHPCore-0.3.2/lib/FirePHPCore/fb.php&#039;);
 echo &#039;FirePHP²âÊÔ&#039;;
 
 
 fb ( array ( &#039; 2 SQL queries took 0.06 seconds &#039; , array (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array ( &#039; SQL Statement &#039; , &#039; Time &#039; , &#039; Result &#039; ) ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array ( &#039; SELECT * FROM Foo &#039; , &#039; 0.02 &#039; , array ( &#039; row1 &#039; , &#039; row2 &#039; )) , 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array ( &#039; SELECT * FROM Bar &#039; , &#039; 0.04 &#039; , array ( &#039; row1 &#039; , &#039; row2 &#039; ))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) , FirePHP :: TABLE ) ;
&nbsp;&nbsp; 
&nbsp;&nbsp; 
 ?&gt;
 </textarea><br/> firephp的Consol输出结果如下：<br/> http://test3.qq.com/firephp_test3.php<br/>2 SQL queries took 0.06 seconds<br/>SQL Statement&nbsp;&nbsp; Time&nbsp;&nbsp; Result<br/>SELECT * FROM Foo&nbsp;&nbsp; 0.02&nbsp;&nbsp; array(&#039;0&#039;=&gt;&#039; row1 &#039;, &#039;1&#039;=&gt;&#039; row2 &#039;)<br/>SELECT * FROM Bar&nbsp;&nbsp; 0.04&nbsp;&nbsp; array(&#039;0&#039;=&gt;&#039; row1 &#039;, &#039;1&#039;=&gt;&#039; row2 &#039;)<br/><br/>自己试了下也是Ok的，如下：<br/><textarea name="code" class="html" rows="15" cols="100">
fb(array(&quot;name&quot;,array(array(&quot;jack&quot;,&quot;lixu&quot;),array(&quot;echo&quot;,&quot;xxd&quot;))), FirePHP :: TABLE );
 </textarea><br/>name<br/>jack&nbsp;&nbsp;lixu<br/>echo&nbsp;&nbsp;xxd<br/><br/>当firefox升级到firefox6后，这个firephp和firebug匹配上有些问题，只能开启一次，再刷新后控制台就给屏蔽了，点再开启也不行，最后再次升级了firebug插件才Ok，这点要注意。<br/><br/><br/><textarea name="code" class="html" rows="15" cols="100">
 &lt;?php
 require_once(&#039;./FirePHPCore-0.3.2/lib/FirePHPCore/fb.php&#039;);
 echo &#039;FirePHP测试&#039;;
 
 
 fb ( array ( &#039; 2 SQL queries took 0.06 seconds &#039; , array (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array ( &#039; SQL Statement &#039; , &#039; Time &#039; , &#039; Result &#039; ) ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array ( &#039; SELECT * FROM Foo &#039; , &#039; 0.02 &#039; , array ( &#039; row1 &#039; , &#039; row2 &#039; )) ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array ( &#039; SELECT * FROM Bar &#039; , &#039; 0.04 &#039; , array ( &#039; row1 &#039; , &#039; row2 &#039; ))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) , FirePHP :: TABLE ) ;
 fb(array(&quot;name&quot;,array(array(&quot;jack&quot;,&quot;lixu&quot;),array(&quot;echo&quot;,&quot;xxd&quot;))), FirePHP :: TABLE );
 fb(array(&quot;name&quot;,array(array(&quot;jack&quot;,&quot;lixu&quot;),array(&quot;echo&quot;,&quot;xxd&quot;))), FirePHP::LOG );
 fb(&#039;Log message&#039;&nbsp;&nbsp;,FirePHP::LOG);
 fb(&#039;Info message&#039; ,FirePHP::INFO);
 fb(&#039;Warn message&#039; ,FirePHP::WARN);
 fb(&#039;Error message&#039;,FirePHP::ERROR);
 
 ?&gt;
 </textarea><br/>以上的输出截图，注意table和log，以及info是很适用的输出模型：<br/><a href="https://jackxiang.com/attachment.php?fid=189" target="_blank"><img src="https://jackxiang.com/attachment.php?fid=189" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/>特别注意，如出现：<br/>其中某个包含文件中如，password.php，最后两行，vi能看到一行空输出，91行：<br/> 90 ?&gt;<br/> 91 <br/>这儿有一行空输出，一般是看不见的。<br/>这儿有空格输出，于是出现了报错：<br/>Fatal error: Uncaught exception &#039;Exception&#039; with message &#039;Headers already sent in /data/home/jackxiang/public_html/pms_proj/trunk/php/lib/password.php on line 92. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.&#039; in /data/home/admin/libs/FirePHPCore/FirePHP.class.php on line 1178<br/><br/>这儿得用到前面的：<br/> 第三步：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 打开输出缓冲（因为Firephp主要用到的是header函数），有如下三种方法：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在程序的前面加上ob_start()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改php.ini 将output_buffering设为1或者on<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改apache的设置，在配置文件中加上php_flag output_buffering on <br/><br/><br/>其实就是在password.php中输出前加入，ob_start();&nbsp;&nbsp;#开启缓冲，然后在打firephp变量前加入：<br/>ob_clean();&nbsp;&nbsp;#关闭缓冲<br/>分别如下：password.php，<br/> 89 ob_start();<br/> 90 ?&gt;<br/> 91 <br/><br/>在打印变量处如，BuildProcess.php中：<br/><textarea name="code" class="html" rows="15" cols="100">
&nbsp;&nbsp;require_once(&#039;/home/admin/libs/FirePHPCore/fb.php&#039;);&nbsp;&nbsp;
&nbsp;&nbsp;ob_clean();
&nbsp;&nbsp;fb ( array (&#039;FirePHP Debug Result Array Info:&#039; , $_POST) , FirePHP :: TABLE ) ;
</textarea><br/><br/>于是出现如下结果：<br/><textarea name="code" class="html" rows="15" cols="100">
FirePHP Debug Result Array Info:
312&nbsp;&nbsp;4&nbsp;&nbsp;接入层
array(&#039;cgi&#039;=&gt;&#039; http://testdd.oa.com/test/cgi-t7&#039;, &#039;domain&#039;=&gt;&#039; http:&#039;, &#039;path&#039;=&gt; ... )
array(&#039;domain&#039;=&gt;&#039; http:&#039;, &#039;ip&#039;=&gt;&#039;172.25.39.74&#039;)
震&nbsp;&nbsp;震&nbsp;&nbsp;夺&nbsp;&nbsp;夺&nbsp;&nbsp;夺&nbsp;&nbsp;夺&nbsp;&nbsp;夺&nbsp;&nbsp;城&nbsp;&nbsp;夺&nbsp;&nbsp;夺&nbsp;&nbsp;夺&nbsp;&nbsp;460.gif&nbsp;&nbsp;1298878170_41.jpg&nbsp;&nbsp;1298878185_57.jpg
</textarea><br/><br/>其实这个为何要这样加，或者就是头一个文件里里加的原因请看：http://wyllife.blog.163.com/blog/static/41163901201153113512946/
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] FirePHP — php版的firebug]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>