当前位置: 首页 > news >正文

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()
          • 限制

参考

项目描述
搜索引擎BingGoogle
AI 大模型文心一言通义千问讯飞星火认知大模型ChatGPT
PHP 官方filesystem.configuration.php
PHP 官方PHP Manual

环境

项目描述
PHP5.5.05.6.87.0.07.2.57.4.98.0.08.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 的 includeinclude_oncerequirerequire_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_fopenallow_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_includeallow_url_fopen 两个配置项均被开启时,allow_url_include 才能够发挥作用。若仅有 allow_url_include 配置项被开启,则无法发挥 allow_url_include 配置项所起到的功能。

默认配置

PHP5.2 版本开始,allow_url_include 配置项的默认配置均为 Off,而 allow_url_fopen 配置项的默认配置始终为 On
在 PHP 的实际应用中,推荐将 allow_url_includeallow_url_fopen 配置项进行关闭,这两个配置项通常用于从远程服务器 获取和执行文件,但在某些情况下,它们可能会被恶意利用,导致安全漏洞和风险。

配置项关闭所导致异常

allow_url_includeallow_url_include 配置项的关闭导致 file_get_contentsinlcude 等函数无法访问远程文件而引发的问题都将使 PHP 引发 Warning 异常。Warning 异常的产生并不会导致 PHP 程序的立即终止。

运行时配置

ini_set()

除了 php.ini 文件之外,PHP 还允许 在脚本运行过程中通过 ini_set() 函数来动态修改某些配置选项的值,这些更改只在 当前脚本运行时生效,并不会影响全局配置。这为开发者提供了在单个脚本或应用的执行过程中调整配置的灵活性。

限制

在 PHP 中,不同配置项所能够采取的配置方法可能是不同的,并不是所有的选项都可以在运行时通过 ini_set() 函数来修改。ini_set() 函数允许你在脚本运行时动态地设置配置选项,但有些选项可能由于 安全或系统级别的限制 而不能通过 ini_set() 来修改。allow_url_includeallow_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 的诞生预示着人工智能和机器学习领域的新时代。 日新月异&#xff0c;Hugging Face 不断推出突破性的语言模型&#xff0c;重新定义人机交互的界限。欢迎来到未来&#xff01; 当然&#xff0c;有很多选项可以对它们进行推断。在本文中&#xff0c;我将告诉大家如何使…...

蓝桥等考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 (拉取和推送)镜像,不受本地局域网限制&#xff01; 1. 部署Docker Registry 使用官网安装方式,docker命令一键启动,该命令启动一个regis…...

二十九、高级IO与多路转接之epollreactor(收官!)

文章目录 一、Poll&#xff08;一&#xff09;定义&#xff08;二&#xff09;实现原理&#xff08;三&#xff09;优点&#xff08;四&#xff09;缺点 二、I/O多路转接之epoll&#xff08;一&#xff09;从网卡接收数据说起&#xff08;二&#xff09;如何知道接收了数据&…...

vite dev开发模式下支持外部模块引用

web工程中经常需要使用外部的cdn资源&#xff0c;比如lodash、three.js等&#xff1a; <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错误代码&#xff0c;setting都无法打开 解决方法1&#xff1a;兼容性设置为win7 解决方法2&#xff1a; 1&#xff0c;开始菜单搜索Exploit Protection 2&#xff0c;添加程序进行自定义&#xff0c;点号&#xff0c;按程序名称添加 …...

【JavaEE】JavaScript

JavaScript 文章目录 JavaScript组成书写方式行内式内嵌式外部式&#xff08;推荐写法&#xff09; 输入输出变量创建动态类型基本数据类型数字类型特殊数字值 String转义字符求长度字符串拼接布尔类型undefined未定义数据类型null 运算符条件语句if语句三元表达式switch 循环语…...

剑指offer——JZ7 重建二叉树 解题思路与具体代码【C++】

一、题目描述与要求 重建二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出…...

图片批量编辑器,轻松拼接多张图片,创意无限!

你是否曾经遇到这样的问题&#xff1a;需要将多张图片拼接成一张完整的画面&#xff0c;却缺乏专业的图片编辑技能&#xff1f;现在&#xff0c;我们为你带来一款强大的图片批量编辑器——让你轻松实现多张图片拼接&#xff0c;创意无限&#xff01; 这款图片批量编辑器可以帮助…...

蓝桥等考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函数深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程状态管理 1. 前言2. 查看…...

