apache中php不起作用的主因是模块未加载或处理器未配置:先用httpd -m或检查loadmodule确认libphp.so加载,再查addhandler/sethandler或proxypassmatch是否注册php处理器,最后验证phpinfo()输出及错误日志。

Apache 中 PHP 不起作用,大概率不是 PHP 没装,而是 Apache 没正确加载 libphp.so(或 Windows 下的 php_module)模块,或者没把 .php 文件交给 PHP 处理。先确认这点,再往下排查。
确认 Apache 是否加载了 PHP 模块
Linux/macOS 下运行:httpd -M | grep php 或 apache2ctl -M | grep php;Windows 下看 httpd.conf 里是否有 LoadModule php_module 行,且路径指向正确的 php7apache2_4.dll(或对应版本)。
- 没输出、没匹配 → 模块根本没加载,检查
LoadModule行是否被注释、路径是否拼错、文件是否存在 - 输出类似
php7_module (shared)→ 模块已加载,但可能没配置处理器 - 出现
Cannot load modules/libphp.so into server→ 权限问题或架构不匹配(如 64 位 Apache 加载 32 位 PHP 模块)
检查 PHP 处理器是否注册(AddHandler / SetHandler)
仅加载模块不够,Apache 还得知道「遇到 .php 文件时调用 PHP」。常见错误是漏掉或写错处理器声明。
- 在
httpd.conf或站点<virtualhost></virtualhost>内,必须有类似:AddHandler application/x-httpd-php .php
或更现代的写法:<FilesMatch \.php$><br> SetHandler application/x-httpd-php<br></FilesMatch>
- 如果用了
php-fpm,则不能用AddHandler,而应配ProxyPassMatch,例如:ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/ - 注意:某些发行版(如 Ubuntu)会把处理器配置放在
/etc/apache2/mods-enabled/php*.load和php*.conf中,别只改httpd.conf
验证 PHP 文件是否被解析(而非直接下载)
创建一个 info.php 放在 Web 根目录,内容仅:<?php phpinfo(); ?>,然后访问 http://localhost/info.php。
立即学习“PHP免费学习笔记(深入)”;
- 浏览器显示下载弹窗或源码 → Apache 完全没识别 PHP,回到前两步检查模块和处理器
- 显示 500 错误 → 查
ErrorLog(如/var/log/apache2/error.log),常见报错:PHP Parse error(语法错)、Unable to load dynamic library(扩展路径错)、Segmentation fault(PHP 和 Apache 版本冲突) - 空白页但无报错 → 可能
display_errors关了,临时在php.ini加:display_errors = Onerror_reporting = E_ALL
检查 php.ini 路径与模块是否匹配
Apache 加载的 PHP 模块会读取特定位置的 php.ini,不是你随便改的那个。运行 phpinfo() 页面,看 Loaded Configuration File 的值,确保你编辑的是这个文件。
- 常见错误:改了
/etc/php/8.1/cli/php.ini,但 Apache 用的是/etc/php/8.1/apache2/php.ini - 如果
Loaded Configuration File显示(none)→ PHP 没找到 ini 文件,需在LoadModule后加:PHPIniDir "/etc/php/8.1/apache2" - 扩展(如
mysqli)启用后仍报Call to undefined function,检查该扩展的.so文件路径是否在extension_dir下,且extension=行未被分号注释
最常被忽略的是:修改配置后忘了重启 Apache(systemctl restart apache2 或 apachectl restart),以及错误日志里藏着关键线索——别只盯着浏览器表现。











