©
本文档使用 PHP中文网手册 发布
data:// — 数据(RFC 2397)
自 PHP 5.2.0 起 data:(» RFC 2397)数据流封装器开始有效。
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' ];
?>
[#1] 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
?>
[#2] 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.
[#3] 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.