Ubuntu 23下PHP 8.1文件在浏览器显示为文本的问题求助
解决Apache无法解析PHP文件、显示源码且a2enmod提示模块不存在的问题
步骤1:确认PHP模块文件是否存在
先检查Apache模块目录中是否有PHP8.1的核心模块文件:
ls /usr/lib/apache2/modules/ | grep php
如果输出里没有libphp8.1.so,说明安装不完整,执行彻底卸载重装:
sudo apt purge libapache2-mod-php8.1 sudo apt autoremove sudo apt install libapache2-mod-php8.1
步骤2:手动创建并启用PHP模块配置(自动生成失败时)
若模块文件存在但a2enmod php8.1报错,手动生成模块配置文件:
- 创建
/etc/apache2/mods-available/php8.1.load,写入:
LoadModule php8_module /usr/lib/apache2/modules/libphp8.1.so
- 创建
/etc/apache2/mods-available/php8.1.conf,写入标准解析规则:
<FilesMatch ".+\.ph(p[3457]?|t|tml)$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch ".+\.phps$"> SetHandler application/x-httpd-php-source Require all denied </FilesMatch> <FilesMatch "^\.ph(p[3457]?|t|tml)$"> Require all denied </FilesMatch>
- 再次尝试启用模块:
sudo a2enmod php8.1
步骤3:验证MIME类型配置
确保Apache能识别.php文件并交给PHP处理:
- 检查
/etc/apache2/mime.types是否包含一行:application/x-httpd-php php - 若缺失,手动添加后保存。
步骤4:检查Apache MPM模式(关键坑点)
libapache2-mod-php8.1仅支持prefork MPM模式,若当前使用event或worker模式会导致模块加载失败:
- 查看当前MPM模式:
apache2ctl -M | grep mpm
- 若为mpm_event或mpm_worker,切换到prefork:
sudo a2dismod mpm_event mpm_worker sudo a2enmod mpm_prefork
步骤5:重启服务并验证
执行重启命令使配置生效:
sudo systemctl restart apache2
创建测试文件/var/www/html/info.php,内容:
<?php phpinfo(); ?>
在浏览器访问该文件,若显示PHP信息页面则问题解决。
内容的提问来源于stack exchange,提问作者Ruchita Sheth
相关产品推荐
相关产品推荐

