支持的协议和封装协议
在线手册:中文  英文

data://

data://数据(RFC 2397)

说明

自 PHP 5.2.0 起 data:» RFC 2397)数据流封装器开始有效。

可选项

可选项

封装协议摘要
属性 支持
受限于 allow_url_fopen No
受限于 allow_url_include Yes
允许读取 Yes
允许写入 No
允许追加 No
允许同时读写 No
支持 stat() No
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No

范例

Example #1 打印 data:// 的内容

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

Example #2 获取媒体类型

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

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

支持的协议和封装协议
在线手册:中文  英文

用户评论:

senica at gmail dot com (2011-10-03 13:20:31)

You can use data:// to evaluate php that is stored in mySQL

For example:

If you have code stored that looks like this:
$content = ' //Content from your database or variable
  <?php if($var == "something"): ?>
    print this html
  <?php endif; ?>
';

Trying to evaluate this can prove cumbersome

But you can do something like:

include "data://text/plain;base64,".base64_encode($content);

and it will parse it with no problems.

from dot php dot net at brainbox dot cz (2010-11-18 04:37:52)

When passing plain string without base64 encoding, do not forget to pass the string through URLENCODE(), because PHP automatically urldecodes all entities inside passed string (and therefore all + get lost, all % entities will be converted to the corresponding characters).

In this case, PHP is strictly compilant with the RFC 2397. Section 3 states that passes data should be either in base64 encoding or urlencoded.

VALID USAGE:
<?php
$fp 
fopen('data:text/plain,'.urlencode($data), 'rb'); // urlencoded data
$fp fopen('data:text/plain;base64,'.base64_encode($data), 'rb'); // base64 encoded data
?>

Demonstration of invalid usage:
<?php
$data 
'Günther says: 1+1 is 2, 10%40 is 20.';

$fp fopen('data:text/plain,'.$data'rb'); // INVALID, never do this
echo stream_get_contents($fp);
// Günther says: 1 1 is 2, 10@ is 20. // ERROR

$fp fopen('data:text/plain,'.urlencode($data), 'rb'); // urlencoded data
echo stream_get_contents($fp);
// Günther says: 1+1 is 2, 10%40 is 20. // OK

// Valid option 1: base64 encoded data
$fp fopen('data:text/plain;base64,'.base64_encode($data), 'rb'); // base64 encoded data
echo stream_get_contents($fp);
// Günther says: 1+1 is 2, 10%40 is 20. // OK
?>

admin deskbitz net (2010-05-02 12:54:51)

If you want to create a gd-image directly out of a sql-database-field you might want to use:

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

this goes also for gif, png, etc using the correct "imagecreatefrom$$$"-function and mime-type.

sandaimespaceman at gmail dot com (2008-09-06 18:30:27)

Now PHP supports data: protocol w/out "//" like data:text/plain, not data://text/plain,
I tried it.

togos00 at gmail dot com (2008-04-08 12:56:40)

Note that the official data URI scheme does not include a double slash after the colon - that you must include it when making calls to PHP is an artifact of the designers' misunderstanding of URL syntax.

To automatically convert proper data URIs to ones understood by PHP, you can use code such as the following:

<?php
function convertUriForPhp$uri ) {
    if( 
preg_match('/^data:(?!\\/\\/)(.*)$/',$uri,$bif) ) {
        return 
'data://' $bif[1]; 
    } else {
        return 
$uri;
    } 
}
?>

易百教程