PHP 不运行脚本,而是下载它们

PHP 不运行脚本,而是下载它们

我知道,这是一个非常典型的问题,但我没有主意。是的,模块已安装:

# aptitude search libapache2-mod-php5
i   libapache2-mod-php5                                                         - server-side, HTML-embedded scripting language (Apache 2 module)                       
p   libapache2-mod-php5filter                                                   - server-side, HTML-embedded scripting language (apache 2 filter module)

并启用:

# ls -l /etc/apache2/mods-enabled/php*
lrwxrwxrwx 1 root root 27 2011-08-31 13:49 /etc/apache2/mods-enabled/php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root 27 2011-08-31 13:49 /etc/apache2/mods-enabled/php5.load -> ../mods-available/php5.load

# cat /etc/apache2/mods-enabled/php5.conf
<IfModule mod_php5.c>
  AddType application/x-httpd-php .php .phtml .php3 .php5
  AddType application/x-httpd-php-source .phps
</IfModule>

# cat /etc/apache2/mods-enabled/php5.load
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

Apache 声称 PHP 是 lodade:

# apache2ctl -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 proxy_module (shared)
 proxy_html_module (shared)
 proxy_http_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

文档根目录中没有 .htaccess,并且 404 显示 PHP 存在:

Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 带有 Suhosin-Patch proxy_html/3.0.0 服务器位于 wiki.example.com 端口 80

日志没有显示错误。

还有什么想法需要检查吗?

答案1

首先,确保您的 apache 配置正在加载它,例如:

LoadModule php5_module modules/libphp5.so

然后,确保 Apache 知道解释 .php 文件,例如

AddType text/html .php
AddType application/x-httpd-php .php

编辑

您提到错误日志不包含任何错误。对 .php 脚本的请求的状态代码是什么?(200、500 等)

log_errors在 php.ini 文件中,检查、display_errors和的设置error_log。如果记录了错误,它们将位于 指定的位置error_log。我认为这是默认行为(记录,而不是显示在屏幕上)。

如果您的应用程序需要 MySQL,请确保您也安装了 php5-mysql 包。其他所需模块也一样。

答案2

您不能使用处理程序模块同时将 PHP 和 Passenger 放在同一位置(每个请求仅“处理”一次,在这种情况下,Passenger 正在处理该请求)。如果您出于某种原因必须从 rails 应用程序提供 PHP,则需要创建特定的位置或目录,然后在该位置禁用 Passenger像这样:

<Directory /var/www/php/goes/here>
   PassengerEnabled off
</Directory>

或者

<Location /php/goes/here>
   PassengerEnabled off
</Location>

更多内容请参阅官方文档

看起来像关闭 PassengerEnabled 不会启用 DirectoryIndex,因此您可能需要手动将 ^/php/goes/here/$ 重写为 /php/goes/here/index.php

此外,它看起来像使用乘客高性能阻止您将其关闭。

或者,切换到使用libapache2-mod-php5filter并摆弄它,直到乘客处理请求并输出 php 代码后,apache 将其作为输出过滤器运行。

答案3

我不确定哪里出了问题,因为在我修复问题时,Chrome 一直显示正在下载 PHP 文件。现在依然如此,而其他浏览器则显示正在执行 PHP。Chrome 是否在使用一些缓存?无论如何,既然我问了这个问题,唯一缺少的部分就是安装 php5-mysql。

答案4

我已设法在我的其中一台服务器上修复了这个问题。

事实证明,这是由于某个地方的文件名匹配“错误”造成的。我将带有“It works!”文本的默认 index.html 重命名为 index.html.bak。没问题吧?事实证明,apache 实际上是在提供该 .bak 文件,而不是 index.php。

相关内容