PHPerKaigi 2021


data://Data (RFC 2397)


data: (» RFC 2397) akım sarmalayıcı.


  • data://text/plain;base64,


Sarmalayıcı Seçenekleri
Özellik Destek
allow_url_fopen ile sınırlı Evet
allow_url_include ile sınırlı Evet
Okuma izni Evet
Yazma izni Hayır
Ekleme izni Hayır
Aynı anda okuma ve yazma izni Hayır
stat() desteği Hayır
unlink() desteği Hayır
rename() desteği Hayır
mkdir() desteği Hayır
rmdir() desteği Hayır


Örnek 1 - data:// içeriğini basmak

// "I love PHP" basar
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');

Örnek 2 - Ortam türünü alıp getirmek

$meta stream_get_meta_data($fp);

// prints "text/plain"
echo $meta['mediatype'];
add a note add a note

User Contributed Notes 3 notes

from dot php dot net at brainbox dot cz
10 years ago
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
admin deskbitz net
10 years ago
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.
sandaimespaceman at gmail dot com
12 years ago
Now PHP supports data: protocol w/out "//" like data:text/plain, not data://text/plain,

I tried it.
To Top