我的 Web 服务器目录中有一个包含php phpinfo();
内容的 test.php 文件。当我尝试php test.php
在 shell 中执行时,它会正确执行。但是当我尝试在浏览器中打开网页时,它显示php phpinfo();
。如何对 UNIX 计算机上的 Apache 2 和 PHP 5 进行故障排除?
答案1
我认为你需要将你的代码包装在<?php ... ?>
.试试这个文件:
<?php
phpinfo();
?>
默认情况下,PHP 文件的内容是 HTML,不加修改地发送到浏览器。标记<?php
并?>
标记由 PHP 解释的 PHP 代码的开始和结束。
答案2
作为penguin359 指出,php至少不会解释 html 页面中未用<?
...括起来的任何内容。?>
如果尝试后它仍然不起作用,您应该做的第一件事可能是检查服务器的访问和错误日志(默认情况下,除非您的发行版做了一些奇怪的事情;检查AccessLog ErrorLog` 指令/var/log/apache2/access.log and /var/log/apache2/error.log
中的配置文件) ,然后根据他们所说的具体内容继续进行故障排除。/etc/apache2/ for the
and
如果页面被访问并且没有报告错误,则意味着服务器由于某种原因认为没有必要启动 php 解析器,很可能是因为配置错误。
apache 调用 php 解析器有几种不同的方式;两个最常见的方法是通过动态加载的 php 模块或通过 CGI。
如果它(应该是)通过加载,mod_php
那么你的配置文件应该包含一个看起来像这样的指令
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
其中,以及指示它让 php5 模块处理 .php 页面的指令,可能如下所示:
<IfModule mod_php5.c>
AddType application/x-httpd-php .php .phtml .php3 .php5
AddType application/x-httpd-php-source .phps
php_admin_flag register_globals off
</IfModule>
根据您的发行版处理 apache2 配置的方式,可能会有细微的差异。
如果它是通过 cgi 调用的——通常是一个更好的选择,因为它允许线程服务器以及诸如此类的漂亮东西苏执行-- 那么你应该再次检查你的 apache 配置文件并查找类似以下内容的行
AddHandler fcgid-script .php .php5
它告诉服务器如何处理以.php
或结尾的文件.php5
。
<? ... ?>
不过,再次强调一下,如果不查看访问和错误日志,很难猜测您的服务器到底出了什么问题(假设这不仅仅是将 .php 文件括起来的最初失败)。