![PHP 不运行脚本,而是下载它们](https://linux22.com/image/560093/PHP%20%E4%B8%8D%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E8%80%8C%E6%98%AF%E4%B8%8B%E8%BD%BD%E5%AE%83%E4%BB%AC.png)
我知道,这是一个非常典型的问题,但我没有主意。是的,模块已安装:
# 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。