/php//

Från Wiki.linux.se
Version från den 1 september 2024 kl. 04.45 av Admin (diskussion | bidrag)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

php:// — Åtkomst till olika I/O-strömmar

Beskrivning

PHP erbjuder ett antal olika I/O-strömmar som tillåter åtkomst till PHP:s egna in- och utgångsströmmar, standard in-, ut- och fel-fildeskriptorer, minnes- och diskbaserade tillfälliga filströmmar samt filter som kan manipulera andra filresurser när de läses eller skrivs.

php://stdin, php://stdout och php://stderr

php://stdin, php://stdout och php://stderr tillåter direkt åtkomst till motsvarande in- eller utgångsström för PHP-processen. Strömmen refererar till en duplicerad fildeskriptor, så om du öppnar php://stdin och senare stänger den, stänger du endast din kopia av deskriptorn – själva strömmen som refereras av STDIN påverkas inte. Det rekommenderas att du istället använder konstanterna STDIN, STDOUT och STDERR istället för att manuellt öppna strömmar med dessa omslag.

php://stdin är skrivskyddad, medan php://stdout och php://stderr är skrivbara.

php://input

php://input är en skrivskyddad ström som tillåter dig att läsa rådata från begärans kropp. php://input är inte tillgänglig i POST-begäranden med enctype="multipart/form-data" om alternativet enable_post_data_reading är aktiverat.

php://output

php://output är en skrivbar ström som tillåter dig att skriva till utmatningsbuffertmekanismen på samma sätt som print och echo.

php://fd

php://fd tillåter direkt åtkomst till den angivna fildeskriptorn. Till exempel refererar php://fd/3 till fildeskriptorn 3.

php://memory och php://temp

php://memory och php://temp är skrivbara strömmar som tillåter temporär data att lagras i ett fil-liknande omslag. En skillnad mellan de två är att php://memory alltid lagrar sin data i minnet, medan php://temp kommer att använda en temporär fil när mängden lagrad data når en fördefinierad gräns (standard är 2 MB). Platsen för denna temporära fil bestäms på samma sätt som funktionen sys_get_temp_dir().

Minnesgränsen för php://temp kan styras genom att lägga till /maxmemory:NN, där NN är den maximala mängden data som ska hållas i minnet innan en temporär fil används, i byte.

Varning: Vissa PHP-tillägg kan kräva en standard IO-ström och kan försöka kasta en given ström till en standard IO-ström. Denna kastning kan misslyckas för minnesströmmar eftersom den kräver att C-funktionen fopencookie() är tillgänglig. Denna C-funktion är inte tillgänglig på Windows.

php://filter

php://filter är ett slags meta-omslag som är utformat för att tillåta tillämpning av filter på en ström vid öppning. Detta är användbart med all-in-one-filfunktioner som readfile(), file() och file_get_contents() där det annars inte finns någon möjlighet att tillämpa ett filter på strömmen innan innehållet läses.

php://filter-målet tar följande parametrar som en del av sin sökväg. Flera filterkedjor kan specificeras på en sökväg. Se exemplen för specifika användningar av dessa parametrar.

php://filter parametrar

Namn Beskrivning
resource=<stream to be filtered> Denna parameter är obligatorisk. Den specificerar strömmen som du vill filtrera.
read=<filter list to apply to read chain> ).
write=<filter list to apply to write chain> ).
<filter list to apply to both chains> Alla filterlistor som inte är föregångna av read= eller write= kommer att tillämpas på både läs- och skrivkedjorna som är lämpliga.

Alternativ

Omslagsöversikt (för php://filter, se sammanfattningen av omslaget som filtreras) Attribut Stöd
Begränsad av allow_url_fopen Nej
Begränsad av allow_url_include Endast php://input, php://stdin, php://memory och php://temp.
Tillåter läsning Endast php://stdin, php://input, php://fd, php://memory och php://temp.
Tillåter skrivning Endast php://stdout, php://stderr, php://output, php://fd, php://memory och php://temp.
Tillåter tillägg Endast php://stdout, php://stderr, php://output, php://fd, php://memory och php://temp. (Motsvarar skrivning)
Tillåter samtidig läsning och skrivning Endast php://fd, php://memory och php://temp.
Stödjer stat() Nej. Dock stödjer php://memory och php://temp fstat().
Stödjer unlink() Nej
Stödjer rename() Nej
Stödjer mkdir() Nej
Stödjer rmdir() Nej
Stödjer stream_select() Endast php://stdin, php://stdout, php://stderr, php://fd och php://temp.

Exempel

Exempel #1 php://temp/maxmemory

Denna valfria parameter tillåter att minnesgränsen ställs in innan php://temp börjar använda en temporär fil.

<?php
// Ställ in gränsen till 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');

fputs($fp, "hello\n");

// Läs vad vi har skrivit.
rewind($fp);
echo stream_get_contents($fp);
?>

Exempel #2 php://filter/resource=<stream to be filtered>

Denna parameter måste vara placerad i slutet av din php://filter-specifikation och ska peka på den ström som du vill filtrera.

<?php
/* Detta motsvarar helt enkelt:
  readfile("http://www.example.com");
  eftersom inga filter faktiskt anges */

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

Exempel #3 php://filter/read=<filter list to apply to read chain>

Denna parameter tar ett eller flera filternamn separerade av pipe-tecknet |.

<?php
/* Detta kommer att skriva ut innehållet på
  www.example.com helt i versaler */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");

/* Detta kommer att göra samma sak som ovan
  men kommer också att ROT13-koda det */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>

Exempel #4 php://filter/write=<filter list to apply to write chain>

Denna parameter tar ett eller flera filternamn separerade av pipe-tecknet |.

<?php
/* Detta kommer att filtrera strängen "Hello World"
  genom ROT13-filtret och sedan skriva till
  example.txt i den nuvarande katalogen */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>

Exempel #5 php://memory och php://temp är inte återanvändbara

php://memory och php://temp är inte återanvändbara, det vill säga efter att strömmarna har stängts finns det inget sätt att hänvisa till dem igen.

<?php
file_put_contents('php://memory', 'PHP');
echo file_get_contents('php://memory'); // skriver ut inget
?>

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/wrappers.http.php
PHP
Språkreferens
Stödda Protokoll och Inslagningar


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webserver.