PHP通过URL方式include文件触发allow_url_include=0报错的解决求助
PHP通过URL引入文件触发
allow_url_include报错的解决方案 报错核心原因
你遇到的报错原文是:
Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\xampp\htdocs\Lavoro\lang\en\login\home.php on line 10
这个报错本质是PHP配置项allow_url_include默认值为0/Off,明确禁止通过http/ftp这类远程URL wrapper执行include/require操作。这个配置项从PHP5到PHP8全版本逻辑统一,你不用纠结当前环境的具体PHP版本,所有操作都是通用的。
为什么参考教程调整配置后不生效
绝大多数调整无效的原因都是两个常见坑:
- 找错了要改的php.ini文件:XAMPP环境下,Apache跑Web服务加载的php.ini,和你命令行用的PHP加载的php.ini是两个独立文件,瞎改个路径错的ini根本不会被Web服务读到。要找对文件很简单:在Web目录下新建个临时php文件写
<?php phpinfo(); ?>访问,看页面里Loaded Configuration File那行指的哪个文件,你就改哪个,XAMPP默认一般是C:\xampp\php\php.ini。 - 改完配置不重启Apache:PHP的配置只在服务启动的时候读一次,改完ini不重启,改的内容等于白写。
配置修改步骤(如果确实需要开启URL引入能力)
如果确实有必须要通过URL引入文件的需求,按下面的步骤操作不会踩坑:
- 用记事本之类的纯文本编辑器打开刚才定位到的目标php.ini文件(不要用Word之类的富文本编辑器,会把文件格式搞坏)
- 搜索定位到
allow_url_include配置项,把对应的值从0/Off改成1/On,最终的行内容要对应allow_url_include = On,不要多空格写错位置 - 顺便搜一下同文件里的
allow_url_fopen配置项,确保它的值是On——这是所有URL wrapper能正常工作的基础,很多人改完allow_url_include才发现allow_url_fopen是关的,白折腾 - 保存修改后的ini文件,直接在XAMPP控制面板里重启Apache服务,配置就会生效
更推荐的无配置修改替代方案
真的不建议把allow_url_include长期开着,这个配置开了之后远程文件包含攻击的风险会拉满,绝大多数时候你根本没必要用URL路径引同服务器的文件:
- 同服务器的文件直接走本地路径引入就行,绕开HTTP请求效率高还安全。比如你现在的home.php在
C:\xampp\htdocs\Lavoro\lang\en\login\目录下,要引的myfile.php在C:\xampp\htdocs\mypage\myfile.php,直接用PHP自带的__DIR__常量锚定当前文件的绝对位置算相对路径就行,示例代码:include __DIR__ . '/../../../mypage/myfile.php'; - 这种写法不需要改任何PHP配置,读本地文件比走HTTP循环请求快得多,也完全没远程文件包含的安全风险。
补个容易踩的认知坑:就算你把allow_url_include开了,通过URL引PHP文件拿到的也是目标文件被Web服务器解析后的输出结果,不是PHP源码本身,绝大多数人本来想拿文件逻辑,结果拿到一堆HTML,完全和预期对不上。
内容的提问来源于stack exchange,提问作者Elizzit
相关产品推荐
相关产品推荐

