php在xampp中未生效的主因是apache未正确加载php模块,需检查httpd.conf中loadmodule和addhandler是否启用、路径是否匹配php版本,并重启服务;返回源码说明.php后缀未绑定mime类型,须确认addtype application/x-httpd-php .php存在且short_open_tag=on。

PHP在XAMPP里根本没启动,浏览器访问.php文件只显示源码或404,不是代码写错了,是Apache压根没加载PHP模块。
Apache启动了但PHP不生效
这是最常被忽略的环节:Apache服务状态栏显示Running,不代表PHP就绪。它可能只是在跑纯静态HTML。
- 打开XAMPP控制面板 → 点击Apache行右侧的
Config→ 选Apache (httpd.conf) - 搜索
LoadModule php,确认这行没被注释(即前面没有#),且路径指向你当前PHP版本对应的DLL,比如:LoadModule php8_module "D:/xampp/php/php8apache2_4.dll" - 再搜
AddHandler application/x-httpd-php .php,同样确保未被注释 - 改完保存,必须点击控制面板里的
Restart(不是Stop+Start),否则配置不生效
浏览器访问PHP文件返回源码
说明请求没进PHP解析器,而是被当作纯文本发给了浏览器。常见于短标签未启用、MIME类型未绑定或.php后缀未注册。
- 检查
httpd.conf中是否漏掉AddType application/x-httpd-php .php(有些旧版XAMPP需要显式加这一行) - 打开
php.ini(通过控制面板Config → PHP (php.ini)),确认short_open_tag = On(老项目常用而非<?php) - 重启Apache后,用
http://localhost/phpinfo.php测试——如果页面显示完整PHP信息,说明解析通了;如果还是源码,说明上面某步漏了
端口冲突导致Apache无法加载PHP模块
Apache启动失败时,PHP模块根本不会被尝试加载。而“端口被占用”不一定报错明显,有时只是静默失败。
- 命令行执行
netstat -ano | findstr :80(或你设的其他端口),看PID是谁占的 - 常见抢占者:
World Wide Web Publishing Service(IIS)、Skype、Zoom、某些杀毒软件的Web防护模块 - 临时解决:改Apache端口 →
httpd.conf里改Listen 8080和ServerName localhost:8080,再进控制面板Config → Service and Port Settings同步更新 - 别跳过日志验证:查看
xampp\apache\logs\error.log,真实错误一定在里面,比如Cannot load D:/xampp/php/php8apache2_4.dll into server就是路径或架构(x86/x64)不匹配
PHP CLI能运行但Web不能执行
说明PHP解释器本身没问题,问题出在Apache与PHP的桥接层。这时不要怀疑代码,要盯住模块加载路径和权限。
- 确认
php8apache2_4.dll文件真实存在于指定路径,且文件名与LoadModule中写的完全一致(大小写、下划线、版本号) - Windows上DLL依赖可能缺失:用
Dependency Walker或dumpbin /dependents检查该DLL是否缺MSVCR120.dll等VC运行库 - Apache以服务方式运行时,可能无权读取PHP目录:把整个
xampp\php目录右键→属性→安全→编辑,给Users或Everyone加上读取权限 - 若用的是XAMPP旧版(如PHP 5.6)配新版Windows,注意
php5apache2_4.dll实际依赖的是Apache 2.4.x,不是2.2,版本错配必报错
真正卡住人的往往不是哪一步做错了,而是改了配置没重启服务、改了httpd.conf却忘了同步Service and Port Settings、或者以为phpinfo()能跑就代表一切OK——其实它只是验证了PHP解释器可用,不等于Apache成功调用了它。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











