核心问题是apache未将.php请求交给php处理:先验证php_module是否真实加载(httpd -m | grep php或检查loadmodule及引号),再确认sethandler/addhandler是否绑定.php后缀,最后排查弯引号、selinux上下文、架构/vc版本匹配及虚拟主机覆盖等干扰项。

Apache无法解析PHP文件,核心问题不是PHP没装好,而是Apache根本没把.php请求交给PHP处理——要么模块压根没加载,要么加载了但不知道该用谁、怎么用。
确认php_module是否真实启用
别只看配置文件里有没有LoadModule,要验证它是否真在运行中:
- Linux/macOS执行httpd -M | grep php或apache2ctl -M | grep php,有php_module (shared)才说明加载成功
- Windows检查httpd.conf中LoadModule php_module是否取消注释,路径是否用英文直双引号,DLL文件是否存在
- XAMPP用户重点检查Include "conf/extra/httpd-xampp.conf"是否被注释——这行一丢,PHP配置就全失效
检查PHP处理器是否绑定到后缀
模块加载≠能用。Apache必须明确知道“.php”该由谁执行:
- 推荐写法:
SetHandler application/x-httpd-php - 兼容写法:AddType application/x-httpd-php .php(需确保后面跟了DirectoryIndex index.php)
- PHPStudy等用fcgid的环境,不能只靠AddType,必须配AddHandler fcgid-script .php和FcgidWrapper指向对应php-cgi路径
排查常见干扰项
很多问题藏在细节里,容易被忽略:
- 配置文件中混入了Word或网页复制的弯引号(“”),Apache只认ASCII直引号("")
- SELinux(CentOS/RHEL)下,libphp.so上下文必须是httpd_modules_t,否则静默失败
- 64位Apache加载32位PHP DLL,或VC版本不匹配(如VC15模块配VC17 Apache),会报undefined symbol
- 虚拟主机配置会覆盖全局设置,检查
内是否清空或禁用了PHP handler
验证基础环节是否到位
看似简单,却常是故障源头:
- 确认index.php真实存在于访问路径下,且权限为644,属主属组符合Web服务器要求(如www-data或daemon)
- 检查.htaccess重写规则是否适配FastCGI——错误写法RewriteRule ^(.*)$ /index.php/$1 [L]会导致“No input file specified”,应改为RewriteRule ^(.*)$ /index.php?/$1 [L]
- 创建info.php(内容),通过浏览器访问测试,再看error.log定位具体报错
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