数字IC前端学习笔记:数字乘法器的优化设计(华莱士树乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 进位保留乘法器依旧保留着阵列的排列规则&#xff0c;只是进位是沿斜下角&#xff0c;如果能使用树形结构来规划这些进位保留加法器&#xff0c;就能获得更短的关键…...

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年写的笔记&#xff0c;我从印象笔记搬过来公开。 如果那年还在读本科的同学也许有印象&#xff0c;那年美赛出了道根据电商评论给商户提建议的题。其实这件事跟推荐系统关系不大&#xff0c;但我们当时病急乱投医&#xff0c;我打开…...

【JavaEE】JUC(Java.util.concurrent)常见类

文章目录 前言ReentrantLock原子类线程池信号量CountDownLatch相关面试题 前言 经过前面文章的学习我们大致了解了如何实现多线程编程和解决多线程编程中遇到的线程不安全问题&#xff0c;java.util.concurrent 是我们多线程编程的一个常用包&#xff0c;那么今天我将为大家分…...

清除浮动的方法

为什么需要清除浮动&#xff1f; 父级的盒子不能把height定死这样&#xff0c;浮动子类就没有了&#xff08;行内块元素的特点&#xff09;&#xff0c;父类高度为零。故引用清除浮动 1、父级没有高度 2、子盒子浮动了 3、影响下面的布局了&#xff0c;我们就应该清除浮动了…...

LangChain 摘要 和问答示例

在Azure上的OpenAI端点 注意 OpenAI key 可以用微软 用例【1. 嵌入 &#xff0c;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 基于视觉的传感器 前言 旋翼飞机/固定翼/无人车支持多种不同的测距仪&#xff0c;包括激光雷达&#xff08;使用激光或红外线光束进行距离测量&#xff09;、360 度激光雷达&#xff08;可探测多个方向的障碍…...

卡证检测矫正模型开发者案例:对接MinIO对象存储实现异步矫正队列

卡证检测矫正模型开发者案例&#xff1a;对接MinIO对象存储实现异步矫正队列 1. 引言&#xff1a;从单张图片处理到异步队列的挑战 如果你用过卡证检测矫正模型&#xff0c;比如那个能识别身份证、护照、驾照&#xff0c;还能自动把歪斜的卡证“掰正”的工具&#xff0c;你可…...

不用Chrome插件了!教你用浏览器书签实现Postman常用功能(含CORS解决方案)

浏览器书签变身API测试神器&#xff1a;零插件实现Postman核心功能 每次调试API都要打开Postman&#xff1f;临时测试接口却不想安装插件&#xff1f;其实你的浏览器书签就能变身轻量级API测试工具。本文将带你用几行JavaScript代码打造一个无需安装、跨设备同步的书签版Postma…...

零基础玩转vLLM-v0.11.0:一键部署,体验5-10倍推理加速

零基础玩转vLLM-v0.11.0&#xff1a;一键部署&#xff0c;体验5-10倍推理加速 你是不是觉得大模型推理又慢又占显存&#xff1f;每次想跑个模型&#xff0c;都得等半天&#xff0c;显存还动不动就爆掉。作为开发者或者研究者&#xff0c;我们最头疼的就是&#xff1a;怎么让模…...

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

目录 Step1:新建虚拟环境并安装所需库包(避免环境污染) Conda手动安装配置环境 Conda自动化安装脚本 WRF-Chem所需库包- flex(词法分析器生成工具) Step2.1:WRF-ARW 编译安装 注意要点 Step2.2:WRF-Chem 编译安装 注意要点 错误总结 Step3:WPS编译安装 注意要点 错误总…...

给3月、4月前端春招的家人们说点拿offer的野路子

最后30天&#xff0c;搞前端的战友们&#xff0c;别再傻傻去刷LeetCode几百题了&#xff01; 博主作为一个在前端圈子混了10年的老油条&#xff0c;太懂你现在那种“面试八股文背不完”、“手里项目像玩具”的焦虑。常规面试前准备到这会儿基本到头了&#xff0c;想稳拿offer&…...

56. 合并区间(中等)

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。示例 1&#xff1a;输入&#xff1a;intervals [[1,3],[…...

SAP ML81N消息号SE729提示用户定制被错误的维护的解决方案

SAP PS模块日常解决方案 文章目录SAP PS模块日常解决方案前言在SAP使用过程中&#xff0c;服务类的采购订单在使用ML81N进行服务确认操作时&#xff0c;已经操作成功&#xff0c;但是系统会提示消息号SE729&#xff1a;提示用户定制被错误的维护。 注意&#xff1a;以下内容是基…...

如何高效配置 lint-staged:基于文件类型的差异化检查全指南

如何高效配置 lint-staged&#xff1a;基于文件类型的差异化检查全指南 【免费下载链接】lint-staged 项目地址: https://gitcode.com/gh_mirrors/lin/lint-staged lint-staged 是一款强大的工具&#xff0c;能够在 git 提交前对暂存文件执行代码检查和格式化&#xff…...

终极指南:Zerox OCR日志系统设计与性能监控完整方案

终极指南&#xff1a;Zerox OCR日志系统设计与性能监控完整方案 【免费下载链接】zerox OCR & Document Extraction using vision models 项目地址: https://gitcode.com/GitHub_Trending/ze/zerox Zerox是一个基于视觉模型的OCR与文档提取工具&#xff0c;提供高效…...

StructBERT情感分类-中文-通用-base实战教程:结合Elasticsearch构建情感检索系统

StructBERT情感分类-中文-通用-base实战教程&#xff1a;结合Elasticsearch构建情感检索系统 1. 快速上手&#xff1a;从零开始的情感分析系统 你是不是经常遇到这样的场景&#xff1a;面对海量的用户评论、客服对话或社交媒体内容&#xff0c;想要快速了解用户的情感倾向&am…...