Apache中PHP不起作用怎么办_检查PHP配置错误的解决步骤【排查】

1次阅读

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

Apache中PHP不起作用怎么办_检查PHP配置错误的解决步骤【排查】

Apache 中 PHP 不起作用,大概率不是 PHP 没装,而是 Apache 没正确加载 libphp.so(或 windows 下的 php_module)模块,或者没把 .php 文件交给 PHP 处理。先确认这点,再往下排查。

确认 Apache 是否加载了 PHP 模块

linux/macos 下运行:
httpd -M | grep phpapache2ctl -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*.loadphp*.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 = On
    error_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 apache2apachectl restart),以及错误日志里藏着关键线索——别只盯着浏览器表现。

text=ZqhQzanResources