【问题标题】:Php 8.0 update does not parse from httpdphp 8.0 更新不从 httpd 解析
【发布时间】:2021-09-27 09:54:23
【问题描述】:

我将测试平台上的 php 从 php 7.4 更新到 php 8.0。 Centos 8 盒子上的更新正常工作。 Centos 7 上的那个没有。 <?php phpinfo() ?> 的页面是空白的,而我的测试页面只是将代码显示为文本。

命令行似乎可以工作:

[lhadmin@dho-dev01 ~]$ php --version
PHP 8.0.8 (cli) (built: Jun 29 2021 07:41:19) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies

[lhadmin@dho-dev01 ~]$ php -r 'echo "Hello World!\n";'
Hello World!

我尝试卸载 php 并重新安装 httpd。然后我再次安装了php。还是不行。我可以回到 php 7.4 并且一切正常。

我正在切换的 repos 是 remi-php74 和 remi-php80。

是否有 cis-cat 建议的任何安全策略可能会对此产生干扰?我尝试禁用 selinux,但没有任何作用。


感谢您的意见。

首先,由于 RHEL 问题,我们不打算迁移到 Centos 8。我们正在寻找其他发行版。这种选择就是他们所说的“高于我的工资等级”。我也不认为 centos 7 上的 php80 是问题所在。我认为这个系统有些东西,可能与我们一直在实施的安全设置有关。我们的邮件列表有问题,因为 /var/log 的默认权限设置为 600。

正如 Remi Collet 所说,它应该开箱即用。包列表长 923 行。有什么特别值得我注意的包裹吗?我知道 apache 以某种方式与 php 交互,因为信息页面在未安装 php 时显示文本。当它尝试访问该功能时,它会显示一个空白页面。

我尝试过的:

在 php 7.4 上 - 一切正常。 phpinfo() 显示 PHP 版本 7.4.21 等。

服务器版本:Apache/2.4.48 (codeit) 建服时间:2021-05-26 11:40:06

7.4 配置文件:

    /etc/httpd/php.conf
    /etc/httpd/conf.module.d/15-php.conf
    /etc/httpd/modules/libphp7.so 
    /etc/httpd/modules/libphp7-zts.so 
    yum-config-manager --disable remi-php74
    yum-config-manager --enable remi-php80
    yum check-update  # verify 
    yum -y update

systemctl restart httpd # 使用 php 8.0

Phpinfo() 是一个空白页。不过,命令行上的 PHP 可以工作。

8.0 配置文件:

    /etc/httpd/php.conf,
    /etc/httpd/conf.module.d/20-php.conf
    /etc/httpd/modules/libphp.so

返回:

    yum remove php*
    yum-config-manager --disable remi-php80,
    yum-config-manager --enable remi-php74,
    systemctl restart httpd # with php 7.4

使用不同的包设置重复。

我的 httpd 配置文件:

autoindex.conf  php.conf  README  shib.conf  ssl.conf  ssl.conf.rpmnew  ssl.conf.rpmsave  userdir.conf  welcome.conf

我什至尝试过重新安装 httpd 并从那里开始构建。还是不行。

20-php.conf的内容

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#

# Cannot load both php5, php7 and php modules
<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <IfModule prefork.c>
      LoadModule php_module modules/libphp.so
    </IfModule>
  </IfModule>
</IfModule>

php.conf 的内容:

#
# The following lines prevent .user.ini files from being viewed by Web clients.
#
<Files ".user.ini">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
        Satisfy All
    </IfModule>
</Files>

#
# Allow php to handle Multiviews
#
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

# mod_php options
<IfModule  mod_php.c>
    #
    # Cause the PHP interpreter to handle files with a .php extension.
    #
    <FilesMatch \.(php|phar)$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    #
    # Uncomment the following lines to allow PHP to pretty-print .phps
    # files as PHP source code:
    #
    #<FilesMatch \.phps$>
    #    SetHandler application/x-httpd-php-source
    #</FilesMatch>

    #
    # Apache specific PHP configuration options
    # those can be override in each configured vhost
    #
    php_value session.save_handler "files"
    php_value session.save_path    "/var/lib/php/session"
    php_value soap.wsdl_cache_dir  "/var/lib/php/wsdlcache"

    #php_value opcache.file_cache   "/var/lib/php/opcache"
</IfModule>

【问题讨论】:

  • 欢迎来到 Stackoverflow!你应该try to solve the problem first。请更新您的问题以显示您在minimal reproducible 示例中已经尝试过的内容。欲了解更多信息,请参阅How to Ask,并拨打tour
  • 您的问题很不清楚是什么问题,因为您自己写道,您有两个解决方案:1.)降级到 PHP 7.4 2.)升级到 centos 8。那你的问题是什么?跨度>
  • " code as text.": 未安装 php,网络服务器以纯文本形式提供文件。 / “页面出现空白” 可能你的意思是死亡的白屏,但这是一个猜测。请参阅PHP debugging reference 中的Nothing is seen. The page is empty and white.(也称为白页/死亡屏幕)。
  • 纯属猜测:因为您使用 PHP 作为 Apache 模块并且 php7_module 被重命名为 php_module?你能提供相对于 PHP 的 Apache 配置吗?
  • PHP 7.4 或 8.0(或任何其他版本)都应该以同样的方式开箱即用。所以没有足够的信息(至少,已安装包的列表)

标签: php apache


【解决方案1】:

我得到了这个工作,非常感谢 julp。

我再次重新启动了 httpd,注释掉了 IfModule 条件,并更仔细地查看了 httpd 无法重新启动时“journalctl -xe”的输出。

相关错误:

Apache 正在运行线程 MPM,但您的 PHP 模块未编译为线程安全的。你需要重新编译PHP。

快速搜索显示我需要将 00_mod_mpm.conf 中的 mod_mpm_event 替换为 mod_mpm_prefork

# LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

我很好奇,所以我将我的 httpd 配置与其他服务器上的其他 httpd 进行了比较。

带有工作 php80 的 Centos 8:

服务器版本:Apache/2.4.37 (centos)

典型的 Centos 7:

服务器版本:Apache/2.4.6 (CentOS)

这个 Centos 7,我无法更新:

服务器版本:Apache/2.4.48 (codeit)

由于这是一个开发服务器,我尝试使用非向后移植版本的 apache 以停止被安全审计标记为我的 httpd 已过期,即使每个人都知道 RHEL 的向后移植。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2021-08-22
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多