无法使用从源代码编译的 Apache2 启用 php8.2

问题描述 投票:0回答:2

我用自定义的OpenSSL版本编译了Apache2 2.4.57,然后安装了php8.2。这是我在 localhost:8080 上本地使用的测试 Web 服务器。服务器使用 Apache 的测试页面。

Apache2安装在/usr/local/apache2下

我使用 sudo a2enmod php8.2 来启用 PHP。

我创建了一个test.php页面,复制到htdocs下:

<?php
    phpinfo();
?>

测试 PHP 安装,但它不起作用。当我在 Chrome 中键入 localhost:8080/test.php 时,它只显示页面的代码。

我根本不是网络开发人员。我按照以下教程https://computingforgeeks.com/how-to-install-php-8-2-on-ubuntu/

httpd.conf中还有什么要做的来启用PHP吗? 运行 sudo a2enmod php8.2 后,我在 httpd.conf 中看到没有修改是否正常?

我也尝试过使用 php8.2-fpm,但它也不起作用。 我只是计划使用 https 和我的自定义版本的 OpenSSL 将一个简单的视频流式传输到视频播放器 (ffplay)。

我以为 Apache+php 很容易安装,但似乎无法配置 :-(

有人可以帮忙吗? 谢谢

php apache openssl
2个回答
0
投票

a2enmod
是 Debian / Ubuntu 专门为支持他们的
apache2
包而编写的命令工具。它不是支持自定义编译的 Apache2 的工具。要将 PHP 与它一起使用,您需要根据已编译的 Apache2 副本从源代码手动编译 PHP。

不推荐这样做,因为您必须手动修补和更新 Apache 以避免旧版本的漏洞被利用。

如果您不喜欢 PHP 版本,您应该尝试通过以下两种方式之一安装 PHP:

  1. 带有 mod_php 的 Apache;或
  2. 带有 mod_fastcgi + php-fpm 的 Apache

第一种方法应该更直接:

sudo apt install php libapache2-mod-php
sudo systemctl restart apache2

如果你的 Ubuntu 服务器上需要 PHP 8.2,但仍想使用普通的 Apache 包,那么你应该使用 PPA 安装 PHP 8.2:

LC_ALL=C.UTF-8 sudo add-apt-repository ppa:ondrej/php
sudo apt update -y
sudo apt install php8.2 libapache2-mod-php8.2 php8.2-mysql
sudo systemctl restart apache2

附言如果您需要并行运行多个 PHP 版本,PHP-FPM 非常灵活。但这会让你对你在做什么有更多的了解。


0
投票

谢谢杨

我听从了你的建议,并设法用我的 Apache 版本编译了 php8.2。

我遵循了以下信息:https://gist.github.com/z2z/3bf4c60b7f0c0171d410d54bad088e6e

但是,我发现编译 PHP 后存在一些差异。出于我的目的,我不需要任何数据库,所以我删除了数据库依赖项。

我的apache安装在那里:/usr/local/apache2/ 我在那里有一个自定义版本的openssl/usr/local/bin/openssl

Apache编译配置如下:

./configure --with-ssl=/usr/local/bin/openssl --with-expat=/usr/local/include --enable-so --enable-mime-magic

php8.5编译配置如下:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --prefix=/usr/local/apache2/php --with-config-file-path=/usr/local/apache2/php --disable-cgi --with-zlib --with-gettext --without-pdo-sqlite --without-sqlite3

编译和安装:

make
sudo make install

安装需要运行(不知道为什么...):

/usr/local/apache2/build/libtool --finish /home/youruser/Desktop/apache/php-8.2.5/libs

Once compiled php8.2 creates the module: php_module for apache2.可以使用以下方法验证:

/usr/local/apache2/bin/httpd -M

它还在模块下创建库 libphp.so

为了激活 php,我将以下内容添加到 httdp.conf

LoadModule php_module modules/libphp.so

<FilesMatch ".+\.ph(?:ar|p|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(?:ar|p|ps|tml)$">
    Require all denied
</FilesMatch>

# Running PHP scripts in user directories is disabled by default
# 
# 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_flag engine Off
    </Directory>
</IfModule>

然后我在htdocs中创建了一个php文件:

<?php
    phpinfo();
?>

验证 PHP 是否有效!

幸运的是,只有当您需要使用带有 Apache2 自定义编译的 PHP 时,才需要所有这些!

© www.soinside.com 2019 - 2024. All rights reserved.