DATA URL:嵌入 URL 中的数据资源

文章目录

  • 参考
  • 环境
  • DATA URL
      • 概念
      • 结构
      • DATA URL 的优缺点
          • 优点
          • 缺点
  • DATA URL 与图片
      • 获取图片的 Base64 编码结果
      • 在 HTML 中应用 DATA URL 以展示图片
  • DATA URL 与 allow_url_fopen 及 allow_url_include 配置项
      • allow_url_fopen 配置项
      • allow_url_include 配置项
      • allow_url_fopen 与 allow_url_include
          • 区别
          • 联系
          • 默认配置
      • DATA URL 与 allow_url_fopen 及 allow_url_inlcude

参考

项目描述
搜索引擎BingGoogle
AI 大模型文心一言通义千问讯飞星火认知大模型ChatGPT
MDN Web DocsData URL
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(专业版)

DATA URL

概念

DATA URL 是一种 URL 方案,它 允许我们在 URL 中直接嵌入数据,而不是指向数据所在的位置DATA URL 在网页开发中尤其有用,因为它允许我们将小型数据(例如小图标或简短文本)直接嵌入到 HTML、CSS 或 JavaScript 文件中,而不需要通过 网络连接 从服务器中获取资源。

结构

DATA URI 的一般结构如下:

data:[<mime type>][;charset=<charset>][;base64],<encoded data>

其中:

项目描述
<mime type>DATA URL 携带数据的 MIME 类型。例如:image/pngtext/plain 等。
<charset>当 DATA URL 携带数据的数据类型是文本类型时,可以指定文本所使用的字符集。若未指定文本类型使用的编码方式,默认使用 UTF-8 字符集编码。
base64标识 DATA URL 的携带数据是使用 Base64 进行编码的。
<encoded data>DATA URL 的携带数据,需要使用 DATA URL 声明的编码方式进行编码。

举个栗子

  1. 一个简单的 DATA URI,包含纯文本:

    data:text/plain;charset=UTF-8,Hello%20World!
    
  2. 使用 Base64 编码的 PNG 图片:

    data:image/png;base64,iVBORw...(此处为图片的实际编码数据)
    

DATA URL 的优缺点

优点
  1. 减少 HTTP 请求
    小尺寸图片、文本等数据 直接嵌入在 URL 中,不需要通过网络连接从服务器中获取。有利于 降低服务器压力,提高 HTTP 请求的效率(HTTP 连接的建立与维护所耗费的资源多用于大型资源),从而提高网页的加载速度。
  2. 离线访问
    通过在 URL 中内联资源可以使网页变得 更加独立,能够在离线情况下访问,而不依赖于外部资源的可用性。
缺点
  1. 占用空间增大
    Base64 编码使用的字符集是 URL 兼容的,这意味着它不包含 URL 特殊字符,如问号、斜杠、等号等。因此图片等二进制资源常使用 Base64 进行编码以方便资源的传输。但 Base64 编码通常会导致数据占用空间增大约 33%,这意味着资源在 DATA URL 中占用的内存空间会比原始资源更大,可能导致性能下降(对于小型图片,将其内嵌至 URL 中能减少 HTTP 请求,提高页面加载速度)
  2. 无法被缓存
    如果多个页面或资源使用 相同的数据,使用 DATA URL 将导致数据在每个页面或资源中都被重复,而不是被缓存。
  3. 可读性和管理
    大量的 DATA URL 可能会 导致源代码难以阅读和管理

DATA URL 与图片

获取图片的 Base64 编码结果

我们将通过使用 PHP 来获取图片的 Base64 编码结果。在下述示例中,我们使用 file_get_contents() 函数获取图片的二进制内容,再通过 base64_encode() 函数将二进制内容编码为 Base64 文本。

<?php# 获取同目录下的 beer.png 图片的二进制数据
$binary_data = file_get_contents('./beer.png');
# 获取 beer.png 的大小
var_dump(strlen($binary_data));# 尝试使用 Base64 将二进制数据进行编码
$result = base64_encode($binary_data);
# 将 Base64 编码结果进行输出
var_dump($result);

执行效果

