ConFoo 2025

php://

php://Çeşitli G/Ç akımlarına erişim

Açıklama

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://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

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

php://output, çıktı tamponuna print ve echo gibi yazmanıza izin veren salt-yazılır bir akımdır.

php://fd

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

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.

Dikkat

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

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.

php://filter seçenekleri
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.

Seçenekler

Sarmalayıcı Özeti (php://filter için, süzülen sarmalayıcı özetine bakın)
Özellik Destek
allow_url_fopen ile sınırlı Hayır
allow_url_include ile sınırlı Sadece php://input, php://stdin, php://memory ve php://temp için.
Okuma izni Sadece php://stdin, php://input, php://fd, php://memory ve php://temp için.
Yazma izni Sadece php://stdout, php://stderr, php://output, php://fd, php://memory ve php://temp için.
Ekleme izni Sadece php://stdout, php://stderr, php://output, php://fd, php://memory ve php://temp için. (Yazmaya eşdeğer)
Aynı anda okuma ve yazma izni Sadece php://fd, php://memory ve php://temp için.
stat() desteği Hayır. Ancak, php://memory ve php://temp akımları fstat() işlevini destekler.
unlink() desteği Hayır
rename() desteği Hayır
mkdir() desteği Hayır
rmdir() desteği Hayır
stream_select() desteği Sadece php://stdin, php://stdout, php://stderr, php://fd ve php://temp için.

Örnekler

Ö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.

<?php
file_put_contents
('php://memory', 'PHP');
echo
file_get_contents('php://memory'); // hiçbir şey basmaz
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top