Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 45

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!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
>&#13;   本章包括了安装 PHP 的常见问题。PHP 可以用于几乎任何操作系统(可能除了
   OS X 之前的 MacOS 之外),以及几乎任何 web 服务器。
  </P
><P
>&#13;   要安装 PHP,请按照<A
HREF="install.html"
>安装与配置</A
>一章中的指示进行。
  </P
><DIV
CLASS="qandaset"
><DL
><DT
>1. <A
HREF="faq.installation.html#faq.installation.apache2"
>&#13;      为什么不应该在实际运作环境中的 Apache2 中使用线程化的 MPM?
     </A
></DT
><DT
>2. <A
HREF="faq.installation.html#faq.installation.phpini"
>&#13;      Unix/Windows:应该上哪儿去找我的 <TT
CLASS="filename"
>php.ini</TT
> 文件?
     </A
></DT
><DT
>3. <A
HREF="faq.installation.html#faq.installation.nodata"
>&#13;      Unix:我安装了 PHP,但每次我打开一个页面时,只得到一条“Document
      Contains No Data”消息!这是怎么回事?
     </A
></DT
><DT
>4. <A
HREF="faq.installation.html#faq.installation.processing"
>&#13;      Unix:我从 RPMS 安装了 PHP,但是 Apache 不处理 PHP 页面!这是怎么回事?
     </A
></DT
><DT
>5. <A
HREF="faq.installation.html#faq.installation.compile"
>&#13;      Unix:我从 RPMS 安装了 PHP 3,但它没有把我需要的数据库支持编译进去!这是怎么回事?
     </A
></DT
><DT
>6. <A
HREF="faq.installation.html#faq.installation.frontpage"
>&#13;      Unix:我给 Apache 加上了 FrontPage extensions 补丁,结果 PHP 突然不工作了。PHP
      和 Apache FrontPage extensions 兼容吗?
     </A
></DT
><DT
>7. <A
HREF="faq.installation.html#faq.installation.blankscreen"
>&#13;      Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个空白页面。
     </A
></DT
><DT
>8. <A
HREF="faq.installation.html#faq.installation.500error"
>&#13;      Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP
      脚本时,得到了一个服务器的 500 错误。
     </A
></DT
><DT
>9. <A
HREF="faq.installation.html#faq.installation.undefinedsyms"
>&#13;      某些操作系统:我已经在不出错的情况下安装了 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"
>&#13;      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"
>&#13;      Windows:我已经照着所有的说明做了,但还是不能让 PHP 和 IIS 一起工作!
     </A
></DT
><DT
>12. <A
HREF="faq.installation.html#faq.installation.forceredirect"
>&#13;      当在 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"
>&#13;      怎样得知我的 <TT
CLASS="filename"
>php.ini</TT
> 是否被找到和应用了?似乎我做的修改都没有生效。
     </A
></DT
><DT
>14. <A
HREF="faq.installation.html#faq.installation.addtopath"
>&#13;      怎样将 PHP 目录加入到 Windows 路径 <CODE
CLASS="varname"
>PATH</CODE
> 中去?
     </A
></DT
><DT
>15. <A
HREF="faq.installation.html#faq.installation.phprc"
>&#13;      怎样使 <TT
CLASS="filename"
>php.ini</TT
> 文件在 Windows 下被 PHP 所用?
     </A
></DT
><DT
>16. <A
HREF="faq.installation.html#faq.installation.apache.multiviews"
>&#13;      有可能使 PHP 运作于 Apache 的 content negotiation(MultiViews 选项)吗?
     </A
></DT
><DT
>17. <A
HREF="faq.installation.html#faq.installation.requestmethods"
>&#13;      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
>&#13;      如果必须要用线程化的 MPM,看看 FastCGI 配置,使 PHP 运行于自己独立的内存空间中。
     </P
><P
>&#13;      最后需要指出,不使用线程化 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"
>&#60;install-path&#62;/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
>&#13;      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
>&#13;      参见<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
>&#13;         停止 httpd 进程
        </P
></LI
><LI
><P
>&#13;         gdb httpd
        </P
></LI
><LI
><P
>&#13;         停止 httpd 进程
        </P
></LI
><LI
><P
>&#13;         &#62; run -X -f /path/to/httpd.conf
        </P
></LI
><LI
><P
>&#13;         然后在你的浏览器中访问导致错误的 URL
        </P
></LI
><LI
><P
>&#13;         &#62; run -X -f /path/to/httpd.conf
        </P
></LI
><LI
><P
>&#13;         如果你遇到 core dump,gdb 此时就会通知你
        </P
></LI
><LI
><P
>&#13;         输入:bt
        </P
></LI
><LI
><P
>&#13;         你应该在 bug 报告中包括回溯追踪记录。应该提交到
         <A
HREF="http://bugs.php.net/"
TARGET="_top"
>http://bugs.php.net/</A
>
        </P
></LI
></UL
>
     </P
><P
>&#13;      如果你的脚本使用了正则表达式函数(<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
>&#13;      为了简化安装<SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>以及</I
></SPAN
>由于 RPMS 使用了 /usr/ 而不是标准的
      /usr/local/ 目录来存放文件,制作 RPM 包的人设定 RPMS
      不安装任何数据库支持。你需要告诉 RPM
      说明文件,你想要支持哪个数据库以及你的数据库服务器最高层路径。
     </P