由上述示例的执行结果可知,原图片所占据空间大小为 4492 字节,在通过 Base64 进行编码后,占据空间为 5992 字节。图片在进行 Base64 编码前与编码后相差 1500 字节,编码后图片约为原始图片的 133%

int(4492)
string(5992) "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"

在 HTML 中应用 DATA URL 以展示图片

在 HTML 中,img 标签用于展示图片资源。在 img 标签中,src 属性用于指定图片资源的 来源(通常是指向服务器本地的某一图片资源,在浏览器加载到此时,需要向服务器请求该资源)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>DATA URL</title>
</head>
<body><!--  通过使用 DATA URL 来展示图片  --><img alt="Beer" src="data:image/png;base64,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"/>
</body>
</html>

执行效果

访问上述 HTML 页面,得到如下界面:

DATA URL 与 allow_url_fopen 及 allow_url_include 配置项

allow_url_fopen 配置项

allow_url_fopen 是 PHP 中的一个配置选项,它决定了 PHP 是否能够通过 URL (而非本地文件路径) 来打开文件。这个配置选项的值会影响到一些 PHP 中与文件操作相关的函数的行为,例如 fopen()file_get_contents() 。具体来说,当 allow_url_fopen 被设置为 On(开启)时,这些函数可以用来 读取写入 远程文件。而当该配置项被设置为 Off(关闭)时,这些函数 只能用于操作本地文件

allow_url_include 配置项

allow_url_include 是 PHP 的一个配置指令,与 allow_url_fopen 类似,但 allow_url_include 配置专门针对 PHP 的 includeinclude_oncerequirerequire_once 语句。当 allow_url_include 被设置为 On 时,PHP 允许通过 URL 的形式,从远程服务器 包含和执行 PHP 文件。

allow_url_fopen 与 allow_url_include

区别

在开启 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);

执行效果

在执行上述示例代码前,请将 allow_url_fopenallow_url_include 配置项开启。
由于被 allow_url_fopen 配置项影响的 file_get_contents() 函数仅能够对远程文件执行读写等文件操作,故 http://192.168.1.8/target 中的代码仅被执行了一次。

由于 allow_url_includePHP7.4.0 版本中已被废弃,故在 PHP8.0.0 版本中执行上述代码时,PHP 将输出 PHP Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0 以表明 PHP 不推荐使用该配置项。

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 配置项进行关闭,这两个配置项通常用于从远程服务器 获取和执行文件,但在某些情况下,它们可能会被恶意利用,导致安全漏洞和风险。

DATA URL 与 allow_url_fopen 及 allow_url_inlcude

DATA URL 中的数据被 PHP 认为是远程文件,故在使用 file_get_contentsinclude 等函数时需要注意 PHP 的配置项 allow_url_fopenallow_url_include 的开启情况。

举个栗子

<?phpinclude('data:text/plain,<?php var_dump("Hello WOrld");');

执行效果

在执行上述示例代码时,仅开启了 allow_url_fopen 配置项。但 includerequire 等函数在处理远程文件时还需要 allow_url_include 配置项的开启。因此,PHP 抛出了如下异常信息。

PHP Warning:  include(): data:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\index.php on line 4
PHP Warning:  include(data:text/plain,<?php var_dump("Hello WOrld");): Failed to open stream: no suitable wrapper could be found in C:\index.php on line 4
PHP Warning:  include(): Failed opening 'data:text/plain,<?php var_dump("Hello WOrld");' for inclusion (include_path='.;C:\php\pear') in C:\index.php on line 4

通过修改 PHP 提供的配置文件 php.iniallow_url_include 配置项开启后,再次执行上述示例代码得到如下内容:

string(11) "Hello WOrld"
PHP Deprecated:  Directive 'allow_url_include' is deprecated in Unknown on line 0

嵌入 DATA URL 中的 PHP 代码被成功执行,故输出了 string(11) "Hello WOrld"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复-V7000存储2块磁盘故障脱机的数据恢复案例

服务器数据恢复环境&#xff1a; P740AIXSybaseV7000存储&#xff0c;存储阵列柜上共12块SAS机械硬盘&#xff08;其中一块为热备盘&#xff09;。 服务器故障&#xff1a; 存储阵列柜中有磁盘出现故障&#xff0c;工作人员发现后更换磁盘&#xff0c;新更换的磁盘数据同步到40…

