﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-SIMONE-随笔分类-PHP</title><link>http://www.blogjava.net/wangxinsh55/category/40298.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 22 Jun 2009 09:21:05 GMT</lastBuildDate><pubDate>Mon, 22 Jun 2009 09:21:05 GMT</pubDate><ttl>60</ttl><item><title>PHP 程序员的调试技术</title><link>http://www.blogjava.net/wangxinsh55/archive/2009/06/22/283615.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 22 Jun 2009 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2009/06/22/283615.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/283615.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2009/06/22/283615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/283615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/283615.html</trackback:ping><description><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr valign="top">
            <td width="100%">
            <p id="subtitle"><em>转自：</em>http://www.ibm.com/developerworks/cn/opensource/os-debug/</p>
            <p id="subtitle"><em>使用 print 语句、错误报告和 PHPEclipse 插件</em></p>
            <img alt="" src="http://www.ibm.com/i/c.gif" class="display-img" width="1" height="6" /></td>
            <td width="192"><img alt="developerWorks" src="http://www.ibm.com/developerworks/i/dw.gif" width="192" height="18" /></td>
        </tr>
    </tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr valign="top">
            <td width="10"><img alt="" src="http://www.ibm.com/i/c.gif" width="10" height="1" /></td>
            <td width="100%">
            <table align="right" border="0" cellpadding="0" cellspacing="0" width="160">
                <tbody>
                    <tr>
                        <td width="10"><img alt="" src="http://www.ibm.com/i/c.gif" width="10" height="1" /></td>
                        <td>
                        <table border="0" cellpadding="0" cellspacing="0" width="150">
                            <tbody>
                                <tr>
                                    <td>文档选项</td>
                                </tr>
                            </tbody>
                        </table>
                        <table border="0" cellpadding="0" cellspacing="0">
                            <tbody>
                                <tr>
                                    <td width="150"><noscript>
                                    <tr
                                    valign="top">
                                    <td width="8"><img alt="" height="1" width="8"
                                    src="//www.ibm.com/i/c.gif"/ /></td>
                                    <td width="16"><img alt="" width="16"
                                    height="16" src="//www.ibm.com/i/c.gif"/ /></td>
                                    <td>
                                    <p><span>未显示需要 JavaScript
                                    的文档选项</span></p>
                                    </td>
                                </tr>
                                </noscript>
                                <table border="0" cellpadding="0" cellspacing="0" width="143">
                                    <script language="JavaScript" type="text/javascript">
                                    <!--
                                    document.write('
                                    <tr valign="top">
                                        <td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/ /></td>
                                        <td width="16"><img alt="将打印机的版面设置成横向打印模式" height="16" src="//www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" /></td>
                                        <td width="122">
                                        <p><strong><a href="javascript:print()">打印本页</a></strong></p>
                                        </td>
                                    </tr>
                                    ');
                                    //-->
                                    </script>
                                    <tbody>
                                        <tr valign="top">
                                            <td width="8"><img src="http://www.ibm.com/i/c.gif" alt="" width="8" height="1" /></td>
                                            <td width="16"><img alt="将打印机的版面设置成横向打印模式" src="http://www.ibm.com/i/v14/icons/printer.gif" vspace="3" width="16" height="16" /></td>
                                            <td width="122">
                                            <p><strong><a href="javascript:print()">打印本页</a></strong></p>
                                            </td>
                                        </tr>
                                        <input value="本文介绍调试 PHP 应用程序的各种方法，包括在 Apache and PHP 中打开错误报告，以及通过在一个简单的 PHP 脚本中放置策略性的 print 语句，找到更困难的 bug 的源头。还会介绍用于 Eclipse 的 PHPEclipse 插件，这是一个灵活的开发环境，具有实时语法解析能力，还会介绍 PHPEclipse 的 DBG 调试器扩展。" name="body" type="hidden" /><input value="PHP 程序员的调试技术" name="subject" type="hidden" /><input value="cn" name="lang" type="hidden" />
                                        <script language="JavaScript" type="text/javascript">
                                        <!--
                                        document.write('
                                        <tr valign="top">
                                            <td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/ /></td>
                                            <td width="16"><img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /></td>
                                            <td width="122">
                                            <p><a href="javascript:document.email.submit();"><strong>将此页作为电子邮件发送</strong></a></p>
                                            </td>
                                        </tr>
                                        ');
                                        //-->
                                        </script>
                                        <tr valign="top">
                                            <td width="8"><img src="http://www.ibm.com/i/c.gif" alt="" width="8" height="1" /></td>
                                            <td width="16"><img src="http://www.ibm.com/i/v14/icons/em.gif" alt="将此页作为电子邮件发送" vspace="3" width="16" height="16" /></td>
                                            <td width="122">
                                            <p><a href="javascript:document.email.submit();"><strong>将此页作为电子邮件发送</strong></a></p>
                                            </td>
                                        </tr>
                                        <tr valign="top">
                                            <td width="8"><img alt="" src="http://www.ibm.com/i/c.gif" width="8" height="1" /></td>
                                            <td width="16"><img alt="" src="http://www.ibm.com/i/v14/icons/dn.gif" border="0" vspace="3" width="16" height="16" /></td>
                                            <td width="122">
                                            <p><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#download" class="smallplainlink"><strong>样例代码</strong></a></p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    <br />
                    </td>
                </tr>
            </tbody>
        </table>
        <p>级别： 中级</p>
        <p><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#author">Tyler Anderson</a> (<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#121;&#108;&#101;&#114;&#97;&#110;&#100;&#101;&#114;&#115;&#111;&#110;&#53;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;&#63;&#115;&#117;&#98;&#106;&#101;&#99;&#116;&#61;&#80;&#72;&#80;&#37;&#50;&#48;&#37;&#69;&#55;&#37;&#65;&#56;&#37;&#56;&#66;&#37;&#69;&#53;&#37;&#66;&#65;&#37;&#56;&#70;&#37;&#69;&#53;&#37;&#57;&#49;&#37;&#57;&#56;&#37;&#69;&#55;&#37;&#57;&#65;&#37;&#56;&#52;&#37;&#69;&#56;&#37;&#66;&#48;&#37;&#56;&#51;&#37;&#69;&#56;&#37;&#65;&#70;&#37;&#57;&#53;&#37;&#69;&#54;&#37;&#56;&#65;&#37;&#56;&#48;&#37;&#69;&#54;&#37;&#57;&#67;&#37;&#65;&#70;&#38;&#97;&#109;&#112;&#59;&#99;&#99;&#61;&#116;&#114;&#111;&#121;&#64;&#98;&#97;&#99;&#107;&#115;&#116;&#111;&#112;&#109;&#101;&#100;&#105;&#97;&#46;&#99;&#111;&#109;">tyleranderson5@yahoo.com</a>), 自由作者<br />
        </p>
        <p>2006 年  1 月  23 日</p>
        <blockquote>本
        文介绍调试 PHP 应用程序的各种方法，包括在 Apache and PHP 中打开错误报告，以及通过在一个简单的 PHP 脚本中放置策略性的
        print 语句，找到更困难的 bug 的源头。还会介绍用于 Eclipse 的 PHPEclipse
        插件，这是一个灵活的开发环境，具有实时语法解析能力，还会介绍 PHPEclipse 的 DBG 调试器扩展。</blockquote>
        <p><a name="N1004B">简介</a></p>
        <p>有许多 PHP 调试技术可以在编码的时候节约大量时间。一个有效却很基本的调试技术就是打开错误报告。另一个略微高级一点的技术包括使用
        print 语句，通过显示在屏幕上实际出现的内容，有助于精确地找出更难发现的 bug。PHPEclipse 是一个 Eclipse
        插件，能够强调常见的语法错误，可以与调试器结合起来用于设置断点。</p>
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="setup">设置</a></p>
        <p>要学习本文描述的概念，需要 PHP、Web 服务器和 Eclipse。调试器扩展支持的 PHP 版本是 V5.0.3。 </p>
        <p>我们需要一个 Web 服务器来解析用 PHP 创建的页面并把它们显示到浏览器。本文中使用的是 Apache2。但是，任何 Web 服务器都可以满足要求。 </p>
        <p>要利用本文中介绍的一些调试技术，需要安装 Eclipse V3.1.1 和插件 PHPEclipse V1.1.8。由于 Eclipse 要求 Java&#8482; 技术，所以还要下载它。 </p>
        <p>还需要 PHP 的调试器扩展模块。安装它略有些麻烦。请仔细跟随安装调试器扩展的操作说明。现在，先在 php.ini 文件中注释掉那些要求装入和配置 PHP 扩展的行。在需要使用调试器的时候，再取消注释。</p>
        <p>请参阅 <a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#resources">参考资料</a> 获得下载信息。现在介绍出错消息。</p>
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="N1006D">出错消息</a></p>
        <p>出错消息是作为开发人员的第一道防线。谁都不想在一台没有配置成显示出错消息的服务器上用 PHP
        开发代码。但是，请记住，当代码调试完成，准备运行的时候，应当确保关闭了错误报告，因为不希望站点的访问者看到出错消息，因为这会给他们提供足够的信息
        来利用站点的弱点并黑掉站点。</p>
        <p>也可以用出错消息为自己服务，因为它们会显示抛出或生成错误的正确代码行。这样，调试就变成在浏览器上查看生成的错误所显示的行号，并在代码中检查
        这一行。稍后，将会看到 PHPEclipse 插件通过即时地给语法错误加下划线并在保存文件时用红色 &#8220;x&#8221;
        标注语法错误，可在开发和调试过程中提供极大的帮助。</p>
        <p>先来看如何在 php.ini 文件中开启错误报告并设置错误报告的级别。然后将学习如何在 Apache 的配置文件中覆盖这些设置。</p>
        <p><a name="N1007C">PHP 的错误报告</a></p>
        <p>php.ini 文件中有许多配置设置。您应当已经设置好自己的 php.ini 文件并把它放在合适的目录中，就像在 Linux 上安装 PHP 和 Apache 2 的文档说明中所示的那样（请参阅 <a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#resources">参考资料</a>）。在调试 PHP 应用程序时，应当知道两个配置变量。下面是这两个变量及其默认值：</p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>display_errors = Off<br />
                    error_reporting = E_ALL<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>通过在 php.ini 文件中搜索它们，可以发现这两个变量当前的默认值。<code>display_errors</code> 变量的目的很明显 —— 它告诉 PHP 是否显示错误。默认值是 <code>Off</code>。但是，要让开发过程更加轻松，请把这个值设为 <code>On</code>：</p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>display_errors = On<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p><code>error_reporting</code> 变量的默认值是 <code>E_ALL</code>。这个设置会显示从不良编码实践到无害提示到出错的所有信息。<code>E_ALL</code> 对于开发过程来说有点太细，因为它在屏幕上为一些小事（例如变量未初始化）也显示提示，会搞糟浏览器的输出。我只想看到错误和不良编码实践，但是不想看到无害的提示。所以，请用以下值代替 <code>error_reporting</code> 的默认值：</p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>error_reporting = E_ALL &amp; ~E_NOTICE<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>重新启动 Apache，就全部设置好了。接下来，将学习如何在 Apache 上做同样的事。</p>
        <p><a name="N100BC">服务器上的错误报告</a></p>
        <p>依赖于 Apache 正在做的工作，在 PHP 中打开错误报告可能没法工作，因为在计算机上可能有多个 PHP 版本。有时很难区分
        Apache 正在使用哪个 PHP 版本，因为 Apache 只能查看一个 php.ini 文件。不知道 Apache 正在使用哪个
        php.ini 文件配置自己是一个安全问题。但是，有一种方法可以在 Apache 中配置 PHP 变量，从而保证设置了正确的出错级别。</p>
        <p>而且，最好知道如何在服务器端设置这些配置变量，以否决或抢占 php.ini 文件，从而提供更高级别的安全性。</p>
        <p>在配置 Apache 时，应该已经接触过 &lt;apache2-install-dir&gt;/conf/httpd.conf 中 http.conf 文件中的基本配置。</p>
        <p>要做在 php.ini 文件中已经做过的事，请把下列各行添加到 httpd.conf，覆盖任何 php.ini 文件：</p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>php_flag  display_errors        on<br />
                    php_value error_reporting       2039<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>这会覆盖在 php.ini 文件中为 <code>display_errors</code> 已经设置的标志，以及 <code>error_reporting</code> 的值。值 <code>2039</code> 代表 <code>E_ALL &amp; ~E_NOTICE</code>。如果愿意采用 <code>E_ALL</code>，请把值设为 <code>2047</code>。同样，还是要重启 Apache。</p>
        <p>接下来，要在服务器上测试错误报告。</p>
        <p><a name="N100F1">测试错误报告</a></p>
        <p>如果启动了错误报告，会节约许多时间。PHP 中的错误会指向代码中的错误。请创建一个简单的 PHP 文件 test.php，并像清单 1 所示一样定义它。</p>
        <br />
        <a name="N100FE"><strong>清单 1. 一个生成错误的简单 PHP</strong></a><br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>&lt;?php<br />
                    print("The next line generates an error.&lt;br&gt;");<br />
                    printaline("PLEASE?");<br />
                    print("This will not be displayed due to the above error.");<br />
                    ?&gt;<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>第一个 <code>print()</code> 语句会向 Web 浏览器显示它的内容。但是第二个语句会生成错误并在 Web 页面上显示。这造成最后一个 <code>print()</code> 语句不起作用，如图 1 所示。</p>
        <br />
        <a name="N10111"><strong>图 1. 生成错误</strong></a><br />
        <img alt="生成错误" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig01.jpg" width="572" height="271" />
        <br />
        <p>现在开启了错误报告！接下来，用 print 语句帮助调试应用程序。</p>
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="N10120">介绍 print 语句</a></p>
        <p>因为应用程序中的功能性 bug 不会产生错误，所以在所有调试策略中，关于如何正确地放置和使用 <code>print</code> 或 <code>die</code> 语句来调试 PHP 应用程序的知识是一种很好的资产。可以用 <code>print</code> 语句在代码中缩小对问题语句的定位，这些语句在语法上没有错误，也不是 bug，但是从代码的功能上看是 bug。这些是最难发现和调试的 bug，因为它们不会抛出错误。惟一知道的就是在浏览器上显示的内容不是想要的内容，或者想要保存在数据库中的内容根本没有保存。</p>
        <p>假设正在处理通过 <code>GET</code> 请求发送过来的表单数据，想向浏览器显示信息，但是出于某种原因，数据没有正确地提交，或者不能正确地从 <code>GET</code> 请求中读出。要调试这类问题，重要的是用 <code>print()</code> 或 <code>die()</code> 语句知道变量的值是什么。</p>
        <p><code>die()</code> 语句会中止程序执行，并在 Web 浏览器上显示文本。如果不想注释掉代码，而且只想显示到出错之前的信息和出错信息，不想显示后面的信息，那么 <code>die()</code> 语句特别有用。</p>
        <p>让我们在 PHP 中用 print 语句来测试这个概念</p>
        <p><a name="N10155">使用 print 语句进行调试</a></p>
        <p>在我作程序员的那些时候，当我在 Linux&#174; 上开发应用程序时，没有方便的 GUI 可以告诉我 bug 在哪，我迅速地发现我在程序中放的
        print 语句越多，我在应用程序中把 bug 的范围缩小到一行的机会越大。请创建另一个 PHP 文件 test2.php，并像清单 2
        所示的那样定义它。</p>
        <br />
        <a name="N10162"><strong>清单 2. 显示通过 GET 提交的所有变量</strong></a><br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>&lt;?php<br />
                    $j = "";<br />
                    print("Lets retrieve all the variables submitted to this ");<br />
                    print("script via a GET request:&lt;br&gt;");<br />
                    foreach($_GET as $key =&gt; $i){<br />
                    print("$key=$j&lt;br&gt;");<br />
                    }<br />
                    if($_GET['Submit'] == "Send GET Request")<br />
                    $j = "done!&lt;br&gt;";<br />
                    ?&gt;<br />
                    &lt;form method="GET"&gt;<br />
                    Name: &lt;input name="name"&gt;&lt;br&gt;<br />
                    Email: &lt;input name="email" size="25"&gt;&lt;br&gt;<br />
                    &lt;input name="Submit" type="submit" value="Send GET Request"&gt;<br />
                    &lt;/form&gt;<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>您可能会非常容易地发现清单 2 中的 bug！您很棒！但请注意这是一个非常简单的脚本，只是作为使用 print 语句进行调试而展示的一个例子而已。这个脚本只是提取 <code>GET</code> 请求中的所有变量，如果有，就把它们显示在浏览器上。还提供了一个表单，用 <code>GET</code> 请求向服务器发送变量以进行测试。请看输出，如图 2 所示。</p>
        <br />
        <a name="N10175"><strong>图 2. test2.php 的输出</strong></a><br />
        <img alt="test2.php 的输出" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig02.jpg" width="572" height="264" />
        <br />
        <p>现在单击 <strong>Send GET Request</strong> 按钮，请注意只有 <code>$_GET</code> 请求的键显示在浏览器上，而正确的值都没显示。可以在循环中放一个 print 语句，检验在 <code>foreach</code> 循环中每个元素中是否确实存在数据。请参阅清单 3。</p>
        <br />
        <a name="N10193"><strong>清单 3. 用 print 语句验证代码的功能</strong></a><br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>...<br />
                    foreach($_GET as $key =&gt; $i){<br />
                    print("Correct data? " . $_GET[$key] . "&lt;br&gt;");<br />
                    print("$key=$j&lt;br&gt;");<br />
                    }<br />
                    ...<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>放进去的 print 语句是粗体。注意，现在已经知道在 Web 浏览器上显示的 <code>$key</code> 值是正确的，但是由于某些原因，值没有正确地显示。请看新的输出，如图 3 所示。</p>
        <br />
        <a name="N101A5"><strong>图 3. 修改后的 test2.php 的输出</strong></a><br />
        <img alt="修改后的 test2.php 的输出" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig03.jpg" width="572" height="305" />
        <br />
        <p>现在已经知道应用程序正确地从  <code>GET</code> 请求接收到了变量，那么肯定是在代码中有 bug。查看之后注意到，用来显示值的变量 <code>$j</code> 是错误的。在 <code>foreach</code> 语句中指定的是 <code>$i</code>，所以它肯定会有正确的值，但是无意之中输入了 <code>$j</code>。所以通过把 <code>$j</code> 替换成 <code>$i</code>，迅速地修正了错误，重新载入页面之后，就看到了正确的输出，如图 4 所示。</p>
        <br />
        <a name="N101D2"><strong>图 4. 修正后的 test2.php 的输出</strong></a><br />
        <img alt="修正后的 test2.php 的输出" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig04.jpg" width="572" height="310" />
        <br />
        <p>现在可以删除或注释掉刚才添加的 print 语句了，因为已经发现了代码中的
        bug。注意，这只是在调试应用程序时可能遇到的许多错误中的一个很小的子集。对于使用数据库时可能遇到的问题，一个好的解决方案是输出 SQL
        语句，以确保执行的 SQL 就是想要执行的。</p>
        <p>现在要来看看如何使用 Eclipse IDE 和 PHPEclipse 插件及调试器扩展进一步在调试历程中提供帮助。</p>
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="N101E4">使用 PHPEclipse</a></p>
        <p>您可能用过 Eclipse，但是可能不熟悉它。请参阅 <a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#resources">参考资料</a> 获得 Eclipse 平台的介绍。</p>
        <p>用于 Eclipse 的 PHPEclipse 插件是用来开发 PHP 应用程序的一个流行工具。请启动 Eclipse 并把工作区目录指定为 Apache 的 www 目录（在我的机器上是 c:"www）。现在单击 <strong>File &gt; New &gt; Project</strong>。会弹出 New Project 向导。双击 PHP 文件夹并选择 PHP Project。单击 <strong>Next</strong>，输入项目名称 debugArticle，并单击 <strong>Finish</strong>。</p>
        <p>如果把 Web 服务器设置为在端口 80 上侦听，那么不需要做任何修改。否则，请转到 Navigator 窗口，在 PHP 项目 <strong>debugArticle</strong> 上右击，选择 Properties，然后单击 <strong>PHP Project Settings</strong>。单击 <strong>Configure Workspace Settings</strong> 然后修改合适的 localhost 或者添加 Web 服务器侦听的端口（例如 http://localhost:8080）。单击 <strong>Apply</strong> 完成设置。</p>
        <p>Navigator 窗口应当显示项目和一个 .project 文件。在项目上右击，就像前面做的那样，只是这次选择 <strong>New &gt; PHP File</strong>。用想要创建的 PHP 文件的名称 test3.php 替换 *.php，然后单击 <strong>Finish</strong>。在 Eclipse IDE 中应当出现一个新文件。可能需要导航到窗口底部的 PHP 浏览器来查看 PHP 文件的当前输出（参见图 5）。</p>
        <br />
        <a name="N10217"><strong>图 5. Eclipse 的 PHPEclipse 插件</strong></a><br />
        <img alt="Eclipse 的 PHPEclipse 插件" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig05.jpg" width="572" height="322" />
        <br />
        <p>注意，只有 Windows&#174; 的用户可以像清单 5 所示的那样使用 PHP 浏览器。通过打开独立浏览器窗口并把浏览器指向测试脚本所在目录，也可以使用同样的功能。</p>
        <p>现在来演示这个应用程序，证明它的强大能力。</p>
        <p>在 &#8220;使用调试器&#8221; 一节中，将学习如何用 Eclipse、PHPEclipse 和前面下载的调试器 PHP 扩展来调试 PHP 应用程序。先从学习如何使用它的语法解析功能开始。</p>
        <p><a name="N1022C">语法解析和加下划线</a></p>
        <p>先从查看 PHPEclipse 如何提供帮助调试 PHP 应用程序的实时语法解析功能开始。要看这个特性的实际应用，先从在 Eclipse 中定义 test3.php 开始，如下所示。</p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>&lt;?php<br />
                    print(,"Hello World!");<br />
                    ?&gt;<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p>注意，在清单 4 中加下划线的两个字符在 Eclipse 中加了下划线，提示语法不正确。按 <strong>Ctrl+S</strong> 保存文件，会在 Eclipse 中显示解析错误：在代码中与解析错误对应的行上会加上红 &#8220;x&#8221;，如图 6 所示。</p>
        <br />
        <a name="N10242"><strong>图 6. 语法错误强调</strong></a><br />
        <img alt="语法错误强调" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig06.jpg" width="572" height="322" />
        <br />
        <p>现在演示 PHP 浏览器。这个窗口提供了当前 PHP 脚本的预览，如图 6 所示。</p>
        <p>从上面定义的 test3.php 中删除逗号（<code>,</code>）。按 <strong>Ctrl+S</strong> 保存文件，然后观察 PHP 浏览器窗口的更新，显示了 Hello World（参见图 7）。</p>
        <br />
        <a name="N1025D"><strong>图 7. 在 PHPEclipse 中预览 PHP 脚本</strong></a><br />
        <img alt="在 PHPEclipse 中预览 PHP 脚本" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig07.jpg" width="572" height="322" />
        <br />
        <p>下面是用调试器在 PHP 中设置断点。</p>
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="N1026C">使用调试器</a></p>
        <p>使用调试器，可以设置断点并查看 PHP 代码到所设断点之前的浏览器输出。然后可以继续代码的执行并查看到下一断点之前的浏览器输出，然后再到下一个，直到 PHP 脚本完成。</p>
        <p>现在把 &#8220;设置&#8221; 一节中在 php.ini 中注释掉的行取消注释，并重新启动 Apache。现在装入了调试器，Eclipse 能够和它挂上了。</p>
        <p>现在在 Eclipse 中设计调试环境。请创建新的 test4.php 文件，先保持为空。现在单击 <strong>Run &gt; Debug</strong>。在左侧面板中选择 PHP DBG Script，并单击 <strong>New</strong>。现在转到 <strong>File</strong> 选项卡，输入当前项目 <strong>debugArticle</strong> 以及想要调试的文件 <strong>test4.php</strong>。现在转到 <strong>Environment</strong> 选项卡，然后再到 <strong>Interpreter</strong> 子选项卡。在 PHP 的安装目录中找到 php.exe 文件（我的是 c:"apps"php5.0.3"php.exe）。现在单击 <strong>Remote Debug</strong> 子选项卡，选择 <strong>Remote Debug</strong>，
        如果没有使用 Windows，请取消 &#8220;Open with DBGSession URL in internal browser box&#8221;
        复选框。把 Remote Source 路径设置成与要测试的 PHP 脚本的绝对路径（不是 Web 路径）相同（我的设置是
        c:"www"debugArticle"test4.php）。
        现在单击 <strong>Debug</strong>。</p>
        <p>现在应当装入 Debug 透视图，如图 8 所示。否则，请单击 <strong>Window &gt; Open Perspective &gt; Other</strong>，并选择 <strong>Debug</strong>。</p>
        <br />
        <a name="N102A4"><strong>图 8. Eclipse 中的 Debug 透视图</strong></a><br />
        <img alt="Eclipse 中的 Debug 透视图" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig08.jpg" width="600" height="530" />
        <br />
        <p>现在可以设置断点了。</p>
        <p>对于本文中使用的插件和扩展的版本，断点功能是必需的，因为 PHP 在把输出发送到浏览器之前会缓冲它。除此之外，需要做的不仅仅是设置一个断点把当前显示数据刷新到 Web 浏览器，所以要像下面和图 8 所示那样定义 test4.php。</p>
        <br />
        <a name="N102BA"><strong>清单 4. 设置和创建断点</strong></a><br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td>
                    <pre>&lt;?php<br />
                    function break-point(){<br />
                    ob_flush();<br />
                    flush();<br />
                    sleep(.1);<br />
                    debugBreak();<br />
                    }<br />
                    print("This will get shown first, ");<br />
                    print("as will this&lt;br&gt;");<br />
                    breakpoint();<br />
                    print("This won't get shown until after ");<br />
                    print("continuing the break-point&lt;br&gt;");<br />
                    breakpoint();<br />
                    print("END!");<br />
                    ?<br />
                    </pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <p><code>breakpoint()</code> 函数会把缓冲的输出和其他缓冲的数据刷新到 Web 浏览器。对 <code>sleep(.1)</code> 的调用是必需的，这样代码中止于 <code>debugBreak()</code> 之前，服务器才有足够的时间把数据刷新到 Web 浏览器，这个函数是前面下载的 PHP 调试器扩展的内部函数。这样，调用 <code>breakpoint()</code> 会把 HTML 块、<code>print()</code> 和 <code>echo()</code> 语句的数据刷新到浏览器，然后中止代码执行。</p>
        <p>在像清单 4 那样编写完代码之后，可以打开浏览器并指向 test4.php，或者可以查看 PHP 浏览器窗口（我的是
        http://localhost/debugArticle/test4.php）。每次输入和保存文件时，在 PHP
        浏览器窗口中就已经启动了调试序列。如果不使用 Windows，请通过浏览器查看 test4.php。在保存了文件之后，用 <strong>F8</strong> 或单击 <strong>Run &gt; Resume</strong> 继续代码执行。持续这么做，直到最后一行输出是 <code>END!</code> 为止（参见图 9、10 和 11）。</p>
        <br />
        <a name="N102E9"><strong>图 9. 初始的到第一个断点的 PHP 浏览器输出</strong></a><br />
        <img alt="初始的到第一个断点的 PHP 浏览器输出" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig09.jpg" width="572" height="538" />
        <br />
        <p>请注意图 9 中的 Debug 窗口如何把执行显示为挂起的。</p>
        <br />
        <a name="N102FA"><strong>图 10. 第一个断点之后到第二个断点之前的 PHP 浏览器输出</strong></a><br />
        <img alt="第一个断点之后到第二个断点之前的 PHP 浏览器输出" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig10.jpg" width="600" height="564" />
        <br />
        <p>图 10 的 Debug 窗口仍然把执行显示为挂起，而第二组数据显示在 PHP 浏览器中。</p>
        <br />
        <a name="N1030B"><strong>图 11. 完整的 PHP 浏览器输出</strong></a><br />
        <img alt="完整的 PHP 浏览器输出" src="http://www.ibm.com/developerworks/cn/opensource/os-debug/fig11.jpg" width="572" height="538" />
        <br />
        <p>注意，图 11 的 Debug 窗口中的代码不再挂起，整个脚本已经执行，如图 11 中的 PHP 浏览器所示。</p>
        <p>既然已经看到了用 PHPEclipse 和调试器扩展进行开发的优势，那么很难想像没有它会怎么样。</p>
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="N1031D">结束语</a></p>
        <p>现在已经向 PHP 的调试技术集中添加了错误报告的运用、print 语句、PHPEclipse 和调试器扩展，您可以通过减少每行代码的错误数量，成为更有效的 PHP 编码人员。请参阅 <a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#resources">参考资料</a> 获得一些 PHP 教程，可以在上面测试这些新技能。</p>
        <br />
        <br />
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
                    <img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="8" height="6" /></td>
                </tr>
            </tbody>
        </table>
        <table align="right" cellpadding="0" cellspacing="0">
            <tbody>
                <tr align="right">
                    <td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /><br />
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tbody>
                            <tr>
                                <td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" border="0" width="16" height="16" /><br />
                                </td>
                                <td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/opensource/os-debug/#main" class="fbox"><strong>回页首</strong></a></td>
                            </tr>
                        </tbody>
                    </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="download">下载</a></p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <th scope="col">描述</th><th scope="col">名字</th><th scope="col">大小</th><th scope="col">下载方法</th>
                </tr>
                <tr>
                    <th scope="row">Sample code for PHP Debugging</th>
                    <td nowrap="nowrap">os-debugsource.zip</td>
                    <td nowrap="nowrap">12KB</td>
                    <td nowrap="nowrap"><a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/library/os-debugsource.zip"><strong>HTTP</strong></a></td>
                </tr>
            </tbody>
        </table>
        <table border="0" cellpadding="0" cellspacing="0">
            <tbody>
                <tr valign="top">
                    <td colspan="5"><img alt="" src="http://www.ibm.com/i/c.gif" border="0" width="12" height="12" /></td>
                </tr>
                <tr>
                    <td><img alt="" src="http://www.ibm.com/i/v14/icons/fw.gif" width="16" height="16" /></td>
                    <td><a href="http://www.ibm.com/developerworks/cn/whichmethod.html">关于下载方法的信息</a></td>
                    <td><img alt="" src="http://www.ibm.com/i/c.gif" width="50" height="1" /></td>
                </tr>
            </tbody>
        </table>
        <br />
        <br />
        <p><a name="resources">参考资料 </a></p>
        <strong>学习</strong><br />
        <ul>
            <li>您可以参阅本文在 developerWorks 全球站点上的 <a href="http://www.ibm.com/developerworks/opensource/library/os-debug/?S_TACT=105AGX52&amp;S_CMP=cn-a-os" target="_blank">英文原文</a>。<br />
            <br />
            </li>
            <li>
            学习如何在基于 Windows 和 UNIX&#174; 的系统上 <a href="http://www.jibble.org/settingupjava.php">安装 Java</a>。<br />
            <br />
            </li>
            <li>
            请访问 <a href="http://www.eclipse.org/">Eclipse.org</a> 获得编程和如何使用它的全面信息。<br />
            <br />
            </li>
            <li>
            &#8220;<a href="http://www.ibm.com/developerworks/cn/linux/opensource/os-ecov/">Eclipse 平台入门</a>&#8221;（developerWorks，2002 年 11 月）提供了 Eclipse 的历史和概述，包括如何安装 Eclipse 和插件的细节。<br />
            <br />
            </li>
            <li>
            请访问 <a href="http://www.phpeclipse.de/">PHPEclipse</a> 学习关于安装 PHPEclipse 和如何使用它的更多内容。<br />
            <br />
            </li>
            <li>
            DBG 是一个全功能的 PHP 调试器引擎，一个交互的工具，有助于调试 PHP 脚本。请阅读 <a href="http://www.plog4u.org/index.php/Using_PHPEclipse_:_Installation_:_Installing_the_DBG_Debugger">Installing and configuring the debugger</a> 上的这份教程。<br />
            <br />
            </li>
            <li>
            要学习关于 Eclipse 的更多内容，请访问 developerWorks 的 <a href="http://www.ibm.com/developerworks/opensource/top-projects/eclipse.html?S_TACT=105AGX52&amp;S_CMP=cn-a-os">Eclipse project resources</a>。<br />
            <br />
            </li>
            <li>
            要学习关于 PHP 的更多内容，请访问 developerWorks 的 <a href="http://www.ibm.com/developerworks/opensource/top-projects/php.html?S_TACT=105AGX52&amp;S_CMP=cn-a-os">PHP project resources</a>。<br />
            <br />
            </li>
            <li>
            请参阅 PHP 手册获得更多关于 <a href="http://php.net/error_reporting">error reporting</a> 的内容。<br />
            <br />
            </li>
            <li>
            请阅读安装 <a href="http://dan.drydog.com/apache2php.html">PHP and Apache2 on Linux</a> 的操作说明。<br />
            <br />
            </li>
            <li>
            请阅读安装 <a href="http://www.php-mysql-tutorial.com/install-apache-php-mysql.php">PHP and Apache2 on Windows</a> 的操作说明。<br />
            <br />
            </li>
            <li>
            要获得一系列学习 PHP 编程的 developerWorks 教程，请参阅 &#8220;<a href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=91117">学习 PHP，第 1 部分</a>&#8221;、<a href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=91118">学习 PHP，第 2 部分</a> 和 <a href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=91693">学习 PHP，第 3 部分</a>。<br />
            <br />
            </li>
            <li>
            请密切关注 <a href="http://www.ibm.com/developerworks/offers/techbriefings/?S_TACT=105AGX52&amp;S_CMP=cn-a-os">developerWorks technical events and webcasts</a>。<br />
            <br />
            </li>
            <li>
            请访问 developerWorks <a href="http://www.ibm.com/developerworks/cn/opensource">开放源码专区</a> 获得丰富的 how-to 信息、工具和项目更新，有助于用开放源码技术进行开发并把它们用于 IBM 的产品。<br />
            <br />
            </li>
        </ul>
        <br />
        <strong>获得产品和技术</strong><br />
        <ul>
            <li>
            请从 PHP.net 下载最新版本的 <a href="http://www.php.net/downloads.php">PHP</a>。<br />
            <br />
            </li>
            <li>
            请下载最新版本的 <a href="http://httpd.apache.org/download.cgi">Apache 2</a>。<br />
            <br />
            </li>
            <li>
            请从 Sun 公司下载 <a href="http://java.sun.com/downloads/">Java 技术</a>。<br />
            <br />
            </li>
            <li>
            请从 Eclipse.org 下载最新版本的 <a href="http://www.eclipse.org/downloads/">Eclipse</a>。<br />
            <br />
            </li>
            <li>
            请从 Sourceforge 下载 <a href="http://sourceforge.net/project/showfiles.php?group_id=57621">PHPEclipse</a>。把 Eclipse 解压到 eclipse-install-dir，然后把 PHPEclipse 解压到 eclipse-install-dir。在安装扩展时，要按照 <a href="http://www.plog4u.org/index.php/Using_PHPEclipse_:_Installation_:_Installing_the_DBG_Debugger">PHPEclipse instructions</a>。但是，在要求在 php.ini 文件中装入和配置 PHP 扩展的地方注释掉那些行。在准备使用调试器时再取消这些行的注释。<br />
            <br />
            </li>
            <li>
            <a href="http://www.ibm.com/developerworks/offers/sek/?S_TACT=105AGX52&amp;S_CMP=cn-a-os">订购免费的 SEK for Linux</a>，这套 DVD（两张），包含了来自 DB2&#174;、Lotus&#174;、 Rational&#174;、Tivoli&#174; 和 WebSphere&#174; 的用于 Linux 的最新 IBM 试用软件。<br />
            <br />
            </li>
            <li>
            请用
            <a href="http://www.ibm.com/developerworks/downloads/?S_TACT=105AGX52&amp;S_CMP=cn-a-os">IBM 试用软件</a> 改造您的下一个开放源码开发项目，可以下载也可以通过 DVD 得到。<br />
            <br />
            </li>
        </ul>
        <br />
        <strong>讨论</strong><br />
        <ul>
            <li>
            通过参与 <a href="http://www.ibm.com/developerworks/blogs/?S_TACT=105AGX52&amp;S_CMP=cn-a-os">developerWorks blogs</a> 加入 developerWorks 社区。</li>
        </ul>
        <br />
        <br />
        <p><a name="author">关于作者</a></p>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tbody>
                <tr>
                    <td colspan="3"><img alt="" src="http://www.ibm.com/i/c.gif" width="100%" height="5" /></td>
                </tr>
                <tr align="left" valign="top">
                    <td><br />
                    </td>
                    <td><img alt="" src="http://www.ibm.com/i/c.gif" width="4" height="5" /></td>
                    <td width="100%">
                    <p>Tyler
                    Anderson 2004 年从 Brigham Young
                    大学毕业，获得计算机科学学位。现在是他作为计算机工程硕士生的最后一学期。过去，他作为数据库程序员为 DPMG.com 工作，现在他是位于
                    Beaverton, Ore 的 Stexar 公司的工程师。</p>
                    </td>
                </tr>
            </tbody>
        </table>
        </td>
    </tr>
</tbody>
</table>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/283615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2009-06-22 17:09 <a href="http://www.blogjava.net/wangxinsh55/archive/2009/06/22/283615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>N种PHP5安装教程 分享</title><link>http://www.blogjava.net/wangxinsh55/archive/2009/06/16/282639.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 16 Jun 2009 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2009/06/16/282639.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/282639.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2009/06/16/282639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/282639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/282639.html</trackback:ping><description><![CDATA[<div>N种PHP5安装教程</div>
<div>
<p>1,要下载2个php的安装包:一个是install版本的，另一个是zip版本的 。<br />
2,运行install版本，按照标准模式安装就可以了，安装过程中注意正确选择你的iIS版本。<br />
2000server 选iis4或更高版本 ,2003server选择iis 6.<br />
关联.php,.phtml.php3等文件类型。这里设定d:/php作为安装目录<br />
3,别着急,现在还不能马上用.把zip版的解压缩，到d:/php5zip/文件夹下面，copy目录下所有的文件和目录，然后粘贴到d:/php，覆盖下面的所有文件.<br />
4,C:/PHP
/ext下面的dll扩展文件复制到c:/windows/system32下面，*给guests用户组(我的机器上,每个站点设置了用不同的匿名用
户,这些用户都属于guests组,如果你只有一个ISUR_你的机器名,则只需要设置ISUR_你的机器名的权限)这些关于PHP5的dll文件读取和
运行的权限。<br />
5,*给guests用户组php.exe，php-cgi.exe，php5isapi.dll读取和运行的权限。<br />
6,*设置c:/windows/php.ini 或者 c:/winnt/php.ini为guests用户组可以：读取.<br />
7,最后，别忘记在IIS里面给站点属性--〉文档里增加index.php或者default.php<br />
8,MySQL的启用：<br />
需要去掉c:/windows/php.ini 或者 c:/winnt/php.ini里面关于php_mysqli.dll扩展的注释<br />
另外增加extension=php_mysql.dll<br />
9,好了,如果要增加图形或其他功能,修改php.ini 里面的extension,并且把相关的dll文件复制到c:/windows/system32下面，并给guests用户组这些关于PHP5的dll文件读取和运行的权限。<br />
免费考研网<a href="http://www.freekaoyan.com/">www.freekaoyan.com</a></p>
<p>----------------------------------------------------------------------------------------------------------------------------</p>
<p><a href="http://www.newasp.cn/" target="_blank">Windows</a>版的PHP5和PHP4相比，安装过程有些变化，安装更多的考虑到以后的可升级性，安装PHP5时建议安装在没有空格的目录名下，以免出现失误，如果安装在含有空格的目录下，那么配置的时候最好将目录名用引号引起来，下是<a href="http://www.newasp.cn/" target="_blank">Windows</a>版PHP5的安装方法：PHP5安装笔记</p>
<p><a href="http://www.newasp.cn/" target="_blank">Windows</a>版的PHP5和PHP4相比，安装更多的考虑到以后的可升级性，安装PHP5时建议安装在没有空格的目录名下，以免出现错误，以下是<a href="http://www.newasp.cn/" target="_blank">Windows</a>版PHP5的安装手册：</p>
<p>1。php4ts.dll/php5ts.dll：对php4ts.dll/php5ts.dll的路径说明也比较清晰而且更加利于将来的升级：第
一种法案就是老的copy到系统目录，第二种方案就是添加PHP4/5到%PATH%中去(我这个懒人，在PHP4时就独辟蹊径的喜欢这么搞，因为这样做
是符合<a href="http://www.newasp.cn/" target="_blank">windows</a>查找文件时搜索路径的顺序(.-&gt;%PATH%)。</p>
<p>2。PHP.ini:出于安全和效率的考虑，建议使用php.ini-recommended作为php.ini的蓝本,而不要使用
php.ini-dist。同时PHP.ini的查找路径也不再限于PHP4时代的%SystemRoot%下了，PHP5按照以下路径查找
PHP.ini：</p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * PHPIniDir (Apache 2 module only)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 注册表键值：HKEY_LOCAL_MACHINESOFTWAREPHPIniFilePath<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 环境变量:%PHPRC% <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * PHP5的目录 (for CLI), 或者web服务器目录(for<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAPI modules)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <a href="http://www.newasp.cn/" target="_blank">Windows</a>目录(C:<a href="http://www.newasp.cn/" target="_blank">windows</a> or C:winnt)<br />
</font>这五个方案中，配合Apache2时最好使用PHPIniDir，其次是使用%PHPRC%环境变量，另外，NTFS上记得给服务器开PHP.ini的读权限。</p>
<p>3.配置web服务器：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于IIS，以IIS的ISAPI模块运行PHP：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.在系统变量中添加%PHPRC%变量，取值为你的php.ini所在的目录(<br />
比如在PHP5安装目录下。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.为了使用HTTP Authentication，在ISAPI Filters上添加一个属性<br />
为php5isapi.dll的PHP筛选器，如果不使用HTTP Authentication，可以不管这一步。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.在主目录选项卡，点击配置，应用程序映射新建扩展名为.php并且可执行文件为php5isapi.dll。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.好了，重新启动IIS，写个测试。</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于Apache，我一直都喜欢 以Apache的模块运行PHP<br />
1.编辑httpd.conf<br />
<font color="#ff0000"># LoadFile "e:/Apache/php4ts.dll"&nbsp;&nbsp;<br />
# LoadModule php4_module modules/php4apache.dll</font></p>
<p>#加载php5ts.dll，这无论是apache还是IIS都必须以来的链接库<br />
<font color="#ff0000">LoadFile "E:/PHP5/php5ts.dll"</font></p>
<p>#加载php5的apache模块<br />
<font color="#ff0000">LoadModule php5_module "E:/PHP5/php5apache.dll"</font></p>
<p>#设置PHPRC变量,以提供给PH5查找配置文件PHP.ini,就无需在跑到%SystemRoot%下去找php.ini了<br />
<font color="#ff0000">SetEnv PHPRC "E:/PHP5"</font></p>
<p>#注意，如果定义了ClearModuleList指令,则添加如下语句,如果没有则无须添加，我当初没有<br />
#添加该行 ,结果将测试用的phpinfo.php的源码给下载下来了<br />
<font color="#ff0000">AddModule mod_php5.c</font></p>
<p>#为了兼容添加php3和php4的类型<br />
<font color="#ff0000">AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php .php3<br />
AddType application/x-httpd-php .php4</font><br />
2.重新启动apache(NET STOP apache &amp;&amp; net start apache)，写个测试。</p>
<p>4.额外的配置<br />
为了更好的配置php5,还需要根据个人需要重新编辑你的php.ini:<br />
比如需要使用smart和pear ，则需要更改的是:<br />
<font color="#ff0000">include_path = ".;E:/PHP5/Smarty;E:/PHP5/PEAR"</font><br />
另外php5再也不像php4那样内置了对mysql和ODBC的支持了，而是只内置对ODBC <br />
进行支持，所以如果需要使用Mysql数据库的话，还要设置extension_dir(php_mysql.dll)的目录以及用<br />
extension加载php_mysql.dll</p>
<p>#修改extension_dir为：<br />
<font color="#ff0000">extension_dir = "E:/PHP5/ext"</font><br />
#删除extension=php_mysql.dll前的;,以加载php_mysql.dll<br />
<font color="#ff0000">extension=php_mysql.dll</font><br />
差不多就这些了。</p>
<p>-------------------------------------------------------------------------------------------------------------------------------</p>
<p>安装 PHP5&nbsp;&nbsp;<br />
<br />
将下载的php-5.0.3RC2-Win32.zip
解压缩并复制到你选择的分区中（如C盘），并将其更名为PHP5。完成后的路径：C:"PHP5。以下步骤中假定 PHP 位于 c:"php5
中。你也可以选择其它的路径但最好不要用中间有空格的路径，例如：C:"Program Files"PHP5 ，如果这样做有些 Web
服务器就会崩溃。&nbsp;&nbsp;<br />
<br />
接下来复制 C:"PHP5"目录下的 php5ts.dll 文件到c:"winnt"system32目录中。&nbsp;&nbsp;<br />
<br />
下一步是设定有效的 PHP 配置文件php.ini。 C:"PHP5中包括两个 ini 文件，php.ini-dist 和
php.ini-recommended。其中
php.ini-recommended对默认设置作了性能和安全上的优化。我们这里选择php.ini-dist，将选择的 ini 文件拷贝到
PHP 能够找到的目录下并改名为 php.ini。在 Windows 2000 Server 中拷贝到c:"winnt中。&nbsp;&nbsp;<br />
<br />
注意：如果使用了 NTFS，确保运行 webserver 的用户对 php.ini 有读取的权限（例如使其对 Everyone 可读）。&nbsp;&nbsp;<br />
<br />
正确加载对MySQL数据库的支持模块&nbsp;&nbsp;<br />
<br />
复制 C:"PHP5" 目录下的libmysql.dll文件到 C:"windows"system32" 目录中。&nbsp;&nbsp;<br />
<br />
用记事本打开编辑php.ini文件，找到并修改下面两行：&nbsp;&nbsp;<br />
<br />
; Directory in which the loadable extensions (modules) reside.&nbsp;&nbsp;<br />
extension_dir = "./"&nbsp;&nbsp;<br />
<br />
成：&nbsp;&nbsp;<br />
; Directory in which the loadable extensions (modules) reside.&nbsp;&nbsp;<br />
extension_dir = "c:"php5"ext""&nbsp;&nbsp;<br />
<br />
再找到下面两行：&nbsp;&nbsp;<br />
<br />
;Windows Extensions&nbsp;&nbsp;<br />
;Note that ODBC support is built in, so no dll is needed for it.&nbsp;&nbsp;<br />
<br />
将;extension=php_mysql.dll前的分号去掉成：extension=php_mysql.dll然后保存文件并退出即可使PHP5支持MySQL数据库。&nbsp;&nbsp;<br />
<br />
配置IIS服务器&nbsp;&nbsp;<br />
<br />
依次点击&#8220;开始/设置/控制面板/管理工具/Internet服务管理器/主目录&#8221;。&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;<br />
<br />
在&#8220;主目录&#8221;中点击&#8220;配置&#8221;按钮，在应用程序映射中添加一个新的条目。用 php5isapi.dll 的路径作为可执行文件（Executable），用 .php 作为文件后缀，如图：&nbsp;&nbsp;<br />
<br />
<br />
<br />
如果你不用 PHP 进行 HTTP 认证的话，你可以不设置ISAPI筛选器。&nbsp;&nbsp;<br />
<br />
完全停止 IIS 服务，再重新启动IIS服务。如果还是出现问题，则重新启动电脑。</p>
<p>----------------------------------------------------------------------------------------------------------------------------</p>
<p align="center"><font size="3">Winxp下php5，mysql5详细安装教程-(结合<a href="http://hi.baidu.com/chinese2008/blog/item/475ad40927d7de80d1581b6a.html" target="_blank">使PHP5在IIS下支持MYSQL5</a> 使用)</font></p>
<p>现在php和Mysql的黄金组合已经是开发动态网站的一个非常好的选择了，尤其对于我这样一个开源文化的支持者。经过长达两天的安装，屡错屡勇，
终于安装成功。&nbsp;&nbsp;&nbsp;
下面是我根据自己的实际安装过程，整理的一个详细安装说明，希望对广大的LAMP爱好者有所帮助，避免把宝贵的时间浪费在没有任何意义的安装过程上面。</p>
<p>本文实际测试平台说明：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows XP home 版。</p>
<p>说明：一般来说，windows2000和Windows
XP的安装大同小异，唯一的区别可能就是下文中所述的系统目录的位置不同，windows2000的系统目录应该是/WINNT,Windows
XP系统目录应该是/WINdows，在复制相关文件时请注意将要复制的目标文件夹的位置不要弄错。:)&nbsp;&nbsp;</p>
<p>APACHE2.0.58 (注意，笔者安装时，最新版本是apache_2.2.2，但是此版本好像不支持php5的模块化安装，笔者最终没有安装成功)&nbsp;&nbsp;<a href="http://down.phpv.net/download/?softwareid=1545&amp;pid=2" target="_blank">PHP5.1.4</a>&nbsp;&nbsp;<a href="http://26.duote.com/mysql_duote.exe" target="_blank">MYSQL5.0.22</a>&nbsp;&nbsp;<a href="http://service.hichina.com/Soft/ShowSoftDown.asp?UrlID=3&amp;SoftID=6" target="_blank">phpMyAdmin-2.8.1</a>&nbsp;&nbsp;&nbsp;
对应的安装文件分别是&nbsp;&nbsp;&nbsp; apache_2.0.58-win32-x86-no_ssl.msi&nbsp;&nbsp;&nbsp;
php-5.1.4-Win32.zip，pecl-5.1.4-Win32.zip&nbsp;&nbsp;&nbsp; mysql-5.0.22-win32.zip&nbsp;&nbsp;&nbsp;
phpMyAdmin-2.8.1.zip&nbsp;&nbsp;&nbsp; 请到官方网站下载对应版本的软件.</p>
<p>一、Mysql安装&nbsp;&nbsp;&nbsp; Mysql在windows平台下的安装是我们熟悉标准的安装欢迎程序。&nbsp;&nbsp;&nbsp; 如不需要改变默认安装目录，一直点击next即可完成安装。&nbsp;&nbsp;&nbsp; 下面按照安装顺序解释一下安装过程中的选项。&nbsp;&nbsp;</p>
<p>1、默认是Typical，建议改成Custom&nbsp;&nbsp;&nbsp; 这一步需要选择组件及更改文件夹位置，组件使用默认即可，选择Change改变安装目录，注意：安装mysql的路径中，不能含有中文！</p>
<p>2、程序提示是否要在mysql.com上注册，可以选择跳过，即Skip Sign-Up。&nbsp;&nbsp;</p>
<p>3、安装结束，选中现在开始配置mysql服务器的选择框。</p>
<p>&nbsp;&nbsp;&nbsp; 4、配置开始，选择第一项 Detailed Configuration&nbsp;&nbsp;</p>
<p>5、选择mysql应用于何种类型，第一种是开发服务器，将只用尽量少的内存，第二种是普通WEB服务器，将使用中等数量内存，最后一种是这台服务
器上面只跑mysql数据库，将占用全部的内存，根据自己的需求，选择其中之一。我搭建的是开发平台，并不是实际应用的数据库服务器，所以选择第一
种。&nbsp;&nbsp;</p>
<p>6、选择数据库用途，第一种是多功能用途，将把数据库优化成很好的innodb存储类型和高效率的myisam存储类型，第二种是只用于事务处理类
型，最好的优化innodb，但同时也支持myisam，最后一种是非事务处理类型，适合于简单的应用，只有不支持事务的myisam类型是被支持的。一
般选择第一种多功能的，我选择的是第一种。</p>
<p>&nbsp;&nbsp;&nbsp; 7、选择InnodDB的数据存放位置，默认即可。&nbsp;&nbsp;</p>
<p>8、选择mysql允许的最大连接数，可以根据自己的需要选择，默认即可&nbsp;&nbsp;</p>
<p>9、选择数据库监听的端口，一般默认是3306，如果改成其他端口，以后连接数据库的时候都要记住修改的端口，否则不能连接mysql数据库，默认即可&nbsp;&nbsp;</p>
<p>10、设置mysql的默认编码，可以根据需要，选择gb2312或gbk，如果已有数据库文件，要和原来已有的数据库的编码一致，否则可能会出现乱码。</p>
<p>11、选择是否要把mysql设置成windows的服务，建议选择设成服务，这样以后就可以通过服务中启动和关闭mysql数据库了。推荐把下面的复选框也勾选上，这样，在cmd模式下，不必非到mysql的bin目录下执行命令。</p>
<p>&nbsp;&nbsp;&nbsp; 12、设置mysql的超级用户密码，超级用户对mysql拥有全部的权限，下面的复选框选择是否允许远程机器用root用户连接到你的mysql服务器上面，根据需要选择。</p>
<p>13、点击Execute，如果前面的设置没有问题的话很快就可以成功安装了。</p>
<p>二、安装apache&nbsp;&nbsp;&nbsp; 安装Apache同样是我们熟悉标准的安装程序。非常直观。&nbsp;&nbsp;</p>
<p>安装过程中会提示输入主机名，管理员信箱等信箱，这些信息安装完以后可以修改的,这里可以直接按照安装程序中给出的示例填写即可，如
somenet.com,[url]www.somenet.com[/url],webmaster@somenet.com。注意，空着这几项也可以
安装成功，但安装完成后启动apache服务器会提示缺少管理员信箱的错误，所以建议全部填写，虽然是虚构的，:( 。</p>
<p>安装完成后在任务栏的右侧，应该有一个类似apache那个小羽毛的图标，这就是Apache2的服务管理器。如果图标的状态有显示绿色小三角，说
明服务器已经安装成功，如果是红色的，则说明Apache没有安装成功,你需要进一步去找一下失败的根源。一般的错误原因是apache的配置文件不正确
等，比如某一个模块没有正确加载。</p>
<p>三，安装 PHP5&nbsp;&nbsp;&nbsp;&nbsp; 　　&nbsp;&nbsp;&nbsp; 将下载的php-5.0.3RC2-Win32.zip 解压缩并复制到你选择的安装目录中，比如
c:"php5。以下步骤中假定 PHP 位于 c:"php5 中。建议不要用中间有空格的路径，例如：C:"Program
Files"PHP5。&nbsp;&nbsp;&nbsp; 　　</p>
<p>将下载的pecl-5.1.4-Win32.zip 解压缩并复制到你选择的安装目录的ext子目录中。比如c:"php5"ext&nbsp;&nbsp;&nbsp; 　　</p>
<p>&nbsp;&nbsp;&nbsp; 复制 C:"PHP5"目录下的 php5ts.dll 文件到c:"winnt"system32目录中。&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 复制 C:"PHP5" 目录下的libmysql.dll文件到 C:"windows"system32" 目录中。&nbsp;&nbsp;&nbsp; 　　</p>
<p>&nbsp;&nbsp;&nbsp; 复制 C:"PHP5" 目录下的php.ini-dist文件到 C:"windows" 目录中，并改名为 php.ini。&nbsp;&nbsp;&nbsp; 　　</p>
<p>说明：C:"PHP5中包括两个 ini 文件，php.ini-dist 和 php.ini-recommended。其中
php.ini-recommended对默认设置作了性能和安全上的优化，安装实际运行的服务期推荐使用这个配置文件。我们安装的一般是开发平台，所以
在这里选择php.ini-dist。注意：如果使用了 NTFS文件系统，确保运行 webserver 的用户对 php.ini
有读取的权限（例如使其对 Everyone 可读）。&nbsp;&nbsp;&nbsp;&nbsp; 　　</p>
<p>&nbsp;&nbsp;&nbsp; 用记事本打开编辑刚才复制到C:"windows" 目录中php.ini文件。&nbsp;&nbsp;&nbsp; 找到下面两行&nbsp;&nbsp;&nbsp; ; Directory
in which the loadable extensions (modules) reside.&nbsp;&nbsp;&nbsp;&nbsp; extension_dir =
"./"&nbsp;&nbsp;&nbsp;&nbsp; 修改成：&nbsp;&nbsp;&nbsp;&nbsp; ; Directory in which the loadable extensions
(modules) reside.&nbsp;&nbsp;&nbsp;&nbsp; extension_dir = "c:"php5"ext""&nbsp;&nbsp;&nbsp;&nbsp; 再找到下面两行：</p>
<p>&nbsp;&nbsp;&nbsp; ;Windows Extensions</p>
<p>&nbsp;&nbsp;&nbsp; ;Note that ODBC support is built in, so no dll is needed for it.&nbsp;&nbsp;&nbsp;</p>
<p>将其中的一行;extension=php_mysql.dll前面的分号去掉改成 extension=php_mysql.dll&nbsp;&nbsp;</p>
<p>然后保存文件并退出即可使PHP5支持MySQL数据库</p>
<p>四：让 Apache 解析 php 页面</p>
<p>&nbsp;&nbsp;&nbsp; 用你喜欢的文本编辑器打开httpd.conf文件(在Apache的安装目录下)，让我们加几行进去，这样我们Apache 就可以解析 .php 和.phps文件了。</p>
<p>我们需要注意conf文件的两个部分，</p>
<p>第一部分是 Dynamic Shared Object (DSO) Support list，</p>
<p>第二部分是 cgi-bin directory&nbsp;&nbsp;&nbsp; 首先让我们找到如下所示的 DSO 列表.</p>
<p>&nbsp;&nbsp;&nbsp; # Dynamic Shared Object (DSO) Support&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; # to be able to use the functionality of a module which was built as a DSO you&nbsp;&nbsp;&nbsp;</p>
<p># have to place corresponding `LoadModule' lines at this location so the&nbsp;&nbsp;</p>
<p># directives contained in it are actually available _before_ they are used.</p>
<p># Statically compiled modules (those listed by `httpd -l') do not need&nbsp;&nbsp;</p>
<p># to be loaded here.&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;</p>
<p># Example:&nbsp;&nbsp;</p>
<p># LoadModule foo_module modules/mod_foo.so&nbsp;&nbsp;</p>
<p>这还有许多，一直找到最后一行：&nbsp;&nbsp;&nbsp; #LoadModule ssl_module modules/mod_ssl.so&nbsp;&nbsp;&nbsp;&nbsp; 上面一行是该列表的最后一行，按回车产生一个空的行，在这个空行内加入下面这行：</p>
<p>&nbsp;&nbsp;&nbsp; LoadModule php4_module c:/php/sapi/php4apache2.dll</p>
<p>在关闭conf文件之前，我们需要再加入两行。找到CGI-BIN目录，为了节省时间，可以这样找：按CTRL+F查找关键字&nbsp;&nbsp;&nbsp;
CGI-BIN&nbsp;&nbsp;&nbsp; ，(译者注：如果你是在记事本而不是写字板里编辑这个文本，那么，应该用快捷键F3)查找
，在第二个CGI-BIN目录后面两次回车，以便加入下面两行：</p>
<p>&nbsp;&nbsp;&nbsp; AddType application/x-httpd-php .php .phtml .php3 .php4&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; AddType application/x-httpd-php-source .phps&nbsp;&nbsp;&nbsp;</p>
<p>五：安装phpAdmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>1，解压，将压缩包解压到php可以运行的目录，一般就是apache的根目录</p>
<p>2，设置，拷贝{phpMyAdmin安装目录}/libraries/config.default.php 文件到phpMyAdmin安装目录，并且重命名为config.inc.php&nbsp;&nbsp;&nbsp; 修改config.inc.php文件</p>
<p>$cfg[&#8217;Servers&#8217;][$i][&#8217;host&#8217;] = &#8216;localhost&#8217;; // MySQL的主机名称或者IP地址</p>
<p>$cfg[&#8217;Servers&#8217;][$i][&#8217;port&#8217;] = &#8216;3306&#8242;; // MySQL端口 - 空白将用默认端口3306&nbsp;&nbsp;</p>
<p>$cfg[&#8217;Servers&#8217;][$i][&#8217;auth_type&#8217;] = &#8216;cookie&#8217;; // 认证方式 (config, http or cookie based)?</p>
<p>$cfg[&#8217;Servers&#8217;][$i][&#8217;user&#8217;] = &#8216;root&#8217;; // MySQL用户，如 root</p>
<p>$cfg[&#8217;Servers&#8217;][$i][&#8217;password&#8217;] = &#8216;root&#8217;; // MySQL用户密码</p>
<p>启用php.ini中的字符设置扩展功能&nbsp;&nbsp;&nbsp; extension=php_mbstring.dll</p>
<p>&nbsp;&nbsp;&nbsp; 注意，编辑config.inc.php文件应使用winxp自带写字板程序，不知道为什么用记事本打开显示的是无格式的文档。</p>
<p>六、后记&nbsp;&nbsp;&nbsp; PHP，MYSQL,APACHE
的安装本来就是一件很简单的事情，特别是后来所讲的以模块化安装PHP的过程。由于最新版本的软件互相间的支持不是很好，尽量选择本文选择的经过实际测试
可以安装成功的版本。大家有时间都不妨自己试一下，这样你才能体验到成功的喜悦。最后祝大家都能顺利的安装AMP.</p>
</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/282639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2009-06-16 17:08 <a href="http://www.blogjava.net/wangxinsh55/archive/2009/06/16/282639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>