<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >安装常见问题</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="FAQ:常见问题" HREF="faq.html"><LINK REL="PREVIOUS" TITLE="数据库问题" HREF="faq.databases.html"><LINK REL="NEXT" TITLE="编译问题" HREF="faq.build.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="chapter" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="faq.databases.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="faq.build.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="chapter" ><H1 ><A NAME="faq.installation" >章 53. 安装常见问题</A ></H1 ><P > 本章包括了安装 PHP 的常见问题。PHP 可以用于几乎任何操作系统(可能除了 OS X 之前的 MacOS 之外),以及几乎任何 web 服务器。 </P ><P > 要安装 PHP,请按照<A HREF="install.html" >安装与配置</A >一章中的指示进行。 </P ><DIV CLASS="qandaset" ><DL ><DT >1. <A HREF="faq.installation.html#faq.installation.apache2" > 为什么不应该在实际运作环境中的 Apache2 中使用线程化的 MPM? </A ></DT ><DT >2. <A HREF="faq.installation.html#faq.installation.phpini" > Unix/Windows:应该上哪儿去找我的 <TT CLASS="filename" >php.ini</TT > 文件? </A ></DT ><DT >3. <A HREF="faq.installation.html#faq.installation.nodata" > Unix:我安装了 PHP,但每次我打开一个页面时,只得到一条“Document Contains No Data”消息!这是怎么回事? </A ></DT ><DT >4. <A HREF="faq.installation.html#faq.installation.processing" > Unix:我从 RPMS 安装了 PHP,但是 Apache 不处理 PHP 页面!这是怎么回事? </A ></DT ><DT >5. <A HREF="faq.installation.html#faq.installation.compile" > Unix:我从 RPMS 安装了 PHP 3,但它没有把我需要的数据库支持编译进去!这是怎么回事? </A ></DT ><DT >6. <A HREF="faq.installation.html#faq.installation.frontpage" > Unix:我给 Apache 加上了 FrontPage extensions 补丁,结果 PHP 突然不工作了。PHP 和 Apache FrontPage extensions 兼容吗? </A ></DT ><DT >7. <A HREF="faq.installation.html#faq.installation.blankscreen" > Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个空白页面。 </A ></DT ><DT >8. <A HREF="faq.installation.html#faq.installation.500error" > Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个服务器的 500 错误。 </A ></DT ><DT >9. <A HREF="faq.installation.html#faq.installation.undefinedsyms" > 某些操作系统:我已经在不出错的情况下安装了 PHP,但当我试着启动 Apache 时得到了一个未定义符号错误: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress</PRE ></TD ></TR ></TABLE > </A ></DT ><DT >10. <A HREF="faq.installation.html#faq.installation.cgierror" > Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到如下错误: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:</PRE ></TD ></TR ></TABLE > </A ></DT ><DT >11. <A HREF="faq.installation.html#faq.installation.phpandiis" > Windows:我已经照着所有的说明做了,但还是不能让 PHP 和 IIS 一起工作! </A ></DT ><DT >12. <A HREF="faq.installation.html#faq.installation.forceredirect" > 当在 IIS,PWS,OmniHTTPD 或者 Xitami 中以 CGI 方式运行 PHP 时,出现如下错误:<TT CLASS="literal" >Security Alert! PHP CGI cannot be accessed directly.</TT >. </A ></DT ><DT >13. <A HREF="faq.installation.html#faq.installation.findphpini" > 怎样得知我的 <TT CLASS="filename" >php.ini</TT > 是否被找到和应用了?似乎我做的修改都没有生效。 </A ></DT ><DT >14. <A HREF="faq.installation.html#faq.installation.addtopath" > 怎样将 PHP 目录加入到 Windows 路径 <CODE CLASS="varname" >PATH</CODE > 中去? </A ></DT ><DT >15. <A HREF="faq.installation.html#faq.installation.phprc" > 怎样使 <TT CLASS="filename" >php.ini</TT > 文件在 Windows 下被 PHP 所用? </A ></DT ><DT >16. <A HREF="faq.installation.html#faq.installation.apache.multiviews" > 有可能使 PHP 运作于 Apache 的 content negotiation(MultiViews 选项)吗? </A ></DT ><DT >17. <A HREF="faq.installation.html#faq.installation.requestmethods" > PHP 是否仅限于处理 GET 和 POST 请求方法? </A ></DT ></DL ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.apache2" ></A ><B >1. </B > 为什么不应该在实际运作环境中的 Apache2 中使用线程化的 MPM? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > PHP 是粘合剂。它将几十种第三方的库粘合到一起来创建很酷的 web 应用,并通过很直观且易于学习的语言界面使其看上去好像一个整体。PHP 的灵活与强大依赖于底层平台的稳定与耐用。起码需要将一个可运作的操作系统,一个可运作的 web 服务器以及可运作的第三方库粘合起来。其中任何一方不运作了,PHP 都需要有方法来识别出问题并且快速解决。如果没有完全独立的执行线程,完全独立的内存单元和稳定的空间对付每个请求,那底层架构就太复杂以至于不稳定因素更容易进入到 PHP 系统中。 </P ><P > 如果必须要用线程化的 MPM,看看 FastCGI 配置,使 PHP 运行于自己独立的内存空间中。 </P ><P > 最后需要指出,不使用线程化 MPM 的警告在 Windows 系统中没那么强烈,因为 Windows 中的大多数库都理应在多线程下安全运行。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.phpini" ></A ><B >2. </B > Unix/Windows:应该上哪儿去找我的 <TT CLASS="filename" >php.ini</TT > 文件? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > UNIX 中默认在 <TT CLASS="filename" >/usr/local/lib</TT > 目录中,也就是 <TT CLASS="filename" ><install-path>/lib</TT >。很多人会在编译时通过 <A HREF="configure.html#configure.with-config-file-path" >--with-config-file-path</A > 标记来改变路径。例如可以将路径设为: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >--with-config-file-path=/etc</PRE ></TD ></TR ></TABLE > 然后从发行包中将 <TT CLASS="filename" >php.ini-dist</TT > 拷贝为 <TT CLASS="filename" >/etc/php.ini</TT > 并编辑它来作出想要的修改。 </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >--with-config-file-scan-dir=PATH</PRE ></TD ></TR ></TABLE ><P > Windows 中 <TT CLASS="filename" >php.ini</TT > 文件的默认路径在 Windows 目录下。如果使用的是 Apache 服务器,则会首先在 Apache 的安装目录中寻找 <TT CLASS="filename" >php.ini</TT >,例如 <TT CLASS="filename" >C:\Program Files\Apache Group\Apache</TT >。这样同一台机器上不同版本的 Apache 就可以有不同的 <TT CLASS="filename" >php.ini</TT > 文件。 </P ><P > 参见<A HREF="configuration.html#configuration.file" >配置文件</A >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.nodata" ></A ><B >3. </B > Unix:我安装了 PHP,但每次我打开一个页面时,只得到一条“Document Contains No Data”消息!这是怎么回事? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这可能意味着 PHP 发生了某类错误而导致了 core dump。查看服务器的错误日志看看是不是这样,再用一个小的测试例子试着重现此问题。如果你会用“gdb”的话,那么在 bug 报告中提供回溯跟踪很有助于帮开发人员查明问题。如果你用 Apache 的模块方式使用 PHP,试着这么做: <P ></P ><UL ><LI ><P > 停止 httpd 进程 </P ></LI ><LI ><P > gdb httpd </P ></LI ><LI ><P > 停止 httpd 进程 </P ></LI ><LI ><P > > run -X -f /path/to/httpd.conf </P ></LI ><LI ><P > 然后在你的浏览器中访问导致错误的 URL </P ></LI ><LI ><P > > run -X -f /path/to/httpd.conf </P ></LI ><LI ><P > 如果你遇到 core dump,gdb 此时就会通知你 </P ></LI ><LI ><P > 输入:bt </P ></LI ><LI ><P > 你应该在 bug 报告中包括回溯追踪记录。应该提交到 <A HREF="http://bugs.php.net/" TARGET="_top" >http://bugs.php.net/</A > </P ></LI ></UL > </P ><P > 如果你的脚本使用了正则表达式函数(<A HREF="function.ereg.html" ><B CLASS="function" >ereg()</B ></A > 等),应该确认在编译 PHP 和 Apache 时使用了同一个正则表达式包。在 PHP 和 Apache 1.3.x 中应该自动就是这样。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.processing" ></A ><B >4. </B > Unix:我从 RPMS 安装了 PHP,但是 Apache 不处理 PHP 页面!这是怎么回事? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 假定你的 Apache 和 PHP 都是从 RPM 包中安装的,你需要在 <TT CLASS="filename" >httpd.conf</TT > 文件中取消以下部分或所有行的注释,或者把它们添加到该文件中: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="apache-conf" ># Extra Modules AddModule mod_php.c AddModule mod_php3.c AddModule mod_perl.c # Extra Modules LoadModule php_module modules/mod_php.so LoadModule php3_module modules/libphp3.so # for PHP 3 LoadModule php4_module modules/libphp4.so # for PHP 4 LoadModule perl_module modules/libperl.so</PRE ></TD ></TR ></TABLE > 并且把: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="apache-conf" >AddType application/x-httpd-php3 .php3 # for PHP 3 AddType application/x-httpd-php .php # for PHP 4</PRE ></TD ></TR ></TABLE > 添加到全局属性中,或者添加到你希望加入 PHP 支持的虚拟域中。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.compile" ></A ><B >5. </B > Unix:我从 RPMS 安装了 PHP 3,但它没有把我需要的数据库支持编译进去!这是怎么回事? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 由于 PHP 3 构造的原因,不容易编译出一个完全灵活的 PHP RPM 包来。这个问题在 PHP 4 中解决了。对于 PHP 3 来说,我们目前建议你用 PHP 发行包中 INSTALL.REDHAT 文件中所描述的机制。如果你坚持要用 PHP 3 的 RPM 版本,请接着往下看。 </P ><P > 为了简化安装<SPAN CLASS="emphasis" ><I CLASS="emphasis" >以及</I ></SPAN >由于 RPMS 使用了 /usr/ 而不是标准的 /usr/local/ 目录来存放文件,制作 RPM 包的人设定 RPMS 不安装任何数据库支持。你需要告诉 RPM 说明文件,你想要支持哪个数据库以及你的数据库服务器最高层路径。 </P ><P > 下面的例子解说了如何在用模块安装下的 Apache 中加入流行的 MySQL 数据库服务器支持的过程。 </P ><P > 当然这些信息可以调整用于任何 PHP 支持的数据库服务器。本例中我们也假定你从 RPMS 中完整安装了 MySQL 和 Apache。 <P ></P ><UL ><LI ><P > 先去掉 mod_php3: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >rpm -e mod_php3</PRE ></TD ></TR ></TABLE > </P ></LI ><LI ><P > 然后取得源文件的 rpm 包并安装它,而不是编译它。 <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >rpm -Uvh mod_php3-3.0.5-2.src.rpm</PRE ></TD ></TR ></TABLE > </P ></LI ><LI ><P > 接着编辑 <TT CLASS="filename" >/usr/src/redhat/SPECS/mod_php3.spec</TT > 文件 </P ><P > 在 %build 一节加入你想要的数据库支持,以及路径。 </P ><P > 对应于 MySQL 你应该加入 <CODE CLASS="option" >--with-mysql=/usr</CODE >。则 %build 一节看上去将类似这样: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >./configure --prefix=/usr \ --with-apxs=/usr/sbin/apxs \ --with-config-file-path=/usr/lib \ --enable-debug=no \ --enable-safe-mode \ --with-exec-dir=/usr/bin \ --with-mysql=/usr \ --with-system-regex</PRE ></TD ></TR ></TABLE > </P ></LI ><LI ><P > 一旦完成了这个修改,就这样建立二进制程序的 rpm 包: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >rpm -bb /usr/src/redhat/SPECS/mod_php3.spec</PRE ></TD ></TR ></TABLE > </P ></LI ><LI ><P > 然后安装 rpm <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm</PRE ></TD ></TR ></TABLE > </P ></LI ></UL > 确认重新启动了 Apache,这下你就有了用 RPM 安装的并且带 MySQL 支持的 PHP 3 了。注意按照 PHP 3 发行包中 <TT CLASS="filename" >INSTALL.REDHAT</TT > 文件的说明来编译其实也许更容易一些。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.frontpage" ></A ><B >6. </B > Unix:我给 Apache 加上了 FrontPage extensions 补丁,结果 PHP 突然不工作了。PHP 和 Apache FrontPage extensions 兼容吗? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 兼容的。PHP 可以和 FrontPage extensions 一起工作,问题是 FrontPage 补丁修改了几个 PHP 依赖的 Apache 构造。在 FrontPage 补丁安装之后之后重新编译 PHP(用“make clean ; make”)可以解决此问题。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.blankscreen" ></A ><B >7. </B > Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个空白页面。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 用浏览器中的“查看源文件”,你可能会发现能看到 PHP 脚本的源程序。这意味着 web 服务器没有把脚本发送给 PHP 解释。服务器配置在某处有问题,请对照 PHP 安装说明仔细检查服务器配置。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.500error" ></A ><B >8. </B > Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个服务器的 500 错误。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 当服务器尝试运行 PHP 时出了错。要想看到有意义的错误信息,在命令行中转到 PHP 可执行程序(Windows 中是 <TT CLASS="filename" >php.exe</TT >)所在目录下并运行 <B CLASS="command" >php -i</B >。如果 PHP 运行有任何问题,那么会显示相应的错误信息,这将给你下一步要做什么的线索。如果你得到满屏幕 HTML 代码(<A HREF="function.phpinfo.html" ><B CLASS="function" >phpinfo()</B ></A > 函数的输出)的话说明 PHP 本身工作正常,你的问题可能和你的服务器配置有关,要仔细检查。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.undefinedsyms" ></A ><B >9. </B > 某些操作系统:我已经在不出错的情况下安装了 PHP,但当我试着启动 Apache 时得到了一个未定义符号错误: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="shell" >[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress</PRE ></TD ></TR ></TABLE > </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这实际上和 PHP 没有关系,而和 MySQL 的客户端库有关。有的需要 <CODE CLASS="option" >--with-zlib</CODE >,有的不需要。这个问题也包括在 MySQL 的 FAQ 中。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.cgierror" ></A ><B >10. </B > Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到如下错误: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:</PRE ></TD ></TR ></TABLE > </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这个错误信息意味着 PHP 根本就不能产生任何输出。要想看到有意义的错误信息,在命令行中转到 PHP 可执行程序(Windows 中是 <TT CLASS="filename" >php.exe</TT >)所在目录下并运行 <B CLASS="command" >php -i</B >。如果 PHP 运行有任何问题,那么会显示相应的错误信息,这将给你下一步要做什么的线索。如果你得到满屏幕 HTML 代码(<A HREF="function.phpinfo.html" ><B CLASS="function" >phpinfo()</B ></A > 函数的输出)的话说明 PHP 本身工作正常。 </P ><P > 一旦 PHP 在命令行中工作正常,试着通过浏览器再次访问脚本。如果还失败的话那可能是如下原因之一: </P ><P ></P ><UL ><LI ><P > 文件权限问题,你的 PHP 脚本,<TT CLASS="filename" >php.exe</TT >,<TT CLASS="filename" >php4ts.dll</TT >,<TT CLASS="filename" >php.ini</TT > 或任何你要加载的 PHP 扩展库是匿名 internet 用户 <TT CLASS="literal" >ISUR_<machinename></TT > 无权访问的。 </P ></LI ><LI ><P > 脚本文件不存在(或者有可能不在你以为的地方,注意 web 文档的目录)。注意在 IIS 中通过 Internet 服务管理器设定脚本映射时选中“检查文件是否存在”可以捕捉到此错误。这样一来如果脚本文件不存在的话服务器就会返回一个 404 错误信息。还有一个额外的好处就是 IIS 会基于 NTLanMan 权限来替你对脚本文件做任何所需要的认证。 </P ></LI ></UL ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.phpandiis" ></A ><B >11. </B > Windows:我已经照着所有的说明做了,但还是不能让 PHP 和 IIS 一起工作! </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 确认需要运行 PHP 脚本的任何用户有权限运行 <TT CLASS="filename" >php.exe</TT >!IIS 使用了一个在安装 IIS 时添加的匿名用户,这个用户需要有访问 <TT CLASS="filename" >php.exe</TT > 的权限。同样任何认证用户也需要执行 <TT CLASS="filename" >php.exe</TT > 的权限。在 IIS4 中你还需要告诉它 PHP 是一个脚本引擎。此外,你可能还需要阅读<A HREF="faq.installation.html#faq.installation.forceredirect" >此常见问题</A >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.forceredirect" ></A ><B >12. </B > 当在 IIS,PWS,OmniHTTPD 或者 Xitami 中以 CGI 方式运行 PHP 时,出现如下错误:<TT CLASS="literal" >Security Alert! PHP CGI cannot be accessed directly.</TT >. </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 必须将 <A HREF="ini.core.html#ini.cgi.force-redirect" > cgi.force_redirect</A > 选项设为 <TT CLASS="literal" >0</TT >。 默认值为 <TT CLASS="literal" >1</TT >,因此要确认此选项没有被注释掉(用 <TT CLASS="literal" >;</TT >)。和其它选项一样,是在 <TT CLASS="filename" >php.ini</TT > 中设定的。 </P ><P > 因为默认值是 <TT CLASS="literal" >1</TT >,因此你必须百分之百确认使用了正确的 <TT CLASS="filename" >php.ini</TT > 文件。详细信息请阅读<A HREF="faq.installation.html#faq.installation.findphpini" >此常见问题</A >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.findphpini" ></A ><B >13. </B > 怎样得知我的 <TT CLASS="filename" >php.ini</TT > 是否被找到和应用了?似乎我做的修改都没有生效。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 要确认你的 <TT CLASS="filename" >php.ini</TT > 被 PHP 使用了,调用 <A HREF="function.phpinfo.html" ><B CLASS="function" >phpinfo()</B ></A >,在接近开头的位置有一项叫做 <TT CLASS="literal" >Configuration File (php.ini)</TT >。这里将告诉你 PHP 在哪里找到了 <TT CLASS="filename" >php.ini</TT > 并且是否使用了。如果只显示一个目录则 没有使用任何 <TT CLASS="filename" >php.ini</TT > 文件,你应将你的 <TT CLASS="filename" >php.ini</TT > 文件放到该目录中。如果 <TT CLASS="filename" >php.ini</TT > 包括在该路径中则它已被应用了。 </P ><P > 如果 <TT CLASS="filename" >php.ini</TT > 被使用了并且你是以模块方式运行 PHP 的,确保在修改了 <TT CLASS="filename" >php.ini</TT > 之后重新启动你的 web server。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.addtopath" ></A ><B >14. </B > 怎样将 PHP 目录加入到 Windows 路径 <CODE CLASS="varname" >PATH</CODE > 中去? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 在 Windows NT,2000,XP 和 2003 下: <P ></P ><UL ><LI ><P > 进入控制面板并打开“系统”图标(开始 -> 设置 -> 控制面板 -> 系统,Windows XP/2003 中是:开始 -> 控制面板 -> 系统) </P ></LI ><LI ><P > 选择“高级”标签页 </P ></LI ><LI ><P > 点击“环境变量”按钮 </P ></LI ><LI ><P > 在“系统变量”栏中 </P ></LI ><LI ><P > 找到 Path 这一项(可能需要向下滚动才能找到) </P ></LI ><LI ><P > 鼠标双击 Path 这一项 </P ></LI ><LI ><P > 在最后加入你的 PHP 目录,包括前面的“;”(例如:<TT CLASS="literal" >;C:\php</TT >) </P ></LI ><LI ><P > 点击“确定”并重新启动电脑 </P ></LI ></UL > </P ><P > 在 Windows 98/Me 中需要编辑 <TT CLASS="filename" >autoexec.bat</TT > 文件: <P ></P ><UL ><LI ><P > 打开记事本(开始 -> 运行,然后输入 notepad 并点确定) </P ></LI ><LI ><P > 打开 <TT CLASS="filename" >C:\autoexec.bat</TT > 文件 </P ></LI ><LI ><P > 找到这么一行:PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... 并在最后加上 <TT CLASS="literal" >;C:\php</TT > </P ></LI ><LI ><P > 保存文件并重新启动电脑 </P ></LI ></UL > </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 记住在上述修改之后重新启动,以确保对 <CODE CLASS="varname" >PATH</CODE > 的改变生效。 </P ></BLOCKQUOTE ></DIV ><P > PHP 手册过去提倡把文件拷贝到 Windows 系统目录中去,这是因为该目录(<TT CLASS="filename" >C:\Windows</TT >,<TT CLASS="filename" >C:\WINNT</TT >,等等)默认就在系统路径中。但是把文件拷贝到 Windows 系统目录中这一方式早已不被提倡,还可能造成问题。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.phprc" ></A ><B >15. </B > 怎样使 <TT CLASS="filename" >php.ini</TT > 文件在 Windows 下被 PHP 所用? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 有几种方法。如果使用 Apache,阅读专门的安装指示(<A HREF="install.windows.apache1.html" >Apache 1</A >,<A HREF="install.windows.apache2.html" >Apache 2</A >),否则就必须设定 <CODE CLASS="varname" >PHPRC</CODE > 环境变量: </P ><P > 在 Windows NT,2000,XP 和 2003 种: <P ></P ><UL ><LI ><P > 进入控制面板并打开“系统”图标(开始 -> 设置 -> 控制面板 -> 系统,Windows XP/2003 中是:开始 -> 控制面板 -> 系统) </P ></LI ><LI ><P > 选择“高级”标签页 </P ></LI ><LI ><P > 点击“环境变量”按钮 </P ></LI ><LI ><P > 在“系统变量”栏中 </P ></LI ><LI ><P > 点击“新建”按钮并在“变量名”中输入“PHPRC”,在“变量值”中输入 <TT CLASS="filename" >php.ini</TT > 文件所在的目录(例如:<TT CLASS="literal" >C:\php</TT >) </P ></LI ><LI ><P > 点击“确定”并重新启动电脑 </P ></LI ></UL > </P ><P > 在 Windows 98/Me 中需要编辑 <TT CLASS="filename" >autoexec.bat</TT > 文件: <P ></P ><UL ><LI ><P > 打开记事本(开始 -> 运行,然后输入 notepad 并点确定) </P ></LI ><LI ><P > 打开 <TT CLASS="filename" >C:\autoexec.bat</TT > 文件 </P ></LI ><LI ><P > 在文件结尾处加入一行:<TT CLASS="literal" >set PHPRC=C:\php</TT >(将 <TT CLASS="literal" >C:\php</TT > 替换为你的 <TT CLASS="filename" >php.ini</TT > 实际存在的目录)。注意路径中不能包含空格。例如将 PHP 安装到了 <TT CLASS="filename" >C:\Program Files\PHP</TT > 中,你需要输入 <TT CLASS="filename" >C:\PROGRA~1\PHP</TT > 替代之 </P ></LI ><LI ><P > 保存文件并重新启动电脑 </P ></LI ></UL > </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.apache.multiviews" ></A ><B >16. </B > 有可能使 PHP 运作于 Apache 的 content negotiation(MultiViews 选项)吗? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 如果到 PHP 文件的连接包含扩展名,一切都运行完美。本解答只针对到 PHP 文件的连接不包含扩展名时,而希望通过 content negotiation 来从不包含扩展名的 URL 来选择 PHP 文件的情况。在此种情况下,将 <TT CLASS="literal" >AddType application/x-httpd-php .php</TT > 替换为: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="apache-conf" ># PHP 4 AddHandler php-script php AddType text/html php # PHP 5 AddHandler php5-script php AddType text/html php</PRE ></TD ></TR ></TABLE > 此方案对于 Apache 1 不适用,因为 PHP 模块不捕获 <TT CLASS="literal" >php-script</TT >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.requestmethods" ></A ><B >17. </B > PHP 是否仅限于处理 GET 和 POST 请求方法? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 不是,PHP 有可能处理任何请求方法,例如 CONNECT。适当的回应状态可以用 <A HREF="function.header.html" ><B CLASS="function" >header()</B ></A > 发送。如果仅需要处理 GET 和 POST 方法,可以通过如下的 Apache 配置实现: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="apache-conf" ><LimitExcept GET POST> Deny from all </LimitExcept></PRE ></TD ></TR ></TABLE > </P ></DIV ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="faq.databases.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="faq.build.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >数据库问题</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="faq.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >编译问题</TD ></TR ></TABLE ></DIV ></BODY ></HTML >