php:// — Çeşitli G/Ç akımlarına erişim
PHP, PHP'nin kendi girdi ve çıktı akımlarına, standart girdi, çıktı ve hata dosya tanıtıcılarına, bellek içi ve disk destekli geçici dosya akımlarına ve diğer dosya kaynaklarını okundukları ve yazıldıkları gibi işleyebilen süzgeçlere erişime izin veren bir dizi G/Ç akımı sağlar.
php://stdin, php://stdout ve
php://stderr, PHP sürecinin karşılık gelen girdi
veya çıktı akımına doğrudan erişime izin verir. Akım, bir kopya dosya
tanıtıcısına başvurur, bu nedenle php://stdin'i
açar ve daha sonra kapatırsanız, yalnızca tanıtıcı kopyanızı kapatırsınız;
STDIN içindeki gerçek akım etkilenmez. Bu sarmalayıcıları kullanarak
akımları elle açmak yerine basitçe STDIN
,
STDOUT
ve STDERR
sabitlerini
kullanmanız önerilir.
php://stdin salt-okunur, php://stdout ve php://stderr ise salt-yazılırdır.
php://input, istek gövdesinden ham verileri okumanıza
izin veren salt okunur bir akımdır. enable_post_data_reading
seçeneği etkinse php://input akımı,
enctype="multipart/form-data"
ile kullanılamaz.
php://output, çıktı tamponuna print ve echo gibi yazmanıza izin veren salt-yazılır bir akımdır.
php://fd, verilen dosya tanıtıcısına doğrudan erişime izin verir. Örneğin php://fd/3, dosya tanıtıcı 3'ü ifade eder.
php://memory ve php://temp, geçici verilerin dosya benzeri bir sarmalayıcıda depolanmasına izin veren okuma-yazma akımlarıdır. İkisi arasındaki tek fark, php://memory akımının verilerini her zaman bellekte depolamasıdır, oysa php://temp, bellekte depolanan veri miktarı önceden tanımlanmış bir sınıra ulaştığında (öntanımlı değer 2 MB'dir) geçici bir dosya kullanır. Bu geçici dosyanın konumu, sys_get_temp_dir() işlevindeki gibi belirlenir.
php://temp bellek sınırı,
/maxmemory:NN
eklenerek denetlenebilir, burada NN,
bayt cinsinden, geçici bir dosya kullanmadan önce bellekte saklanacak
azami veri miktarıdır.
Bazı PHP eklentileri standart G/Ç akımı gerektirebilir ve belirli bir akımı standart G/Ç akımına dönüştürmeye çalışabilir. Bu dönüşüm C fopencookie() işlevini gerektirdiğinden bellek akımlarında başarısız olabilir. Bu C işlevi Windows'ta mevcut değildir.
php://filter, açılış anında süzgeçlerin bir akıma uygulanmasını sağlamak için tasarlanmış bir meta sarmalayıcı çeşididir. Bu, içerikler okunmadan önce akışa başka türlü süzgeç uygulama imkanının olmadığı yerlerde, readfile(), file() ve file_get_contents() gibi hepsi bir arada dosya işlevlerinde kullanışlıdır.
php://filter hedefi, yolunun bir parçası olarak aşağıdaki seçenekleri alır. Tek bir yolda birden çok süzgeç zinciri belirtilebilir. Lütfen bu seeneklerin kullanımıyla ilgili ayrıntılar için örneklere bakın.
Seçenek | Açıklama |
---|---|
resource=<süzülecek akım>
|
Bu seçenek gereklidir. Süzülecek akımı belirtir. |
read=<okuma zincirine uygulanacak süzgeç listesi>
|
Bu seçenek isteğe bağlıdır. Burada, süzgeçler arasına boru
(| ) karakteri konarak bir veya daha fazla
süzgeç belirtilebilir.
|
write=<yazma zincirine uygulanacak süzgeç listesi>
|
Bu seçenek isteğe bağlıdır. Burada, süzgeçler arasına boru
(| ) karakteri konarak bir veya daha fazla
süzgeç belirtilebilir.
|
<her iki zincire uygulanacak süzgeç listesi>
|
read= veya write= ile
öncelenmemiş süzgeç listeleri uygun olduğu takdirde okuma ve yazma
zincirlerinin ikisine de uygulanır.
|
Örnek 1 - php://temp/maxmemory
Bu isteğe bağlı seçenek, php://temp geçici bir dosya kullanmaya başlamadan önce bellek sınırının ayarlanmasına izin verir.
<?php
// Sınırı 5 MB yapalım.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, "hello\n");
// Yazdığımızı oku.
rewind($fp);
echo stream_get_contents($fp);
?>
Örnek 2 - php://filter/resource=<süzülecek akım>
Bu seçenek php://filter belirtiminizin sonunda bulunmalı ve süzülmesini istediğiniz akımı göstermelidir.T
<?php
/* Aslında hiçbir süzgeç belirtilmediğinden
readfile("http://www.example.com");
ile eşdeğerdir */
readfile("php://filter/resource=http://www.example.com");
?>
Örnek 3 - php://filter/read=<okuma zincirine uygulanacak süzgeç listesi>
Bu seçenek, boru karakteri | ile ayrılmış bir veya daha fazla dosya adı alır.
<?php
/* www.example.com içeriğini tamamen büyük harflerle çıktılar. */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");
/* Ayrıca ROT13 kodlaması dışında yukarıdaki ile aynı*/
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>
Örnek 4 - php://filter/write=<yazma zincirine uygulanacak süzgeç listesi>
Bu seçenek, boru karakteri | ile ayrılmış bir veya daha fazla dosya adı alır.
<?php
/* rot13 süzgeci üzerinden "Hello World" dizesini süzer ve
çıktıyı geçerli dizindeki example.txt dosyasına yazar */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>
Örnek 5 - php://memory ve php://temp yeniden kullanılamaz
php://memory ve php://temp yeniden kullanılamaz, yani akımlar kapatıldıktan sonra bunlara tekrar başvurmanın bir yolu yoktur.
file_put_contents('php://memory', 'PHP');
echo file_get_contents('php://memory'); // hiçbir şey basmaz