data://Схема Data (RFC 2397)


data: (» RFC 2397) - это обертка потоков, доступная с PHP 5.2.0.


  • data://text/plain;base64,


Основная информация
Атрибут Поддержка
Ограничение по allow_url_fopen Нет
Ограничение по allow_url_include Да
Чтение Да
Запись Нет
Добавление Нет
Чтение и запись одновременно Нет
Поддержка stat() Нет
Поддержка unlink() Нет
Поддержка rename() Нет
Поддержка mkdir() Нет
Поддержка rmdir() Нет


Пример #1 Вывод содержимого data://

// выводит "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');

Пример #2 Получение типа потока

$meta stream_get_meta_data($fp);

// выводит "text/plain"
echo $meta['mediatype'];


Now PHP supports data: protocol w/out "//" like data:text/plain, not data://text/plain,

I tried it.
2008-09-06 21:30:27
If you want to create a gd-image directly out of a sql-database-field you might want to use:

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.
2010-05-02 15:54:51
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.

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:
'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
2010-11-18 06:37:52

    Поддержать сайт на родительском проекте КГБ