基本上所有的对文件操作的API, 都迁移到的了PHP stream上, 所以, 绝大部分对文件操作的API都是支持Data URL的.

当某个API需要操作对象是文件的时候, 我们其实是可以采用Data URL让他接受一个文件内容字符串的.

比如在#62961中, 请求PHP提供一个exif_imagetypefromstring API, 因为目前的exif_imagetype API只接受文件名, 而提出者已经得到了文件内容在内存中, 不希望只能通过写到一个临时文件, 然后再调用exif_imagetype .

  1. <?php
  2. //we already have $bindata
  3. $tmpfile = tempnam('/tmp', 'upload');
  4. file_put_contents($tmpfile, $bin_data);
  5. $extension = image_type_to_extension(exif_imagetype($tmpfile));
  6. unlink($tmpfile);

那么, 这个时候, 我们就可以借助Data URL了:

  1. <?php
  2. //we already have $bindata
  3. $base64_data = base64_encode($bin_data);
  4. $extension =
  5. image_type_to_extension(exif_imagetype("data://image/;base64," . $base64_data ));

另外, Data URL还有一个比较常见的使用场景, 比如下面这个图:
aaarticlea/png;base64,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" alt="Yaf logo" />

源码就是:

<img src="data:image/png;base64,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" />

PHP & “Data” URL scheme(转)的更多相关文章

  1. Data URL scheme 笔记

    0x01起因 今天做CTF的时候,发现一堆数据,大概是这样的 data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAIUAAACFCAYAAAB12js8AAA ...

  2. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  3. JS魔法堂:Data URI Scheme介绍

    一.前言 上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说这个有用,有同事说这个没啥用,后来还延伸到网站性能的话题上,大家讨论的激烈程度让我觉得这次选题还不错.本篇先 ...

  4. 网页优化URI(http URI scheme与data URI scheme)

    网页优化的一大首要任务是减少HTTP 请求 (http request) 的次数,例如通过合并多个JS文件,合并CSS样式文件.除此之外,还有一个data URL 的密技,让我们直接把图像的内容崁入网 ...

  5. data URI scheme

    优化网页效能,首要的任务是尽量减少HTTP请求(http request)的次数,例如把多个JavaScript文档合并,多个CSS文件合并等等.此外,还有有一种 data URL 的方法,可以直接把 ...

  6. data URI scheme及其应用

    data URI scheme通俗的来讲就是将一张图片直接塞到HTML中而不是通过HTTP请求去获取.这样从表面上看会降低一次HTTP的请求,实现了对于网页的优化(只是看了其它一些文章data URI ...

  7. 使用Visual Studio 2010写Data Url生成工具C#版本

    声明:本文系本人按照真实经历原创.未经许可,谢绝转载. 此文百度经验版本号:怎样用Visual Studio 2010打造Data Url生成工具 源代码下载:用Visual Studio 2010编 ...

  8. 为什么可以通过URL来调起APP - URL Scheme和Intent

    在手机浏览器中可以通过URL调起APP是不是很神奇?这篇文章就告诉你为什么. URL Scheme 先从前端能接触到的URL Scheme分析一下 丢wiki:https://en.wikipedia ...

  9. React Native之配置URL Scheme(iOS Android)

    React Native之配置URL Scheme(iOS Android) 一,需求分析 1.1,需要在网站中打开/唤起app,或其他app中打开app,则需要设置URL Scheme.比如微信的是 ...

随机推荐

  1. AIX中查找端口号和进程

    1.由端口号查找进程 维护系统或检查到不明的端口自然要去查一下这个端口是由哪个进程来监听的windows可以用命令netstat -ano来查端口对应的进程的pid. aix却并不能,aix需要使用下 ...

  2. 一款基于css3的散子3D翻转特效

    css3使我们能够跳出2d空间,实现3维空间的动画效果,这里给出一个自动翻转的3d色子动画效果制作过程. 第一步,首先进行HTML的布局,对于3D效果,布局有一定的规律,代码如下: <body& ...

  3. Unix系统编程()malloc和free的实现

    尽管malloc和free所提供的内存分配接口比之brk和sbrk要容易许多,但在使用时仍然容易犯下各种编程错误. 理解malloc和free的实现,将使我们洞悉产生这些错误的原因以及如何才能避免此类 ...

  4. saveFileDialog对话框

    private void button1_Click(object sender, EventArgs e) { saveFileDialog1.Filter = "*.txt|*.txt| ...

  5. 常见linux内核线程说明

    ps进程名有方括号的是内核级的进程,执行辅助功能(比如将缓存写入到磁盘):所有其他进程都是使用者进程.您会注意到,就算是在您新安装的(最小化的)系统中,也会有很多进程在运行. 在文档kernel-pe ...

  6. php常用的正则表达式

    1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:2. "^\d+$" //非负整数(正整数 + 0)3. "^[0-9]*[1-9][0 ...

  7. JQuery操作表单相关使用总结

    select下拉列表onChange事件之JQuery实现: JQuery: $(document).ready(function () { $("#selectMenu").bi ...

  8. ThinkPHP项目笔记之RBAC(权限)中篇

    现在,说说添加权限,权限管理列表 c.添加权限

  9. Android studio 添加admob googgle play services

    Android studio 添加admob googgle play services MainActivity import com.google.android.gms.ads.AdReques ...

  10. ChemDraw怎么绘制H-点或H-划

    ChemDraw软件是一款全球领先的化学绘图工具,能够绘制各类化学结构图形和化学方程式,在基础化学.有机化学和分析化学等领域得到了广泛的应用.H-点和H-划是日常作图过程中使用频率较高的化学符号,必须 ...