项目 | 描述 |
---|---|
PHP | 5.5.0 、5.6.8 、7.0.0 、7.2.5 、7.4.9 、8.0.0 、8.2.9 |
PHP 编辑器 | PhpStorm 2023.1.1(专业版) |
allow_url_fopen
allow_url_fopen 配置项
allow_url_fopen
是 PHP 中的一个配置选项,它决定了 PHP 是否能够通过 URL (而非本地文件路径)
来打开文件。这个配置选项的值会影响到一些 PHP 中与文件操作相关的函数的行为,例如 fopen()
和 file_get_contents()
。具体来说,当 allow_url_fopen
被设置为 On
(开启)时,这些函数可以用来 读取
或 写入
远程文件
。而当该配置项被设置为 Off
(关闭)时,这些函数 只能用于操作本地文件
。
操作远程文件
当 allow_url_fopen
选项被设置为 On
时(目前,allow_url_fopen
选项在每一个 PHP 版本中都是 默认开启
的),PHP 能够访问和处理远程文件。例如,你可以使用 file_get_contents()
函数来读取一个远程网站的 HTML 内容。对此,请参考如下示例:
<?php
# 通过 file\_get\_contents() 函数获取
# 百度页面的 HTML 内容。
$content = file\_get\_contents('http://www.baidu.com');
var\_dump($content);
执行效果
上述示例的部分输出内容如下:
string(9508) "<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="description" content="全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。"><link rel="shortcut icon" href="//www.baidu.com/favicon.ico" type="image/x-icon"><link rel="search" type="application/opensearchdescription+xml" href="//www.baidu.com/content-search.xml" title="百度搜索">
<title>百度一下,你就知道</title><style ...
file 协议
在 PHP 中,file
协议的使用不受 allow_url_fopen
配置项的控制。对此,请参考如下示例:
<?php
# 通过 allow\_url\_fopen 函数获取
# allow\_url\_fopen 配置项的值。
var\_dump(ini\_get('allow\_url\_fopen'));
# 尝试使用 file\_get\_contents 获取当前主机路径
# C:\Users\Public\Documents\index.php 中的内容
var\_dump(file\_get\_contents('file:///C:\Users\Public\Documents\index.php'));
执行效果
由于 allow_url_fopen
配置项在 PHP 中默认是开启的,故在执行上述示例前请将 allow_url_fopen
配置关闭(可通过修改 PHP 配置文件 php.ini
实现)。
由于 allow_url_fopen
配置已被关闭,故首个 var_dump
语句的输出为 string(0) ""
。在 allow_url_fopen
配置被关闭的状况下,file_get_contents
等函数仍能通过 file
协议对本机文件进行操作。
string(0) ""
string(35) "<?php
var\_dump('Hello World');"
allow_url_include
allow_url_include 配置项
allow_url_include
是 PHP 的一个配置指令,与 allow_url_fopen
类似,但 allow_url_include
配置专门针对 PHP 的 include
、include_once
、 require
及 require_once
语句。当 allow_url_include
被设置为 On
时,PHP 允许通过 URL 的形式,从远程服务器 包含和执行
PHP 文件。对此,请参考如下示例:
http://192.168.1.8/target
首先,我在 IP
地址为 192.168.1.8
的服务器中准备了文件 target
,在当前主机中通过浏览器访问该页面的效果如下:
开启 allow_url_include 选项
由于在 PHP8.0.0
版本中,allow_url_include
选项默认是关闭的,故需要通过修改配置文件来开启该选项。将 php.ini
配置文件中的:
allow_url_include = Off
修改为如下内容并对其进行保存。
allow_url_include = On
执行如下示例代码
<?php
include('http://192.168.1.8/target');
执行效果
由于 allow_url_include
配置项在 PHP7.4.0
版本被废弃,故在开启并使用到 allow_url_include
时,PHP 将输出提示信息 PHP Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0
。
在执行上述示例代码后,target
文件中的内容被 包含至当前文件且被作为 PHP 代码进行执行
。
PHP Deprecated: Directive 'allow\_url\_include' is deprecated in Unknown on line 0
string(11) "Hello World"
若在执行上述示例代码前,未将 allow_url_include
配置项开启,则执行结果将为如下内容:
PHP Warning: include(): http:// wrapper is disabled in the server configuration by allow\_url\_include=0 in C:\index.php on line 4
PHP Warning: include(http://192.168.1.8/target): Failed to open stream: no suitable wrapper could be found in C:\index.php on line 4
PHP Warning: include(): Failed opening 'http://192.168.1.8/target' for inclusion (include_path='.;C:\php\pear') in C:\index.php on line 4
allow_url_include 与 allow_url_fopen
区别
在开启 allow_url_fopen
配置项后,PHP 仅能够对远程文件进行读写等文件操作
。
在开启 allow_url_include
配置项后,PHP 将能够通过 include
等函数 将远程文件包含至当前文件并将其作为 PHP 代码进行执行
。
举个栗子
<?php
$target\_url = 'http://192.168.1.8/target';
var\_dump(file\_get\_contents($target\_url));
include($target\_url);
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/d6947df68667fb21fc5fe21bb8a572eb.png)
![img](https://img-blog.csdnimg.cn/img_convert/e6da560bd8d69de874ca40f9b8c632a0.png)
![img](https://img-blog.csdnimg.cn/img_convert/2254bcde3c19e89d9ef8d87e4fd7179b.png)
![img](https://img-blog.csdnimg.cn/img_convert/3fcb78016a179c45bc74d6b5d805999d.png)
![img](https://img-blog.csdnimg.cn/img_convert/4e50ac9fa0ae0155d3a603d4e77a345d.png)
![img](https://img-blog.csdnimg.cn/img_convert/efe6561d63bab605e9bb96e084f1124d.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)**
![img](https://img-blog.csdnimg.cn/img_convert/d77267969ad5ffd8011b0c648b9c1b93.png)
### 给大家的福利
**零基础入门**
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)
同时每个成长路线对应的板块都有配套的视频提供:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)
因篇幅有限,仅展示部分资料
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/f413e7ef1c520489eee1e7f75438ac15.png)
.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)
因篇幅有限,仅展示部分资料
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-jcEaTCC1-1713017274090)]