1.
Unix/Windows:应该上哪儿去找我的 php.ini 文件?
UNIX 中默认在 /usr/local/lib 目录中,也就是
<install-path>/lib。很多人会在编译时通过
--with-config-file-path
标记来改变路径。例如你可以将路径设为:
--with-config-file-path=/etc |
然后从发行包中将
php.ini-dist 拷贝为
/etc/php.ini 并编辑它来作出你想要的修改。
--with-config-file-scan-dir=PATH |
Windows 中 php.ini 文件的默认路径在 Windows 目录下。如果你使用的是
Apache 服务器,则会首先在 Apache 的安装目录中寻找 php.ini,例如
C:\Program Files\Apache Group\Apache。这样同一台机器上不同版本的
Apache 就可以有不同的 php.ini 文件。
参见配置文件。
2.
Unix:我安装了 PHP,但每次我打开一个页面时,只得到一条“Document
Contains No Data”消息!这是怎么回事?
这可能意味着 PHP 发生了某类错误而导致了
core dump。查看服务器的错误日志看看是不是这样,再用一个小的测试例子试着重现此问题。如果你会用“gdb”的话,那么在
bug 报告中提供回溯跟踪很有助于帮开发人员查明问题。如果你用
Apache 的模块方式使用 PHP,试着这么做:
停止 httpd 进程
gdb httpd
停止 httpd 进程
> run -X -f /path/to/httpd.conf
然后在你的浏览器中访问导致错误的 URL
> run -X -f /path/to/httpd.conf
如果你遇到 core dump,gdb 此时就会通知你
输入:bt
你应该在 bug 报告中包括回溯追踪记录。应该提交到
http://bugs.php.net/
如果你的脚本使用了正则表达式函数(ereg() 等),应该确认在编译
PHP 和 Apache 时使用了同一个正则表达式包。在 PHP 和 Apache 1.3.x 中应该自动就是这样。
3.
Unix:我从 RPMS 安装了 PHP,但是 Apache 不处理 PHP 页面!这是怎么回事?
假定你的 Apache 和 PHP 都是从 RPM 包中安装的,你需要在
httpd.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 |
并且把:
AddType application/x-httpd-php3 .php3 /* for PHP 3 */
AddType application/x-httpd-php .php /* for PHP 4 */ |
添加到全局属性中,或者添加到你希望加入 PHP 支持的虚拟域中。
4.
Unix:我从 RPMS 安装了 PHP 3,但它没有把我需要的数据库支持编译进去!这是怎么回事?
由于 PHP 3 构造的原因,不容易编译出一个完全灵活的 PHP RPM 包来。这个问题在
PHP 4 中解决了。对于 PHP 3 来说,我们目前建议你用 PHP 发行包中
INSTALL.REDHAT 文件中所描述的机制。如果你坚持要用 PHP 3 的 RPM 版本,请接着往下看。
为了简化安装以及由于 RPMS 使用了 /usr/ 而不是标准的
/usr/local/ 目录来存放文件,制作 RPM 包的人设定 RPMS
不安装任何数据库支持。你需要告诉 RPM
说明文件,你想要支持哪个数据库以及你的数据库服务器最高层路径。
下面的例子解说了如何在用模块安装下的 Apache 中加入流行的 MySQL 数据库服务器支持的过程。
当然这些信息可以调整用于任何 PHP 支持的数据库服务器。本例中我们也假定你从
RPMS 中完整安装了 MySQL 和 Apache。
先去掉 mod_php3:
然后取得源文件的 rpm 包并安装它,而不是编译它。
rpm -Uvh mod_php3-3.0.5-2.src.rpm |
接着编辑 /usr/src/redhat/SPECS/mod_php3.spec 文件
在 %build 一节加入你想要的数据库支持,以及路径。
对应于 MySQL 你应该加入
%build 一节看上去将类似这样:
./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 |
一旦完成了这个修改,就这样建立二进制程序的 rpm 包:
rpm -bb /usr/src/redhat/SPECS/mod_php3.spec |
然后安装 rpm
rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm |
确认重新启动了 Apache,这下你就有了用 RPM 安装的并且带 MySQL 支持的
PHP 3 了。注意按照 PHP 3 发行包中
INSTALL.REDHAT 文件的说明来编译其实也许更容易一些。
5.
Unix:我给 Apache 加上了 FrontPage extensions 补丁,结果 PHP 突然不工作了。PHP
和 Apache FrontPage extensions 兼容吗?
兼容的。PHP 可以和 FrontPage extensions 一起工作,问题是 FrontPage
补丁修改了几个 PHP 依赖的 Apache 构造。在 FrontPage 补丁安装之后之后重新编译
PHP(用“make clean ; make”)可以解决此问题。
6.
Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到了一个空白页面。
用浏览器中的“查看源文件”,你可能会发现你能看到 PHP 脚本的源程序。这意味着
web 服务器没有把脚本发送给 PHP 解释。服务器配置在某处有问题,请对照
PHP 安装说明仔细检查服务器配置。
7.
Unix/Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP
脚本时,得到了一个服务器的 500 错误。
当服务器尝试运行 PHP 时出了错。要想看到有意义的错误信息,在命令行中转到
PHP 可执行程序(Windows 中是 php.exe)所在目录下并运行
php -i。如果 PHP
运行有任何问题,那么会显示相应的错误信息,这将给你下一步要做什么的线索。如果你得到满屏幕
html 代码(phpinfo() 函数的输出)的话说明
PHP 本身工作正常,你的问题可能和你的服务器配置有关,要仔细检查。
8.
某些操作系统:我已经在不出错的情况下安装了 PHP,但当我试着启动 Apache
时得到了一个未定义符号错误:
[mybox:user /src/php4] root# apachectl configtest
apachectl: /usr/local/apache/bin/httpd Undefined symbols:
_compress
_uncompress |
这实际上和 PHP 没有关系,而和 MySQL 的客户端库有关。有的需要
--with-zlib,有的不需要。这个问题也包括在 MySQL 的 FAQ 中。
9.
Windows:我已经安装了 PHP,但当我试着通过浏览器访问 PHP 脚本时,得到如下错误:
cgi error:
The specified CGI application misbehaved by not
returning a complete set of HTTP headers.
The headers it did return are: |
这个错误信息意味着 PHP
根本就不能产生任何输出。要想看到有意义的错误信息,在命令行中转到
PHP 可执行程序(Windows 中是 php.exe)所在目录下并运行
php -i。如果 PHP
运行有任何问题,那么会显示相应的错误信息,这将给你下一步要做什么的线索。如果你得到满屏幕
html 代码(phpinfo() 函数的输出)的话说明 PHP 本身工作正常。
一旦 PHP 在命令行中工作正常,试着通过浏览器再次访问脚本。如果还失败的话那可能是如下原因之一:
文件权限问题,你的 PHP
脚本,php.exe,php4ts.dll,php.ini
或任何你要加载的 PHP 扩展库是匿名 internet
用户 ISUR_<machinename> 无权访问的。
脚本文件不存在(或者有可能不在你以为的地方,注意 web 文档的目录)。注意在
IIS 中通过 Internet 服务管理器设定脚本映射时选中“检查文件是否存在”可以捕捉到此错误。这样一来如果脚本文件不存在的话服务器就会返回一个
404 错误信息。还有一个额外的好处就是 IIS 会基于
NTLanMan 权限来替你对脚本文件做任何所需要的认证。
10.
Windows:我已经照着所有的说明做了,但还是不能让 PHP 和 IIS 一起工作!
确认需要运行 PHP 脚本的任何用户有权限运行 php.exe!IIS
使用了一个在安装 IIS 时添加的匿名用户,这个用户需要有访问
php.exe 的权限。同样任何认证用户也需要执行
php.exe 的权限。在 IIS4 中你还需要告诉它 PHP
是一个脚本引擎。此外,你可能还需要阅读此常见问题。
11.
当在 IIS,PWS,OmniHTTPD 或者 Xitami 中以 CGI 方式运行
PHP 时,出现如下错误:Security Alert! PHP CGI
cannot be accessed directly..
必须将
cgi.force_redirect 选项设为 0。
默认值为 1,因此要确认此选项没有被注释掉(用
;)。和其它选项一样,是在 php.ini 中设定的。
因为默认值是 1,因此你必须百分之百确认使用了正确的
php.ini 文件。详细信息清阅读此常见问题。
12.
怎样得知我的 php.ini 是否被找到和应用了?似乎我做的修改都没有生效。
要确认你的 php.ini 被 PHP 使用了,调用
phpinfo(),在接近开头的位置有一项叫做
Configuration File (php.ini)。这里将告诉你
PHP 在哪里找到了 php.ini 并且是否使用了。如果只显示一个目录则
没有使用任何 php.ini 文件,你应将你的 php.ini
文件放到该目录中。如果 php.ini 包括在该路径中则它已被应用了。
如果 php.ini 被使用了并且你是以模块方式运行 PHP
的,确保在修改了 php.ini 之后重新启动你的 web server。