PHP 行事准则:allow_url_fopen 与 allow_url_include
文章目录
- 参考
- 环境
- allow_url_fopen
- allow_url_fopen 配置项
- 操作远程文件
- file 协议
- allow_url_include
- allow_url_include 配置项
- allow_url_include 与 allow_url_fopen
- 区别
- 联系
- 默认配置
- 配置项关闭所导致异常
- 运行时配置
- ini_set()
- 限制
参考
项目 | 描述 |
---|---|
搜索引擎 | Bing、Google |
AI 大模型 | 文心一言、通义千问、讯飞星火认知大模型、ChatGPT |
PHP 官方 | filesystem.configuration.php |
PHP 官方 | PHP Manual |
环境
项目 | 描述 |
---|---|
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) "<?phpvar_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
执行如下示例代码
<?phpinclude('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_include
配置项后,PHP 仅能够对远程文件进行读写等文件操作
。
在开启 allow_url_fopen
配置项后,PHP 将能够通过 include
等函数 将远程文件包含至当前文件并将其作为 PHP 代码进行执行
。
举个栗子
<?php$target_url = 'http://192.168.1.8/target';var_dump(file_get_contents($target_url));
include($target_url);
执行效果
在执行上述示例代码前,请将 allow_url_fopen
与 allow_url_include
配置项开启。
由于被 allow_url_fopen
配置项影响的 file_get_contents()
函数仅能够对远程文件执行读写等文件操作,故 http://192.168.1.8/target
中的代码仅被执行了一次。
PHP Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0
string(33) "<?phpvar_dump('Hello World');
"
string(11) "Hello World"
联系
allow_url_include
的生效依赖于 allow_url_fopen
配置项的开启。具体而言,当 allow_url_include
与 allow_url_fopen
两个配置项均被开启时,allow_url_include
才能够发挥作用。若仅有 allow_url_include
配置项被开启,则无法发挥 allow_url_include
配置项所起到的功能。
默认配置
自 PHP5.2
版本开始,allow_url_include
配置项的默认配置均为 Off
,而 allow_url_fopen
配置项的默认配置始终为 On
。
在 PHP 的实际应用中,推荐将 allow_url_include
与 allow_url_fopen
配置项进行关闭,这两个配置项通常用于从远程服务器 获取和执行文件
,但在某些情况下,它们可能会被恶意利用,导致安全漏洞和风险。
配置项关闭所导致异常
allow_url_include
与 allow_url_include
配置项的关闭导致 file_get_contents
与 inlcude
等函数无法访问远程文件而引发的问题都将使 PHP 引发 Warning
异常。Warning
异常的产生并不会导致 PHP 程序的立即终止。
运行时配置
ini_set()
除了 php.ini
文件之外,PHP 还允许 在脚本运行过程中通过 ini_set() 函数来动态修改某些配置选项的值
,这些更改只在 当前脚本运行时生效
,并不会影响全局配置。这为开发者提供了在单个脚本或应用的执行过程中调整配置的灵活性。
限制
在 PHP 中,不同配置项所能够采取的配置方法可能是不同的,并不是所有的选项都可以在运行时通过 ini_set() 函数来修改
。ini_set() 函数允许你在脚本运行时动态地设置配置选项,但有些选项可能由于 安全或系统级别的限制
而不能通过 ini_set()
来修改。allow_url_include
与 allow_url_fopen
就是这样的配置项。
如果您需要查看某个配置项所 允许的配置方式
,请访问由 PHP 官方提供的 ini.list.php 页面。
相关文章:
PHP 行事准则:allow_url_fopen 与 allow_url_include
文章目录 参考环境allow_url_fopenallow_url_fopen 配置项操作远程文件file 协议 allow_url_includeallow_url_include 配置项 allow_url_include 与 allow_url_fopen区别联系默认配置配置项关闭所导致异常运行时配置ini_set()限制 参考 项目描述搜索引擎Bing、GoogleAI 大模型…...
Replicate + ngrok云端大模型API实现教程
ChatGPT 的诞生预示着人工智能和机器学习领域的新时代。 日新月异,Hugging Face 不断推出突破性的语言模型,重新定义人机交互的界限。欢迎来到未来! 当然,有很多选项可以对它们进行推断。在本文中,我将告诉大家如何使…...
蓝桥等考Python组别十四级005
蓝桥等考Python组别十四级 第一部分:选择题 1、Python L14 (15分) 运行下面程序,输出的结果是( )。 d = {1 : one, 2 : two, 3 : three, 4 : four} print(d[2]) onetwothreefour正确答案:B...
Linux 本地 Docker Registry本地镜像仓库远程连接
Linux 本地 Docker Registry本地镜像仓库远程连接 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)镜像,不受本地局域网限制! 1. 部署Docker Registry 使用官网安装方式,docker命令一键启动,该命令启动一个regis…...
二十九、高级IO与多路转接之epollreactor(收官!)
文章目录 一、Poll(一)定义(二)实现原理(三)优点(四)缺点 二、I/O多路转接之epoll(一)从网卡接收数据说起(二)如何知道接收了数据&…...
vite dev开发模式下支持外部模块引用
web工程中经常需要使用外部的cdn资源,比如lodash、three.js等: <script type"importmap">{"imports": {"lodash": "https://unpkg.com/lodash-es4.17.21/lodash.js"}} </script> vite build通过r…...
Chrome出现STATUS_STACK_BUFFER_OVERRUN解决方法之一
Chrome出现STATUS_STACK_BUFFER_OVERRUN错误代码,setting都无法打开 解决方法1:兼容性设置为win7 解决方法2: 1,开始菜单搜索Exploit Protection 2,添加程序进行自定义,点号,按程序名称添加 …...
【JavaEE】JavaScript
JavaScript 文章目录 JavaScript组成书写方式行内式内嵌式外部式(推荐写法) 输入输出变量创建动态类型基本数据类型数字类型特殊数字值 String转义字符求长度字符串拼接布尔类型undefined未定义数据类型null 运算符条件语句if语句三元表达式switch 循环语…...
剑指offer——JZ7 重建二叉树 解题思路与具体代码【C++】
一、题目描述与要求 重建二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出…...
图片批量编辑器,轻松拼接多张图片,创意无限!
你是否曾经遇到这样的问题:需要将多张图片拼接成一张完整的画面,却缺乏专业的图片编辑技能?现在,我们为你带来一款强大的图片批量编辑器——让你轻松实现多张图片拼接,创意无限! 这款图片批量编辑器可以帮助…...
蓝桥等考Python组别十四级008
第一部分:选择题 1、Python L14 (15分) 运行下面程序,输出的结果是( )。 d = {1: "red", 2: "yellow", 3: "blue", 4: "green"} print(d[2]) redyellowbluegreen正确答案:B 2、Python L14 (...
【linux进程(二)】如何创建子进程?--fork函数深度剖析
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:Linux从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学更多操作系统知识 🔝🔝 进程状态管理 1. 前言2. 查看…...
数字IC前端学习笔记:数字乘法器的优化设计(华莱士树乘法器)
相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 进位保留乘法器依旧保留着阵列的排列规则,只是进位是沿斜下角,如果能使用树形结构来规划这些进位保留加法器,就能获得更短的关键…...
CountDownLatch 批量更改使用,
代码 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.first.pet.platform.entity.PlatformAddress; import com.first.pet.platform.mapper.PlatformAddressMapper; …...
910数据结构(2019年真题)
算法设计题 问题1 有一种排序算法叫做计数排序。这种排序算法对一个待排序的表(采用顺序存储)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个元素,扫描待排序的表一趟,统计表中有多少个元素的关…...
推荐系统实践 笔记
诸神缄默不语-个人CSDN博文目录 这是我2020年写的笔记,我从印象笔记搬过来公开。 如果那年还在读本科的同学也许有印象,那年美赛出了道根据电商评论给商户提建议的题。其实这件事跟推荐系统关系不大,但我们当时病急乱投医,我打开…...
【JavaEE】JUC(Java.util.concurrent)常见类
文章目录 前言ReentrantLock原子类线程池信号量CountDownLatch相关面试题 前言 经过前面文章的学习我们大致了解了如何实现多线程编程和解决多线程编程中遇到的线程不安全问题,java.util.concurrent 是我们多线程编程的一个常用包,那么今天我将为大家分…...
清除浮动的方法
为什么需要清除浮动? 父级的盒子不能把height定死这样,浮动子类就没有了(行内块元素的特点),父类高度为零。故引用清除浮动 1、父级没有高度 2、子盒子浮动了 3、影响下面的布局了,我们就应该清除浮动了…...
LangChain 摘要 和问答示例
在Azure上的OpenAI端点 注意 OpenAI key 可以用微软 用例【1. 嵌入 ,2. 问答】 1. import os import openai from langchain.embeddings import OpenAIEmbeddings os.environ["OPENAI_API_KEY"] "****" # Azure 的密钥 os.environ["OP…...
(32)测距仪(声纳、激光雷达、深度摄影机)
文章目录 前言 32.1 单向测距仪 32.2 全向性近距离测距仪 32.3 基于视觉的传感器 前言 旋翼飞机/固定翼/无人车支持多种不同的测距仪,包括激光雷达(使用激光或红外线光束进行距离测量)、360 度激光雷达(可探测多个方向的障碍…...
教你拥有一个自己的QQ机器人!0基础超详细保姆级教学!基于NoneBot2 Windows端搭建QQ机器人
0.序言 原文链接:教你本地化部署一个QQ机器人本教程主要面向Windows系统用户教程从0开始全程详细指导,0基础萌新请放心食用🍕如果你遇到了问题,请仔细检查是否哪一步有遗漏。如果你确定自己的操作没问题,可以到原文链…...
智能银行卡明细筛选与统计,轻松掌握账户总花销!
作为现代生活的重要组成部分,银行卡成为了我们日常消费和收入的主要途径。但是,当我们需要了解自己的银行卡账户的总花销时,繁琐的明细筛选和统计工作常常让人头疼。现在,让我们向您推荐一款智能银行卡明细筛选与统计工具…...
SRT服务器SLS
目前互联网上的视频直播有两种,一种是基于RTMP协议的直播,这种直播方式上行推流使用RTMP协议,下行播放使用RTMP,HTTPFLV或者HLS,直播延时一般大于3秒,广泛应用秀场、游戏、赛事和事件直播,满足了…...
Linux 安装 Android SDK
先安装jdk RUN apt-get install default-jdk 参考:http://t.zoukankan.com/braveym-p-6143356.html mkdir -p $HOME/install/android-sdk wget https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip unzip commandlinetools-linu…...
【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.4 鼠标按下、移动、释放事件
本章要实现的整体效果如下: QEvent::MouseButtonPress 鼠标按下时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseMove 鼠标移动时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseButtonRel…...
vue3父子通信+ref,toRef,toRefs使用实例
ref是什么? 生成值类型的响应式数据可用于模板和reactive通过.value修改值可以获取DOM元素 <p ref”elemRef”>{{nameRef}} -- {{state.name}}</p> // 获取dom元素 onMounted(()>{ console.log(elemRef.value); }); toRef是什么? 针对一个响应式对象(rea…...
输入电压转化为电流性 5~20mA方案
输入电压转化为电流性 5~20mA方案 方案一方案二方案三 方案一 XTR111是一款精密的电压-电流转换器是最广泛应用之一。原因有二:一是线性度非常好、二是价格便宜。总结成一点,就是性价比高。 典型电路 最终电路 Z1二极管处输出电流表达式:…...
SpringBoot自带模板引擎Thymeleaf使用详解①
目录 前言 一、SpringBoot静态资源相关目录 二、变量输出 2.1 在templates目录下创建视图index.html 2.2 创建对应的Controller 2.3 在视图展示model中的值 三、操作字符串和时间 3.1 操作字符串 3.2 操作时间 前言 Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎&am…...
推荐算法——Apriori算法原理
0、前言: 首先名字别读错:an pu ruo ao rui 【拼音发音】Apriori是一种推荐算法推荐系统:从海量数据中,帮助用户进行信息的过滤和选择。主要推荐方法有:基于内容的推荐、协同过滤推荐、基于关联规则的推荐、基于知识的…...
vue ant 隐藏 列
vue ant 隐藏 列 如果你使用的是Vue和Ant Design Vue组件库,你可以使用v-if指令来实现条件渲染来隐藏列。以下是一个示例代码: <template><a-table :columns"columns" :data-source"data"><template v-slot:custom…...
wordpress主机seowebs/免费网站统计工具
1、mount -t nfs 192.168.0.1:/workspace /workspace 将192.168.0.1上的workspace挂载到当前服务器workspace下 如果出现mount.nfs: access denied by server while mounting 可能是权限不够,将两边文件夹提权chmod -Rf 777 /workspace 也可以能是服务端没有work…...
crm系统的销售管理功能包括/seo外包优化
发表于 2012-01-28 06:20:14 by 月小升这段程序本来是一个图片分切程序外壳,图片分切程序为特定场合使用的小程序,对大家没什么用,特发布package com.buzz.img;import java.import java.import java.awt.FlowLayout;import java.awt.GridLayo…...
宝安做棋牌网站建设多少钱/现在学seo课程多少钱
第1关:表格的基本构成 任务描述 本关任务:完成编写表格基本构成的小程序。 相关知识 大家都知道,表格由行和列组成,这里我们就用HTML标签,写一个表格。 标签用来创建表格,标签用来创建行, 标签用来创建列。这里先创建一个两行两列的表格。代码如下: 姓名年龄张三18效…...
温州网站建设公司/快点tv下载安装
1. echo 命令 echo 是基本的shell输出命令,她的语法是: echo string 我们也可以使用她来定制一些输出的格式,具体如下: 输出普通字符串 echo "it is a echo string here!" PS: 引号可以省略。 显示变量 read 命令从标准…...
炫酷个人网站/站长工具5g
1、 问题描述 在书写一个较大的整数时,为了方便看清数位,通常会在数位之间加上逗号来分割数位,具体的,从右向左,每三位分成一段,相邻的段之间加一个逗号。 例如,1234567 写成 1,234,567。 例如&…...
网站建设软件培训学校/厦门百度整站优化服务
1.家长:压岁钱我给你存着。 2.公车司机:后面还有一辆车! 3.饭店服务员:您要的菜马上就好… 4.小学老师,你跟我说实话,我不告诉你家长! 5ÿ…...