-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathinstallation.xml
executable file
·362 lines (356 loc) · 18.8 KB
/
installation.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 2dbf3d9064d4cb07f0a2f7d06641c877a2e5ed24 Maintainer: mowangjuanzi Status: ready -->
<chapter xml:id="faq.installation" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>安装常见问题</title>
<titleabbrev>安装</titleabbrev>
<para>本章包括了安装 PHP 的常见问题。PHP 可以用于几乎任何操作系统(可能除了 OS X 之前的 MacOS 之外),以及几乎任何 web 服务器。</para>
<para>要安装 PHP,请按照
<link linkend="install">安装与配置</link>一章中的指示进行。</para>
<qandaset>
<qandaentry xml:id="faq.installation.apache2">
<question>
<para>为什么不应该在实际运作环境中的 Apache2 中使用线程化的 MPM?</para>
</question>
<answer>
<para>PHP 是粘合剂。它将几十种第三方的库粘合到一起来创建很酷的 web 应用,并通过很直观且易于学习的语言界面使其看上去好像一个整体。PHP 的灵活与强大依赖于底层平台的稳定与耐用。起码需要将一个可运作的操作系统,一个可运作的 web 服务器以及可运作的第三方库粘合起来。其中任何一方不运作了,PHP 都需要有方法来识别出问题并且快速解决。如果没有完全独立的执行线程,完全独立的内存单元和稳定的空间对付每个请求,那底层架构就太复杂以至于不稳定因素更容易进入到 PHP 系统中。</para>
<para>如果必须要用线程化的 MPM,看看 FastCGI 配置,使 PHP 运行于自己独立的内存空间中。</para>
<para>最后需要指出,不使用线程化 MPM 的警告在 Windows 系统中没那么强烈,因为 Windows 中的大多数库都理应在多线程下安全运行。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.phpini">
<question>
<para>Unix/Windows:应该上哪儿去找我的 &php.ini; 文件?</para>
</question>
<answer>
<para>UNIX 中默认在
<filename>/usr/local/lib</filename>目录中,也就是
<filename><install-path>/lib</filename>。很多人会在编译时通过
<link linkend="configure.with-config-file-path">--with-config-file-path</link>标记来改变路径。例如可以将路径设为:
<programlisting role="shell">--with-config-file-path=/etc</programlisting>然后从发行包中将
<filename>php.ini-dist</filename>拷贝为
<filename>/etc/php.ini</filename>并编辑它来作出想要的修改。</para>
<programlisting role="shell">--with-config-file-scan-dir=PATH</programlisting>
<para>Windows 中 &php.ini; 文件的默认路径在 Windows 目录下。如果使用的是 Apache 服务器,则会首先在 Apache 的安装目录中寻找 &php.ini;,例如
<filename>C:\Program Files\Apache Group\Apache</filename>。这样同一台机器上不同版本的 Apache 就可以有不同的 &php.ini; 文件。</para>
<para>参见
<link linkend="configuration.file">配置文件</link>。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.nodata">
<question>
<para>Unix:我安装了 PHP,但每次我打开一个页面时,只得到一条“Document Contains No Data”消息!这是怎么回事?</para>
</question>
<answer>
<para>这可能意味着 PHP 发生了某类错误而导致了 core dump。查看服务器的错误日志看看是不是这样,再用一个小的测试例子试着重现此问题。如果你会用“gdb”的话,那么在 bug 报告中提供回溯跟踪很有助于帮开发人员查明问题。如果你用 Apache 的模块方式使用 PHP,试着这么做:
<itemizedlist>
<listitem>
<para>停止 httpd 进程</para>
</listitem>
<listitem>
<para>gdb httpd</para>
</listitem>
<listitem>
<para>停止 httpd 进程</para>
</listitem>
<listitem>
<para>> run -X -f /path/to/httpd.conf</para>
</listitem>
<listitem>
<para>然后在你的浏览器中访问导致错误的 URL</para>
</listitem>
<listitem>
<para>> run -X -f /path/to/httpd.conf</para>
</listitem>
<listitem>
<para>如果你遇到 core dump,gdb 此时就会通知你</para>
</listitem>
<listitem>
<para>输入:bt</para>
</listitem>
<listitem>
<para>你应该在 bug 报告中包括回溯追踪记录。应该提交到
<link xlink:href="&url.php.bugs;">&url.php.bugs;</link></para>
</listitem>
</itemizedlist></para>
<para>如果你的脚本使用了正则表达式函数(
<function>ereg</function>等),应该确认在编译 PHP 和 Apache 时使用了同一个正则表达式包。在 PHP 和 Apache 1.3.x 中应该自动就是这样。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.processing">
<question>
<para>Unix:我从 RPMS 安装了 PHP,但是 Apache 不处理 PHP 页面!这是怎么回事?</para>
</question>
<answer>
<para>假定你的 Apache 和 PHP 都是从 RPM 包中安装的,你需要在 &httpd.conf; 文件中取消以下部分或所有行的注释,或者把它们添加到该文件中:
<programlisting role="apache-conf">
<![CDATA[
# Extra Modules
AddModule mod_php.c
AddModule mod_perl.c
# Extra Modules
LoadModule php_module modules/mod_php.so
LoadModule php5_module modules/libphp5.so
LoadModule perl_module modules/libperl.so
]]>
</programlisting>并且把:
<programlisting role="apache-conf">
<![CDATA[
AddType application/x-httpd-php .php
]]>
</programlisting>添加到全局属性中,或者添加到你希望加入 PHP 支持的虚拟域中。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.frontpage">
<question>
<para>Unix:我给 Apache 加上了 FrontPage extensions 补丁,结果 PHP 突然不工作了。PHP 和 Apache FrontPage extensions 兼容吗?</para>
</question>
<answer>
<para>兼容的。PHP 可以和 FrontPage extensions 一起工作,问题是 FrontPage 补丁修改了几个 PHP 依赖的 Apache 构造。在 FrontPage 补丁安装之后之后重新编译 PHP(用“make clean ; make”)可以解决此问题。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.blankscreen">
<question>
<para>Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个空白页面。</para>
</question>
<answer>
<para>用浏览器中的“查看源文件”,你可能会发现能看到 PHP 脚本的源程序。这意味着 web 服务器没有把脚本发送给 PHP 解释。服务器配置在某处有问题,请对照 PHP 安装说明仔细检查服务器配置。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.500error">
<question>
<para>Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个服务器的 500 错误。</para>
</question>
<answer>
<para>当服务器尝试运行 PHP 时出了错。要想看到有意义的错误信息,在命令行中转到 PHP 可执行程序(Windows 中是
<filename>php.exe</filename>)所在目录下并运行
<command>php -i</command>。如果 PHP 运行有任何问题,那么会显示相应的错误信息,这将给你下一步要做什么的线索。如果你得到满屏幕 HTML 代码(
<function>phpinfo</function>函数的输出)的话说明 PHP 本身工作正常,你的问题可能和你的服务器配置有关,要仔细检查。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.undefinedsyms">
<question>
<para>某些操作系统:我已经在不出错的情况下安装了 PHP,但当我试着启动 Apache 时得到了一个未定义符号错误:
<programlisting role="shell">[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress</programlisting></para>
</question>
<answer>
<para>这实际上和 PHP 没有关系,而和 MySQL 的客户端库有关。有的需要
<option role="configure">--with-zlib</option>,有的不需要。这个问题也包括在 MySQL 的 FAQ 中。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.cgierror">
<question>
<para>Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到如下错误:
<screen>cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:</screen></para>
</question>
<answer>
<para>这个错误信息意味着 PHP 根本就不能产生任何输出。要想看到有意义的错误信息,在命令行中转到 PHP 可执行程序(Windows 中是
<filename>php.exe</filename>)所在目录下并运行
<command>php -i</command>。如果 PHP 运行有任何问题,那么会显示相应的错误信息,这将给你下一步要做什么的线索。如果你得到满屏幕 HTML 代码(
<function>phpinfo</function>函数的输出)的话说明 PHP 本身工作正常。</para>
<para>一旦 PHP 在命令行中工作正常,试着通过浏览器再次访问脚本。如果还失败的话那可能是如下原因之一:</para>
<itemizedlist>
<listitem>
<simpara>文件权限问题,你的 PHP 脚本,
<filename>php.exe</filename>,
<filename>php4ts.dll</filename>,&php.ini; 或任何你要加载的 PHP 扩展库是匿名 internet 用户
<literal>ISUR_<machinename></literal>无权访问的。</simpara>
</listitem>
<listitem>
<simpara>脚本文件不存在(或者有可能不在你以为的地方,注意 web 文档的目录)。注意在 IIS 中通过 Internet 服务管理器设定脚本映射时选中“检查文件是否存在”可以捕捉到此错误。这样一来如果脚本文件不存在的话服务器就会返回一个 404 错误信息。还有一个额外的好处就是 IIS 会基于 NTLanMan 权限来替你对脚本文件做任何所需要的认证。</simpara>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.phpandiis">
<question>
<para>Windows:我已经照着所有的说明做了,但还是不能让 PHP 和 IIS 一起工作!</para>
</question>
<answer>
<para>确认需要运行 PHP 脚本的任何用户有权限运行
<filename>php.exe</filename>!IIS 使用了一个在安装 IIS 时添加的匿名用户,这个用户需要有访问
<filename>php.exe</filename>的权限。同样任何认证用户也需要执行
<filename>php.exe</filename>的权限。在 IIS4 中你还需要告诉它 PHP 是一个脚本引擎。此外,你可能还需要阅读
<link linkend="faq.installation.forceredirect">此常见问题</link>。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.forceredirect">
<question>
<para>当在 IIS,PWS,OmniHTTPD 或者 Xitami 中以 CGI 方式运行 PHP 时,出现如下错误:
<literal>Security Alert! PHP CGI cannot be accessed directly.</literal>.</para>
</question>
<answer>
<para>必须将
<link linkend="ini.cgi.force-redirect">cgi.force_redirect</link>选项设为
<literal>0</literal>。 默认值为
<literal>1</literal>,因此要确认此选项没有被注释掉(用
<literal>;</literal>)。和其它选项一样,是在 &php.ini; 中设定的。</para>
<para>因为默认值是
<literal>1</literal>,因此你必须百分之百确认使用了正确的 &php.ini; 文件。详细信息请阅读
<link linkend="faq.installation.findphpini">此常见问题</link>。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.findphpini">
<question>
<para>怎样得知我的 &php.ini; 是否被找到和应用了?似乎我做的修改都没有生效。</para>
</question>
<answer>
<para>要确认你的 &php.ini; 被 PHP 使用了,调用
<function>phpinfo</function>,在接近开头的位置有一项叫做
<literal>Configuration File (php.ini)</literal>。这里将告诉你 PHP 在哪里找到了 &php.ini; 并且是否使用了。如果只显示一个目录则 没有使用任何 &php.ini; 文件,你应将你的 &php.ini; 文件放到该目录中。如果 &php.ini; 包括在该路径中则它已被应用了。</para>
<para>如果 &php.ini; 被使用了并且你是以模块方式运行 PHP 的,确保在修改了 &php.ini; 之后重新启动你的 web server。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.addtopath">
<question>
<para>怎样将 PHP 目录加入到 Windows 路径
<varname>PATH</varname>中去?</para>
</question>
<answer>
<para>在 Windows NT,2000,XP 和 2003 下:
<itemizedlist>
<listitem>
<para>进入控制面板并打开“系统”图标(开始 -> 设置 -> 控制面板 -> 系统,Windows XP/2003 中是:开始 -> 控制面板 -> 系统)</para>
</listitem>
<listitem>
<para>选择“高级”标签页</para>
</listitem>
<listitem>
<para>点击“环境变量”按钮</para>
</listitem>
<listitem>
<para>在“系统变量”栏中</para>
</listitem>
<listitem>
<para>找到 Path 这一项(可能需要向下滚动才能找到)</para>
</listitem>
<listitem>
<para>鼠标双击 Path 这一项</para>
</listitem>
<listitem>
<para>在最后加入你的 PHP 目录,包括前面的“;”(例如:
<literal>;C:\php</literal>)</para>
</listitem>
<listitem>
<para>点击“确定”并重新启动电脑</para>
</listitem>
</itemizedlist></para>
<para>在 Windows 98/Me 中需要编辑
<filename>autoexec.bat</filename>文件:
<itemizedlist>
<listitem>
<para>打开记事本(开始 -> 运行,然后输入 notepad 并点确定)</para>
</listitem>
<listitem>
<para>打开
<filename>C:\autoexec.bat</filename>文件</para>
</listitem>
<listitem>
<para>找到这么一行:PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... 并在最后加上
<literal>;C:\php</literal></para>
</listitem>
<listitem>
<para>保存文件并重新启动电脑</para>
</listitem>
</itemizedlist></para>
<note>
<simpara>记住在上述修改之后重新启动,以确保对
<varname>PATH</varname>的改变生效。</simpara>
</note>
<para>PHP 手册过去提倡把文件拷贝到 Windows 系统目录中去,这是因为该目录(
<filename>C:\Windows</filename>,
<filename>C:\WINNT</filename>,等等)默认就在系统路径中。但是把文件拷贝到 Windows 系统目录中这一方式早已不被提倡,还可能造成问题。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.phprc">
<question>
<para>
怎样使 &php.ini; 文件在 Windows 下被 PHP 所用?
</para>
</question>
<answer>
<para>
有几种方法可以做到这一点。如果您使用的是 Apache,请参阅 Apache
文档,否则必须设置 <varname>PHPRC</varname> 环境变量。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.windows-temporary-path">
<question>
<simpara>
Windows:如何验证 PHP 是否可以写入 IIS 下的临时目录?
</simpara>
</question>
<answer>
<procedure>
<step>
<simpara>
在文件资源管理器中右键单击临时目录 (<varname>%TEMP%</varname>) 以获取权限。可以从配置或 <function>phpinfo</function> 获取临时目录。
</simpara>
</step>
<step>
<simpara>
对于 IIS,检查用户 <literal>IIS_User</literal> 是否具有 <literal>MODIFY</literal> 权限。
</simpara>
</step>
</procedure>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.apache.multiviews">
<question>
<para>有可能使 PHP 运作于 Apache 的 content negotiation(MultiViews 选项)吗?</para>
</question>
<answer>
<para>如果到 PHP 文件的连接包含扩展名,一切都运行完美。本解答只针对到 PHP 文件的连接不包含扩展名时,而希望通过 content negotiation 来从不包含扩展名的 URL 来选择 PHP 文件的情况。在此种情况下,将
<literal>AddType application/x-httpd-php .php</literal>替换为:
<programlisting role="apache-conf">
<![CDATA[
# PHP 4
AddHandler php-script php
AddType text/html php
# PHP 5
AddHandler php5-script php
AddType text/html php
]]>
</programlisting>此方案对于 Apache 1 不适用,因为 PHP 模块不捕获
<literal>php-script</literal>。</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.requestmethods">
<question>
<para>PHP 是否仅限于处理 GET 和 POST 请求方法?</para>
</question>
<answer>
<para>不是,PHP 有可能处理任何请求方法,例如 CONNECT。适当的回应状态可以用
<function>header</function>发送。如果仅需要处理 GET 和 POST 方法,可以通过如下的 Apache 配置实现:
<programlisting role="apache-conf">
<![CDATA[
<LimitExcept GET POST>
Deny from all
</LimitExcept>
]]>
</programlisting></para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->