Forum und email

Vstupné/Výstupné prúdy PHP

PHP 3.0.13 a vyššie, php://output a php://input počínajúc PHP 4.3.0, php://filter počínajúc PHP 5.0.0

  • php://stdin
  • php://stdout
  • php://stderr
  • php://output
  • php://input
  • php://filter

php://stdin, php://stdout a php://stderr umožňujú prístup k zodpovedajúcemu vstupnému alebo výstupnému prúdu PHP procesu.

php://output umožňuje zápis do výstupného mechanizmu zásobníka rovnakým spôsobom ako print() a echo().

php://input umožňuje čítanie prvotných POST dát. Je to menej pamäť zaťažujúca alternatíva než $HTTP_RAW_POST_DATA a nepotrebuje žiadne špeciálne php.ini direktívy.

php://stdin a php://input sú iba na čítanie, zatiaľčo php://stdout, php://stderr a php://output sú iba na zápis.

php://filter je druh meta-wrappera dizajnovaný na pripustenie aplikácii filtrov do prúdu v čase otvárania. Je to užitočné u všetkých súborových funkcií readfile(), file() a file_get_contents(), kde inak nie je žiadna možnosť aplikovať filter do prúdu pred prečítaním obsahu.

Cieľ php://filter má následuúce 'parametre' ako časti svojej 'cesty'.

  • /resource=<prúd na filtrovanie> (požadovaný) Tento paramter musí byť umiestnený na konci vášej php://filter špecifikácie a mal by ukazovať na prúd, ktorý chcete filtrovať.

    <?php
    /* Toto je ekvivalentne jednoduchemu:
       readfile("https://www.example.com");
       pretoze filtre nie su urcene */

    readfile("php://filter/resource=https://www.example.com");
    ?>

  • /read=<zoznam filtra na umožnenie čítania reťaze> (voliteľný) Tento parameter má jeden alebo viac názvov oddelených znakom potrubia |.

    <?php
    /* Vystupom tohto bude obsah 
       www.example.com celý v uppercase */
    readfile("php://filter/read=string.toupper/resource=https://www.example.com");

    /* Toto urobi to iste ako hore,
       ale tiez ho ROT13 zakoduje */
    readfile("php://filter/read=string.toupper|string.rot13/resource=https://www.example.com");
    ?>

  • /write=<zoznam filtra na umožnenie zápisu reťaze> (voliteľný) Tento parameter má jeden alebo viac názvov oddelených znakom potrubia |.

    <?php
    /* Toto vyfiltruje retazec "Hello World"
       cez rot13 filter, potom zapise do
       example.txt v aktualnom adresari */
    file_set_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
    ?>

  • /<zoznam filtra na umožnenie oboch reťazí> (voliteľný) Všetky zoznamy filtra, ktoré nie sú určené cez read= alebo write= budú aplikované do oboch reťazí čítania a zápisu (ako pridelené).

Zhrnutie Wrappera (Pre php://filter si pozrite zhrnutie filtrovaného wrappera.)
Attribút Podporovaný
Obmedzený cez allow_url_fopen. Nie
Umožňuje čítanie Iba php://stdin a php://input.
Umožnuje Zápis Iba php://stdout, php://stderr a php://output.
Umožňuje Pridávanie Iba php://stdout, php://stderr a php://output. (Ekvivalentné so zapisom)
Umožňuje Súbežné Čítanie a Zápis Nie. Tieto wrappery nie sú smerové.
Podporuje stat() Nie
Podporuje unlink() Nie
Podporuje rename() Nie
Podporuje mkdir() Nie
Podporuje rmdir() Nie