data://

data://数据 (RFC 2397)

描述

data: (» RFC 2397) 流封装器。

用法

  • data://text/plain;base64,

选项

封装器摘要
属性 支持
allow_url_fopen 限制
allow_url_include 限制
允许读取
允许写入
允许追加
允许同时读写
支持 stat()
支持 unlink()
支持 rename()
支持 mkdir()
支持 rmdir()

示例

示例 #1 打印 data:// 内容

<?php
// 打印 "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');
?>

示例 #2 获取媒体类型

<?php
$fp
= fopen('data://text/plain;base64,', 'r');
$meta = stream_get_meta_data($fp);

// 打印 "text/plain"
echo $meta['mediatype'];
?>
添加注释

用户贡献的注释 3 个注释

24
来自 dot php dot net at brainbox dot cz
13 年前
当传递不带 base64 编码的纯字符串时,不要忘记通过 URLENCODE() 传递该字符串,因为 PHP 会自动对传递的字符串中的所有实体进行 URL 解码(因此所有 + 都丢失了,所有 % 实体将被转换为相应的字符)。

在这种情况下,PHP 严格遵守 RFC 2397。第 3 节规定传递的数据应采用 base64 编码或 URL 编码。

有效用法
<?php
$fp
= fopen('data:text/plain,'.urlencode($data), 'rb'); // URL 编码的数据
$fp = fopen('data:text/plain;base64,'.base64_encode($data), 'rb'); // base64 编码的数据
?>

无效用法的演示
<?php
$data
= 'Günther says: 1+1 is 2, 10%40 is 20.';

$fp = fopen('data:text/plain,'.$data, 'rb'); // 无效,切勿这样做
echo stream_get_contents($fp);
// Günther says: 1 1 is 2, 10@ is 20. // 错误

$fp = fopen('data:text/plain,'.urlencode($data), 'rb'); // URL 编码的数据
echo stream_get_contents($fp);
// Günther says: 1+1 is 2, 10%40 is 20. // 正确

// 有效选项 1:base64 编码的数据
$fp = fopen('data:text/plain;base64,'.base64_encode($data), 'rb'); // base64 编码的数据
echo stream_get_contents($fp);
// Günther says: 1+1 is 2, 10%40 is 20. // 正确
?>
12
admin deskbitz net
14 年前
如果您想直接从 SQL 数据库字段中创建一个 gd 图像,您可能需要使用

<?php
$jpegimage
= imagecreatefromjpeg("data://image/jpeg;base64," . base64_encode($sql_result_array['imagedata']));
?>

这也适用于 gif、png 等,使用正确的 "imagecreatefrom$$$"-函数和 MIME 类型。
2
sandaimespaceman at gmail dot com
15 年前
现在 PHP 支持不带 "//" 的 data: 协议,例如 data:text/plain,而不是 data://text/plain。

我试过了。
To Top