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

rjee0c15  于 2023-05-05  发布在  PHP
关注(0)|答案(2)|浏览(231)

我已经用自定义OpenSSL版本编译了Apache 2 2.4.57,然后安装了php8.2。这是我在localhost:8080上本地使用的一个测试Web服务器。服务器使用Apache的测试页面。
Apache 2安装在/usr/local/apache 2下
我使用sudo a2 enmod 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 a2 enmod php8.2后,httpd.conf没有修改,这正常吗?
我也试过使用php8.2-fpm,但它也不工作。我只是计划使用我的自定义版本的OpenSSL使用https将一个简单的视频流传输到视频播放器(ffplay)。
我认为Apache+php安装起来很简单,但似乎不可能配置:-(
有人能帮忙吗?谢谢

ki1q1bka

ki1q1bka1#

a2enmod是Debian / Ubuntu专门为支持apache2软件包而编写的命令工具。它不是一个支持自定义编译Apache 2的工具。要使用PHP,您需要根据Apache 2的编译副本从源代码手动编译PHP。
不建议这样做,因为您必须手动修补和更新Apache,以避免旧版本的漏洞被利用。
如果您没有PHP版本的偏好,您应该尝试以以下两种方式之一安装PHP:

  1. Apache with mod_php;或
  2. Apache with mod_fastcgi + php-fpm
    第一种方法应该更直接:
sudo apt install php libapache2-mod-php
sudo systemctl restart apache2

如果你需要在Ubuntu服务器上安装PHP 8.2,但仍然想使用Apache软件包,那么你应该安装PHP 8.2和PPA:

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

P.S. PHP-FPM是非常灵活的,如果你需要并行运行多个PHP版本。但那会让你对你所做的事情有更多的理解。

2vuwiymt

2vuwiymt2#

谢谢杨
我听从了你的建议,成功地用我的Apache版本编译了php8.2。
我遵循以下信息:https://gist.github.com/z2z/3bf4c60b7f0c0171d410d54bad088e6e
然而,我发现一旦编译了PHP,就有一些不同之处。出于我的目的,我不需要任何数据库,所以我删除了数据库依赖项。
Apache安装在这里:/usr/local/apache 2/我有一个自定义版本的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

编译后php8.2创建模块:php_module for apache2.可以使用以下方法进行验证:

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

它还在modules下创建了库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是否有效!
幸运的是,只有在您需要使用PHP和Apache 2的自定义编译时,才需要所有这些!

相关问题