<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>荷包蛋博客 &#187; Php</title>
	<atom:link href="http://www.hebaodans.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hebaodans.com</link>
	<description>好的心态是成功的开始</description>
	<lastBuildDate>Tue, 20 Jul 2010 17:32:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>phpgrid快速数据库显示表格</title>
		<link>http://www.hebaodans.com/2010/01/p-h-p-g-r-i-d-kuai-su-shu-ju-ku-xian-shi-biao-ge/</link>
		<comments>http://www.hebaodans.com/2010/01/p-h-p-g-r-i-d-kuai-su-shu-ju-ku-xian-shi-biao-ge/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 13:19:11 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=732</guid>
		<description><![CDATA[http://www.phpgrid.com/grid/ Grid-based editing including Create, Read, Update and Delete (CRUD) records are the most common behaviors for web developers. Similar to ASP.NET Datagrid the phpGrid is a simple, innovative, powerful, and Ajax-enabled PHP component for generating data-bound grid control, specially designed for PHP http://phpgrid.sourceforge.net/index.php PHPGRID是一个用于快速开发MIS系统，网站后台，演示程序的PHP类库，不仅具有数据添加编辑删除的基本功能，还具有表单自动生成，排序，分页，查询，权限设定，缓存的功能，而且这些功能是可定制的。对于特殊的需求，您只需编写少量的代码来继承于PHPGRID。 PHPGRID适合那些懒惰而又聪明的PHP程序员，PHPGRID将使你从厌烦重复的工作中解放出来。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.phpgrid.com/grid/">http://www.phpgrid.com/grid/</a></p>
<p>Grid-based editing including Create, Read, Update and Delete (CRUD) records are the most common behaviors for web developers. Similar to ASP.NET Datagrid the phpGrid is a simple, innovative, powerful, and Ajax-enabled PHP component for generating data-bound <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/grid/" title="View all posts in grid" target="_blank">grid</a></span> control, specially designed for PHP</p>
<p><a href="http://phpgrid.sourceforge.net/index.php">http://phpgrid.sourceforge.net/index.php</a></p>
<p>PHPGRID是一个用于快速开发MIS系统，网站后台，演示程序的PHP类库，不仅具有数据添加编辑删除的基本功能，还具有表单自动生成，排序，分页，查询，权限设定，缓存的功能，而且这些功能是可定制的。对于特殊的需求，您只需编写少量的代码来继承于PHPGRID。 PHPGRID适合那些懒惰而又聪明的PHP程序员，PHPGRID将使你从厌烦重复的工作中解放出来。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2010/01/p-h-p-g-r-i-d-kuai-su-shu-ju-ku-xian-shi-biao-ge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP的JavaScript框架 PHP.JS</title>
		<link>http://www.hebaodans.com/2010/01/p-h-p-de-j-a-v-a-s-c-r-i-p-t-kuang-jia-p-h-p-j-s/</link>
		<comments>http://www.hebaodans.com/2010/01/p-h-p-de-j-a-v-a-s-c-r-i-p-t-kuang-jia-p-h-p-j-s/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 12:18:10 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[PHP.JS]]></category>
		<category><![CDATA[php框架]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=729</guid>
		<description><![CDATA[PHP.JS是一个开源项目，它将PHP中的部分函数功能移植到javascript中。只要在你的项目里包括这个php.js库文件，你就可以在 客户端浏览器上运行你所熟悉的PHP函数了。比如md5(),date(),mktime(),base64_decode()。 该项目还提供了javascript原生并不支持的一些功能，比如file_get_contents(), mktime(), serialize()等 开发语言： JavaScript PHP 操作系统： 跨平台  软件主页： http://phpjs.org/ 文档地址： 下载地址： http://phpjs.org/packages/view/php.default.min.js]]></description>
			<content:encoded><![CDATA[<div id="p_outline">
<p><img src="http://www.oschina.net/uploads/img/200910/26162405_v6bG.png" alt="" /></p>
<p><span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/php-js/" title="View all posts in PHP.JS" target="_blank">PHP.JS</a></span>是一个开源项目，它将PHP中的部分函数功能移植到<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/javascript/" title="View all posts in javascript" target="_blank">javascript</a></span>中。只要在你的项目里包括这个php.js库文件，你就可以在 客户端浏览器上运行你所熟悉的PHP函数了。比如md5(),date(),mktime(),base64_decode()。</p>
<p>该项目还提供了<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/javascript/" title="View all posts in javascript" target="_blank">javascript</a></span>原生并不支持的一些功能，比如file_get_contents(), mktime(), serialize()等</p>
</div>
<ul>
<li>开发语言： <a href="http://www.oschina.net/project/lang/28/javascript">JavaScript</a> <a href="http://www.oschina.net/project/lang/22/php">PHP</a></li>
<li>操作系统： <a>跨平台</a> </li>
<li>软件主页： <a href="http://phpjs.org/" target="_blank">http://phpjs.org/</a></li>
<li>文档地址：</li>
<li>下载地址： <a href="http://phpjs.org/packages/view/php.default.min.js" target="_blank">http://phpjs.org/packages/view/php.default.min.js</a></li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2010/01/p-h-p-de-j-a-v-a-s-c-r-i-p-t-kuang-jia-p-h-p-j-s/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php webservice soap简单实例</title>
		<link>http://www.hebaodans.com/2010/01/p-h-p-w-e-b-s-e-r-v-i-c-e-s-o-a-p-jian-dan-shi-li/</link>
		<comments>http://www.hebaodans.com/2010/01/p-h-p-w-e-b-s-e-r-v-i-c-e-s-o-a-p-jian-dan-shi-li/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 20:52:24 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[php soap]]></category>
		<category><![CDATA[php webservice]]></category>
		<category><![CDATA[webservice实例]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=715</guid>
		<description><![CDATA[这边一直在用webservice soap,平时只简单的使用一下接口，对其中的原理未曾理解 今天特意做一个简单的测试。 server.php *********************** &#60;?php class Basic {     /**      * 返回一个字符串：Hello World!      * @return string      */     public function returnString($test) {         return &#8220;Hello World!&#8221; . $test;     } } $arrOptions = array (     &#8220;uri&#8221; =&#62; &#8220;checkAPI&#8221; ); //设置命名空间 $objSoapServer = new SoapServer(null, $arrOptions); /** * 注册Basic类的所有方法 */ $objSoapServer-&#62;setClass(&#8220;Basic&#8221;); [...]]]></description>
			<content:encoded><![CDATA[<p>这边一直在用webservice soap,平时只简单的使用一下接口，对其中的原理未曾理解</p>
<p>今天特意做一个简单的测试。</p>
<p>server.php</p>
<p>***********************</p>
<p>&lt;?php<br />
class Basic {</p>
<p>    /**<br />
     * 返回一个字符串：Hello World!<br />
     * @return string<br />
     */</p>
<p>    public function returnString($test) {</p>
<p>        return &#8220;Hello World!&#8221; . $test;</p>
<p>    }</p>
<p>}<br />
$arrOptions = array (<br />
    &#8220;uri&#8221; =&gt; &#8220;checkAPI&#8221;<br />
); //设置命名空间</p>
<p>$objSoapServer = new SoapServer(null, $arrOptions);</p>
<p>/**<br />
* 注册Basic类的所有方法<br />
*/</p>
<p>$objSoapServer-&gt;setClass(&#8220;Basic&#8221;);</p>
<p>/**<br />
* 处理请求<br />
*/</p>
<p>$objSoapServer-&gt;handle();<br />
?&gt;</p>
<p>client.php</p>
<p>***********************</p>
<p>&lt;?php</p>
<p>/**<br />
* Client端，首先创建Client对象<br />
*/</p>
<p>$arrOptions = array (<br />
    &#8220;uri&#8221; =&gt; &#8220;checkAPI&#8221;, //设置命名空间<br />
    &#8220;location&#8221; =&gt; &#8220;<a href="http://shili.cn/soap/server.php">http://shili.cn/soap/server.php</a>&#8220;, //设置Server地址<br />
    &#8220;trace&#8221; =&gt; true<br />
);</p>
<p>$objSoapClient = new SoapClient(null, $arrOptions);</p>
<p>/**<br />
* 远程调用<br />
*/</p>
<p>$test = &#8220;ok123&#8243;;</p>
<p>try {<br />
    $strReturn = $objSoapClient-&gt;returnString($test);<br />
} catch (Exception $e) {<br />
}</p>
<p>/**<br />
* 打印结果<br />
*/<br />
echo $strReturn;<br />
?&gt;</p>
<p>测试</p>
<p>***********************</p>
<p><a href="http://shili.cn/soap/client.php">http://shili.cn/soap/client.php</a></p>
<p>输出：</p>
<p>***********************</p>
<p>Hello World!ok123</p>
<p>简单测试只在测试处理流程。<br />
本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/xj2sm/archive/2009/11/28/4896083.aspx">http://blog.csdn.net/xj2sm/archive/2009/11/28/4896083.aspx</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2010/01/p-h-p-w-e-b-s-e-r-v-i-c-e-s-o-a-p-jian-dan-shi-li/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx+php 502 bad gateway解决方法</title>
		<link>http://www.hebaodans.com/2009/03/n-g-i-n-x-p-h-p-5-0-2-b-a-d-g-a-t-e-w-a-y-jie-jue-fang-fa/</link>
		<comments>http://www.hebaodans.com/2009/03/n-g-i-n-x-p-h-p-5-0-2-b-a-d-g-a-t-e-w-a-y-jie-jue-fang-fa/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 09:32:16 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[nginx]]></category>
		<category><![CDATA[502]]></category>
		<category><![CDATA[bad gateway]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=330</guid>
		<description><![CDATA[打开 /usr/local/php/etc/php-fpm.conf       调大以下两个参数(根据服务器实际情况，过大也不行）     &#60;value name=&#8221;max_children&#8221;&#62;1280&#60;/value&#62;       &#60;value name=&#8221;max_requests&#8221;&#62;1000&#60;/value&#62; 可同时参看 nginx 502 bad故障原因及解决方法收集 ]]></description>
			<content:encoded><![CDATA[<p>打开 /usr/local/php/etc/php-fpm.conf</p>
<p>      调大以下两个参数(根据服务器实际情况，过大也不行）</p>
<p>    &lt;value name=&#8221;max_children&#8221;&gt;1280&lt;/value&gt;</p>
<p>      &lt;value name=&#8221;max_requests&#8221;&gt;1000&lt;/value&gt;</p>
<p>可同时参看 <a href="http://www.hebaodans.com/index.php/2009/05/n-g-i-n-x-5-0-2-b-a-d-gu-zhang-yuan-yin-ji-jie-jue-fang-fa-shou-ji/" target="_self">nginx 502 bad故障原因及解决方法收集 </a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2009/03/n-g-i-n-x-p-h-p-5-0-2-b-a-d-g-a-t-e-w-a-y-jie-jue-fang-fa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx php调用kill命令平滑重启nginx</title>
		<link>http://www.hebaodans.com/2009/02/n-g-i-n-x-p-h-p-diao-yong-k-i-l-l-ming-ling-ping-hua-zhong-qi-n-g-i-n-x/</link>
		<comments>http://www.hebaodans.com/2009/02/n-g-i-n-x-p-h-p-diao-yong-k-i-l-l-ming-ling-ping-hua-zhong-qi-n-g-i-n-x/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 10:06:44 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[kill]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[phpz执行root命令]]></category>
		<category><![CDATA[php执行系统命令]]></category>
		<category><![CDATA[sudo]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=225</guid>
		<description><![CDATA[1.新建php文件，输入以下代码 ：   &#60;?php     passthru(escapeshellcmd(&#8220;sudo kill -HUP `cat /usr/local/nginx/nginx.pid`&#8221;)) ?&#62; 2.root权限登陆centos，执行 visudo ,最好用visudo编辑，不容易出现莫名其妙的预防错误。在打开的sudo文件末尾加入以下一行： www ALL=(root) NOPASSWD: /bin/kill, /usr/bin/kill （nginx以www用户运行) 3.如果www用户执行sudo会提示“sorry,sudo must be setuid root.”，登陆root，输入一下命令：    ls -l  /usr/bin/sudo chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo reboot(好像可以不重启，如果不行再reboot) （有网友提到 直接chmod 4111 /usr/bin/sudo即可）]]></description>
			<content:encoded><![CDATA[<p>1.新建php文件，输入以下代码 ：</p>
<p>  &lt;?php</p>
<p>    passthru(escapeshellcmd(&#8220;<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/sudo/" title="View all posts in sudo" target="_blank">sudo</a></span> <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/kill/" title="View all posts in kill" target="_blank">kill</a></span> -HUP `cat /usr/local/<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/nginx/" title="View all posts in nginx" target="_blank">nginx</a></span>/<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/nginx/" title="View all posts in nginx" target="_blank">nginx</a></span>.pid`&#8221;))</p>
<p>?&gt;</p>
<p>2.root权限登陆centos，执行 visudo ,最好用visudo编辑，不容易出现莫名其妙的预防错误。在打开的<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/sudo/" title="View all posts in sudo" target="_blank">sudo</a></span>文件末尾加入以下一行：</p>
<p>www ALL=(root) NOPASSWD: /bin/<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/kill/" title="View all posts in kill" target="_blank">kill</a></span>, /usr/bin/kill</p>
<p>（nginx以www用户运行)</p>
<p>3.如果www用户执行sudo会提示“sorry,sudo must be setuid root.”，登陆root，输入一下命令：</p>
<p>   ls -l  /usr/bin/sudo</p>
<p>chown root:root /usr/bin/sudo</p>
<p>chmod 4755 /usr/bin/sudo</p>
<p>reboot(好像可以不重启，如果不行再reboot)</p>
<p>（有网友提到 直接chmod 4111 /usr/bin/sudo即可）</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2009/02/n-g-i-n-x-p-h-p-diao-yong-k-i-l-l-ming-ling-ping-hua-zhong-qi-n-g-i-n-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Header函数前有输出的重定向问题</title>
		<link>http://www.hebaodans.com/2008/12/php-header-output/</link>
		<comments>http://www.hebaodans.com/2008/12/php-header-output/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 06:23:04 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[header出错]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=186</guid>
		<description><![CDATA[一般做PHP页面重定向时，会用到header函数的location属性，然而在header函数前面有输出时就会报错 比如 &#60;?PHP    echo   &#8220;hello&#8220;;    header(&#8220;Location:http://www.********.com&#8220;);    ?&#62; 解决的方法就是在这段代码前加上一个函数 ob_start(); 代码如下: &#60;?PHP ob_start(); echo   &#8220;hello&#8220;;    header(&#8220;Location:http://www.********.com&#8220;);    ?&#62; 引用一下资料: 自PHP4起，可以通过一些输出缓冲函数来解决这个问题。代价是把所有向浏览器的输出都缓存在服务器，直到下命令发送它们。可以在代码中使用 ob_start() 及 ob_end_flush() 来实现这样的功能，或者通过修改php.ini中的output_buffering配置选项来实现，也可以通过修改服务器配置文件来实现。 转载来源  http://www.zdyi.com/category/php-mysql/page/5]]></description>
			<content:encoded><![CDATA[<p>一般做PHP页面重定向时，会用到header函数的location属性，然而在header函数前面有输出时就会报错</p>
<div class="entry">
<p>比如</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue;">&lt;?PHP</span><span style="color: gray;">   <br />
</span><span style="color: green;">echo</span><span style="color: gray;">   </span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">hello</span><span style="color: #8b0000;">&#8220;</span><span style="color: gray;">;   <br />
</span><span style="color: blue;">header</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">Location:http://www.********.com</span><span style="color: #8b0000;">&#8220;</span><span style="color: olive;">)</span><span style="color: gray;">;   <br />
</span><span style="color: blue;">?&gt;</span></div>
</div>
<p>解决的方法就是在这段代码前加上一个函数 <strong>ob_start();</strong><br />
代码如下:</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue;">&lt;?PHP</span><span style="color: gray;"><br />
</span><span style="color: blue;">ob_start</span><span style="color: olive;">()</span><span style="color: gray;">;<br />
</span><span style="color: green;">echo</span><span style="color: gray;">   </span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">hello</span><span style="color: #8b0000;">&#8220;</span><span style="color: gray;">;   <br />
</span><span style="color: blue;">header</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">Location:http://www.********.com</span><span style="color: #8b0000;">&#8220;</span><span style="color: olive;">)</span><span style="color: gray;">;   <br />
</span><span style="color: blue;">?&gt;</span></div>
</div>
<blockquote><p>引用一下资料:</p>
<p>自PHP4起，可以通过一些输出缓冲函数来解决这个问题。代价是把所有向浏览器的输出都缓存在服务器，直到下命令发送它们。可以在代码中使用 ob_start() 及 ob_end_flush() 来实现这样的功能，或者通过修改php.ini中的output_buffering配置选项来实现，也可以通过修改服务器配置文件来实现。</p>
<p>转载来源  <a href="http://www.zdyi.com/category/php-mysql/page/5">http://www.zdyi.com/category/php-mysql/page/5</a></p></blockquote>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/12/php-header-output/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让你的ECSHOP支持GMAIL SMTP的SSL，php支持smtp ssl</title>
		<link>http://www.hebaodans.com/2008/12/php-gmail-smtp-ssl/</link>
		<comments>http://www.hebaodans.com/2008/12/php-gmail-smtp-ssl/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 01:53:42 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[ECSHOP]]></category>
		<category><![CDATA[GMAIL SMTP]]></category>
		<category><![CDATA[smtp ssl]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=166</guid>
		<description><![CDATA[看到ecshop官方论坛里有很多关于此问题的提问，刚好有空，测试了一下邮箱服务器设置，163邮箱可以正常发送，gmail不能正常发送，自己修改了一下代码，就可顺利发送邮件，解决如下： 1. 检查php是否支持openssh 首先查看phpinfo，查看看PHP是否支持OpenSSL，看到下面的字样，就标示支持OpenSSL。一般现在的PHP都会默认支持的。 OpenSSL support enabled OpenSSL Version OpenSSL 0.9.8b 04 May 2006 2. 修改Discuz!代码 vi includes/cls_smtp.php大概在93行处， 把 $this->connection = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout); 修改 $this->connection = @fsockopen(&#8216;ssl://&#8217;.$this->host, $this->port, $errno, $errstr, $this->timeout); 3. 修改Gmail设置 1.登录到您的 Gmail 帐户。 2.点击任一 Gmail 页顶部的设置。 3.点击橙色框邮件设置中的转发和 POP。 4.选择针对所有邮件启用 POP 或者针对从现在起开始接收的邮件启用 POP。 5.使用 POP 访问 Gmail 邮件后，选择您要对邮件采用的处理方式。 4. 配置ecshop邮件设置 [...]]]></description>
			<content:encoded><![CDATA[<p>看到ecshop官方论坛里有很多关于此问题的提问，刚好有空，测试了一下邮箱服务器设置，163邮箱可以正常发送，gmail不能正常发送，自己修改了一下代码，就可顺利发送邮件，解决如下：<br />
   1. 检查php是否支持openssh<br />
      首先查看phpinfo，查看看PHP是否支持OpenSSL，看到下面的字样，就标示支持OpenSSL。一般现在的PHP都会默认支持的。<br />
      OpenSSL support enabled<br />
      OpenSSL Version OpenSSL 0.9.8b 04 May 2006</p>
<p>   2. 修改Discuz!代码<br />
      vi includes/cls_smtp.php大概在93行处，<br />
      把<br />
      $this->connection = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);<br />
      修改<br />
      $this->connection = @fsockopen(&#8216;ssl://&#8217;.$this->host, $this->port, $errno, $errstr, $this->timeout);</p>
<p>   3. 修改Gmail设置<br />
      1.登录到您的 Gmail 帐户。<br />
      2.点击任一 Gmail 页顶部的设置。<br />
      3.点击橙色框邮件设置中的转发和 POP。<br />
      4.选择针对所有邮件启用 POP 或者针对从现在起开始接收的邮件启用 POP。<br />
      5.使用 POP 访问 Gmail 邮件后，选择您要对邮件采用的处理方式。</p>
<p>   4. 配置ecshop邮件设置<br />
      登录ecshop后台，在左边导航栏，单击【系统设置】-》邮件服务器设置，在邮件服务选择采用其他的SMTP服务,其他的参考下图设置</p>
<p>      ecshop邮箱服务器设置<br />
      然后按发送测试邮件，看到如下图代表发送成功</p>
<p>      现在就可以到邮箱就收看测试邮件了，</p>
<p>   5. 最后验证发送到yahoo，hotmail，163，qq邮箱都能快速收到</p>
<p>转载来源 http://www.lihaixin.com/2008/10/ecshop-support-gmail-409.html</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/12/php-gmail-smtp-ssl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP中$_SERVER的详细用法</title>
		<link>http://www.hebaodans.com/2008/10/php-server-usage/</link>
		<comments>http://www.hebaodans.com/2008/10/php-server-usage/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 10:08:14 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[sever用法]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=130</guid>
		<description><![CDATA[$_SERVER[’PHP_SELF’] #当前正在执行脚本的文件名，与 document root相关。 $_SERVER[’argv’] #传递给该脚本的参数。 $_SERVER[’argc’] #包含传递给程序的命令行参数的个数（如果运行在命令行模式）。 $_SERVER[’GATEWAY_INTERFACE’] #服务器使用的 CGI 规范的版本。例如，“CGI/1.1”。 $_SERVER[’SERVER_NAME’] #当前运行脚本所在服务器主机的名称。 $_SERVER[’SERVER_SOFTWARE’] #服务器标识的字串，在响应请求时的头部中给出。 $_SERVER[’SERVER_PROTOCOL’] #请求页面时通信协议的名称和版本。例如，“HTTP/1.0”。 $_SERVER[’REQUEST_METHOD’] #访问页面时的请求方法。例如：“GET”、“HEAD”，“POST”，“PUT”。 $_SERVER[’QUERY_STRING’] #查询(query)的字符串。 $_SERVER[’DOCUMENT_ROOT’] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。 $_SERVER[’HTTP_ACCEPT’] #当前请求的 Accept: 头部的内容。 $_SERVER[’HTTP_ACCEPT_CHARSET’] #当前请求的 Accept-Charset: 头部的内容。例如：“iso-8859-1,*,utf-8”。 $_SERVER[’HTTP_ACCEPT_ENCODING’] #当前请求的 Accept-Encoding: 头部的内容。例如：“gzip”。 $_SERVER[’HTTP_ACCEPT_LANGUAGE’]#当前请求的 Accept-Language: 头部的内容。例如：“en”。 $_SERVER[’HTTP_CONNECTION’] #当前请求的 Connection: 头部的内容。例如：“Keep-Alive”。 $_SERVER[’HTTP_HOST’] #当前请求的 Host: 头部的内容。 $_SERVER[’HTTP_REFERER’] #链接到当前页面的前一页面的 URL 地址。 $_SERVER[’HTTP_USER_AGENT’] #当前请求的 User_Agent: 头部的内容。 [...]]]></description>
			<content:encoded><![CDATA[<h2><a rel="bookmark" href="http://www.juuyou.com/?p=63"></a></h2>
<p>$_SERVER[’PHP_SELF’] #当前正在执行脚本的文件名，与 document root相关。<br />
$_SERVER[’argv’] #传递给该脚本的参数。<br />
$_SERVER[’argc’] #包含传递给程序的命令行参数的个数（如果运行在命令行模式）。<br />
$_SERVER[’GATEWAY_INTERFACE’] #服务器使用的 CGI 规范的版本。例如，“CGI/1.1”。<br />
$_SERVER[’SERVER_NAME’] #当前运行脚本所在服务器主机的名称。<br />
$_SERVER[’SERVER_SOFTWARE’] #服务器标识的字串，在响应请求时的头部中给出。<br />
$_SERVER[’SERVER_PROTOCOL’] #请求页面时通信协议的名称和版本。例如，“HTTP/1.0”。<br />
$_SERVER[’REQUEST_METHOD’] #访问页面时的请求方法。例如：“GET”、“HEAD”，“POST”，“PUT”。<br />
$_SERVER[’QUERY_STRING’] #查询(query)的字符串。<br />
$_SERVER[’DOCUMENT_ROOT’] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。<br />
$_SERVER[’HTTP_ACCEPT’] #当前请求的 Accept: 头部的内容。<br />
$_SERVER[’HTTP_ACCEPT_CHARSET’] #当前请求的 Accept-Charset: 头部的内容。例如：“iso-8859-1,*,utf-8”。<br />
$_SERVER[’HTTP_ACCEPT_ENCODING’] #当前请求的 Accept-Encoding: 头部的内容。例如：“gzip”。<br />
$_SERVER[’HTTP_ACCEPT_LANGUAGE’]#当前请求的 Accept-Language: 头部的内容。例如：“en”。<br />
$_SERVER[’HTTP_CONNECTION’] #当前请求的 Connection: 头部的内容。例如：“Keep-Alive”。<br />
$_SERVER[’HTTP_HOST’] #当前请求的 Host: 头部的内容。<br />
$_SERVER[’HTTP_REFERER’] #链接到当前页面的前一页面的 URL 地址。<br />
$_SERVER[’HTTP_USER_AGENT’] #当前请求的 User_Agent: 头部的内容。<br />
$_SERVER[’HTTPS’] — 如果通过https访问,则被设为一个非空的值(on)，否则返回off<br />
$_SERVER[’REMOTE_ADDR’] #正在浏览当前页面用户的 IP 地址。<br />
$_SERVER[’REMOTE_HOST’] #正在浏览当前页面用户的主机名。<br />
$_SERVER[’REMOTE_PORT’] #用户连接到服务器时所使用的端口。<br />
$_SERVER[’SCRIPT_FILENAME’] #当前执行脚本的绝对路径名。<br />
$_SERVER[’SERVER_ADMIN’] #管理员信息<br />
$_SERVER[’SERVER_PORT’] #服务器所使用的端口<br />
$_SERVER[’SERVER_SIGNATURE’] #包含服务器版本和虚拟主机名的字符串。<br />
$_SERVER[’PATH_TRANSLATED’] #当前脚本所在文件系统（不是文档根目录）的基本路径。<br />
$_SERVER[’SCRIPT_NAME’] #包含当前脚本的路径。这在页面需要指向自己时非常有用。<br />
$_SERVER[’REQUEST_URI’] #访问此页面所需的 URI。例如，“/index.html”。<br />
$_SERVER[’PHP_AUTH_USER’] #当 PHP 运行在 Apache 模块方式下，并且正在使用 HTTP 认证功能，这个变量便是用户输入的用户名。<br />
$_SERVER[’PHP_AUTH_PW’] #当 PHP 运行在 Apache 模块方式下，并且正在使用 HTTP 认证功能，这个变量便是用户输入的密码。<br />
$_SERVER[’AUTH_TYPE’] #当 PHP 运行在 Apache 模块方式下，并且正在使用 HTTP 认证功能，这个变量便是认证的类型。</p>
<p>$_SERVER[”HTTP_X_FORWARDED_FOR”] #透过代理服务器取得客户端的真实 IP 地址</p>
<p>转载来源：<a href="http://www.juuyou.com/?p=63">http://www.juuyou.com/?p=63</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/10/php-server-usage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP开源程序 大全</title>
		<link>http://www.hebaodans.com/2008/10/php-open-source/</link>
		<comments>http://www.hebaodans.com/2008/10/php-open-source/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 08:22:29 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=122</guid>
		<description><![CDATA[由于太多所以下载地址没有补上,不过这样也好查一点, 只要把名字一复制 到Google搜索就可以到其所提供技术支持的相关官方网站下载 目录 博客 [35] CMS [97] RSS聚合 [6 ] 综合应用 [43] 电子商务 [10] 威客wiki [16] 论坛 [30] 图片相册 [16] 网络办公 [8 ] 项目管理 [10] 开发框架 [33] [博客] Chyrp 国外开源php+mysql 超轻量级开源博客引擎 [博客] EasyTalk 国内开源 php+mysql 迷你博客系统 [博客] AtomPhotoBlog 德国开源相册blog [博客] zomplog 荷兰开源blog [博客] LoudBlog 德国开源 php+mysql 博客 [博客] Sablog 国内 php+mysql 开源博客 [博客] kanglog [...]]]></description>
			<content:encoded><![CDATA[<p>由于太多所以下载地址没有补上,不过这样也好查一点, 只要把名字一复制 到Google搜索就可以到其所提供技术支持的相关官方网站下载</p>
<p>目录<br />
博客    [35]<br />
CMS    [97]<br />
RSS聚合 [6 ]<br />
综合应用   [43]<br />
电子商务   [10]<br />
威客wiki   [16]<br />
论坛    [30]<br />
图片相册   [16]<br />
网络办公   [8 ]<br />
项目管理   [10]<br />
开发框架   [33]</p>
<p>[博客] Chyrp 国外开源php+mysql 超轻量级开源博客引擎<br />
[博客] EasyTalk 国内开源 php+mysql 迷你博客系统<br />
[博客] AtomPhotoBlog 德国开源相册blog<br />
[博客] zomplog 荷兰开源blog<br />
[博客] LoudBlog 德国开源 php+mysql 博客<br />
[博客] Sablog 国内 php+mysql 开源博客<br />
[博客] kanglog 国内开源PHP+MYSQL博客<br />
[博客] Pivot 国外开源 log 程序<br />
[博客] ExpLog 国内开源PHP+MYSQL博客程序<br />
[博客] nbs博客( n-blog system)支持无限级分类<br />
[博客] BirdBlog<br />
[博客] Bluetrait 国外开源php+mysql<br />
[博客] Brim 国外开源博客<br />
[博客] bevolution<br />
[博客] SimplePHPBlog 国外PHP开源blog<br />
[博客] bBlog<br />
[博客] LifeType &#8211; 开源Blog平台<br />
[博客] wordpress<br />
[博客] microBlog 国外BLOG程序<br />
[博客] eggblog 国外BLOG程序<br />
[博客] LoveBlog 国外BLOG程序<br />
[博客] bo-blog 国内开源PHP BLOG<br />
[博客] saysay blog<br />
[博客] PWBlog 多用户BLOG系统<br />
[博客] GuppY CMS<br />
[博客] Fblog<br />
[博客] emlog 单用户博客系统<br />
[博客] sBlog 国外PHP开源blog<br />
[博客] Serendipity blog 国外PHP开源blog<br />
[博客] Simplog 国外PHP开源blog<br />
[博客] Webmobo blog 国外PHP开源blog<br />
[博客] wikyblog 非常不错的BLOG系统<br />
[博客] pligg 国外开源BLOG<br />
[博客] Nucleus &#8211; 流行的开源Blog系统<br />
[博客] Magike Blog 单用户博客系统</p>
<p>[CMS] weenCompany闻名企业网站系统<br />
[CMS] 行业之星网站服务系统 国内开源 php+mysql<br />
[CMS] Pheap! Making content management simple 国外开源 php+mysql cms<br />
[CMS] bcoos 国外开源 php+mysql cms<br />
[CMS] phpWebSite教育机构开发 国外开源 php+mysql cms<br />
[CMS] cms 国外开源 php+mysql cms<br />
[CMS] FuzzyLime(cms) 国外开源 php+mysql cms<br />
[CMS] RunCMS 国外开源 php+mysql cms<br />
[CMS] Contrexx 国外开源 php+mysql cms<br />
[CMS] gelatocms 国外开源 php+mysql cms<br />
[CMS] Deepthroat 深喉咙企业网站生成系统 国内开源cms<br />
[CMS] Hutula 网站内容管理及社区化系统<br />
[CMS] LazyCMS 国内开源 php+mysql<br />
[CMS] CMSimple php+文本 国外开源CMS<br />
[CMS] elgg 国外开源 php+mysql cms<br />
[CMS] zeroboard 韩国开源PHP+MYSQL CMS支持中文<br />
[CMS] DreamArticle 国内开源PHP+MYSQL CMS<br />
[CMS] JAF CMS 国外PHP+MYSQL 开源CMS系统<br />
[CMS] LokiCMS 国外PHP+MYSQL 开源CMS系统<br />
[CMS] siteman cms 国外PHP+MYSQL 开源CMS系统<br />
[CMS] sNews Cms 国外PHP+MYSQL 小型开源CMS系统<br />
[CMS] transLucid 国外PHP+MYSQL 小型开源CMS系统<br />
[CMS] PHPWMS(PHP Web Manage System) 国内开源PHP+MYSQL<br />
[CMS] ULCms 国内开源PHP+MYSQL CMS<br />
[CMS] gelato cms<br />
[CMS] Caravel cms<br />
[CMS] MuCMS<br />
[CMS] Sitellite<br />
[CMS] BIGACE 多语言和多用户内容管理系统<br />
[CMS] AIOCP cms<br />
[CMS] SAPID<br />
[CMS] wos<br />
[CMS] phundament<br />
[CMS] TYPOlight webCMS<br />
[CMS] V CMS<br />
[CMS] silverstripe cms<br />
[CMS] PHPX cms<br />
[CMS] ZeusCMS cms<br />
[CMS] Campsite cms<br />
[CMS] DBHcms<br />
[CMS] MODx 国外 开源PHP+MYSQL CMS<br />
[CMS] Netious 国外开源CMS<br />
[CMS] Oscailt 国外开源CMS<br />
[CMS] Jupiter CMS 国外PHP开源CMS<br />
[CMS] maxdev CMS 国外PHP开源CMS<br />
[CMS] Ovidentia CMS 国外PHP开源CMS<br />
[CMS] PHP-Fusion CMS 国外PHP开源CMS<br />
[CMS] phpComasy CMS 国外PHP开源CMS<br />
[CMS] phpSlash CMS 国外PHP开源CMS<br />
[CMS] Plume CMS. 国外PHP开源CMS<br />
[CMS] toendaCMS 国外PHP开源CMS<br />
[CMS] eXV Core CMS 国外PHP开源CMS<br />
[CMS] Exponent CMS 国外PHP开源CMS<br />
[CMS] Dragonfly CMS 国外 php+mysql开源 cms<br />
[CMS] Dragonfly CMS 国外 php+mysql开源 cms<br />
[CMS] e CMS 国外 php+mysql开源 cms 支持中文<br />
[CMS] eZ Publish CMS<br />
[CMS] CuteNews 国外开源新闻系统 php+文本<br />
[CMS] Etomite cms 国外开源cms php+mysql<br />
[CMS] JTBC 国内开源 cms<br />
[CMS] JTBC网站内容管理系统<br />
[CMS] tattertools 简称：tt 支持中文<br />
[CMS] Papoo 德国开源的Cms内容管理系统<br />
[CMS] xlite PHP+mysql 内容管理系统<br />
[CMS] MePHP CMS<br />
[CMS] Website Baker 国外CMS开源系统<br />
[CMS] Tikiwiki 多国语言版 CMS<br />
[CMS] PHPX cms 国外PHPCMS<br />
[CMS] textpattern 国外开源多语言CMS系统<br />
[CMS] SPIP cms 国外PHPCMS 支持中文<br />
[CMS] Quick.Cms 国外免费开源CMS<br />
[CMS] DedeCms 国内开源PHP+MYSQL CMS<br />
[CMS] EvoArticles 国外CMS<br />
[CMS] pubsite<br />
[CMS] phpwcms<br />
[CMS] Phpcms<br />
[CMS] Dm网站管理系统<br />
[CMS] Jetbox 国外开源CMS<br />
[CMS] Jaws cms 国外多功能开源CMS<br />
[CMS] Joomla 国外开源CMS<br />
[CMS] bitweaver 高度模块化的内容管理系统<br />
[CMS] xaraya 国外开源CMS<br />
[CMS] CMS Made Simple 国外CMS<br />
[CMS] contentNow 国外CMS<br />
[CMS] drupal 国外CMS<br />
[CMS] EcwCMS 国外CMS<br />
[CMS] Fundanemt 国外CMS<br />
[CMS] Geeklog 国外CMS<br />
[CMS] Mambo 曼波<br />
[CMS] XOOPS<br />
[CMS] Breeze 文章管理系统<br />
[CMS] Line CMS 国外开源CMS<br />
[CMS] E路文章系统PHP(Elook Article System.PHP)<br />
[CMS] typo 国外开源CMS系统<br />
[CMS] 情感家园企业站程序CMS<br />
[CMS] phparticle 文章管理系统<br />
[CMS] php整站系统 CMS</p>
<p>[RSS聚合] MagpieRSS<br />
[RSS聚合] Lilina<br />
[RSS聚合] SimplePie<br />
[RSS聚合] 开源 iXNA 聚合程序<br />
[RSS聚合] Gregarius–开源RSS聚合程序<br />
[RSS聚合] Tiny Tiny RSS (国外开源RSS聚合程序)</p>
<p>[综合应用] ThinkSNS 社会化网络(sns) 月日正式免费开源下载<br />
[综合应用] Piwik php开源统计程序 php+mysql 国外开源<br />
[综合应用] PHP点评系统 Modoer(Mudder) 国内开源 php+mysql<br />
[综合应用] phpSysInfo 系统探针<br />
[综合应用] 斗兽棋php开发在线游戏online<br />
[综合应用] 中国象棋php开发在线游戏online<br />
[综合应用] Friends! php+mysql婚恋交友系统 国内开源<br />
[综合应用] phpMyBackupPro 国外开源 多功能数据库备份工具 php+文本<br />
[综合应用] MySQL Sidu 数据库在线管理工具<br />
[综合应用] 本生理财 php+mysql国内开源免费的个人财富管理系统<br />
[综合应用] Scuttle 国外开源 php+mysql bookmarking system 在线书签管理器</p>
<p>[综合应用] Aardvark Topsites PHP 国外多语言多风格的排行榜系统<br />
[综合应用] PBDigg 开源Dig社区系统 php + mysql Smarty模板技术<br />
[综合应用] Diggclone digg php+mysql 国外开源DIGG程序<br />
[综合应用] Pligg digg php+mysql 国外开源DIGG程序<br />
[综合应用] PHPDug digg php+mysql 国外多国语言开源DIGG程序 支持中文<br />
[综合应用] Owl Intranet Engine<br />
[综合应用] SimpleDoc<br />
[综合应用] DocMgr<br />
[综合应用] PHP Navigator<br />
[综合应用] CuteFlow<br />
[综合应用] phpMyBackupPro<br />
[综合应用] DaDaBIK<br />
[综合应用] TurboDbAdmin<br />
[综合应用] paFileDB 国外PHP+MYSQL下载系统<br />
[综合应用] PHPizabi 国外开源php+mysql 交友系统<br />
[综合应用] phpMyChat &#8211; 优秀的开源聊天室程<br />
[综合应用] PHP Classifieds php+mysql 分类信息 国外开源<br />
[综合应用] adlogger 优秀的开源google adsense广告点击统计<br />
[综合应用] phpnuke是一套开放源码建站程序<br />
辑器<br />
[工具资源] TinyMCE<br />
[工具资源] 在线网页编辑插件(用浏览器编辑后所见即所得)FCKeditor<br />
[工具资源] PHP+MYSQL开发工具及资源收藏<br />
[工具资源] MPSPHPDESIGNER PHP开发工具</p>
<p>[综合应用] boastMachine<br />
[综合应用] phpadsnew 国外开源广告管理系统php+mysql<br />
[综合应用] Ep-Dev Whois 一款国外的域名whois查询工具 PHP+TXT<br />
[综合应用] phpMyVisites 国外多语言开源PHP+MYSQL统计系统<br />
[综合应用] phpFormGenerator 在线表单生成<br />
[综合应用] PHPlot 在线绘制曲线图<br />
[综合应用] PHPLand Movie<br />
[综合应用] ppwind影视系统<br />
[综合应用] phpMSAdmin 基于WEB 管理MS SQL 数据库的工具 图形化操作<br />
[综合应用] phpPgAdmin PostgreSQL数据库管理工具<br />
[综合应用] NetFTP 基于web的FTP服务<br />
[综合应用] evoTopsites 国外网站排名系统<br />
[综合应用] PHPCMS文件管理器</p>
<p>[电子商务] 友邻(ualink) 国内开源免费bb行业门户网站<br />
[电子商务] MvM mall国内开源电子商务 php+mysql网店系统<br />
[电子商务] Opencart v.. 多语言版 php+mysql 商城<br />
[电子商务] osCommerce 网店系统<br />
[电子商务] ECSHOP 免费网店系统<br />
[电子商务] Zen Cart 开源网店程序<br />
[电子商务] Soobic! 开源网店系统<br />
[电子商务] phpShop 国外开源网店系统<br />
[电子商务] CubeCart 国外免费开源的购物车程序<br />
[电子商务] Soolan ShoopD webshop 国内php+mysql开源免费网店系统</p>
<p>[威客wiki] phpsay (家族+贴吧+维客)<br />
[威客wiki] Flux CMS Wiki<br />
[威客wiki] DokuWiki 国外PHP+文本 开源wiki<br />
[威客wiki] PmWiki<br />
[威客wiki] PhpWiki<br />
[威客wiki] CooCooWakk<br />
[威客wiki] Tikiwiki 优秀网站内容管理系统 PHP+ADOdb+Smarty<br />
[威客wiki] MediaWiki PHP+MySQL<br />
[威客wiki] 互动在线开源维客系统<br />
[威客wiki] RAICO 威客平台<br />
[威客wiki] Wikka Wiki 国外PHP+mysql 开源wiki<br />
[威客wiki] wikepage 国外PHP+文本 开源wiki<br />
[威客wiki] WackoWiki 国外PHP+mysql 开源wiki<br />
[威客wiki] UniWakka 国外PHP+mysql 开源wiki<br />
[威客wiki] QwikiWiki 国外PHP+文本 开源wiki<br />
[威客wiki] ErfanWiki 国外PHP+文本 开源wiki</p>
<p>[论坛] fuzzylime (forum) 国外开源 php+mysql 论坛<br />
[论坛] VcanFly Board 国内开源 论坛 php+文本<br />
[论坛] phpbb国外开源 php+mysql 论坛bbs<br />
[论坛] BMForum 国内完全开放源代码 PHP+MYSQL<br />
[论坛] FTBBS 飞天论坛 国内开源(PHP版)<br />
[论坛] Ofstar PHP+文本论坛<br />
[论坛] CTB 非常不错的PHP+文本 论坛<br />
[论坛] MolyX Board<br />
[论坛] Phorum forum system Stable!<br />
[论坛] Vanilla 国外开源的论坛程序<br />
[论坛] DISCUZ<br />
[论坛] phpwind<br />
[论坛] bbPress 国外开源的小型论坛程序<br />
[论坛] PunBB 国外开源BBS系统<br />
[论坛] Simple Machines Forum论坛<br />
[论坛] 落叶松文本论坛 PHP+文本<br />
[论坛] PBLang 文本论坛<br />
[论坛] IceBB<br />
[论坛] UseBB 国外开源论坛<br />
[论坛] MercuryBoard 国外小型论坛程序(小巧、功能强大)<br />
[论坛] Beehive 国外php+mysql开源论坛<br />
[论坛] miniBB 国外php+mysql开源论坛 简洁高效<br />
[论坛] MyBB 国外php+mysql开源论坛<br />
[论坛] OvBB 国外php+mysql开源论坛<br />
[论坛] UNB 国外php+mysql开源论坛<br />
[论坛] w-Agora 国外php+mysql开源论坛<br />
[论坛] XMB 国外php+mysql开源论坛<br />
[论坛] DeluxeBB 国外php+mysql开源论坛<br />
[论坛] QuickSilver 国外php+mysql开源论坛<br />
[论坛] 动网论坛PHP    [图片相册] PHPYou国内开源图库相册系统</p>
<p>[图片相册] iFoto   国外 php开源 相册图片<br />
[图片相册] zenphoto 国外相册PHP+MYSQL<br />
[图片相册] MG 国外php+文本 相册<br />
[图片相册] singapore 国外相册<br />
[图片相册] PAILA 在线大头贴<br />
[图片相册] images 德国 php开源 相册图片<br />
[图片相册] WEBalbum 国外 php开源 相册图片<br />
[图片相册] TinyWebGallery 国外 php开源 相册图片<br />
[图片相册] Plogger 国外 php开源 相册图片<br />
[图片相册] Pixelpost   国外 php开源 相册图片<br />
[图片相册] PhpWebGallery 国外 php开源 相册图片<br />
[图片相册] nzFotolog 国外 php开源 相册图片<br />
[图片相册] DAlbum 国外 php开源 相册图片<br />
[图片相册] Coppermine国外 php开源 相册图片 支持中文<br />
[图片相册] Gallery 国外 php开源 相册图片</p>
<p>[网络办公] DocumentManager<br />
[网络办公] EyeOS<br />
[网络办公] NetOffice &#8211; 开源协同办公解决方案<br />
[网络办公] SugarCRM &#8212; 国外开源客户关系管理系统（支持中文）<br />
[网络办公] ACollab 群组管理-multi-group<br />
[网络办公] more.groupware 基于Web采用PHP开发的办公套件 [网络办公] phpGroupWare PHP编写多用户的网络组件<br />
[网络办公] eGroupWare   群组管理-多国语言，支持中文</p>
<p>[项目管理] 龙升客户关系管理系统 国内开源 php+mysql<br />
[项目管理] PHPGEN代码生成系统<br />
[项目管理] BugFree 研发流程和Bug管理<br />
[项目管理] Epiware<br />
[项目管理] Bug Tracker 软件缺陷追踪系统<br />
[项目管理] Achievo 基于WEB的用于商业环境的项目管理工具<br />
[项目管理] dotProject基于LAMP的开源项目管理软件<br />
[项目管理] Streber 基于wiki的项目管理工具<br />
[项目管理] WebCollab 基于Web的协作系统,用于项目管理<br />
[项目管理] phpCoin</p>
<p>[开发框架] PHPRPC<br />
[开发框架] PA<br />
[开发框架] Picora<br />
[开发框架] Tigermouse<br />
[开发框架] symfony<br />
[开发框架] Zephyr Framework<br />
[开发框架] Zoop Framework<br />
[开发框架] PHPGo<br />
[开发框架] Studs<br />
[开发框架] Luta framework<br />
[开发框架] SolarPHP<br />
[开发框架] Stratos<br />
[开发框架] PHPLIB<br />
[开发框架] FleaPHP<br />
[开发框架] LIMBAS<br />
[开发框架] VertrigoServ<br />
[开发框架] CodeIgniter MVC PHP 框架<br />
[开发框架] WACT 模板引擎<br />
[开发框架] web.framework<br />
[开发框架] Achievo ATK<br />
[开发框架] ZNF<br />
[开发框架] php.MVC<br />
[开发框架] Akelos Framework PHP开发框架<br />
[开发框架] strutsphp<br />
[开发框架] CakePHP<br />
[开发框架] Qcodo<br />
[开发框架] FastFrame<br />
[开发框架] InterJinn<br />
[开发框架] Prado<br />
[开发框架] PHP on Trax<br />
[开发框架] Seagull<br />
[开发框架] Binarycloud PHP Web开发框架<br />
[开发框架] ThinkPHP<br />
[开源相关] [置顶] 关于php是什么文件?用哪些软件可以打开</p>
<p>[工具资源] KindEditor 所见即所得(WYSWYG)HTML在线编辑器<br />
[工具资源] PHP加速器 eAccelerator<br />
[工具资源] SPAW web based WYSIWYG editor control<br />
[工具资源] Free TextBox在线编辑器<br />
[工具资源] TinyMCE<br />
[工具资源] 在线网页编辑插件(用浏览器编辑后所见即所得)FCKeditor<br />
[工具资源] PHP+MYSQL开发工具及资源收藏<br />
[工具资源] MPSPHPDESIGNER PHP开发工具<br />
[工具资源] 常用编辑器推荐</p>
<p>[技巧教程] 让你的WINDOWS同时支持MYSQL，MYSQL.,MYSQLX<br />
[技巧教程] 分享PHP入门的学习方法<br />
[技巧教程] IIS.+PHP.x+MySQL.x+Zend.x+GD+phpMyAdmin.x通用安装实例<br />
[技巧教程] 关于什么是php脚本和格式</p>
<p>[工具资源] KindEditor 所见即所得(WYSWYG)HTML在线编辑器 [工具资源] PHP加速器 eAccelerator<br />
[工具资源] SPAW web based WYSIWYG editor control<br />
[工具资源] Free TextBox在线编<br />
转载来源:http://hi.baidu.com/gfan/blog/item/f6a8d92a2928f128d42af1ac.html</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/10/php-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP调用Webservice实例</title>
		<link>http://www.hebaodans.com/2008/09/php-webservice-soap-nusoap/</link>
		<comments>http://www.hebaodans.com/2008/09/php-webservice-soap-nusoap/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:55:02 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[nusoap]]></category>
		<category><![CDATA[php webservice]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservice实例]]></category>
		<category><![CDATA[调用webservice]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=108</guid>
		<description><![CDATA[NuSoap是PHP环境下的WebService编程工具，用于创建或调用WebService。它是一个开源软件，是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类，由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发。NuSOAP的一个优势是不需要扩展库的支持，这种特性使得NuSoap可以用于所有的PHP环境，不受服务器安全设置的影响。　　 方法一：直接调用 &#60;? /******************************************************************************/ /*  文件名 : soapclient.php /*  说  明 : WebService接口客户端例程 /******************************************************************************/ include(&#8216;NuSoap.php&#8217;); // 创建一个soapclient对象，参数是server的WSDL $client = new soapclient(&#8216;http://localhost/Webservices/Service.asmx?WSDL&#8217;, &#8216;wsdl&#8217;); // 参数转为数组形式传递 $aryPara = array(&#8216;strUsername&#8217;=&#62;&#8217;username&#8217;, &#8216;strPassword&#8217;=&#62;MD5(&#8216;password&#8217;)); // 调用远程函数 $aryResult = $client-&#62;call(&#8216;login&#8217;,$aryPara); //echo $client-&#62;debug_str; /* if (!$err=$client-&#62;getError()) {   print_r($aryResult); } else {   print &#8220;ERROR: $err&#8221;; } */ $document=$client-&#62;document; echo &#60;&#60;&#60;SoapDocument &#60;?xml [...]]]></description>
			<content:encoded><![CDATA[<p>NuSoap是PHP环境下的WebService编程工具，用于创建或调用WebService。它是一个开源软件，是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类，由NuSphere Corporation(<a href="http://dietrich.ganx4.com/nusoap/">http://dietrich.ganx4.com/nusoap/</a> )开发。NuSOAP的一个优势是不需要扩展库的支持，这种特性使得NuSoap可以用于所有的PHP环境，不受服务器安全设置的影响。　　</p>
<p><strong>方法一：直接调用</strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>&lt;?<br />
/******************************************************************************/<br />
/*  文件名 : soapclient.php<br />
/*  说  明 : WebService接口客户端例程<br />
/******************************************************************************/<br />
include(&#8216;NuSoap.php&#8217;);</p>
<p>// 创建一个soapclient对象，参数是server的WSDL<br />
$client = new soapclient(&#8216;http://localhost/Webservices/Service.asmx?WSDL&#8217;, &#8216;wsdl&#8217;);</p>
<p>// 参数转为数组形式传递<br />
$aryPara = array(&#8216;strUsername&#8217;=&gt;&#8217;username&#8217;, &#8216;strPassword&#8217;=&gt;MD5(&#8216;password&#8217;));</p>
<p>// 调用远程函数<br />
$aryResult = $client-&gt;call(&#8216;login&#8217;,$aryPara);</p>
<p>//echo $client-&gt;debug_str;<br />
/*<br />
if (!$err=$client-&gt;getError()) {<br />
  print_r($aryResult);<br />
} else {<br />
  print &#8220;ERROR: $err&#8221;;<br />
}<br />
*/</p>
<p>$document=$client-&gt;document;<br />
echo &lt;&lt;&lt;SoapDocument<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;GB2312&#8243;?&gt;<br />
 &lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:SOAP-ENV=&#8221;<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>&#8221; xmlns:xsd=&#8221;<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>&#8221; xmlns:xsi=&#8221;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&#8221; xmlns:SOAP-ENC=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:si=&#8221;<a href="http://soapinterop.org/xsd">http://soapinterop.org/xsd</a>&#8220;&gt;<br />
   &lt;SOAP-ENV:Body&gt;<br />
   $document<br />
   &lt;/SOAP-ENV:Body&gt;<br />
 &lt;/SOAP-ENV:Envelope&gt;<br />
SoapDocument;</p>
<p>?&gt;</p>
</div>
<p><strong><br />
方法二：代理方式调用</strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>&lt;?<br />
/******************************************************************************/<br />
/*  文件名 : soapclient.php<br />
/*  说  明 : WebService接口客户端例程<br />
/******************************************************************************/<br />
require(&#8216;NuSoap.php&#8217;);</p>
<p>//创建一个soapclient对象，参数是server的WSDL<br />
$client=new soapclient(&#8216;http://localhost/Webservices/Service.asmx?WSDL&#8217;, &#8216;wsdl&#8217;);</p>
<p>//生成proxy类<br />
$proxy=$client-&gt;getProxy();</p>
<p>//调用远程函数<br />
$aryResult=$proxy-&gt;login(&#8216;username&#8217;,MD5(&#8216;password&#8217;));</p>
<p>//echo $client-&gt;debug_str;<br />
/*<br />
if (!$err=$proxy-&gt;getError()) {<br />
  print_r($aryResult);<br />
} else {<br />
  print &#8220;ERROR: $err&#8221;;<br />
}<br />
*/</p>
<p>$document=$proxy-&gt;document;<br />
echo &lt;&lt;&lt;SoapDocument<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;GB2312&#8243;?&gt;<br />
 &lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:SOAP-ENV=&#8221;<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>&#8221; xmlns:xsd=&#8221;<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>&#8221; xmlns:xsi=&#8221;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&#8221; xmlns:SOAP-ENC=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:si=&#8221;<a href="http://soapinterop.org/xsd">http://soapinterop.org/xsd</a>&#8220;&gt;<br />
   &lt;SOAP-ENV:Body&gt;<br />
   $document<br />
   &lt;/SOAP-ENV:Body&gt;<br />
 &lt;/SOAP-ENV:Envelope&gt;<br />
SoapDocument;</p>
<p>?&gt;</p>
</div>
<p>　　许多使用NuSoap 调用.NET WebService或J2EE  WebService的朋友可能都遇到过中文乱码问题，下面介绍这一问题的出现的原因和相应的解决方法。</p>
<p>　　<strong>NuSoap调用WebService出现乱码的原因：</strong></p>
<p>　　通常我们进行WebService开发时都是用的UTF-8编码，这时我们需要设置：</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>$client-&gt;soap_defencoding = &#8216;utf-8&#8242;;</p>
</div>
<p>　　同时，需要让xml以同样的编码方式传递：</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>$client-&gt;xml_encoding = &#8216;utf-8&#8242;;</p>
</div>
<p> 　　至此应该是一切正常了才对，但是我们在输出结果的时候，却发现返回的是乱码。</p>
<p>　　<strong>NuSoap调用WebService出现乱码的解决方法：</strong></p>
<p>　　实际上，开启了调试功能的朋友，相信会发现$client-&gt;response返回的是正确的结果，为什么$result = $client-&gt;call($action, array(&#8216;parameters&#8217; =&gt; $param)); 却是乱码呢？</p>
<p>　　研究过NuSoap代码后我们会发现，当xml_encoding设置为UTF-8时，NuSoap会检测decode_utf8的设置，如果为true，会执行 PHP 里面的utf8_decode函数，而NuSoap默认为true，因此，我们需要设置：</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>$client-&gt;soap_defencoding = &#8216;utf-8&#8242;;<br />
$client-&gt;decode_utf8 = false;<br />
$client-&gt;xml_encoding = &#8216;utf-8&#8242;;</p>
</div>
<p>补充介绍</p>
<p><span style="font-size: x-small;">NuSOAP 是 PHP 环境下的 WEB 服务编程工具，用于创建或调用 WEB 服务。它是一个开源软件，当前版本是 0.7.2 ，支持 SOAP1.1 、 WSDL1.1 ，可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写，由一系列 PHP 类组成，不需要扩展库的支持，这种特性使得 NuSOAP 可以用于所有的 PHP 环境，不受服务器安全设置的影响。<br />
 <br />
1. NuSOAP 的获取和安装<br />
NuSOAP 项目建立在 SourceForge 上，网络地址是： </span><a href="http://sourceforge.net/projects/nusoap/"><span style="font-size: x-small;">http://sourceforge.net/projects/<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/nusoap/" title="View all posts in nusoap" target="_blank">nusoap</a></span>/</span></a><span style="font-size: x-small;"> ，这里，可以下载到 NuSOAP 的最新的版本。 </span></p>
<h1>
<h2><span style="font-size: x-small;">NuSOAP 的安装比较简单，把下载的 NuSOAP 的文件拷贝到服务器上，可以放在独立的目录里，也可以与程序代码放在相同的目录里，只要你的 PHP 代码能够访问到这些文件就可以了。 </span></h2>
<h2><span style="font-size: x-small;">本文的测试环境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本， NuSOAP 安装在 WEB 目录“ /<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/nusoap/" title="View all posts in nusoap" target="_blank">nusoap</a></span> ”里，有两个子目录， lib 和 samples 。其中， lib 目录下存放 NuSOAP 的所有源代码文件， samples 目录下是NuSOAP开发小组提供一些的例子。测试文件存放在 WEB 目录“ /nusoap ”里。 </span></h2>
<h2><span style="font-size: x-small;"> <br />
2. NuSOAP 的使用<br />
NuSOAP 由一 PHP 的类组成，其中最常用到的是类soap_server和类soalclient。类soap_server 用于创建 WEB 服务，类soapclient在访问WEB服务时会用到。 </span></h2>
<h2><span style="font-size: x-small;">2.1 一个简单的例子： Hello World<br />
这个例子将利用 NuSOAP 创建一个简单的 WEB 服务，并利用 NuSOAP 创建一个客户端程序，调用这个服务。这个服务唯一的功能就是向客户端返回一个字符串“ Hello World ”。首先，创建 WEB 服务程序代码文件“ /nusoap/nusoap_server1.php ”： </span></h2>
<h2><span style="font-size: x-small;">//把 NuSOAP 的源文件包含到当前的代码文件里<br />
&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;); </span></h2>
<h2><span style="font-size: x-small;">//定义服务程序<br />
function hello() {<br />
  return &#8216;Hello World!&#8217;;<br />
} </span></h2>
<h2><span style="font-size: x-small;">//初始化服务对象 , 这个对象是类 soap_server 的一个实例<br />
$<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/soap/" title="View all posts in soap" target="_blank">soap</a></span> = new soap_server; //调用服务对象的 register 方法注册需要被客户端访问的程序。<br />
//只有注册过的程序，才能被远程客户端访问到。<br />
$<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/soap/" title="View all posts in soap" target="_blank">soap</a></span>-&gt;register(&#8216;hello&#8217;); //最后一步，把客户端通过 post 方式提交的数据，传递给服务对象的 service 方法。<br />
//service 方法处理输入的数据，调用相应的函数或方法，并且生成正确的反馈，传回给客户端。<br />
$<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/soap/" title="View all posts in soap" target="_blank">soap</a></span>-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 至此， WEB 服务程序代码文件已经建好，接下来，创建一个客户端程序代码文件“ /nusoap/nusoap_client1.php ”，调用 WEB 服务： </span></h2>
<h2><span style="font-size: x-small;">//把 NuSOAP 的源文件包含到当前的代码文件里<br />
&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">//初始化客户端对象，这个对象是类 soapclient 的一个实例，<br />
//把服务程序的 URL 地址传递给soapclient类的构造函数。<br />
$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server1.php&#8217;); //利用客户端对象的 call 方法调用 WEB 服务的程序<br />
$str=$client-&gt;call(&#8216;hello&#8217;); //客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。<br />
//如果没有错误， getError() 方法返回 false ；如果有错误， getError()方法返回错误信息。<br />
if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,htmlentities($str,ENT_QUOTES);<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,htmlentities($err,ENT_QUOTES);<br />
}<br />
?&gt; 至此，客户端程序也建立好了，打开浏览器，访问客户端程序，看一下结果。这个例子，浏览器会显示字符串：“程序返回 :Hello World! ” </span></h2>
<h2><span style="font-size: x-small;">2.2 传递参数和返回错误信息的方法<br />
再通过例子说明传递参数和返回错误信息的方法。这个例子实现两个字符串的连接，参数是两个字符串，返回值是由两个参数连接而成的字符串。首先，创建服务程序代码文件“ /nusoap/nusoap_server2.php ”，完整的代码如下： </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;); </span></h2>
<h2><span style="font-size: x-small;">function concatenate($str1,$str2) {<br />
    if (is_string($str1) &amp;&amp; is_string($str2))<br />
        return $str1 . $str2;<br />
    else<br />
        return new soap_fault(&#8216; 客户端 &#8216;,&#8221;,&#8217;concatenate 函数的参数应该是两个字符串 &#8216;);<br />
}<br />
$soap = new soap_server;<br />
$soap-&gt;register(&#8216;concatenate&#8217;);<br />
$soap-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 与 2.1 节 WEB 服务程序的代码比较，这里的代码结构大体是相同的。注意以下两点：</span></h2>
<h2><span style="font-size: x-small;">服务程序的定义不同，带有两个参数。 NuSOAP 注册服务程序的过程还是一样的，都是调用服务对象的 register 方法。<br />
这里使用了 NuSOAP 的一个新类 soap_fault 。当传入的两个参数有一个不是字符串时，程序通过这个类把错误信息返回给客户端。这个类的构造函数有 4 个参数：<br />
fault</span></h2>
<h2><span style="font-size: x-small;">code<br />
 必填参数 , 建议值为“ Client ”或“ Server ”，指明错误是客户端的错误还是服务端的错误。<br />
 <br />
faultactor<br />
 预留项，现在还没有使用<br />
 <br />
faultstring<br />
 错误的描述信息<br />
 <br />
faultdetail<br />
 可选项， XML 格式的数据 , 说明详细的错误信息 <br />
 </span></h2>
<h2><span style="font-size: x-small;">客户端程序代码文件“ /nusoap/nusoap_client2.php ”的完整内容如下 : </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server2.php&#8217;);<br />
$parameters=array(&#8216; 字符串 1&#8242;,&#8217; 字符串 2&#8242;);<br />
$str=$client-&gt;call(&#8216;concatenate&#8217;,$parameters);</span></h2>
<h2><span style="font-size: x-small;">if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}<br />
?&gt; NuSOAP 的客户端调用带参数的 WEB 服务时，使用数组传递参数。 $parameters 是一个数组，其中依次是每个参数的值。客户端在调用远程的服务程序时，使用带有两个参数的 call 方法，第一个参数是服务程序的名称，第二个参数是服务程序的参数数组，这里是 $parameters 。通过浏览器访问上面的客户端程序，浏览器上会显示字符串：“ 程序返回 : 字符串 1 字符串 2 ” </span></h2>
<h2><span style="font-size: x-small;">接下来，试着给 WEB 服务程序传入错误参数，修改上面的客户端程序，把生成参数数组的语句改成： $parameters=array(“ 字符串 ”,12) ，再通过浏览器访问客户端程序，浏览器上会显示字符串：“错误 : 客户端 : concatenate 函数的参数应该是两个字符串”。 WEB 服务程序判断传入的参数有一个不是字符串，通过 soap_fault 给客户端返回错误信息。 </span></h2>
<h2><span style="font-size: x-small;">2.3 调试的方法<br />
NuSOAP中常用的调试方法有三种:</span></h2>
<h2><span style="font-size: x-small;">2.3.1 soapclient 类的 request 和 response 成员变量<br />
最直接的调试方法就是检查访问 WEB 服务的过程中，客户端发出的 request 信息和服务端返回的 response 信息。 soapclient 类的 request 和 response 成员变量包含这些信息，在程序中显示出这两个变量的内容，可以帮助分析程序运行的情况。看下面的代码:</span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server2.php&#8217;);<br />
$parameters=array(&#8216; 字符串 1&#8242;,&#8217; 字符串 2&#8242;);<br />
$str=$client-&gt;call(&#8216;concatenate&#8217;,$parameters);</span></h2>
<h2><span style="font-size: x-small;">if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}</span></h2>
<h2><span style="font-size: x-small;">//下面显示request和response 变量的内容<br />
echo &#8216;&lt;p/&gt;&#8217;;<br />
echo &#8216;Request:&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217;,htmlspecialchars($client-&gt;request,ENT_QUOTES),&#8217;&lt;/pre&gt;&#8217;;<br />
echo &#8216;Response:&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217;,htmlspecialchars($client-&gt;response,ENT_QUOTES ),&#8217;&lt;/pre&gt;&#8217;;<br />
?&gt;<br />
2.3.2 soapclient 类的 debug_str 成员变量<br />
soapclient 类的 debug_str 成员变量提供了更为详细的调试信息，查看这个变量的内容，可以更好地帮助程序调试。 </span></h2>
<h2><span style="font-size: x-small;">2.3.3 WEB 服务程序提供的调试方法<br />
WEB 服务程序代码中，在创建 soap_server 类的实例前，定义变量 $debug=1 。调试信息作为备注，放在 SOAP 消息的尾部返回客户端，客户端通过查看 WEB 服务的 response 信息来查看调试信息。</span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;); </span></h2>
<h2><span style="font-size: x-small;">function concatenate($str1,$str2) {<br />
    if (is_string($str1) &amp;&amp; is_string($str2))<br />
        return $str1 . $str2;<br />
    else<br />
        return new soap_fault(&#8216; 客户端 &#8216;,&#8221;,&#8217;concatenate 函数的参数应该是两个字符串 &#8216;);<br />
}</span></h2>
<h2><span style="font-size: x-small;">$debug=1; //定义调试<br />
$soap = new soap_server;<br />
$soap-&gt;register(&#8216;concatenate&#8217;);<br />
$soap-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 2.4 对 WSDL 的支持<br />
NuSOAP 内部通过类 &#8220;WSDL&#8221; 实现对 WSDL 的支持。对于 NuSOAP 的用户来说，不需要关心内部的WSDL类是如何工作的，正确地使用 soap_server 类和 soapclient 类就可以实现对 WSDL 的支持。 </span></h2>
<h2><span style="font-size: x-small;">2.4.1 创建支持 WSDL 的 WEB 服务<br />
为了实现 WEB 服务程序对 WSDL 的支持，需要使用 soap_server 的 configureWSDL 方法，并且在调用 soap_server 的 register 方法注册 WEB 服务程序时，需要提供更详细的参数。看下面的代码，代码的文件名是 “/nusoap/nusoap_server3.php”。 </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">function concatenate($str1,$str2) {<br />
    if (is_string($str1) &amp;&amp; is_string($str2))<br />
        return $str1 . $str2;<br />
    else<br />
        return new soap_fault(&#8216; 客户端 &#8216;,&#8221;,&#8217;concatenate 函数的参数应该是两个字符串 &#8216;);<br />
}</span></h2>
<h2><span style="font-size: x-small;">$soap = new soap_server;<br />
$soap-&gt;configureWSDL(&#8216;concatenate&#8217;); // 初始化对 WSDL 的支持</span></h2>
<h2><span style="font-size: x-small;">// 注册服务<br />
$soap-&gt;register(&#8216;concatenate&#8217;,<br />
array(&#8220;str1&#8243;=&gt;&#8221;xsd:string&#8221;,&#8221;str2&#8243;=&gt;&#8221;xsd:string&#8221;), // 输入参数的定义<br />
array(&#8220;return&#8221;=&gt;&#8221;xsd:string&#8221;) // 返回参数的定义<br />
);</span></h2>
<h2><span style="font-size: x-small;">$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : &#8221;;<br />
$soap-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 现在打开浏览器，访问刚才建立的文件，</span><a href="http://127.0.0.1/nusoap/nusoap_server3.php"><span style="font-size: x-small;">http://127.0.0.1/nusoap/nusoap_server3.php</span></a><span style="font-size: x-small;">，结果如下：</span></h2>
<h2><span style="font-size: x-small;">concatenate<br />
View the WSDL for the service. Click on an operation name to view it&#8217;s details.</span></h2>
<h2><span style="font-size: x-small;">concatenate<br />
点击函数名称concatenate，可以看到对函数的描述。点击&#8221;WSDL&#8221;，或者访问WEB服务文件，并在后面加上查询字符串&#8221;?wsdl&#8221;(</span><a href="http://127.0.0.1/nusoap/nusoap_server3.php?wsdl"><span style="font-size: x-small;">http://127.0.0.1/nusoap/nusoap_server3.php?wsdl</span></a><span style="font-size: x-small;">)，可以得到WEB服务的WSDL内容。</span></h2>
<h2><span style="font-size: x-small;">2.4.2 通过 WSDL 调用 WEB 服务<br />
通过 WSDL 调用 WEB 服务，与不通过 WSDL 调用 WEB 服务，程序的结构大体相同。区别在于，通过 WSDL 调用 WEB 服务，初始化 soapclient 类时，传入两个参数到 soapclient 的构造函数，第一个参数是 WSDL 文件的地址，第二个参数指定是否使用 WSDL ，指定为 true 即可。看下面的代码，代码的文件名是 “ /nusoap/nusoap_client3.php ” </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server3.php?wsdl&#8217;,true);<br />
$parameters=array(&#8216; 字符串 1&#8242;,&#8217; 字符串 2&#8242;);</span></h2>
<h2><span style="font-size: x-small;">$str=$client-&gt;call(&#8216;concatenate&#8217;,$parameters);<br />
if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}<br />
?&gt; 2.4.3 代理的使用<br />
NuSOAP 提供代理的方法调用远程 WEB 服务。这种方法，在客户端程序里面创建一个远程服务的代理对象，通过代理直接调用远程的 WEB 服务，而不需要通过 soalclient 类的 call 方法。看下面的代码。 </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server3.php?wsdl&#8217;,true);<br />
$proxy=$client -&gt; getProxy(); // 创建代理对象 (soap_proxy 类 )</span></h2>
<h2><span style="font-size: x-small;">$str=$proxy-&gt;concatenate(&#8221; 参数 1&#8243;,&#8221; 参数 2&#8243;); // 直接调用 WEB 服务<br />
if (!$err=$proxy-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}<br />
?&gt;<br />
</span></h2>
<h2><span style="font-size: x-small;">3. 更多的学习资源 </span></h2>
<ul>
<li><a href="http://dietrich.ganx4.com/nusoap/"><span style="font-size: x-small; color: #006629;">http://dietrich.ganx4.com/nusoap/</span></a><span style="font-size: x-small;"> </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapprog.htm"><span style="font-size: x-small; color: #006629;">Programming with NuSOAP</span></a><span style="font-size: x-small;">. 24 Apr 2003 </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapprog2.htm"><span style="font-size: x-small; color: #006629;">Programming with NuSOAP Part 2</span></a><span style="font-size: x-small;">. 29 May 2003 </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapintro.htm"><span style="font-size: x-small; color: #006629;">Introduction to NuSOAP</span></a><span style="font-size: x-small;">. 03 Nov 2004 </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapprogwsdl.htm"><span style="font-size: x-small; color: #006629;">Programming with NuSOAP Using WSDL</span></a><span style="font-size: x-small;">. 11 Nov 2003 </span></li>
</ul>
</h1>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/09/php-webservice-soap-nusoap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xdebug调试PHP程序</title>
		<link>http://www.hebaodans.com/2008/09/php-debug-xdebug/</link>
		<comments>http://www.hebaodans.com/2008/09/php-debug-xdebug/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 09:38:05 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[php查错]]></category>
		<category><![CDATA[php调试]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=107</guid>
		<description><![CDATA[为什么需要Debugger? 很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等，其实对于有较丰富开发经验的程序员来说这些也已经足够了，他们往往可以在程序执行的过程中，通过输出特定变量的值可以判断程序执行是否正确，甚至效率高低也可以看出来（当然可能还需要使用一些时间函数）。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢？ 这个问题的答案不妨留到后面来揭晓。 什么是Xdebug? Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具)，可以用来跟踪，调试和分析PHP程序的运行状况。Xdebug现在的最新版本是xdebug 2.0.0beta6，支持PHP4/PHP5。 官方站点：www.Xdebug.org 如何安装Xdebug？ 以PHP5.1.4，Windows平台为例（其它PHP版本，其它平台请参看官网文档）： 1． 登录www.xdebug.org，在首页右侧有一个Windows modules，选择其中的PHP5.1.2+，下载php_xdebug-5.1.2-2.0.0beta6.dll文件； 2． 将下载的php_xdebug-5.1.2-2.0.0beta6.dll放到C:\php5\ext目录，重命名为php_xdebug.dll； 3． 编辑php.ini，加入下面几行： extension=php_xdebug.dll [Xdebug] xdebug.profiler_enable=on xdebug.trace_output_dir=&#8221;I:\Projects\xdebug&#8221; xdebug.profiler_output_dir=&#8221;I:\Projects\xdebug&#8221; 后面的目录“I:\Projects\xdebug”为你想要放置Xdebug输出的数据文件的目录，可自由设置。 4． 重启Apache； 5． 写一个test.php，内容为&#60;?php phpinfo(); ?&#62;，如果输出的内容中有看到xdebug，说明安装配置成功。 现在我们就可以开始使用Xdebug强大的功能了！ 使用Xdebug调试和优化PHP程序[2] 作者：Haohappy MSN: haohappy at msn.com Blog: http://blog.csdn.net/haohappy2004 2006-07-04 Go on..现在我们来从最简单的程序调试开始一步步介绍Xdebug。 调试： 我们先写一个可以导致执行出错的程序，例如尝试包含一个不存在的文件。 testXdebug.php &#60;?php require_once(‘abc.php’); ?&#62; 然后通过浏览器访问，我们惊奇地发现，出错信息变成了彩色的了： 不过除了样式改变，和我们平时打印的出错信息内容没什么不同，意义不大。好，我们继续改写程序： testXdebug2.php &#60;?php testXdebug(); function testXdebug() { require_once(&#8216;abc.php&#8217;); [...]]]></description>
			<content:encoded><![CDATA[<div style="margin: 15px;">
<div>
<div class="post">
<div class="postText">
<div><span style="color: #339966;"><strong>为什么需要Debugger?</strong></span></div>
<div>很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等，其实对于有较丰富开发经验的程序员来说这些也已经足够了，他们往往可以在程序执行的过程中，通过输出特定变量的值可以判断程序执行是否正确，甚至效率高低也可以看出来（当然可能还需要使用一些时间函数）。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢？ 这个问题的答案不妨留到后面来揭晓。</div>
<div><span style="color: #339966;"><strong>什么是</strong><strong>Xdebug?</strong></span></div>
<div>Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具)，可以用来跟踪，调试和分析PHP程序的运行状况。Xdebug现在的最新版本是<span><a href="http://www.xdebug.org/link.php?url=xdebug200b6"><span style="color: #0000ff;"><span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/xdebug/" title="View all posts in xdebug" target="_blank">xdebug</a></span> 2.0.0beta6</span></a></span><span>，支持PHP4/PHP5</span><span>。</span></div>
<div><span>官方站点：www.Xdebug.org</span></div>
<div><strong></strong></div>
<div><span style="color: #339966;"><strong>如何安装</strong><strong>Xdebug</strong><strong>？</strong></span></div>
<div>以PHP5.1.4，Windows平台为例（其它PHP版本，其它平台请参看官网文档）：</div>
<div><span><span>1． </span></span>登录<a href="http://www.xdebug.org/"><span style="color: #800080;">www.<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/xdebug/" title="View all posts in xdebug" target="_blank">xdebug</a></span>.org</span></a>，在首页右侧有一个<span>Windows modules</span><span>，选择其中的PHP5.1.2+</span><span>，下载php_xdebug-5.1.2-2.0.0beta6.dll</span><span>文件；</span></div>
<div><span><span>2． </span></span><span>将下载的php_xdebug-5.1.2-2.0.0beta6.dll</span><span>放到C:\php5\ext</span><span>目录，重命名为php_xdebug.dll</span><span>；</span></div>
<div><span><span>3． </span></span><span>编辑php.ini</span><span>，加入下面几行：</span></div>
<div><span>extension=php_xdebug.dll</span></div>
<div><span>[Xdebug]</span></div>
<div><span><span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/xdebug/" title="View all posts in xdebug" target="_blank">xdebug</a></span>.profiler_enable=on</span></div>
<div><span>xdebug.trace_output_dir=&#8221;I:\Projects\xdebug&#8221;</span></div>
<div><span>xdebug.profiler_output_dir=&#8221;I:\Projects\xdebug&#8221; </span></div>
<div><span>后面的目录“I:\Projects\xdebug</span><span>”为你想要放置Xdebug</span><span>输出的数据文件的目录，可自由设置。</span></div>
<div><span><span>4． </span></span><span>重启Apache</span><span>；</span></div>
<div><span><span>5． </span></span><span>写一个test.php</span><span>，内容为<strong>&lt;?php phpinfo(); ?&gt;</strong></span><span>，如果输出的内容中有看到xdebug</span><span>，说明安装配置成功。</span></div>
<div><span><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_1.gif" alt="" /></span></div>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #ff6600;">现在我们就可以开始使用</span></strong><strong><span style="font-size: 9pt; color: #ff6600;">Xdebug</span></strong><strong><span style="font-size: 9pt; color: #ff6600;">强大的功能了！</span></strong><strong><span style="font-size: 9pt; color: #ff6600;"> </span></strong></p>
<div class="postTitle"><a href="http://blog.csdn.net/Haohappy2004/archive/2006/07/08/893060.aspx"><img src="http://blog.csdn.net/images/authorship.gif" border="0" alt="" width="15" height="13" /><span style="color: #800080;"> 使用Xdebug调试和优化PHP程序[2]</span></a></div>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">作者：</span></strong><strong><span style="font-size: 7.5pt; color: #ff6600;">Haohappy<span>      </span></span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">MSN: haohappy at msn.com </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">Blog: <a href="http://blog.csdn.net/haohappy2004"><span style="color: #ff6600;">http://blog.csdn.net/haohappy2004</span></a> </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">2006-07-04</span></strong><strong><span style="font-size: 7.5pt; color: #ff6600;"> </span></strong></p>
<p class="postText">Go on..现在我们来从最简单的程序调试开始一步步介绍Xdebug。</p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #008000;">调试：</span></strong><strong><span style="font-size: 9pt; color: #008000;"> </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">我们先写一个可以导致执行出错的程序，例如尝试包含一个不存在的文件。</span><span style="font-size: 9pt;"> </span></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt;">testXdebug.php</span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">&lt;?php </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">require_once(‘abc.php’); </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">?&gt; </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong></strong></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">然后通过浏览器访问，我们惊奇地发现，出错信息变成了彩色的了：</span><span style="font-size: 9pt;"> </span></p>
<p class="postText"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_2.gif" alt="" width="500" height="306" /></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">不过除了样式改变，和我们平时打印的出错信息内容没什么不同，意义不大。好，我们继续改写程序：</span><span style="font-size: 9pt;"> </span></p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt;">testXdebug2.php</span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">&lt;?php </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">testXdebug(); </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">function testXdebug() { </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;"><span>       </span>require_once(&#8216;abc.php&#8217;); </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">} </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">?&gt;</span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong></strong></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">输出信息：</span><span style="font-size: 9pt;"> </span></p>
<p class="postText"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_3.gif" alt="" width="500" height="332" /></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">发现了什么？　</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">跟踪代码的执行，找到了出错的函数</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">。</span><span style="font-size: 9pt;"> </span></p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">我们把代码再写得复杂一些：　</span></p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt;">testXdebug3.php</span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">&lt;?php </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">testXdebug(); </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">function testXdebug() { </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;"><span>       </span>requireFile();<span>     </span></span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">} </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">function requireFile() { </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;"><span>       </span>require_once(&#8216;abc.php&#8217;); </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">} </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: #3366ff;">?&gt; </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt;">输出信息：</span></strong><strong><span style="font-size: 9pt;"> </span></strong></p>
<p class="postText"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_4.gif" alt="" width="500" height="376" /></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt;">呵呵，也就是说</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">具有类似于</span><span style="font-size: 9pt;">Java</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">Exception</span><span style="font-size: 9pt;">的“跟踪回溯”的功能，可以根据程序的执行一步步跟踪到出错的具体位置，哪怕程序中的调用很复杂，我们也可以通过这个功能来理清代码关系，迅速定位，快速排错。</span></p>
<div class="post">
<div class="postText">
<div class="postTitle"><a href="http://blog.csdn.net/Haohappy2004/archive/2006/07/17/932581.aspx"><img src="http://blog.csdn.net/images/authorship.gif" border="0" alt="" width="15" height="13" /><span style="color: #800080;"> 使用Xdebug调试和优化PHP程序[3]</span></a></div>
<div class="postText">
<div><span style="font-size: 9pt;">其实</span><span style="font-size: 9pt;">PHP</span><span style="font-size: 9pt;">函数</span>debug_backtrace()也有类似的功能，但是要注意debug_backtrace()函数只在PHP4.3.0之后版本及</div>
<div>PHP5中才生效。这个函数是PHP开发团队在PHP5中新增的函数，然后又反向移植到PHP4.3中。</div>
<div><strong><span style="color: #008000;">如何利用</span><span style="color: #008000;">Xdebug</span></strong><strong><span style="color: #008000;">使调试信息更加美观？</span></strong></div>
<div><strong></strong></div>
<div>Xdebug扩展加载后，Xdebug会对原有的某些PHP函数进行覆写，以便好更好地进行Debug。比如var_dump()函数，我们知道通常我们需要在函数前后加上”&lt;pre&gt;…&lt;/pre&gt;”才能够让输出的变量信息比较美观、可读性好。但是加载了Xdebug后，我们不再需要这样做了，Xdebug不但自动给我们加上了&lt;pre&gt;标签，还给变量加上颜色。</div>
<div>例：</div>
<div><span style="font-size: 9pt; color: #0000ff;">&lt;?php</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">$arrTest=array(</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">         &#8220;test&#8221;=&gt;&#8221;abc&#8221;,</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">         &#8220;test2&#8243;=&gt;&#8221;abc2&#8243;</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">);</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">var_dump($arrTest);</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">?&gt;</span></div>
<div><span style="font-size: 9pt;">输出：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_5.gif" alt="" width="500" /></span></div>
<div><span style="font-size: 9pt;">看到了吗？　数组元素的值自动显示颜色。</span></div>
<div><strong><span style="color: #008000;">如何利用</span></strong><strong><span style="color: #008000;">Xdebug</span></strong><strong><span style="color: #008000;">测试脚本执行时间</span></strong></div>
<div><strong></strong></div>
<div>测试某段脚本的执行时间，通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子：</div>
<div><code><span style="font-size: 9pt; color: #0000bb;"><span style="font-family: 新宋体;">&lt;?php</span></span></code><span style="font-size: 9pt; color: #0000bb;"><br />
</span><code><span style="font-size: 9pt; color: #ff8000;"><span style="font-family: 新宋体;">/**</span></span></code><span style="font-size: 9pt; color: #ff8000;"><br />
<span style="font-family: 新宋体;"><code>* Simple function to replicate PHP 5 behaviour</code><br />
<code>*/</code><br />
</span></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #007700;">function </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">()</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<span style="font-family: 新宋体;"><code>{</code><br />
<code>      list(</code></span></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$usec</span></code><code><span style="font-size: 9pt; color: #007700;">, </span></code><code><span style="font-size: 9pt; color: #0000bb;">$sec</span></code><code><span style="font-size: 9pt; color: #007700;">) = </span></code><code><span style="font-size: 9pt; color: #0000bb;">explode</span></code><code><span style="font-size: 9pt; color: #007700;">(</span></code><code><span style="font-size: 9pt; color: #dd0000;">" "</span></code><code><span style="font-size: 9pt; color: #007700;">, </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #007700;">());</span></code></span></div>
<div style="text-indent: 21pt;"><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #007700;">return ((float)</span></code><code><span style="font-size: 9pt; color: #0000bb;">$usec </span></code><code><span style="font-size: 9pt; color: #007700;">+ (float)</span></code><code><span style="font-size: 9pt; color: #0000bb;">$sec</span></code><code><span style="font-size: 9pt; color: #007700;">);</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<span style="font-family: 新宋体;"><code>}</code><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time_start </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">();</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><code><span style="font-size: 9pt; color: #ff8000;"><span style="font-family: 新宋体;">// Sleep for a while</span></span></code><span style="font-size: 9pt; color: #ff8000;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">usleep</span></code><code><span style="font-size: 9pt; color: #007700;">(</span></code><code><span style="font-size: 9pt; color: #0000bb;">100</span></code><code><span style="font-size: 9pt; color: #007700;">);</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time_end </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">();</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; color: #0000bb;">$time_end </span></code><code><span style="font-size: 9pt; color: #007700;">- </span></code><code><span style="font-size: 9pt; color: #0000bb;">$time_start</span></code><code><span style="font-size: 9pt; color: #007700;">;</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<code><span style="font-family: 新宋体;">echo </span></code></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #dd0000;">"Did nothing in $time seconds</span></code><code><span style="font-size: 9pt; color: #007700;">\n</span></code><code><span style="font-size: 9pt; color: #dd0000;">"</span></code><code><span style="font-size: 9pt; color: #007700;">;</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><code><span style="font-size: 9pt; color: #0000bb;"><span style="font-family: 新宋体;">?&gt;</span></span></code></span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 新宋体;"><code><span style="font-size: 12pt;">但是</span></code><code><span style="font-size: 12pt;">microtime()</span></code></span>返回的值是微秒数及绝对时间戳（例如“0.03520000 1153122275<span><span>”</span></span>），没有可读性。所以如上程序，我们需要另外写一个函数microtime_<span style="font-family: 新宋体;"><code><span style="font-size: 9pt;">float()</span></code><code><span style="font-size: 9pt;">，来将两者相加。</span></code></span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 新宋体;"><code><span style="font-size: 9pt;">Xdebug</span></code><code><span style="font-size: 9pt;">自带了一个函数</span></code><code><span style="font-size: 9pt;">xdebug_time_index()</span></code><code><span style="font-size: 9pt;">来显示时间。</span></code></span></span></div>
<div><strong><span style="color: #339966;">如何测定脚本占用的内存？</span></strong></div>
<div>有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存，为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了<var>&#8211;enable-</var><em>memory<var>-limit</var></em><var><span style="font-style: normal;">参数时才有效。　</span></var></div>
<div><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">同样提供了一个函数</span><span style="font-size: 9pt;">xdebug_memory_usage()</span><span style="font-size: 9pt;">来实现这样的功能，另外</span><span style="font-size: 9pt;">xdebug</span><span style="font-size: 9pt;">还提供了一个</span><span style="font-size: 9pt;">xdebug_peak_memory_usage()</span><span style="font-size: 9pt;">函数来查看内存占用的峰值。</span></div>
<div><strong><span style="font-size: 9pt; color: #008000;">如何检测代码中的不足？</span></strong></div>
<div><strong></strong></div>
<div><span style="font-size: 9pt;">有时候代码没有明显的编写错误，没有显示任何错误信息（如</span><span style="font-size: 9pt;">error</span><span style="font-size: 9pt;">、</span><span style="font-size: 9pt;">warning</span><span style="font-size: 9pt;">、</span><span style="font-size: 9pt;">notice</span><span style="font-size: 9pt;">等），但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长，占用内存过多以致于影响整个系统的效率，我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来，写到日志文件中去，运行一段时间后再进行分析，找到问题所在。</span></div>
<div><span style="font-size: 9pt;">回忆一下，之前我们编辑</span><span style="font-size: 9pt;">php.ini</span><span style="font-size: 9pt;">文件</span></div>
<div><span style="font-size: 9pt;">加入</span></div>
<div><span>[Xdebug]</span></div>
<div><span>xdebug.profiler_enable=on</span></div>
<div><span>xdebug.trace_output_dir=&#8221;I:\Projects\xdebug&#8221;</span></div>
<div><span>xdebug.profiler_output_dir=&#8221;I:\Projects\xdebug&#8221; </span></div>
<div><span style="font-size: 9pt;">这几行，目的就在于把执行情况的分析文件写入到</span><span style="font-size: 9pt;">”</span><span style="font-size: 9pt;">I:\Projects\xdebug”</span><span style="font-size: 9pt;">目录中去（你可以替换成任何你想设定的目录）。如果你执行某段程序后，再打开相应的目录，可以发现生成了一堆文件，例如</span><span style="font-size: 9pt;">cachegrind.out.1169585776</span><span style="font-size: 9pt;">这种格式命名的文件。这些就是</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息，不过很显然这样看太累了，我们需要用图形化的软件来查看。</span></div>
<div><span style="font-size: 9pt;">在</span><span style="font-size: 9pt;">Windows</span><span style="font-size: 9pt;">平台下，可以用</span><span style="font-size: 9pt;">WinCacheGrind(*我修改的*下载地址<a href="http://sourceforge.net/projects/wincachegrind/"><span style="color: #0000ff;">http://sourceforge.net/projects/wincachegrind/</span></a>)</span><span style="font-size: 9pt;">这个软件来打开这些文件。</span><span style="font-size: 9pt;">可以直观漂亮地显示其中内容：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_6.gif" alt="" width="500" height="606" /></span></div>
<div><span style="font-size: 9pt;">哇，非常漂亮，我们很直观地看到</span><span style="font-size: 9pt;">index.php</span><span style="font-size: 9pt;">中我们调用了一个函数</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">中又调用了</span><span style="font-size: 9pt;">requireFile()</span><span style="font-size: 9pt;">函数。这样我们就可以非常方便地查看整个脚本的程序结构。</span></div>
<div><span style="font-size: 9pt;">另外，我们还可以看到每个函数被调用的次数及执行所花费的时间！这对于测试程序性能非常有用。</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_7.gif" alt="" width="500" /></span></div>
<div><span style="font-size: 9pt;">好了，这么一个简单的程序不太能显示出</span><span style="font-size: 9pt;">Xdebug+WinCacheGrind</span><span style="font-size: 9pt;">的强大，我给出一个稍大点的例子（一个基于</span><span style="font-size: 9pt;">Zend Framework</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">CMS</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">index.php</span><span style="font-size: 9pt;">）：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_8.gif" alt="" width="500" height="632" /></span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_9.gif" alt="" width="500" /></span></div>
<div> </div>
</div>
</div>
<div><span style="font-size: 9pt;">从上图可以看到：整个程序的结构，每个函数被调用的次数，执行时间都一目了然。</span></div>
<div><span style="font-size: 9pt;">小结：</span></div>
<div><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">提供了各种自带的函数，并对已有的某些</span><span style="font-size: 9pt;">PHP</span><span style="font-size: 9pt;">函数进行覆写，可以方便地用于调试排错；</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">还可以跟踪程序的运行，通过对日志文件的分析，我们可以迅速找到程序运行的瓶颈所在，提高程序效率，从而提高整个系统的性能。</span></div>
<div><span style="font-size: 9pt;">转载来源：<a href="http://hi.baidu.com/icej/blog/item/2f6dfe5004edca5d1138c2d6.html">http://hi.baidu.com/icej/blog/item/2f6dfe5004edca5d1138c2d6.html</a></span></div>
</div>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">作者：</span></strong><strong><span style="font-size: 7.5pt; color: #ff6600;">Haohappy<span>      </span></span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">MSN: haohappy at msn.com </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">Blog: <a href="http://blog.csdn.net/haohappy2004"><span style="color: #ff6600;">http://blog.csdn.net/haohappy2004</span></a> </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">2006-07-04</span></strong><strong><span style="font-size: 7.5pt; color: #ff6600;"> </span></strong></p>
</div>
<div class="post">
<div class="postTitle"><a href="http://blog.csdn.net/Haohappy2004/archive/2006/07/17/932581.aspx"><img src="http://blog.csdn.net/images/authorship.gif" border="0" alt="" width="15" height="13" /><span style="color: #800080;"> 使用Xdebug调试和优化PHP程序[3]</span></a></div>
<div class="postText">
<div><span style="font-size: 9pt;">其实</span><span style="font-size: 9pt;">PHP</span><span style="font-size: 9pt;">函数</span>debug_backtrace()也有类似的功能，但是要注意debug_backtrace()函数只在PHP4.3.0之后版本及</div>
<div>PHP5中才生效。这个函数是PHP开发团队在PHP5中新增的函数，然后又反向移植到PHP4.3中。</div>
<div><strong><span style="color: #008000;">如何利用</span><span style="color: #008000;">Xdebug</span></strong><strong><span style="color: #008000;">使调试信息更加美观？</span></strong></div>
<div><strong></strong></div>
<div>Xdebug扩展加载后，Xdebug会对原有的某些PHP函数进行覆写，以便好更好地进行Debug。比如var_dump()函数，我们知道通常我们需要在函数前后加上”&lt;pre&gt;…&lt;/pre&gt;”才能够让输出的变量信息比较美观、可读性好。但是加载了Xdebug后，我们不再需要这样做了，Xdebug不但自动给我们加上了&lt;pre&gt;标签，还给变量加上颜色。</div>
<div>例：</div>
<div><span style="font-size: 9pt; color: #0000ff;">&lt;?php</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">$arrTest=array(</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">         &#8220;test&#8221;=&gt;&#8221;abc&#8221;,</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">         &#8220;test2&#8243;=&gt;&#8221;abc2&#8243;</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">);</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">var_dump($arrTest);</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">?&gt;</span></div>
<div><span style="font-size: 9pt;">输出：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_5.gif" alt="" /></span></div>
<div><span style="font-size: 9pt;">看到了吗？　数组元素的值自动显示颜色。</span></div>
<div><strong><span style="color: #008000;">如何利用</span></strong><strong><span style="color: #008000;">Xdebug</span></strong><strong><span style="color: #008000;">测试脚本执行时间</span></strong></div>
<div><strong></strong></div>
<div>测试某段脚本的执行时间，通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子：</div>
<div><code><span style="font-size: 9pt; color: #0000bb;"><span style="font-family: 新宋体;">&lt;?php</span></span></code><span style="font-size: 9pt; color: #0000bb;"><br />
</span><code><span style="font-size: 9pt; color: #ff8000;"><span style="font-family: 新宋体;">/**</span></span></code><span style="font-size: 9pt; color: #ff8000;"><br />
<span style="font-family: 新宋体;"><code>* Simple function to replicate PHP 5 behaviour</code><br />
<code>*/</code><br />
</span></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #007700;">function </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">()</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<span style="font-family: 新宋体;"><code>{</code><br />
<code>      list(</code></span></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$usec</span></code><code><span style="font-size: 9pt; color: #007700;">, </span></code><code><span style="font-size: 9pt; color: #0000bb;">$sec</span></code><code><span style="font-size: 9pt; color: #007700;">) = </span></code><code><span style="font-size: 9pt; color: #0000bb;">explode</span></code><code><span style="font-size: 9pt; color: #007700;">(</span></code><code><span style="font-size: 9pt; color: #dd0000;">" "</span></code><code><span style="font-size: 9pt; color: #007700;">, </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #007700;">());</span></code></span></div>
<div style="text-indent: 21pt;"><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #007700;">return ((float)</span></code><code><span style="font-size: 9pt; color: #0000bb;">$usec </span></code><code><span style="font-size: 9pt; color: #007700;">+ (float)</span></code><code><span style="font-size: 9pt; color: #0000bb;">$sec</span></code><code><span style="font-size: 9pt; color: #007700;">);</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<span style="font-family: 新宋体;"><code>}</code><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time_start </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">();</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><code><span style="font-size: 9pt; color: #ff8000;"><span style="font-family: 新宋体;">// Sleep for a while</span></span></code><span style="font-size: 9pt; color: #ff8000;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">usleep</span></code><code><span style="font-size: 9pt; color: #007700;">(</span></code><code><span style="font-size: 9pt; color: #0000bb;">100</span></code><code><span style="font-size: 9pt; color: #007700;">);</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time_end </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">();</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; color: #0000bb;">$time_end </span></code><code><span style="font-size: 9pt; color: #007700;">- </span></code><code><span style="font-size: 9pt; color: #0000bb;">$time_start</span></code><code><span style="font-size: 9pt; color: #007700;">;</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<code><span style="font-family: 新宋体;">echo </span></code></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #dd0000;">"Did nothing in $time seconds</span></code><code><span style="font-size: 9pt; color: #007700;">\n</span></code><code><span style="font-size: 9pt; color: #dd0000;">"</span></code><code><span style="font-size: 9pt; color: #007700;">;</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><code><span style="font-size: 9pt; color: #0000bb;"><span style="font-family: 新宋体;">?&gt;</span></span></code></span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 新宋体;"><code><span style="font-size: 12pt;">但是</span></code><code><span style="font-size: 12pt;">microtime()</span></code></span>返回的值是微秒数及绝对时间戳（例如“0.03520000 1153122275<span><span>”</span></span>），没有可读性。所以如上程序，我们需要另外写一个函数microtime_<span style="font-family: 新宋体;"><code><span style="font-size: 9pt;">float()</span></code><code><span style="font-size: 9pt;">，来将两者相加。</span></code></span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 新宋体;"><code><span style="font-size: 9pt;">Xdebug</span></code><code><span style="font-size: 9pt;">自带了一个函数</span></code><code><span style="font-size: 9pt;">xdebug_time_index()</span></code><code><span style="font-size: 9pt;">来显示时间。</span></code></span></span></div>
<div><strong><span style="color: #339966;">如何测定脚本占用的内存？</span></strong></div>
<div>有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存，为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了<var>&#8211;enable-</var><em>memory<var>-limit</var></em><var><span style="font-style: normal;">参数时才有效。　</span></var></div>
<div><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">同样提供了一个函数</span><span style="font-size: 9pt;">xdebug_memory_usage()</span><span style="font-size: 9pt;">来实现这样的功能，另外</span><span style="font-size: 9pt;">xdebug</span><span style="font-size: 9pt;">还提供了一个</span><span style="font-size: 9pt;">xdebug_peak_memory_usage()</span><span style="font-size: 9pt;">函数来查看内存占用的峰值。</span></div>
<div><strong><span style="font-size: 9pt; color: #008000;">如何检测代码中的不足？</span></strong></div>
<div><strong></strong></div>
<div><span style="font-size: 9pt;">有时候代码没有明显的编写错误，没有显示任何错误信息（如</span><span style="font-size: 9pt;">error</span><span style="font-size: 9pt;">、</span><span style="font-size: 9pt;">warning</span><span style="font-size: 9pt;">、</span><span style="font-size: 9pt;">notice</span><span style="font-size: 9pt;">等），但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长，占用内存过多以致于影响整个系统的效率，我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来，写到日志文件中去，运行一段时间后再进行分析，找到问题所在。</span></div>
<div><span style="font-size: 9pt;">回忆一下，之前我们编辑</span><span style="font-size: 9pt;">php.ini</span><span style="font-size: 9pt;">文件</span></div>
<div><span style="font-size: 9pt;">加入</span></div>
<div><span>[Xdebug]</span></div>
<div><span>xdebug.profiler_enable=on</span></div>
<div><span>xdebug.trace_output_dir=&#8221;I:\Projects\xdebug&#8221;</span></div>
<div><span>xdebug.profiler_output_dir=&#8221;I:\Projects\xdebug&#8221; </span></div>
<div><span style="font-size: 9pt;">这几行，目的就在于把执行情况的分析文件写入到</span><span style="font-size: 9pt;">”</span><span style="font-size: 9pt;">I:\Projects\xdebug”</span><span style="font-size: 9pt;">目录中去（你可以替换成任何你想设定的目录）。如果你执行某段程序后，再打开相应的目录，可以发现生成了一堆文件，例如</span><span style="font-size: 9pt;">cachegrind.out.1169585776</span><span style="font-size: 9pt;">这种格式命名的文件。这些就是</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息，不过很显然这样看太累了，我们需要用图形化的软件来查看。</span></div>
<div><span style="font-size: 9pt;">在</span><span style="font-size: 9pt;">Windows</span><span style="font-size: 9pt;">平台下，可以用</span><span style="font-size: 9pt;">WinCacheGrind(*我修改的*下载地址<a href="http://sourceforge.net/projects/wincachegrind/"><span style="color: #0000ff;">http://sourceforge.net/projects/wincachegrind/</span></a>)</span><span style="font-size: 9pt;">这个软件来打开这些文件。</span><span style="font-size: 9pt;">可以直观漂亮地显示其中内容：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_6.gif" alt="" width="500" height="606" /></span></div>
<div><span style="font-size: 9pt;">哇，非常漂亮，我们很直观地看到</span><span style="font-size: 9pt;">index.php</span><span style="font-size: 9pt;">中我们调用了一个函数</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">中又调用了</span><span style="font-size: 9pt;">requireFile()</span><span style="font-size: 9pt;">函数。这样我们就可以非常方便地查看整个脚本的程序结构。</span></div>
<div><span style="font-size: 9pt;">另外，我们还可以看到每个函数被调用的次数及执行所花费的时间！这对于测试程序性能非常有用。</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_7.gif" alt="" /></span></div>
<div><span style="font-size: 9pt;">好了，这么一个简单的程序不太能显示出</span><span style="font-size: 9pt;">Xdebug+WinCacheGrind</span><span style="font-size: 9pt;">的强大，我给出一个稍大点的例子（一个基于</span><span style="font-size: 9pt;">Zend Framework</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">CMS</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">index.php</span><span style="font-size: 9pt;">）：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_8.gif" alt="" width="500" height="632" /></span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_9.gif" alt="" width="500" height="452" /></span></div>
<div> </div>
</div>
</div>
<p><span style="font-size: 9pt;"></p>
<div class="postTitle"><a href="http://blog.csdn.net/Haohappy2004/archive/2006/07/17/932581.aspx"><img src="http://blog.csdn.net/images/authorship.gif" border="0" alt="" width="15" height="13" /><span style="color: #800080;"> 使用Xdebug调试和优化PHP程序[3]</span></a></div>
<div class="postText">
<div><span style="font-size: 9pt;">其实</span><span style="font-size: 9pt;">PHP</span><span style="font-size: 9pt;">函数</span>debug_backtrace()也有类似的功能，但是要注意debug_backtrace()函数只在PHP4.3.0之后版本及</div>
<div>PHP5中才生效。这个函数是PHP开发团队在PHP5中新增的函数，然后又反向移植到PHP4.3中。</div>
<div><strong><span style="color: #008000;">如何利用</span><span style="color: #008000;">Xdebug</span></strong><strong><span style="color: #008000;">使调试信息更加美观？</span></strong></div>
<div><strong></strong></div>
<div>Xdebug扩展加载后，Xdebug会对原有的某些PHP函数进行覆写，以便好更好地进行Debug。比如var_dump()函数，我们知道通常我们需要在函数前后加上”&lt;pre&gt;…&lt;/pre&gt;”才能够让输出的变量信息比较美观、可读性好。但是加载了Xdebug后，我们不再需要这样做了，Xdebug不但自动给我们加上了&lt;pre&gt;标签，还给变量加上颜色。</div>
<div>例：</div>
<div><span style="font-size: 9pt; color: #0000ff;">&lt;?php</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">$arrTest=array(</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">         &#8220;test&#8221;=&gt;&#8221;abc&#8221;,</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">         &#8220;test2&#8243;=&gt;&#8221;abc2&#8243;</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">);</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">var_dump($arrTest);</span></div>
<div><span style="font-size: 9pt; color: #0000ff;">?&gt;</span></div>
<div><span style="font-size: 9pt;">输出：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_5.gif" alt="" /></span></div>
<div><span style="font-size: 9pt;">看到了吗？　数组元素的值自动显示颜色。</span></div>
<div><strong><span style="color: #008000;">如何利用</span></strong><strong><span style="color: #008000;">Xdebug</span></strong><strong><span style="color: #008000;">测试脚本执行时间</span></strong></div>
<div><strong></strong></div>
<div>测试某段脚本的执行时间，通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子：</div>
<div><code><span style="font-size: 9pt; color: #0000bb;"><span style="font-family: 新宋体;">&lt;?php</span></span></code><span style="font-size: 9pt; color: #0000bb;"><br />
</span><code><span style="font-size: 9pt; color: #ff8000;"><span style="font-family: 新宋体;">/**</span></span></code><span style="font-size: 9pt; color: #ff8000;"><br />
<span style="font-family: 新宋体;"><code>* Simple function to replicate PHP 5 behaviour</code><br />
<code>*/</code><br />
</span></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #007700;">function </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">()</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<span style="font-family: 新宋体;"><code>{</code><br />
<code>      list(</code></span></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$usec</span></code><code><span style="font-size: 9pt; color: #007700;">, </span></code><code><span style="font-size: 9pt; color: #0000bb;">$sec</span></code><code><span style="font-size: 9pt; color: #007700;">) = </span></code><code><span style="font-size: 9pt; color: #0000bb;">explode</span></code><code><span style="font-size: 9pt; color: #007700;">(</span></code><code><span style="font-size: 9pt; color: #dd0000;">" "</span></code><code><span style="font-size: 9pt; color: #007700;">, </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #007700;">());</span></code></span></div>
<div style="text-indent: 21pt;"><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #007700;">return ((float)</span></code><code><span style="font-size: 9pt; color: #0000bb;">$usec </span></code><code><span style="font-size: 9pt; color: #007700;">+ (float)</span></code><code><span style="font-size: 9pt; color: #0000bb;">$sec</span></code><code><span style="font-size: 9pt; color: #007700;">);</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<span style="font-family: 新宋体;"><code>}</code><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time_start </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">();</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><code><span style="font-size: 9pt; color: #ff8000;"><span style="font-family: 新宋体;">// Sleep for a while</span></span></code><span style="font-size: 9pt; color: #ff8000;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">usleep</span></code><code><span style="font-size: 9pt; color: #007700;">(</span></code><code><span style="font-size: 9pt; color: #0000bb;">100</span></code><code><span style="font-size: 9pt; color: #007700;">);</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time_end </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; background: #316ac5 0% 50%; color: #ffffff; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">microtime</span></code><code><span style="font-size: 9pt; color: #0000bb;">_float</span></code><code><span style="font-size: 9pt; color: #007700;">();</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #0000bb;">$time </span></code><code><span style="font-size: 9pt; color: #007700;">= </span></code><code><span style="font-size: 9pt; color: #0000bb;">$time_end </span></code><code><span style="font-size: 9pt; color: #007700;">- </span></code><code><span style="font-size: 9pt; color: #0000bb;">$time_start</span></code><code><span style="font-size: 9pt; color: #007700;">;</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
<code><span style="font-family: 新宋体;">echo </span></code></span><span style="font-family: 新宋体;"><code><span style="font-size: 9pt; color: #dd0000;">"Did nothing in $time seconds</span></code><code><span style="font-size: 9pt; color: #007700;">\n</span></code><code><span style="font-size: 9pt; color: #dd0000;">"</span></code><code><span style="font-size: 9pt; color: #007700;">;</span></code></span><span style="font-size: 9pt; color: #007700;"><br />
</span><code><span style="font-size: 9pt; color: #0000bb;"><span style="font-family: 新宋体;">?&gt;</span></span></code></span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 新宋体;"><code><span style="font-size: 12pt;">但是</span></code><code><span style="font-size: 12pt;">microtime()</span></code></span>返回的值是微秒数及绝对时间戳（例如“0.03520000 1153122275<span><span>”</span></span>），没有可读性。所以如上程序，我们需要另外写一个函数microtime_<span style="font-family: 新宋体;"><code><span style="font-size: 9pt;">float()</span></code><code><span style="font-size: 9pt;">，来将两者相加。</span></code></span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 新宋体;"><code><span style="font-size: 9pt;">Xdebug</span></code><code><span style="font-size: 9pt;">自带了一个函数</span></code><code><span style="font-size: 9pt;">xdebug_time_index()</span></code><code><span style="font-size: 9pt;">来显示时间。</span></code></span></span></div>
<div><strong><span style="color: #339966;">如何测定脚本占用的内存？</span></strong></div>
<div>有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存，为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了<var>&#8211;enable-</var><em>memory<var>-limit</var></em><var><span style="font-style: normal;">参数时才有效。　</span></var></div>
<div><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">同样提供了一个函数</span><span style="font-size: 9pt;">xdebug_memory_usage()</span><span style="font-size: 9pt;">来实现这样的功能，另外</span><span style="font-size: 9pt;">xdebug</span><span style="font-size: 9pt;">还提供了一个</span><span style="font-size: 9pt;">xdebug_peak_memory_usage()</span><span style="font-size: 9pt;">函数来查看内存占用的峰值。</span></div>
<div><strong><span style="font-size: 9pt; color: #008000;">如何检测代码中的不足？</span></strong></div>
<div><strong></strong></div>
<div><span style="font-size: 9pt;">有时候代码没有明显的编写错误，没有显示任何错误信息（如</span><span style="font-size: 9pt;">error</span><span style="font-size: 9pt;">、</span><span style="font-size: 9pt;">warning</span><span style="font-size: 9pt;">、</span><span style="font-size: 9pt;">notice</span><span style="font-size: 9pt;">等），但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长，占用内存过多以致于影响整个系统的效率，我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来，写到日志文件中去，运行一段时间后再进行分析，找到问题所在。</span></div>
<div><span style="font-size: 9pt;">回忆一下，之前我们编辑</span><span style="font-size: 9pt;">php.ini</span><span style="font-size: 9pt;">文件</span></div>
<div><span style="font-size: 9pt;">加入</span></div>
<div><span>[Xdebug]</span></div>
<div><span>xdebug.profiler_enable=on</span></div>
<div><span>xdebug.trace_output_dir=&#8221;I:\Projects\xdebug&#8221;</span></div>
<div><span>xdebug.profiler_output_dir=&#8221;I:\Projects\xdebug&#8221; </span></div>
<div><span style="font-size: 9pt;">这几行，目的就在于把执行情况的分析文件写入到</span><span style="font-size: 9pt;">”</span><span style="font-size: 9pt;">I:\Projects\xdebug”</span><span style="font-size: 9pt;">目录中去（你可以替换成任何你想设定的目录）。如果你执行某段程序后，再打开相应的目录，可以发现生成了一堆文件，例如</span><span style="font-size: 9pt;">cachegrind.out.1169585776</span><span style="font-size: 9pt;">这种格式命名的文件。这些就是</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息，不过很显然这样看太累了，我们需要用图形化的软件来查看。</span></div>
<div><span style="font-size: 9pt;">在</span><span style="font-size: 9pt;">Windows</span><span style="font-size: 9pt;">平台下，可以用</span><span style="font-size: 9pt;">WinCacheGrind(*我修改的*下载地址<a href="http://sourceforge.net/projects/wincachegrind/"><span style="color: #0000ff;">http://sourceforge.net/projects/wincachegrind/</span></a>)</span><span style="font-size: 9pt;">这个软件来打开这些文件。</span><span style="font-size: 9pt;">可以直观漂亮地显示其中内容：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_6.gif" alt="" width="500" height="606" /></span></div>
<div><span style="font-size: 9pt;">哇，非常漂亮，我们很直观地看到</span><span style="font-size: 9pt;">index.php</span><span style="font-size: 9pt;">中我们调用了一个函数</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">testXdebug()</span><span style="font-size: 9pt;">中又调用了</span><span style="font-size: 9pt;">requireFile()</span><span style="font-size: 9pt;">函数。这样我们就可以非常方便地查看整个脚本的程序结构。</span></div>
<div><span style="font-size: 9pt;">另外，我们还可以看到每个函数被调用的次数及执行所花费的时间！这对于测试程序性能非常有用。</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_7.gif" alt="" /></span></div>
<div><span style="font-size: 9pt;">好了，这么一个简单的程序不太能显示出</span><span style="font-size: 9pt;">Xdebug+WinCacheGrind</span><span style="font-size: 9pt;">的强大，我给出一个稍大点的例子（一个基于</span><span style="font-size: 9pt;">Zend Framework</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">CMS</span><span style="font-size: 9pt;">的</span><span style="font-size: 9pt;">index.php</span><span style="font-size: 9pt;">）：</span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_8.gif" alt="" width="500" height="632" /></span></div>
<div><span style="font-size: 9pt;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/haohappy2004/218825/o_9.gif" alt="" width="500" height="452" /></span></div>
<div> </div>
</div>
<p></span></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">作者：</span></strong><strong><span style="font-size: 7.5pt; color: #ff6600;">Haohappy<span>      </span></span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">MSN: haohappy at msn.com </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">Blog: <a href="http://blog.csdn.net/haohappy2004"><span style="color: #ff6600;">http://blog.csdn.net/haohappy2004</span></a> </span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 7.5pt; color: #ff6600;">2006-07-04</span></strong><strong><span style="font-size: 7.5pt; color: #ff6600;"> </span></strong></p>
</div>
<div><span style="font-size: 9pt;">从上图可以看到：整个程序的结构，每个函数被调用的次数，执行时间都一目了然。</span></div>
<div><span style="font-size: 9pt;">小结：</span></div>
<div><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">提供了各种自带的函数，并对已有的某些</span><span style="font-size: 9pt;">PHP</span><span style="font-size: 9pt;">函数进行覆写，可以方便地用于调试排错；</span><span style="font-size: 9pt;">Xdebug</span><span style="font-size: 9pt;">还可以跟踪程序的运行，通过对日志文件的分析，我们可以迅速找到程序运行的瓶颈所在，提高程序效率，从而提高整个系统的性能。</span></div>
<div><span style="font-size: 9pt;">转载来源：<a href="http://hi.baidu.com/icej/blog/item/2f6dfe5004edca5d1138c2d6.html">http://hi.baidu.com/icej/blog/item/2f6dfe5004edca5d1138c2d6.html</a></span></div>
</div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/09/php-debug-xdebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php二分法在IP地址查询中的应用</title>
		<link>http://www.hebaodans.com/2008/09/php-ip-query/</link>
		<comments>http://www.hebaodans.com/2008/09/php-ip-query/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 08:00:59 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[电脑技巧]]></category>
		<category><![CDATA[ip查询]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[二分法]]></category>
		<category><![CDATA[快速查询ip]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=99</guid>
		<description><![CDATA[前段时间做数据分析，需要大量的IP地址查询（每秒钟近万次检索），首先考虑到使用数据库。 数据库大概存储几十万条IP记录，记录集如下： +&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+ &#124; ip_begin &#124; ip_end &#124; country_id &#124; prov_id &#124; city_id &#124; isp_id &#124; netbar &#124; +&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+ &#124; 0 &#124; 16777215 &#124; 2 &#124; 0 &#124; 0 &#124; 0 &#124; 0 &#124; &#124; 16777216 &#124; 33554431 &#124; 2 &#124; 0 &#124; 0 &#124; 0 &#124; 0 &#124; &#124; 33554432 &#124; 50331647 &#124; 2 [...]]]></description>
			<content:encoded><![CDATA[<p>前段时间做数据分析，需要大量的IP地址查询（每秒钟近万次检索），首先考虑到使用数据库。<br />
数据库大概存储几十万条IP记录，记录集如下：</p>
<p>+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+<br />
| ip_begin | ip_end | country_id | prov_id | city_id | isp_id | netbar |<br />
+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+<br />
| 0 | 16777215 | 2 | 0 | 0 | 0 | 0 |<br />
| 16777216 | 33554431 | 2 | 0 | 0 | 0 | 0 |<br />
| 33554432 | 50331647 | 2 | 0 | 0 | 0 | 0 |<br />
| 50331648 | 67108863 | 3 | 0 | 0 | 0 | 0 |<br />
| 67108864 | 67829759 | 3 | 0 | 0 | 0 | 0 |<br />
+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+<br />
　　这样做查询需要用到如下SQL：<br />
&lt;?php<br />
$sql = &#8216;SELECT * FROM i_m_ip WHERE ip_begin &lt;= $client_ip AND ip_end &gt;= $client_ip&#8217;;<br />
?&gt;<br />
　　这样的检索显然用不到索引，即使用到，MySQL查询效率也不大可能达到每秒500次以上，我做了很多并发优化，最终平均查询效率也只有每秒200次左右，实在是头痛。一开始我也有想到借鉴纯真IP库的检索方法，但是我一直对算法有抵触，也以为<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/%e4%ba%8c%e5%88%86%e6%b3%95/" title="View all posts in 二分法" target="_blank">二分法</a></span>很难，所以就没有尝试使用，直到最后没有办法了，才最终实现了<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/%e4%ba%8c%e5%88%86%e6%b3%95/" title="View all posts in 二分法" target="_blank">二分法</a></span>的IP地址检索。<br />
　　从上表可以看到IP库是从0到4294967295的一个连续数值，这个数值要是拆开存储，会有几百G的数据，所以没办法使用索引也没办法哈希。最终我使用PHP将这些东东转为二进制存储，抛弃了数据库的检索。可以看到IP起止长度为一个4字节的长整型，后面的国家ID、省份ID等，可以使用2个字节的短整型来存储，总共一行数据就有18个字节，总共31万条数据，算起来也就5M的样子。具体IP库生成代码如下：<br />
&lt;?php<br />
/*<br />
IP文件格式：<br />
3741319168 3758096383 182 0 0 0 0<br />
3758096384 3774873599 3 0 0 0 0<br />
3774873600 4026531839 182 0 0 0 0<br />
4026531840 4278190079 182 0 0 0 0<br />
4294967040 4294967295 312 0 0 0 0<br />
*/<br />
set_time_limit(0);<br />
$handle = fopen(&#8216;./ip.txt&#8217;, &#8216;rb&#8217;);<br />
$fp = fopen(&#8220;./ip.dat&#8221;, &#8216;ab&#8217;);<br />
if ($handle) {<br />
while (!feof($handle)) {<br />
$buffer = fgets($handle);<br />
$buffer = trim($buffer);<br />
$buffer = explode(&#8220;\t&#8221;, $buffer);<br />
foreach ($buffer as $key =&gt; $value) {<br />
$buffer[$key] = (float) trim($value);<br />
}<br />
$str = pack(&#8216;L&#8217;, $buffer[0]);<br />
$str .= pack(&#8216;L&#8217;, $buffer[1]);<br />
$str .= pack(&#8216;S&#8217;, $buffer[2]);<br />
$str .= pack(&#8216;S&#8217;, $buffer[3]);<br />
$str .= pack(&#8216;S&#8217;, $buffer[4]);<br />
$str .= pack(&#8216;S&#8217;, $buffer[5]);<br />
$str .= pack(&#8216;S&#8217;, $buffer[6]);<br />
fwrite($fp, $str);<br />
}<br />
}<br />
?&gt;<br />
　　这样IP就按照顺序每18字节一个单位排列了，所以很容易就使用<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/%e4%ba%8c%e5%88%86%e6%b3%95/" title="View all posts in 二分法" target="_blank">二分法</a></span>来检索出IP信息：<br />
function getip($ip, $fp) {<br />
fseek($fp, 0);<br />
$begin = 0;<br />
$end = filesize(&#8216;./ip.dat&#8217;);<br />
$begin_ip = implode(&#8221;, unpack(&#8216;L&#8217;, fread($fp, 4)));<br />
fseek($fp, $end &#8211; 14);<br />
$end_ip = implode(&#8221;, unpack(&#8216;L&#8217;, fread($fp, 4)));<br />
$begin_ip = sprintf(&#8216;%u&#8217;, $begin_ip);<br />
$end_ip = sprintf(&#8216;%u&#8217;, $end_ip);<br />
do {<br />
if ($end &#8211; $begin &lt;= 18) {<br />
fseek($fp, $begin + 8);<br />
$info = array();<br />
$info[0] = implode(&#8221;, unpack(&#8216;S&#8217;, fread($fp, 2)));<br />
$info[1] = implode(&#8221;, unpack(&#8216;S&#8217;, fread($fp, 2)));<br />
$info[2] = implode(&#8221;, unpack(&#8216;S&#8217;, fread($fp, 2)));<br />
$info[3] = implode(&#8221;, unpack(&#8216;S&#8217;, fread($fp, 2)));<br />
$info[4] = implode(&#8221;, unpack(&#8216;S&#8217;, fread($fp, 2)));<br />
return $info;<br />
}<br />
$middle_seek = ceil((($end &#8211; $begin) / 18) / 2) * 18 + $begin;<br />
fseek($fp, $middle_seek);<br />
$middle_ip = implode(&#8221;, unpack(&#8216;L&#8217;, fread($fp, 4)));<br />
$middle_ip = sprintf(&#8216;%u&#8217;, $middle_ip);<br />
if ($ip &gt;= $middle_ip) {<br />
$begin = $middle_seek;<br />
} else {<br />
$end = $middle_seek;<br />
}<br />
} while (true);<br />
}<br />
　　以上$fp为打开ip.dat的文件句柄，由于是循环检索，所以写在函数外面，免得每次检索都要打开一次文件，30W行数据二分法最多也只需要循环7次(2^7)左右即可找到准确的IP信息。之后本来还想将ip.dat放在内存中加快检索速度，后来发现，字符串定位函数的效率，根本和文件指针的偏移定位不是在一个数量级的，所以还是放弃使用内存来存放IP库。<br />
　　这个实现，使IP检索效率提高了近百倍，只是一个简单的二分法的应用，从此算法在WEB应用中不重要的观念彻底打消了。其实要实现这个，我还请教了金狐，我一开始是请他帮我生成一个纯真格式的IP库，然后用Discuz的IP查询函数来检索，不过他不肯帮我，最后造就了我的这个实践和学习。有时候，求人不如求己<br />
本文来自: 脚本之家(<a href="http://www.jb51.net">www.jb51.net</a>) 详细出处参考：<a href="http://www.jb51.net/article/15470.htm">http://www.jb51.net/article/15470.htm</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/09/php-ip-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php连接mysql查询</title>
		<link>http://www.hebaodans.com/2008/09/php-mysql-query/</link>
		<comments>http://www.hebaodans.com/2008/09/php-mysql-query/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 01:26:44 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql_connect]]></category>
		<category><![CDATA[mysql_fetch_arrary]]></category>
		<category><![CDATA[mysql_query]]></category>
		<category><![CDATA[mysql_select_db]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=94</guid>
		<description><![CDATA[&#60;?php $con = mysql_connect(&#8220;localhost&#8221;,&#8221;peter&#8221;,&#8221;abc123&#8243;); if (!$con)   {   die(&#8216;Could not connect: &#8216; . mysql_error());   } mysql_select_db(&#8220;my_db&#8221;, $con); $result = mysql_query(&#8220;SELECT * FROM person&#8221;); while($row = mysql_fetch_array($result))   {   echo $row['FirstName'] . &#8221; &#8221; . $row['LastName'];   echo &#8220;&#60;br /&#62;&#8221;;   } 或者   &#60;?php mysql_connect($host,$user,$password); $result = mysql_db_query(&#8220;database&#8221;,&#8220;select * from table&#8221;); while($row = mysql_fetch_array($result)) {   echo $row["user_id"];   echo $row["fullname"]; } mysql_free_result($result); ?&#62;]]></description>
			<content:encoded><![CDATA[<p>&lt;?php<br />
$con = <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/mysql_connect/" title="View all posts in mysql_connect" target="_blank">mysql_connect</a></span>(&#8220;localhost&#8221;,&#8221;peter&#8221;,&#8221;abc123&#8243;);<br />
if (!$con)<br />
  {<br />
  die(&#8216;Could not connect: &#8216; . mysql_error());<br />
  }</p>
<p><span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/mysql_select_db/" title="View all posts in mysql_select_db" target="_blank">mysql_select_db</a></span>(&#8220;my_db&#8221;, $con);</p>
<p>$result = <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/mysql_query/" title="View all posts in mysql_query" target="_blank">mysql_query</a></span>(&#8220;SELECT * FROM person&#8221;);</p>
<p>while($row = mysql_fetch_array($result))<br />
  {<br />
  echo $row['FirstName'] . &#8221; &#8221; . $row['LastName'];<br />
  echo &#8220;&lt;br /&gt;&#8221;;<br />
  }</p>
<p>或者</p>
<p> </p>
<p><span style="color: #0000bb;">&lt;?php<br />
<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/mysql_connect/" title="View all posts in mysql_connect" target="_blank">mysql_connect</a></span></span><span style="color: #007970;">(</span><span style="color: #0000bb;">$host</span><span style="color: #007970;">,</span><span style="color: #0000bb;">$user</span><span style="color: #007970;">,</span><span style="color: #0000bb;">$password</span><span style="color: #007970;">);<br />
</span><span style="color: #0000bb;">$result </span><span style="color: #007970;">= </span><span style="color: #0000bb;">mysql_db_query</span><span style="color: #007970;">(</span><span style="color: #dd0000;">&#8220;database&#8221;</span><span style="color: #007970;">,</span><span style="color: #dd0000;">&#8220;select * from table&#8221;</span><span style="color: #007970;">);<br />
while(</span><span style="color: #0000bb;">$row </span><span style="color: #007970;">= </span><span style="color: #0000bb;">mysql_fetch_array</span><span style="color: #007970;">(</span><span style="color: #0000bb;">$result</span><span style="color: #007970;">)) {<br />
  echo </span><span style="color: #0000bb;">$row</span><span style="color: #007970;">[</span><span style="color: #dd0000;">"user_id"</span><span style="color: #007970;">];<br />
  echo </span><span style="color: #0000bb;">$row</span><span style="color: #007970;">[</span><span style="color: #dd0000;">"fullname"</span><span style="color: #007970;">];<br />
}<br />
</span><span style="color: #0000bb;">mysql_free_result</span><span style="color: #007970;">(</span><span style="color: #0000bb;">$result</span><span style="color: #007970;">);<br />
</span><span style="color: #0000bb;">?&gt;</span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/09/php-mysql-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP的日期时间函数date()</title>
		<link>http://www.hebaodans.com/2008/08/php-date-function/</link>
		<comments>http://www.hebaodans.com/2008/08/php-date-function/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 06:35:08 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[useful]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=86</guid>
		<description><![CDATA[1，年-月-日 echo date(&#8216;Y-m-j&#8217;); 2007-02-6 echo date(&#8216;y-n-j&#8217;); 07-2-6 大写Y表示年四位数字，而小写y表示年的两位数字； 小写m表示月份的数字(带前导)，而小写n则表示不带前导的月份数字。 echo date(&#8216;Y-M-j&#8217;); 2007-Feb-6 echo date(&#8216;Y-m-d&#8217;); 2007-02-06 大写M表示月份的3个缩写字符，而小写m则表示月份的数字(带前导0); 没有大写的J，只有小写j表示月份的日期，无前导o；若需要月份带前导则使用小写d。 echo date(&#8216;Y-M-j&#8217;); 2007-Feb-6 echo date(&#8216;Y-F-jS&#8217;); 2007-February-6th 大写M表示月份的3个缩写字符，而大写F表示月份的英文全写。(没有小写f) 大写S表示日期的后缀，比如“st”、“nd”、“rd”和“th”，具体看日期数字为何。 小结： 表示年可以用大写的Y和小写y; 表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式); 表示日可以用小写d和小写j，大写S表示日期的后缀。 2，时:分:秒 默认情况下，PHP解释显示的时间为“格林威治标准时间”，与我们本地的时间相差8个小时。 echo date(&#8216;g:i:s a&#8217;); 5:56:57 am echo date(&#8216;h:i:s A&#8217;); 05:56:57 AM 小写g表示12小时制，无前导0，而小写h则表示有前导0的12小时制。 当使用12小时制时需要表明上下午，小写a表示小写的“am”和“pm”，大写A表示大写的“AM”和“PM”。 echo date(&#8216;G:i:s&#8217;); 14:02:26 大写G表示24小时制的小时数，但是不带前导的；使用大写的H表示带前导的24小时制小时数 小结： 字母g表示小时不带前导，字母h表示小时带前导； 小写g、h表示12小时制，大写G、H表示24小时制。 3，闰年、星期、天 echo date(&#8216;L&#8217;); 今年是否闰年：0 echo [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1，年-月-日<br />
</strong>echo <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/date/" title="View all posts in date" target="_blank">date</a></span>(&#8216;Y-m-j&#8217;);<br />
2007-02-6</p>
<p>echo <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/date/" title="View all posts in date" target="_blank">date</a></span>(&#8216;y-n-j&#8217;);<br />
07-2-6</p>
<p>大写Y表示年四位数字，而小写y表示年的两位数字；<br />
小写m表示月份的数字(带前导)，而小写n则表示不带前导的月份数字。</p>
<p>echo <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/date/" title="View all posts in date" target="_blank">date</a></span>(&#8216;Y-M-j&#8217;);<br />
2007-Feb-6</p>
<p>echo date(&#8216;Y-m-d&#8217;);<br />
2007-02-06</p>
<p>大写M表示月份的3个缩写字符，而小写m则表示月份的数字(带前导0);<br />
没有大写的J，只有小写j表示月份的日期，无前导o；若需要月份带前导则使用小写d。</p>
<p>echo date(&#8216;Y-M-j&#8217;);<br />
2007-Feb-6</p>
<p>echo date(&#8216;Y-F-jS&#8217;);<br />
2007-February-6th</p>
<p>大写M表示月份的3个缩写字符，而大写F表示月份的英文全写。(没有小写f)<br />
大写S表示日期的后缀，比如“st”、“nd”、“rd”和“th”，具体看日期数字为何。</p>
<p><strong>小结：</strong><br />
表示年可以用大写的Y和小写y;<br />
表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);<br />
表示日可以用小写d和小写j，大写S表示日期的后缀。</p>
<p><strong>2，时:分:秒</strong></p>
<p>默认情况下，PHP解释显示的时间为“格林威治标准时间”，与我们本地的时间相差8个小时。</p>
<p>echo date(&#8216;g:i:s a&#8217;);<br />
5:56:57 am</p>
<p>echo date(&#8216;h:i:s A&#8217;);<br />
05:56:57 AM</p>
<p>小写g表示12小时制，无前导0，而小写h则表示有前导0的12小时制。<br />
当使用12小时制时需要表明上下午，小写a表示小写的“am”和“pm”，大写A表示大写的“AM”和“PM”。</p>
<p>echo date(&#8216;G:i:s&#8217;);<br />
14:02:26</p>
<p>大写G表示24小时制的小时数，但是不带前导的；使用大写的H表示带前导的24小时制小时数</p>
<p><strong>小结：</strong><br />
字母g表示小时不带前导，字母h表示小时带前导；<br />
小写g、h表示12小时制，大写G、H表示24小时制。</p>
<p><strong>3，闰年、星期、天</strong></p>
<p>echo date(&#8216;L&#8217;);<br />
今年是否闰年：0</p>
<p>echo date(&#8216;l&#8217;);<br />
今天是：Tuesday</p>
<p>echo date(&#8216;D&#8217;);<br />
今天是：Tue</p>
<p>大写L表示判断今年是否闰年，布尔值，为真返回1，否则为0；<br />
小写l表示当天是星期几的英文全写(Tuesday)；<br />
而使用大写D表示星期几的3个字符缩写(Tue)。</p>
<p>echo date(&#8216;w&#8217;);<br />
今天星期：2</p>
<p>echo date(&#8216;W&#8217;);<br />
本周是全年中的第 06 周</p>
<p>小写w表示星期几，数字形式表示<br />
大写W表示一年中的星期数</p>
<p>echo date(&#8216;t&#8217;);<br />
本月是 28 天</p>
<p>echo date(&#8216;z&#8217;);<br />
今天是今年的第 36 天</p>
<p>小写t表示当前月份又多少天<br />
小写z表示今天是本年中第几天</p>
<p><strong>4，其他</strong></p>
<p>echo date(&#8216;T&#8217;);<br />
UTC<br />
大写T表示服务器的时间区域设置</p>
<p>echo date(&#8216;I&#8217;);<br />
0<br />
大写I表示判断当前是否为夏令时，为真返回1，否则为0</p>
<p>echo date(&#8216;U&#8217;);<br />
1170769424<br />
大写U表示从1970年1月1日到现在的总秒数，就是Unix时间纪元的UNIX时间戳。</p>
<p>echo date(&#8216;c&#8217;);<br />
2007-02-06T14:24:43+00:00<br />
小写c表示ISO8601日期，日期格式为YYYY-MM-DD，用字母T来间隔日期和时间，时间格式为HH:MM:SS，时区使用格林威治标准时间(GMT)的偏差来表示。</p>
<p>echo date(&#8216;r&#8217;);<br />
Tue, 06 Feb 2007 14:25:52 +0000<br />
小写r表示RFC822日期。<br />
转载来源：<a href="http://www.cnbruce.com/blog/showlog.asp?log_id=1150&amp;cat_id=30">http://www.cnbruce.com/blog/showlog.asp?log_id=1150&amp;cat_id=30</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/08/php-date-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Win2008下的IIS7与PHP相关问题</title>
		<link>http://www.hebaodans.com/2008/08/win2008-iis7-php-setting/</link>
		<comments>http://www.hebaodans.com/2008/08/win2008-iis7-php-setting/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 09:09:58 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[iis7]]></category>
		<category><![CDATA[setting]]></category>
		<category><![CDATA[win2008]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=77</guid>
		<description><![CDATA[【实战】Win2008下的IIS7与PHP相关问题 导读：本文主要是介绍在 Win2008 的 IIS7 中配置和使用 PHP 的相关问题。注意，本文是针对 Win2008 全新的讲解，力求使用上的完美和配置上的简捷。 先推荐下载个视频（虽然是英文的，但是也可以先大致浏览了解一下）：http://wallpaper.iis7.org/videos/php-fastCGI.wmv 重点：从以上视频可以了解到，在 Win2008 的 IIS7 中，对 PHP 支持的最大改进有两点：1、FastCGI；2、Output Caching（输出缓存）。所以以下着重介绍用 FastCGI 支持 PHP 的方式，而 ISAPI 支持方式应该和以前版本的 IIS 大同小异，不再赘述。 需要下载的相关程序（全部为免费程序，找不到的话就别做网站了） 1、PHP 5.x.x For Win 版本（推荐使用免安装的压缩版本）； 2、MySQL 5.x For Win 版本； 3、phpmyadmin 最新版； 4、ZendOptimizer 最新版。 安装、配置下载的程序 0、在 Win2008 中添加角色：打开“服务器管理器”，在“Web 服务器中”别忘了添加“CGI”。如果没有添加，接下来是没有“FastCGI”选项的； 1、为 PHP 应用配置“FastCGI”：打开“IIS 管理器”，双击某个网站（或虚拟目录、应用程序），双击“处理程序映射”，然后从右边选择“添加模块映射”，“请求路径”填写“*.php”，“模块”选择“FastCgiModule”，“可执行文件”选择你 PHP 所在的目录中的“php-cgi.exe”（比如 D:\php\php-cgi.exe），“名称”就叫“php”好了。以下是配置说明： （1）将“PHP.INI-dist”拷贝在同目录中，名为“PHP.INI”（不建议使用“php.ini-recommended”拷贝，因为安全性较高，容易出问题）； [...]]]></description>
			<content:encoded><![CDATA[<p>【实战】Win2008下的IIS7与PHP相关问题<br />
导读：本文主要是介绍在 Win2008 的 IIS7 中配置和使用 PHP 的相关问题。注意，本文是针对 Win2008 全新的讲解，力求使用上的完美和配置上的简捷。</p>
<p>先推荐下载个视频（虽然是英文的，但是也可以先大致浏览了解一下）：http://wallpaper.<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/iis7/" title="View all posts in iis7" target="_blank">iis7</a></span>.org/videos/php-fastCGI.wmv</p>
<p>重点：从以上视频可以了解到，在 Win2008 的 IIS7 中，对 PHP 支持的最大改进有两点：1、FastCGI；2、Output Caching（输出缓存）。所以以下着重介绍用 FastCGI 支持  PHP 的方式，而 ISAPI 支持方式应该和以前版本的 IIS 大同小异，不再赘述。</p>
<p>需要下载的相关程序（全部为免费程序，找不到的话就别做网站了）<br />
1、PHP 5.x.x For Win 版本（推荐使用免安装的压缩版本）；<br />
2、MySQL 5.x For Win 版本；<br />
3、phpmyadmin 最新版；<br />
4、ZendOptimizer 最新版。</p>
<p>安装、配置下载的程序</p>
<p>0、在 Win2008 中添加角色：打开“服务器管理器”，在“Web 服务器中”别忘了添加“CGI”。如果没有添加，接下来是没有“FastCGI”选项的；</p>
<p>1、为 PHP 应用配置“FastCGI”：打开“IIS 管理器”，双击某个网站（或虚拟目录、应用程序），双击“处理程序映射”，然后从右边选择“添加模块映射”，“请求路径”填写“*.php”，“模块”选择“FastCgiModule”，“可执行文件”选择你 PHP 所在的目录中的“php-cgi.exe”（比如 D:\php\php-cgi.exe），“名称”就叫“php”好了。以下是配置说明：<br />
（1）将“PHP.INI-dist”拷贝在同目录中，名为“PHP.INI”（不建议使用“php.ini-recommended”拷贝，因为安全性较高，容易出问题）；<br />
（2）编辑“PHP.INI”，主要是修改以下关键配置的设置（注意，如果没有某个关键词，就自己创建；“d:\php”假设为 PHP 所在目录。）：<br />
register_long_arrays = on<br />
extension_dir = &#8220;d:\php\ext&#8221;<br />
cgi.force_redirect = 0<br />
extension=php_gd2.dll<br />
extension=php_mbstring.dll<br />
extension=php_mcrypt.dll<br />
extension=php_mysql.dll<br />
extension=php_pdo.dll<br />
extension=php_pdo_mysql.dll<br />
session.save_path = &#8220;d:\php\tmp&#8221;<br />
（3）特别说明：以上关键配置的设置是经过本人实战验证的，和目前网上流传的 PHP 配置说明主要不同之处在于：根本无需将任何一个文件拷贝来拷贝去。而且，进行以上配置后，对 MySQL 和 phpmyadmin 都已经完美支持了。</p>
<p>2、PHP 程序目前已经可以正常运行了，接下来安装 MySQL。安装后，你会发现无法继续进行配置（也许后续版本会解决此问题），这时候时需要修改“MySQLInstanceConfig.exe”（推荐使用“Resource Hacker”工具），找到 24-1-1033，将“asAdministrator”改成“requireAdministrator”，然后就可以从开始菜单运行 MySQL 的配置了。<br />
（1）MySQL 的具体配置可以参考网上的帖子，并没有针对 Win2008 的特别注意事项，不再赘述；<br />
（2）在这里单独说一下“Strict Mode”，如果某些程序运行中出现“mysql error number: 1366”，则可以关闭这个参数再试试看，也许能解决此问题。<br />
（3）MySQL 的语法使用也不介绍了，只说一个小技巧：如何解决导入超大 SQL 数据库时超时的问题？<br />
执行：mysql -u root -p【password】 -h localhost 【yourdb】 < 【yoursql】<br />
比如：mysql -u root -p123456 bbs < d:\bbs.sql</p>
<p>3、该安装 phpmyadmin 了，实际上无需安装（只是个 PHP 的应用程序而已，解压缩到你的 Web 目录下即可），而且有些人认为这个功能太弱，喜欢用其它类似产品。不过由于它的通用性，还是讲解一下吧：需要修改“libraries\config.default.php”的两个地方：<br />
（1）把 $cfg['blowfish_secret'] = &#8221;; 更改为 $cfg['blowfish_secret'] = &#8216;加密私钥&#8217;;<br />
（2）把 $cfg['Servers'][$i]['auth_type'] = &#8216;config&#8217;; 更改为 $cfg['Servers'][$i]['auth_type'] = &#8216;cookie&#8217;;</p>
<p>4、安装 ZendOptimizer（千万不要以为 FastCGI 方式不需要安装这个）：<br />
（1）最新版的 ZendOptimizer 在安装时可以识别 IIS7；<br />
（2）如果重装系统，ZendOptimizer 可以不用重新安装（当然，前提是 ZendOptimizer 没有安装在 C 盘）。</p>
<p>一直没有时间总结，写的很累啊……不足之处，欢迎指点！</p>
<p>本人使用以上方法在 Win2008 中应用 PHP 程序已有一个多月了，暂时没发现什么问题。另外，关于“输出缓存”的配置技巧希望大家能够补充一下<br />
此配置方法确实简单使用<br />
转载来源：http://forum.pcbeta.com/thread-270368-1-1.html</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/08/win2008-iis7-php-setting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://wallpaper.iis7.org/videos/php-fastCGI.wmv" length="21979513" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>php调试思想与方法</title>
		<link>http://www.hebaodans.com/2008/08/php-debug-thingking-method/</link>
		<comments>http://www.hebaodans.com/2008/08/php-debug-thingking-method/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 00:50:51 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[thingking]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=68</guid>
		<description><![CDATA[update0815: 调整部分内容的顺序 罗嗦的放在后面 update0521: 增加OO思路 update0417: 稍微修正了一些观点, 增加一些内容, 不过内容仍然比较乱 最简单的谁都会的调试(是么?): 本来安装php是没问题 也能用了 但是又从书上抄了一些代码来发现不能用, 那就用眼睛仔细的对着书本纠正一下代码哈 肯定是你抄错了 要么是印刷错了 比如 1(yi)跟l(el) 0(ling)跟O(大写o)等 别笑哈 真的有人抄错过 还让我过去帮忙调试 过去我录入进去(他的没保存) 就全对了 言归正传 Q: &#8220;为什么要调试?&#8221; A: 当然是因为程序错啦. 你以为我有什么别的答案? Q: &#8220;可是我觉得我的程序应该没错啊!&#8221; A: 不能出来期望的结果 当然是错误发生. 有这种思想的人是根本不具备调试观念 更没有调试能力. Q: 那调试有什么用? A: 不管是你配置的php出错 还是你的程序写错 还是你写的正确的程序跟别人配置的php(比如免费空间)犯冲, 学会调试都能找出原因来 Q: 逻辑乱了能调试好么? A: 或许你偶尔改来改去改好了 以为是调试好了 其实那已经不是单纯的调试, 而是反复的用程序代码进行思考, 并且反复的改代码来&#8221;实践&#8221;某个idea是否可行. 可以说是&#8221;调试逻辑&#8221;而非&#8221;调试代码&#8221;: 逻辑没代码或者乱代码&#8211;调试/修改逻辑&#8211;>正确的逻辑->体现在代码上,出来正确的代码. 单纯的调试代码是: [...]]]></description>
			<content:encoded><![CDATA[<p>update0815: 调整部分内容的顺序 罗嗦的放在后面<br />
update0521: 增加OO思路<br />
update0417: 稍微修正了一些观点, 增加一些内容, 不过内容仍然比较乱</p>
<p>最简单的谁都会的调试(是么?):<br />
本来安装php是没问题 也能用了 但是又从书上抄了一些代码来发现不能用, 那就用眼睛仔细的对着书本纠正一下代码哈 肯定是你抄错了 要么是印刷错了<br />
比如 1(yi)跟l(el) 0(ling)跟O(大写o)等</p>
<p>别笑哈 真的有人抄错过 还让我过去帮忙调试 过去我录入进去(他的没保存) 就全对了</p>
<p>言归正传<br />
Q: &#8220;为什么要调试?&#8221;<br />
A: 当然是因为程序错啦. 你以为我有什么别的答案?<br />
Q: &#8220;可是我觉得我的程序应该没错啊!&#8221;<br />
A: 不能出来期望的结果 当然是错误发生. 有这种思想的人是根本不具备调试观念 更没有调试能力.<br />
Q: 那调试有什么用?<br />
A: 不管是你配置的php出错 还是你的程序写错 还是你写的正确的程序跟别人配置的php(比如免费空间)犯冲, 学会调试都能找出原因来<br />
Q: 逻辑乱了能调试好么?<br />
A: 或许你偶尔改来改去改好了 以为是调试好了 其实那已经不是单纯的调试, 而是反复的用程序代码进行思考, 并且反复的改代码来&#8221;实践&#8221;某个idea是否可行.<br />
可以说是&#8221;调试逻辑&#8221;而非&#8221;调试代码&#8221;:<br />
逻辑没代码或者乱代码&#8211;调试/修改逻辑&#8211;>正确的逻辑->体现在代码上,出来正确的代码.<br />
单纯的调试代码是:<br />
正确的逻辑&#8211;编码&#8211;>出错的代码&#8211;调试&#8211;>正确的代码<br />
所以调试可以分为:<br />
1.调试逻辑, 2.调试代码, 3.调试界面. 4. etc..<br />
错误的逻辑是不可能出来正确的程序. 写程序首先得把逻辑(流程)弄清楚, 然后才开始编码.<br />
合并在一起就是:<br />
含糊的逻辑&#8211;调试逻辑&#8211;>正确的逻辑&#8211;编码&#8211;>出错的代码&#8211;调试代码&#8211;>正确的代阿马<br />
其中调试逻辑你可以利用&#8221;修改代码&#8221;来辅助 免得脑子太累, 但是脑子必须动, 不能不思考乱改来改去, 而且不能跟 &#8220;调试代码&#8221; 混在一起.<br />
改小错误 常常混在一起 就解决了, 但是要养成分开的习惯, 对于大错误才能一样轻松解决.</p>
<p>别慌<br />
很初学者 一碰到错误就慌了, 脑子里只知道&#8221;不行啊 错了 惨了 找个人问问&#8221;, 要冷静下来 根据所学的知识去研究, 到底什么是<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/debug/" title="View all posts in debug" target="_blank">debug</a></span>, 如何<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/debug/" title="View all posts in debug" target="_blank">debug</a></span>, 出错了到底该干什么</p>
<p>基本调试:<br />
1. 打开调试功能: php.ini 里 设置error_reporting = E_ALL以及 display_errors = On 重启 web服务(apache)<br />
2. 刷新错误的页面 查看错误提示 行号 文件名<br />
3. 打开该文件 定位到出错行. 比如代码 echo $abc[2];<br />
4. 理解错误:<br />
a. 查看手册 理解错误含义 要能理解首先要理解语言 比如最简单的 Undefined index 2 意思是数组不存在该下标 也就说明你访问了某个数组不存在的元素<br />
b. 如果已经知道如何改 就直接修改, 比如改成 echo $abc[0];<br />
c. 不知道就显示变量内容 在同样的地方 加入 var_dump($abc); 刷新页面 看看$abc这个东西到底包含了什么元素<br />
d. 认为本该存在 $abc[2]的, 那就寻找错误源, 往上回朔, 或者用 var_dump(debug_backtrace());<br />
必要的时候 var_dump($_POST, $_GET, $_COOKIE, $_SERVER&#8230;.)</p>
<p>本人未用过单步调试 (step by step) 如果使用调试器相对简单一点 可以暂停下来 看看变量的内容 到底是不是 中应该出现的值, 如果不是 又是哪里产生这个值的</p>
<p>注意留意什么是环境<br />
环境:<br />
为什么全世界那么多人没事就你的有问题? 你的问题爱上了你 还是你爱上了你的问题?<br />
其实&#8221;一方水土养一方人&#8221;, 你的&#8221;环境&#8221;养你的bug.<br />
平时阅读书本/手册, 注意记录整理什么是&#8221;环境&#8221;.<br />
$_GET $_POST $_COOKIE $_SESSION $_SERVER 这些是程序运行的至关重要因素 当然还包括你自己搞出来的 $GLOBALS, 都可以var_dump他们 看看内容.<br />
还有strtolower/strtoupper之类 跟setlocale()函数有关, 而默认值在linux下跟 getenv(&#8220;LANG&#8221;) getenv(&#8220;LC_ALL&#8221;) 之类有关(putenv不一定起作用)<br />
还有其他的 比如php.ini的配置.<br />
还有web服务器配置, 比如apache支持某些函数而在别的服务器下就不支持</p>
<p>btw1: 你的调试能力跟你的编码能力是相互相成的, 根据你的编码经验你觉得还有什么该注意的 可以提出来<br />
btw2: 有些你或许觉得很简单很平常, 但是想想你自己是不是真的做到了</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 以下内容比较罗嗦<br />
对于你一眼就看出来的问题, 当然可以立即解决, 但是如果没头绪那就参考:<br />
调试的大方向:<br />
抓!<br />
a. 擒贼先擒王, 最大的错误就是逻辑错误, 先审查一边逻辑, 然后才是代码关键的部位(跟错误可能相关的)<br />
b. 顺瓜摸根.., 有果必有因, 知道最终错误的&#8221;结果&#8221;, 顺着摸过去 就能发生错误的&#8221;原因&#8221;, 比如<br />
if ($logined) {<br />
$a = 100;<br />
}<br />
$_SESSION['a'] = $a; 提示Undefined variable $a, 显然要找产生$a变量的地方, 往上找到 if那块 发现只有if true的时候才有$a于是改成<br />
if ($logined) {<br />
$a = 100;<br />
} else {<br />
$a = 0;<br />
}</p>
<p>比如mysql的函数出错 就有好多提示<br />
提示 密码错误: 看看是参数的密码错了 还是mysql服务器设置的密码错了<br />
提示 sql字段不存在, 打开phpmyadmin去表里看看有哪些字段 程序写错了还是忘记添加了 还是搞错表了<br />
提示语句错误, 找mysql手册 而不是php手册</p>
<p>拆!<br />
所谓万众一心 那个什么什么来着, 但是我们是一个人面对的一个&#8221;庞大&#8221;的代码, 所以要来个&#8221;反之亦然&#8221;, 把错误从代码里分开, 把多个错误拆开. 如此一来, 对于你来说只不过是多个小小的错误, 一个个消灭.</p>
<p>忆:<br />
回想以前是不是碰到类似的错误提示, 那个时候是怎么解决的. 如果没有回想到, 那就应该找新的方法.<br />
对于初学者来说, 反复锻炼很重要, 回忆能加强学过的能力/方法, 直到联会贯通, 应用自如.</p>
<p>对比:<br />
跟本文开头说的差不多, 就是找正确的代码来对比.<br />
有时候是没有相应的正确代码的, 这个时候可以在脑子里重新构思一个正确代码来对比, 有点难 呵呵, 不过这样是避免又照着错误的思路去想<br />
再就是看看手册, 根据手册说明就知道其实应该如何 不该如何.</p>
<p>OO 思路<br />
要求你的程序比较OO(不一定是对象, 但是结构/思路上有oo)<br />
OO编程简单说就是对象化, 每个类型的对象完成某个功能, 就像一只老鼠只需要吃就能活, 一个对象/或者某部分代码 只需要所期望的一些数据就能正常工作.<br />
OO debug法就是首先要有个观念: 我的某个对象(or代码)只需要有一定的数据(环境下)就可以正常工作<br />
如果<br />
1. 有正常的数据也出错 则说明是这个对象设计错了<br />
2. 传入的数据不正常, 则说明使用这个对象的代码调用错了<br />
高手或许觉得这条很&#8221;傻&#8221;, 其实对于初学者(包括以前的我) 要形成这样的观念 以及一直使用这个观念来调试, 却是要到了很久之后 接近高手了 才懂.<br />
有点像&#8217;拆&#8217;方法 不过区别在于调试的时候:<br />
1. 取对象出来 可以单独调试, 因为好的对象(or代码) 只需要尽量简单的数据, 复杂的数据可能在对象内部或者外部生存, 而不会跨出/入对象(也就是不会传进来 也不会传出去)<br />
2. 对于web要快速调试, 并不一定要把对象的代码全部掏出来, 只需要再调用对象的部分 添加一些用来查看对象语句, 比如var_dump($obj) var_dump($obj->myabc);<br />
或者类似 echo $http->download(); 这样的调用之前 手工设置一些自己熟悉的数据 比如:<br />
$http->setUrl(&#8220;http://localhost/abc.html&#8221;);<br />
直到确保这个对象工作正常了, 就可以暂时撇开这个对象的代码了, 看看别的东西有没有错误</p>
<p>转载来源：http://club.phpe.net/index.php?act=ST&#038;f=2&#038;t=4985&</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/08/php-debug-thingking-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php乱码预防</title>
		<link>http://www.hebaodans.com/2008/08/php-code/</link>
		<comments>http://www.hebaodans.com/2008/08/php-code/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 08:41:17 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[乱码]]></category>
		<category><![CDATA[解决php乱码]]></category>
		<category><![CDATA[防止php乱码]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=59</guid>
		<description><![CDATA[数据库编码、页面编码、文件本身编码要全部一致。 1、数据库编码：建立数据库时指定编码，导入数据表、插入数据时不要指定编码，会自动继承数据库的编码。 2、页面的编码，指的是这一行的设置： &#60;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=gbk&#8221; /&#62; 3、文件本身的编码：用editplus打开php文件或html文件，另存时，选择的编码，如果数据库和页面编码是gbk,则这儿的编码选择ansi；如果数据库和页面编码是utf-8，则这儿也选择utf-8。 另外要注意的是，Javascript中传递的数据是utf-8编码，如果数据库和页面编码是gbk，要进行转码，然后写入数据库。 转载来源：http://kuaiyigang.com/post/224.htm]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">数据库编码、页面编码、文件本身编码要全部一致。<br />
1、数据库编码：建立数据库时指定编码，导入数据表、插入数据时不要指定编码，会自动继承数据库的编码。<br />
2、页面的编码，指的是这一行的设置：<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=gbk&#8221; /&gt;<br />
3、文件本身的编码：用editplus打开php文件或html文件，另存时，选择的编码，如果数据库和页面编码是gbk,则这儿的编码选择ansi；如果数据库和页面编码是utf-8，则这儿也选择utf-8。<br />
</span></p>
<p><span style="color: #000000;">另外要注意的是，Javascript中传递的数据是utf-8编码，如果数据库和页面编码是gbk，要进行转码，然后写入数据库。<br />
</span></p>
<p><span style="color: #000000;">转载来源：<a href="http://kuaiyigang.com/post/224.htm">http://kuaiyigang.com/post/224.htm</a></span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/08/php-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP开源 图片管理</title>
		<link>http://www.hebaodans.com/2008/07/php-photo-open-sourece/</link>
		<comments>http://www.hebaodans.com/2008/07/php-photo-open-sourece/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 02:39:38 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false">http://www.bewithu.com/?p=16</guid>
		<description><![CDATA[iFoto 点击次数：1294 基于CSS，GD2，文件真正简单的PHP相册。不需要MySQL。 SPGM 点击次数：1562 SPGM(Simple Picture Gallery Manager)该基于Web的图片管理器支持为图片加说明，不限制图片分类目录，支持对每个目录进行配置(支持继承)，随机或固定缩略图，对新图片加亮显示，支持EXIF，提供幻灯片浏览模式，易于集成到网站中，可按自己的喜好来调整界面主题样式，多语言支持(当前提供34种)。 yappa-ng 点击次数：1428 yappa-ng是一个非常强大但非常易于安装和使用的在线PHP相册。支持所有操作系统(Linux/UNIX,Windows,MAC, &#8230;),和所有Web服务器(Apache,IIS,&#8230;)并且不需要数据库支持。每一张图片都可以以多种不同的尺寸进行查看，并且缩略图和所有其它调整大小都将自动快速创建。yappa-ng支持为相册设置密码保护，统计图片点击，设置图片评论功能。 Gallery 点击次数：3011 Gallery是一个开源基于Web的相簿管理器。用户可以使用Web浏览器上传图片(缩略图也同时被创建)，评价图片，添加注释和发送电子贺卡。管理员可以批量添加已经上传到FTP服务器上的图片。 Slooze 点击次数：754 Slooze安装与使用都非常简单，而且具有很好的结构。 LinPHA 点击次数：1047 LinPHA是一个易于使用，支持多语言，灵活的相册。它使用SQL数据库((MySQL/PostgreSQL/SQLite)来存储你图片的的相关信息。它自带一个基于HTML的Installer，所以你不需要有架设SQL DB的经验。LinPHA的特性：完善的用户管理，把相册压缩成zip文件下载，统计最受欢迎的图片，包含上传功能的Web文件管理器，为图片加入水印，打印图片等。 Qdig 点击次数：1102 Qdig是一个非常简易的图片管理器(只有一个PHP脚本文件)。 Zoph 点击次数：728 Zoph(Zoph Organizes Photos)一个基于web的照片展示与管理系统。 Leafs-Photo management 点击次数：723 Leafs是一个基于web的照片管理软件.访问者可以上传图片和添加评论,所有页面都处理成静态页面.Leafs还为基于搜索引擎的图片搜索提供一些支持. PHP Photo Album script 点击次数：563 这个PHP脚本能够自动获取指定目录下的所有图片，然后生成一个可按文件日期或文件名排序并进行分组的相册。 Snipe Gallery 点击次数：1016 Snipe Gallery是一个基于PHP+MySQL开发的图片管理器。它的特点：易于安装；提供跨平台剪切和缩略图片的工具；支持PNG,JPG和GIF格式；支持使用.zip上传来批量导入图片；按设置自动调整图片大小；支持通过标题，描述，摄影者，位置和关键字搜索图片；支持为图片加文本水印。 Plogger 点击次数：2402 Plogger这个开源图片管理系统易于安装并易于与你的现有网站相集成。支持按设定尺寸自动生成缩略图，支持一些主流图片格式包括JPG、BMP、PNG、GIF。支持为图片添加评论。集成JavaScript幻灯片浏览器。 phpMyPhotoGallery 点击次数：708 phpMyPhotoGallery是一个基于Web的图片管理系统，具有类似于Windows资源管理器的操作界面。 它能够一次性上传指定目录下的所有图片，并快速生成缩略图。 phpAlbum.net 点击次数：668 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif"><img class="alignnone size-medium wp-image-17" title="item" src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /></a><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open188517.htm">iFoto </a><span class="NavigationColor"><span class="style6">点击次数：1294</span></span></p>
<p>基于CSS，GD2，文件真正简单的PHP相册。不需要MySQL。</p>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187117.htm">SPGM </a><span class="NavigationColor"><span class="style6">点击次数：1562</span></span></h2>
<p>SPGM(Simple Picture Gallery Manager)该基于Web的图片管理器支持为图片加说明，不限制图片分类目录，支持对每个目录进行配置(支持继承)，随机或固定缩略图，对新图片加亮显示，支持EXIF，提供幻灯片浏览模式，易于集成到网站中，可按自己的喜好来调整界面主题样式，多语言支持(当前提供34种)。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187217.htm">yappa-ng</a> <span class="NavigationColor"><span class="style6">点击次数：1428</span></span></h2>
<p>yappa-ng是一个非常强大但非常易于安装和使用的在线PHP相册。支持所有操作系统(Linux/UNIX,Windows,MAC, &#8230;),和所有Web服务器(Apache,IIS,&#8230;)并且不需要数据库支持。每一张图片都可以以多种不同的尺寸进行查看，并且缩略图和所有其它调整大小都将自动快速创建。yappa-ng支持为相册设置密码保护，统计图片点击，设置图片评论功能。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187317.htm">Gallery </a><span class="NavigationColor"><span class="style6">点击次数：3011</span></span></h2>
<p>Gallery是一个开源基于Web的相簿管理器。用户可以使用Web浏览器上传图片(缩略图也同时被创建)，评价图片，添加注释和发送电子贺卡。管理员可以批量添加已经上传到FTP服务器上的图片。<br />
<img src="http://www.php-open.com/projectimage/examples.png" alt="" /></p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187517.htm">Slooze </a><span class="NavigationColor"><span class="style6">点击次数：754</span></span></h2>
<p>Slooze安装与使用都非常简单，而且具有很好的结构。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187617.htm">LinPHA </a><span class="NavigationColor"><span class="style6">点击次数：1047</span></span></h2>
<p>LinPHA是一个易于使用，支持多语言，灵活的相册。它使用SQL数据库((<a class="external text" title="http://www.mysql.org" rel="nofollow" href="http://www.mysql.org/">MySQL</a>/<a class="external text" title="http://www.postgresql.org" rel="nofollow" href="http://www.postgresql.org/">PostgreSQL</a>/<a class="external text" title="http://www.sqlite.org" rel="nofollow" href="http://www.sqlite.org/">SQLite</a>)来存储你图片的的相关信息。它自带一个基于HTML的Installer，所以你不需要有架设SQL DB的经验。LinPHA的特性：完善的用户管理，把相册压缩成zip文件下载，统计最受欢迎的图片，包含上传功能的Web文件管理器，为图片加入水印，打印图片等。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187717.htm">Qdig </a><span class="NavigationColor"><span class="style6">点击次数：1102</span></span></h2>
<p>Qdig是一个非常简易的图片管理器(只有一个PHP脚本文件)。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187817.htm">Zoph</a> <span class="NavigationColor"><span class="style6">点击次数：728</span></span></h2>
<p>Zoph(Zoph Organizes Photos)一个基于web的照片展示与管理系统。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187917.htm">Leafs-Photo management </a><span class="NavigationColor"><span class="style6">点击次数：723</span></span></h2>
<p>Leafs是一个基于web的照片管理软件.访问者可以上传图片和添加评论,所有页面都处理成静态页面.Leafs还为基于搜索引擎的图片搜索提供一些支持.</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open188117.htm">PHP Photo Album script </a><span class="NavigationColor"><span class="style6">点击次数：563</span></span></h2>
<p>这个PHP脚本能够自动获取指定目录下的所有图片，然后生成一个可按文件日期或文件名排序并进行分组的相册。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open187017.htm">Snipe Gallery</a> <span class="NavigationColor"><span class="style6">点击次数：1016</span></span></h2>
<p>Snipe Gallery是一个基于PHP+MySQL开发的图片管理器。它的特点：易于安装；提供跨平台剪切和缩略图片的工具；支持PNG,JPG和GIF格式；支持使用.zip上传来批量导入图片；按设置自动调整图片大小；支持通过标题，描述，摄影者，位置和关键字搜索图片；支持为图片加文本水印。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open188317.htm">Plogger </a><span class="NavigationColor"><span class="style6">点击次数：2402</span></span></h2>
<p>Plogger这个开源图片管理系统易于安装并易于与你的现有网站相集成。支持按设定尺寸自动生成缩略图，支持一些主流图片格式包括JPG、BMP、PNG、GIF。支持为图片添加评论。集成JavaScript幻灯片浏览器。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open211317.htm">phpMyPhotoGallery</a> <span class="NavigationColor"><span class="style6">点击次数：708</span></span></h2>
<p>phpMyPhotoGallery是一个基于Web的图片管理系统，具有类似于Windows资源管理器的操作界面。 它能够一次性上传指定目录下的所有图片，并快速生成缩略图。<br />
<img src="http://www.php-open.com/projectimage/51891_thumb.jpg" border="0" alt="" /></p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open188717.htm">phpAlbum.net </a><span class="NavigationColor"><span class="style6">点击次数：668</span></span></h2>
<p>易于安装和使用，不需要数据库。提供密码保存，缓存，自动缩略和图片大小调整等。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open188817.htm">singapore </a><span class="NavigationColor"><span class="style6">点击次数：581</span></span></h2>
<p>singapore是一个开源，多语言支持，模板驱动的图片管理器。它不需要数据库，所有图片信息都存储在CSV文件中。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open188917.htm">phpGraphy</a> <span class="NavigationColor"><span class="style6">点击次数：849</span></span></h2>
<p>phpGraphy这个相册管理系统：支持实时生成缩略图/低分辩率的图片。提供用户评论/评价系统。显示最受欢迎/最近更新/修改的图片。支持幻灯片浏览方式。对图片和目录实行角色访问控制。支持操作EXIF/IPTC元数据。它还易于安装高度可配置(主题/模板)。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open189017.htm">PhpWebGallery </a><span class="NavigationColor"><span class="style6">点击次数：840</span></span></h2>
<p>PhpWebGallery是一个带有非常简单的安装界面和管理面板的图片管理系统。它的特点包括：可设置自由或限制图片访问，角色/用户管理，多服务器支持，支持用户评论，采用HTML模板控制界面外观，多语言支持，一个RSS通知Feed，EXIF和IPTC元数据管理，多目录支持(每一张图片可以同时属于多个目录)，所有Web页面都兼容W3C规范。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open203417.htm">Phormer</a> <span class="NavigationColor"><span class="style6">点击次数：1412</span></span></h2>
<p>Phormer是一个轻量级，强大的PHP在线相册。不需要MySQL,易于安装。支持Ajax上传/评论/评价,主题/样式(CSS)更换,RSS输出，EXIF，对图片进行分类，加权限控制，集中上传(ZIP)，<span style="font-size: x-small;">幻灯片的形式展示</span>等等</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open205317.htm">Pyxy-gallery</a> <span class="NavigationColor"><span class="style6">点击次数：1123</span></span></h2>
<p>基于Ajax技术的PHP相册。</p>
</div>
<div class="story">
<h2><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /> <a href="http://www.bewithu.com/wp-admin/open206217.htm">Cheesecake</a> <span class="NavigationColor"><span class="style6">点击次数：967</span></span></h2>
<p>Cheesecake基于cakePHP框架开发。具有自动创建缩略图，幻灯片浏览方式，添加注释(自动屏蔽垃圾信息)，易于管理，Tag支持等特点。</p>
<p><img src="http://www.bewithu.com/wp-content/uploads/2008/07/item.gif" alt="" width="13" height="14" /><a title="Permanent Link to &quot;ZenPhoto:开源php相册&quot;" rel="bookmark" href="http://e-spacy.com/blog/zenphoto-php-gallery/">ZenPhoto:开源php相册</a></p>
<p><a href="http://www.zenphoto.org/"><span style="color: #0066cc;">ZenPhoto</span></a>是一款基于PHP和MySQL的开源相册平台，目前推出了最新的1.1版。<br />
<img src="http://photo11.yupoo.com/20071105/062702_1158111661.jpg" border="0" alt="zenphoto" width="500" height="150" /><br />
除了原有的相册，自动生成缩略图，FTP发布等等功能支持外。1.1版加入了原生的<strong>RSS</strong>支持，<strong>子相册</strong>，<strong>Tab标签</strong>，<strong>搜索</strong>，视频，geo定位(Google Map)，EXIF/IPC支持，相册zip打包下载，密码保护，垃圾留言防护等等实用的功能。</p>
<p>其小巧简洁，非常适用于个人用户搭建自己的网络相册。最方便的是可以通过FTP直接上传图片来发布，或者使用Windows Web发布向导来直接上传本地图片。</p>
<p><a href="http://avgirlonline.cn/"><span style="color: #0066cc;">Demo展示站点</span></a>，非喜勿入。</p>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/07/php-photo-open-sourece/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>十天学会php的第一天</title>
		<link>http://www.hebaodans.com/2008/07/study-php/</link>
		<comments>http://www.hebaodans.com/2008/07/study-php/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 09:05:19 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[study]]></category>

		<guid isPermaLink="false">http://www.bewithu.com/?p=10</guid>
		<description><![CDATA[十天学会php 转载来源：http://www.444p.com/tutorial/php-start/aid133-shitianxuehui-php/ 以前写了十天学会ASP，十天学会ASP.NET什么的，现在想想再写个PHP吧，也算比较全了。 PHP的调试方法我这里就不说了，外面很多文章都有介绍，也有很多不同的组合。我这里暂时是以 Apache web server 和 MY SQL 作为WEB服务器和数据库，在php-4.3.3下的环境做的程序。当然要简单的构建和访问查看数据库 PHPMYADMIN 不可少。 至于表单设计什么的，我这里也不想多说了，在《十天学会ASP》中已经有介绍。 下面简单介绍一下PHP的语法。 1、嵌入方法： 类似ASP的&#60;%，PHP可以是&#60;?php或者是&#60;?，结束符号是?&#62;，当然您也可以自己指定。 2、引用文件： 引用文件的方法有两种：require 及 include。 require 的使用方法如 require(MyRequireFile.php); 。这个函数通常放在 PHP 程序的最前面，PHP 程序在执行前，就会先读入 require 所指定引入的文件，使它变成 PHP 程序网页的一部份。常用的函数，亦可以这个方法将它引入网页中。 include 使用方法如 include(MyIncludeFile.php); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时，才将它读进来。这种方式，可以把程序执行时的流程简单化。   3、注释方法： PHP代码 &#60;?php echo 这是第一种例子。\n ; // 本例是 C 语法的注释 /* 本例采用多行的 注释方式 */ echo [...]]]></description>
			<content:encoded><![CDATA[<div class="at3">
<h3>十天学会php</h3>
</div>
<div class="text">转载来源：<a href="http://www.444p.com/tutorial/php-start/aid133-shitianxuehui-php/">http://www.444p.com/tutorial/php-start/aid133-shitianxuehui-php/</a></div>
<div class="right"><script type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script></div>
<p>以前写了十天学会ASP，十天学会ASP.NET什么的，现在想想再写个PHP吧，也算比较全了。 PHP的调试方法我这里就不说了，外面很多文章都有介绍，也有很多不同的组合。我这里暂时是以 Apache web server 和 MY SQL 作为WEB服务器和数据库，在php-4.3.3下的环境做的程序。当然要简单的构建和访问查看数据库 PHPMYADMIN 不可少。</p>
<p>至于表单设计什么的，我这里也不想多说了，在《十天学会ASP》中已经有介绍。</p>
<p>下面简单介绍一下PHP的语法。</p>
<p>1、嵌入方法：</p>
<p>类似ASP的&lt;%，PHP可以是&lt;?php或者是&lt;?，结束符号是?&gt;，当然您也可以自己指定。</p>
<p>2、引用文件：</p>
<p>引用文件的方法有两种：require 及 include。<br />
require 的使用方法如 require(MyRequireFile.php); 。这个函数通常放在 PHP 程序的最前面，PHP 程序在执行前，就会先读入 require 所指定引入的文件，使它变成 PHP 程序网页的一部份。常用的函数，亦可以这个方法将它引入网页中。</p>
<p class="Vdi751">include 使用方法如 include(MyIncludeFile.php); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时，才将它读进来。这种方式，可以把程序执行时的流程简单化。</p>
<p class="Vdi751"> </p>
<p>3、注释方法：</p>
<p>PHP代码</p>
<div class="codeText">
<ol class="dp-c">
<li class="alt"><span><span>&lt;?php </span></span></li>
<li><span class="func">echo</span><span> 这是第一种例子。\n ; </span><span class="comment">// 本例是 C 语法的注释 </span></li>
<li class="alt"><span class="comment">/* 本例采用多行的 </span></li>
<li><span><span class="comment">注释方式 */</span><span> </span></span></li>
<li class="alt"><span class="func">echo</span><span> 这是第二种例子。\n ; </span></li>
<li class="alt"><span class="func">echo</span><span> 这是第三种例子。\n ; # 本例使用 UNIX Shell 语法注释 </span></li>
<li><span>?&gt; </span></li>
</ol>
</div>
<p>4、变量类型： <span style="color: #ffffff;">php学习之家</span></p>
<p>$mystring = 我是字符串 ;<br />
$NewLine = 换行了\n ;<br />
$int1 = 38 ;<br />
$float1 = 1.732 ;<br />
$float2 = 1.4E 2 ;<br />
$MyArray1 = array( 子 , 丑 , 寅 , 卯 ); <span style="color: #ffffff;">php学习之家</span></p>
<p>这里引出两个问题，首先PHP变量以$开头，第二PHP语句以;结尾，可能ASP程序员会不适应。这两个遗漏也是程序上大多错误所在。</p>
<p>5、运算符号：</p>
<p>数学运算： 符号 意义<br />
加法运算<br />
- 减法运算<br />
* 乘法运算<br />
/ 除法运算<br />
% 取余数<br />
累加<br />
&#8211; 递减</p>
<p>字符串运算：</p>
<p>运算符号只有一个，就是英文的句号。它可以将字符串连接起来，变成合并的新字符串。类似ASP中的&amp;</p>
<p class="Vdi751">PHP代码</p>
<div class="codeText">
<ol class="dp-c">
<li class="alt"><span><span>&lt;? </span></span></li>
<li><span class="vars">$a</span><span> = PHP 4 ; </span></li>
<li class="alt"><span class="vars">$b</span><span> = 功能强大 ; </span></li>
<li><span class="func">echo</span><span> </span><span class="vars">$a</span><span>.</span><span class="vars">$b</span><span>; </span></li>
<li class="alt"><span>?&gt; </span></li>
</ol>
</div>
<p>这里也引出两个问题，首先PHP中输出语句是echo，第二类似ASP中的&lt;%=变量%&gt;，PHP中也可以&lt;?=变量? &gt;。</p>
<p class="Vdi751"> </p>
<p>逻辑运算：</p>
<p>符号 意义<br />
&lt; 小于<br />
&gt; 大于<br />
&lt;= 小于或等于<br />
&gt;= 大于或等于<br />
== 等于<br />
!= 不等于<br />
&amp;&amp; 而且 (And)<br />
and 而且 (And)<br />
|| 或者 (Or)<br />
or 或者 (Or)<br />
xor 异或 (Xor)<br />
! 不 (Not)</p>
<p class="Vdi751">今天就说到这里，明天说一下流程控制。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/07/study-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
