
在 Termux 中运行 Apache + PHP 时,因模块命名与 PHP 版本不匹配(如 PHP 8.x 实际提供 libphp.so 而非 libphp7.so),导致 httpd: Cannot load ... not found 错误,需修正 LoadModule 指令中的模块名与路径。
在 termux 中运行 apache + php 时,因模块命名与 php 版本不匹配(如 php 8.x 实际提供 `libphp.so` 而非 `libphp7.so`),导致 `httpd: cannot load ... not found` 错误,需修正 `loadmodule` 指令中的模块名与路径。
Termux 中的 Apache 与 PHP 集成并非严格按传统 Linux 发行版方式打包。尤其自 PHP 8.0 起,官方已弃用 php7_module 命名约定,统一使用更通用的 php_module,对应动态库文件也从 libphp7.so 更名为 libphp.so —— 即使你安装的是 PHP 8.1(如题中所示 PHP 8.1.3),Termux 包管理器(pkg)提供的 Apache PHP 模块仍命名为 libphp.so,且位于标准路径 /data/data/com.termux/files/usr/libexec/apache2/。
因此,应将 httpd.conf 中原错误配置:
LoadModule php7_module /data/data/com.termux/files/usr/libexec/apache2/libphp7.so
替换为:
LoadModule php_module /data/data/com.termux/files/usr/libexec/apache2/libphp.so
同时保留后续 PHP 处理配置(无需修改):
立即学习“PHP免费学习笔记(深入)”;
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>✅ 验证步骤:
- 保存 httpd.conf;
- 执行 apachectl configtest 确认语法无误(输出 Syntax OK);
- 启动服务:apachectl start;
- 访问 http://localhost:8080(Termux Apache 默认端口为 8080),并创建 info.php 测试:
<?php phpinfo(); ?>
⚠️ 注意事项:
- 不要手动重命名 .so 文件(如将 libphp.so 改为 libphp7.so),这可能导致符号解析失败;
- Termux 的 Apache 模块路径固定,切勿随意修改 libexec 目录结构;
- 若仍报错,请先确认模块文件真实存在:
ls -l $PREFIX/libexec/apache2/libphp.so
若不存在,可重装 PHP Apache 模块:
pkg reinstall php-apache
总结:该问题本质是模块标识符(module name)与实际共享库(shared object)命名不一致所致。Termux 遵循上游 Apache + PHP 的现代命名规范,应始终使用 php_module + libphp.so 组合,而非沿用旧版 PHP 7 的命名惯性。



