><P
>&#13;      下面的例子解说了如何在用模块安装下的 Apache 中加入流行的 MySQL 数据库服务器支持的过程。
     </P
><P
>&#13;      当然这些信息可以调整用于任何 PHP 支持的数据库服务器。本例中我们也假定你从
      RPMS 中完整安装了 MySQL 和 Apache。
      <P
></P
><UL
><LI
><P
>&#13;         先去掉 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
>&#13;         然后取得源文件的 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
>&#13;         接着编辑 <TT
CLASS="filename"
>/usr/src/redhat/SPECS/mod_php3.spec</TT
> 文件
        </P
><P
>&#13;         在 %build 一节加入你想要的数据库支持,以及路径。
        </P
><P
>&#13;         对应于 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
>&#13;         一旦完成了这个修改,就这样建立二进制程序的 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
>&#13;         然后安装 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
>&#13;      一旦 PHP 在命令行中工作正常,试着通过浏览器再次访问脚本。如果还失败的话那可能是如下原因之一:
     </P
><P
></P
><UL
><LI
><P
>&#13;        文件权限问题,你的 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_&#60;machinename&#62;</TT
> 无权访问的。
       </P
></LI
><LI
><P
>&#13;        脚本文件不存在(或者有可能不在你以为的地方,注意 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"
>&#13;      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
>&#13;      因为默认值是 <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
>&#13;      如果 <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
>&#13;        进入控制面板并打开“系统”图标(开始 -&#62; 设置 -&#62;
        控制面板 -&#62; 系统,Windows XP/2003 中是:开始 -&#62; 控制面板
        -&#62; 系统)
       </P
></LI
><LI
><P
>&#13;        选择“高级”标签页
       </P
></LI
><LI
><P
>&#13;        点击“环境变量”按钮
       </P
></LI
><LI
><P
>&#13;        在“系统变量”栏中
       </P
></LI
><LI
><P
>&#13;        找到 Path 这一项(可能需要向下滚动才能找到)
       </P
></LI
><LI
><P
>&#13;        鼠标双击 Path 这一项
       </P
></LI
><LI
><P
>&#13;        在最后加入你的 PHP 目录,包括前面的“;”(例如:<TT
CLASS="literal"
>;C:\php</TT
>)
       </P
></LI
><LI
><P
>&#13;        点击“确定”并重新启动电脑
       </P
></LI
></UL
>
     </P
><P
>&#13;      在 Windows 98/Me 中需要编辑 <TT
CLASS="filename"
>autoexec.bat</TT
> 文件:
      <P
></P
><UL
><LI
><P
>&#13;        打开记事本(开始 -&#62; 运行,然后输入 notepad 并点确定)
       </P
></LI
><LI
><P
>&#13;        打开 <TT
CLASS="filename"
>C:\autoexec.bat</TT
> 文件
       </P
></LI
><LI
><P
>&#13;        找到这么一行:PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... 并在最后加上
        <TT
CLASS="literal"
>;C:\php</TT
>
       </P
></LI
><LI
><P
>&#13;        保存文件并重新启动电脑
       </P
></LI
></UL
>
     </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
       记住在上述修改之后重新启动,以确保对
       <CODE
CLASS="varname"
>PATH</CODE
> 的改变生效。
      </P
></BLOCKQUOTE
></DIV
><P
>&#13;      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
>&#13;      在 Windows NT,2000,XP 和 2003 种:
      <P
></P
><UL
><LI
><P
>&#13;        进入控制面板并打开“系统”图标(开始 -&#62; 设置 -&#62;
        控制面板 -&#62; 系统,Windows XP/2003 中是:开始 -&#62; 控制面板
        -&#62; 系统)
       </P
></LI
><LI
><P
>&#13;        选择“高级”标签页
       </P
></LI
><LI
><P
>&#13;        点击“环境变量”按钮
       </P
></LI
><LI
><P
>&#13;        在“系统变量”栏中
       </P
></LI
><LI
><P
>&#13;         点击“新建”按钮并在“变量名”中输入“PHPRC”,在“变量值”中输入
         <TT
CLASS="filename"
>php.ini</TT
> 文件所在的目录(例如:<TT
CLASS="literal"
>C:\php</TT
>)
       </P
></LI
><LI
><P
>&#13;        点击“确定”并重新启动电脑
       </P
></LI
></UL
>
     </P
><P
>&#13;      在 Windows 98/Me 中需要编辑 <TT
CLASS="filename"
>autoexec.bat</TT
> 文件:
      <P
></P
><UL
><LI
><P
>&#13;        打开记事本(开始 -&#62; 运行,然后输入 notepad 并点确定)
       </P
></LI
><LI
><P
>&#13;        打开 <TT
CLASS="filename"
>C:\autoexec.bat</TT
> 文件
       </P
></LI
><LI
><P
>&#13;        在文件结尾处加入一行:<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
>&#13;        保存文件并重新启动电脑
       </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"
>&#60;LimitExcept GET POST&#62;
Deny from all
&#60;/LimitExcept&#62;</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
>