零基础快速自学SQL,2天足矣。

此文是《10周入门数据分析》系列的第6篇。 想了解学习路线&#xff0c;可以先行阅读“ 学习计划 | 10周入门数据分析 ” 上一篇分享了数据库的基础知识&#xff0c;以及如何安装数据库&#xff0c;今天这篇分享数据库操作和SQL。 SQL全称是 Structured Query Language&#x…

Android约束布局ConstraintLayout的Guideline,CardView

Android约束布局ConstraintLayout的Guideline&#xff0c;CardView <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:a…

力扣刷题 day39:10-09

1.统计有序矩阵中的负数 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。 方法一&#xff1a;二分法 #方法一&#xff1a;二分法 def countNegatives(grid):res0for nums in…

【itext7】使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放

这篇文章&#xff0c;主要介绍使用itext7将多个PDF文件、图片合并成一个PDF文件&#xff0c;图片旋转、图片缩放。 目录 一、itext7合并PDF 1.1、引入依赖 1.2、合并PDF介绍 1.3、采用字节数组方式读取PDF文件 1.4、合并多个PDF文件 1.5、合并图片到PDF文件 1.6、旋转图…

win11安装双系统Ubuntu的坎坷记录

之前一直装的都是在一个硬盘中&#xff0c;这是是两块盘。 我的电脑是惠普暗影精灵8Pro 一 安装前的准备工作 1.1 记得先关闭&#xff0c;Bitlocker 输入wins&#xff0c;搜索框输入&#xff1a;设备加密设置 1.2 BIOS设置 &#xff08;惠普这电脑是开机时按 F10&#xff0…

数据结构 2.2 单循环链表

2.单循环链表 data|next——>data|next——>data|next——>头节点 1.初始化链表 2.增加节点&#xff08;头插法、尾插法&#xff09; 3.删除节点 4.遍历链表 定义一个链表&#xff08;结构体&#xff09;&#xff0c;定义一个数据结构&#xff0c;存放data域和指针域…

spark-08

学习视频&#xff1a; 黑马程序员Spark全套视频教程&#xff0c;4天spark3.2快速入门到精通&#xff0c;基于Python语言的spark教程_哔哩哔哩_bilibili

巴菲特持续减持“惠普”,持股比例降至10%以下

KlipC报道&#xff1a;近期&#xff0c;伯克希尔哈撒韦继续以亏损的价格出售惠普公司的股份&#xff0c;据悉该公司近日又出售了约307万股惠普股票&#xff0c;套现约8040万美元。 KlipC的合伙人Andi D表示&#xff1a;“值得一提的是这是伯克希尔在本月内第二次减持惠普的股票…

【TES720D-KIT】青翼科技支持双网口的全国产化四核CPU+FPGA处理器开发套件

TES720D-KIT是专门针对我司TES720D&#xff08;基于复旦微FMQL20S400的全国产化ARM核心板&#xff09;的一套开发套件&#xff0c;它包含1个TES720D核心板&#xff0c;加上一个TES720D-EXT扩展底板。 FMQL20S400是复旦微电子研制的全可编程融合芯片&#xff0c;在单芯片内集成…

node中的crypto模块指南

node中的crypto模块指南 加密操作可能很棘手&#xff0c;以至于付费的加密服务公司的存在只是为了确保在代码库中正确实现加密操作。好消息是&#xff0c;只需学习一些知识&#xff0c;我们就可以使用 Node 的内置加密模块免费进行适当的加密。 在本指南中&#xff0c;我们将…

【腾讯云TDSQL-C Serverless 产品体验】使用 Python向TDSQL-C添加读取数据实现词云图

关于TDSQL-C Serverless介绍 TDSQL-C 是腾讯云自主研发的新一代云原生关系型数据库。 它融合了传统数据库、云计算和新硬件技术的优势,100%兼容 MySQL,为用户提供具有极致弹性、高性能、高可用性、高可靠性和安全性的数据库服务。 TDSQL-C 实现了超过百万每秒的高吞吐量,支持…