系统升级后 PHP 无法在 Apache2 中运行

系统升级后 PHP 无法在 Apache2 中运行

最近将我的系统从 Karmic 升级到了 Lucid。我认为这涉及 Apache 和 PHP 的更新。

现在我的服务器无法处理 PHP 文件,对它们的任何导航都会触发下载而不是解析。

PHP 模块仍然在启用了 Apache mods 的系统中加载,并且已 AddType application/x-httpd-php .php在我的 httpd.conf 中加载。

Apache 访问或错误日志中没有有意义的消息,所以我很困惑。

任何帮助都将不胜感激。谢谢。

答案1

/var/log/apache2/error.log如果 PHP 成功加载,应该会显示如下行:

[2011 年 8 月 30 日星期二 12:53:36] [通知] Apache/2.2.14 (Ubuntu) PHP/5.3.2-1ubuntu4.9 已配置 Suhosin-Patch — 恢复正常运行

注意日期,如果是 2009 年的日期,则说明您配置有错误。

AddType是没用的,你需要使用:

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

另请参阅Apache 2.x 上 php.net 的安装说明

您不需要手动添加,libapache2-mod-php5安装包/etc/apache2/mods-available/php5.conf包含:

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

由于它是一个 conffile,因此可能未随升级一起安装。要修复此问题清除然后再次安装:

sudo apt-get purge libapache2-mod-php5
sudo apt-get install libapache2-mod-php5

要启用 PHP,您必须运行:

sudo a2enmod php5

之后重新启动网络服务器:

sudo /etc/init.d/apache2 restart

其他事项:

  • 检查 中的冲突设置/etc/apache2
  • 您是否已从源代码构建了 Apache?
  • 运行sudo apache2ctl configtest检查配置是否存在语法错误
  • 打开http://localhost/服务器信息检查已加载的配置和模块。status必须加载模块才能执行此操作。如果您正在运行远程服务器,则需要将自己添加到列表Allow from/etc/apache2/mods-enabled/status.conf,然后重新启动服务器

答案2

好吧,在其他方法都不起作用并且 Apache 变得非常混乱之后,我最终清除了所有 Apache 包并重新安装了它们。

现在似乎运行良好,谁知道它出了什么问题……

编辑

当我重新设置 Apache 配置设置时,我发现了问题所在。[此博客文章][1] 对此进行了解释。

事实证明,虽然 userdir 模块没有被积极使用,但其余的站点文件驻留在我的 ~/public_html 文件夹中,并且其中的所有内容都被禁用了 php。

我猜这一定是最近添加的 php 模块,而我的 Karmic 设置中却没有这个功能。

答案3

文件php5.conf/etc/apache2/mods-enabled底部有几行代码阻止 php 在用户目录中执行,因此根据您的配置,这也可能是您的问题。您只需注释掉这些行并重新加载 apache2 即可

相关内容