Apache实际加载的php.ini路径需通过phpinfo()中“Loaded Configuration File”确认,常见为XAMPP\php\php.ini或XAMPP\apache\bin\php.ini;修改allow_url_fopen = On后必须重启Apache才生效。

确认当前生效的 php.ini 文件位置
很多人改了错的 php.ini 文件,结果重启 Apache 也没生效——因为 XAMPP 中可能有多个 php.ini,比如 php\php.ini(CLI 用)和 apache\bin\php.ini(Web 服务用),而 Apache 加载的是后者。
打开 http://localhost/dashboard/phpinfo.php(或新建一个 PHP 文件输出 phpinfo()),搜索 Loaded Configuration File,看到的路径才是 Apache 实际读取的配置文件。
- 典型路径是:
XAMPP\php\php.ini(XAMPP 8.0+ 默认把 PHP 集成进 Apache 目录,但配置仍指向\php\php.ini) - 如果路径显示为
XAMPP\apache\bin\php.ini,说明它被复制或覆盖过,优先编辑该文件 - 改完后务必重启 Apache,否则修改不加载
定位并修改 allow_url_fopen 配置项
allow_url_fopen 控制 PHP 是否允许通过 URL(如 http://、https://、ftp://)打开远程文件。默认在较新版本 XAMPP 中是 Off,出于安全考虑被禁用。
在确认的 php.ini 文件中搜索 allow_url_fopen,你会看到类似这一行:
allow_url_fopen = Off
把它改为:
allow_url_fopen = On
- 注意:不要加引号,也不写
1或true,只接受On/Off - 有些版本会把该项注释掉(前面有分号
;),记得删掉分号 - 如果搜不到,可以在
[PHP]段落末尾手动添加一行allow_url_fopen = On
验证是否生效及常见失败原因
改完重启 Apache 后,运行一段测试代码:
<?php var_dump(ini_get('allow_url_fopen')); ?>
输出 string(2) "1" 表示已开启;若仍是空字符串或 false,说明没生效。
- 最常见原因是改了错误的
php.ini文件(再次核对Loaded Configuration File) - Apache 没重启,或者只重启了 MySQL(XAMPP 控制面板里要单独点 Apache 的
Stop再Start) - 某些安全模块(如 Suhosin)会强制覆盖该设置,但 XAMPP 默认不启用,一般不用考虑
- Windows 权限问题:确保你用管理员权限编辑了
php.ini(尤其在Program Files下安装时)
开启后要注意的实际限制
allow_url_fopen = On 只是基础开关,不代表所有远程请求都能成功。实际使用中常遇到:
-
fopen('https://...')失败?可能是缺少 CA 证书路径,需设置curl.cainfo和/或openssl.cafile(XAMPP 7.4+ 常见) -
file_get_contents()报failed to open stream: Unable to find the wrapper "https"?说明 OpenSSL 扩展未启用,检查php.ini中;extension=openssl是否已取消注释 - 部分主机环境(尤其是共享主机)即使开了
allow_url_fopen,也会禁用allow_url_include,但这不影响file_get_contents等函数
真正麻烦的不是“怎么开”,而是开了之后发现 HTTPS 请求仍失败——这时候得顺着 phpinfo() 里 openssl 和 stream wrappers 的输出去查依赖链。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











