Välkommen till en handledning om hur man läser filer i PHP. Ja, det stämmer, hur svårt kan det vara att läsa filer i PHP? Du kommer att bli förvånad… Det är inte så enkelt som vissa kanske tror.
Det finns flera sätt att läsa filer i PHP:
Läs filen i en sträng
$contents = file_get_contents(“FIL”);
Läs filen till en array $array = file(“FILE”);
Använd cURL för att hämta en fil från en annan server. $curl = curl_init(“http://site.com/”); curl_setopt($curl, CURLOPT_RETTRANSFER, 1); $date = curl_exec($curl); curl_close($curl);
Öppna en filström och läs rad för rad. $stream = fopen(“FIL”, “r”); while(($line=fgets($handle))!==false) { echo $line; } Läs och avsluta direkt readfile(“FILE”);
Ladda upp en fil direkt i inkluderingsskriptet “FILE”; kräver “FILE”;
Det här är en snabb genomgång av vanliga metoder, men vi ska gå igenom några exempel i den här guiden.
1) LÄS FILEN I EN SÄNG
1-fil-till-sträng.php
Det är inte mycket raketvetenskap inblandat här, observera bara att file_get_contents() kan få innehållet i en fil eller en URL. Även om det här är enkelt, var försiktig så att du inte läser stora filer med detta… Du kommer att stöta på ett “tomt minne”-fel och eventuellt orsaka några problem på servern.
2) LÄS FILEN I EN ARRAY
2-file-to-array.php
php // (A) FIL TILL ARRAY $array = file('README.txt'); print_r($array); // (B) YTTERLIGARE ALTERNATIV - HOPPA över TOMMA RADER $array = file('README.txt', FILE_SKIP_EMPTY_LINES); print_r($array);
Det här är ännu en singel. Men istället för en vanlig sträng kommer file() att läsa en array, där varje element är en annan rad. Notera igen, försök inte läsa stora filer med detta.
3) KURLHÄMTA
3-curl.php
CURL står för “klient-URL” och i lekmannatermer “server-till-server-anrop”. Några av er kanske tänker – vad fan, är inte detta ett omvägande sätt att göra file_get_contents()? Tja, nej. CURL erbjuder faktiskt många alternativ och kontroller – Du kan till och med hämta filer från en FTP-server.
4) LÄS FILEN RAD FÖR RAD
4 rad för rad.php
php // (A) ÖPPNA FIL $handle = fopen("README.txt", "r") eller die("Fel vid läsning av filen!"); // (B) READ LINE BY LINE while (($line = fgets($handle)) !== false) { // För att bättre hantera minnet kan du också ange hur många byte som ska läsas samtidigt // while (( $line = fgets($handle, 4096)) !== false) { echo $line; } // (C) STÄNG FILEN fclose($handle);
Alla tre metoderna ovan stöter på ett minnesproblem när man hanterar stora filer. Så för att hantera det problemet kan vi använda fgets() och läsa rad för rad istället.
5) FIL STRÖM
5-file-stream.php
php // (A) STARTA OUTPUT BUFFEREN ob_start(); // (B) HTTP-HEADERS FÖR ATT TÖJDA NEDLADDNING header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="README.txt"'); header('Upphör: 0'); header('Cache-Control: must-revalidate'); header('Pragma: offentlig'); header('Content-Length: '.filesize('README.txt')); // (C) AVSLUTA ALLA HEADERS OCH SLUTA BUFFERING ob_end_flush(); // (D) LÄS OCH SKRIV UT FILEN DIREKT readfile('README.txt'); utgång();
Denna nästa metod skiljer sig lite från resten. Istället för att läsa en fil i strängar och arrayer, matar den ut den direkt. Mycket användbart när du försöker tvinga en nedladdning eller överföra stora filer.
6) INKLUDERA y KRÄV
6-include-require.php
Projekt