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
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
readfile("php://filter/read=string.toupper/resource=http://www.example.com");
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
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');