file

(PHP 4, PHP 5, PHP 7, PHP 8)

file β€” Π§ΠΈΡ‚Π°Π΅Ρ‚ содСрТимоС Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² массив

ОписаниС

function file(string $filename, int $flags = 0, ?resource $context = null): array|false

Ѐункция Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ содСрТимоС Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² массив.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Π€Π°ΠΉΠ» Π² Π²ΠΈΠ΄Π΅ строки Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция file_get_contents().

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

filename

ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ.

Подсказка

ВмСсто Π½Π°Π·Π²Π°Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ² функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ URL-адрСса, Ссли Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ fopen wrappers. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ названия Ρ„Π°ΠΉΠ»Π° рассказываСт описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fopen(). Π Π°Π·Π΄Π΅Π» Β«ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ ΠΈ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈΒ» Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‘Ρ‚ ссылки Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°Ρ…, содСрТит замСчания ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ список ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚.

flags

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ flags ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ константу ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ списка:

FILE_USE_INCLUDE_PATH
Π˜ΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² спискС ΠΏΡƒΡ‚Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ include_path.
FILE_IGNORE_NEW_LINES
ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ строку Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива.
FILE_SKIP_EMPTY_LINES
ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ пустыС строки.
FILE_NO_DEFAULT_CONTEXT
НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ контСкст ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
context
РСсурс (resource) контСкста ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π² Π²ΠΈΠ΄Π΅ массива. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива соотвСтствуСт строкС Ρ„Π°ΠΉΠ»Π°, с символами Π½ΠΎΠ²ΠΎΠΉ строки Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Ѐункция file() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

КаТдая строка Π² массивС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ символами ΠΊΠΎΠ½Ρ†Π° строки, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ„Π»Π°Π³ FILE_IGNORE_NEW_LINES).

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ auto_detect_line_endings Π²ΠΎ врСмя выполнСния ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ распознаваниС языком PHP ΠΊΠΎΠ½Ρ†ΠΎΠ² строк ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° Macintosh-совмСстимом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создали Π½Π° ΠœΠ°ΠΊΠΈΠ½Ρ‚ΠΎΡˆΠ΅.

Ошибки

Начиная с PHP 8.3.0 функция выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ flags содСрТит нСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ„Π»Π°Π³Π° FILE_APPEND.

Ѐункция Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ уровня E_WARNING, Ссли Ρ„Π°ΠΉΠ» Π½Π΅ сущСствуСт.

Бписок измСнСний

ВСрсия ОписаниС
8.3.0 Ѐункция выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ flags нСдопустимого Ρ„Π»Π°Π³Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ file()

<?php

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ содСрТимоС Ρ„Π°ΠΉΠ»Π° Π² Π²ΠΈΠ΄Π΅ массива. ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ
// ΠΏΠΎ HTTP-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ HTML-ΠΊΠΎΠ΄ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра
$lines = file('http://www.example.com/');

// ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ элСмСнты массива ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ содСрТимоС ΠΊΠ°ΠΊ HTML-ΠΊΠΎΠ΄ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ строк
foreach ($lines as $line_num => $line) {
echo
"Π‘Ρ‚Ρ€ΠΎΠΊΠ° #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

// ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ flags
$trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

?>

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с сСрвСром Microsoft IIS ΠΏΠΎ SSL-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сталкиваСтся с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ IIS-сСрвСр Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΡƒΡ‚Ρ‘ΠΌ закрытия соСдинСния Π±Π΅Π· ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° close_notify. PHP выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Π²ΠΈΠ΄Π΅ сообщСния Β«SSL: Fatal Protocol ErrorΒ» ΠΏΡ€ΠΈ достиТСнии ΠΊΠΎΠ½Ρ†Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ error_reporting ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ Π΄ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ уровня E_WARNING. PHP ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС IIS-сСрвСра ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ https://, ΠΈ подавляСт ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π—Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ прСдупрСТдСния ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fsockopen(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сокСт ssl://.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • file_get_contents() - Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ содСрТимоС Ρ„Π°ΠΉΠ»Π° Π² строку
  • readfile() - Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ»
  • fopen() - ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ URL-адрСс
  • fsockopen() - ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС с сокСтом ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚- ΠΈΠ»ΠΈ Unix-Π΄ΠΎΠΌΠ΅Π½Π°
  • popen() - ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ процСсса
  • include - include
  • stream_context_create() - Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ контСкст ΠΏΠΎΡ‚ΠΎΠΊΠ°
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 7 notes

up
39
Martin K. ΒΆ
11 years ago
If the file you are reading is in CSV format do not use file(), use fgetcsv().  file() will split the file by each newline that it finds, even newlines that appear within a field (i.e. within quotations).
up
26
bingo at dingo dot com ΒΆ
12 years ago
To write all the lines of the file in other words to read the file line by line you can write the code like this:
<?php
$names=file('name.txt');
// To check the number of lines 
echo count($names).'<br>';
foreach($names as $name)
{
   echo $name.'<br>';
}
?>

this example is so basic to understand how it's working. I hope it will help many beginners.

Regards,
Bingo
up
16
d basin ΒΆ
16 years ago
this may be obvious, but it took me a while to figure out what I was doing wrong. So I wanted to share. I have a file on my "c:\" drive. How do I file() it? 

Don't forget the backslash is special and you have to "escape" the backslash i.e. "\\":

<?php

$lines = file("C:\\Documents and Settings\\myfile.txt");

foreach($lines as $line)
{
    echo($line);
}

?> 

hope this helps...
up
9
twichi at web dot de ΒΆ
14 years ago
read from CSV data (file) into an array with named keys

... with or without 1st row = header (keys) 
(see 4th parameter of function call as  true / false) 

<?php 
// --------------------------------------------------------------

function csv_in_array($url,$delm=";",$encl="\"",$head=false) { 
    
    $csvxrow = file($url);   // ---- csv rows to array ----
    
    $csvxrow[0] = chop($csvxrow[0]); 
    $csvxrow[0] = str_replace($encl,'',$csvxrow[0]); 
    $keydata = explode($delm,$csvxrow[0]); 
    $keynumb = count($keydata); 
    
    if ($head === true) { 
    $anzdata = count($csvxrow); 
    $z=0; 
    for($x=1; $x<$anzdata; $x++) { 
        $csvxrow[$x] = chop($csvxrow[$x]); 
        $csvxrow[$x] = str_replace($encl,'',$csvxrow[$x]); 
        $csv_data[$x] = explode($delm,$csvxrow[$x]); 
        $i=0; 
        foreach($keydata as $key) { 
            $out[$z][$key] = $csv_data[$x][$i]; 
            $i++;
            }    
        $z++;
        }
    }
    else { 
        $i=0;
        foreach($csvxrow as $item) { 
            $item = chop($item); 
            $item = str_replace($encl,'',$item); 
            $csv_data = explode($delm,$item); 
            for ($y=0; $y<$keynumb; $y++) { 
               $out[$i][$y] = $csv_data[$y]; 
            }
        $i++;
        }
    }

return $out; 
}

// --------------------------------------------------------------

?>

fuction call with 4 parameters: 

(1) = the file with CSV data (url / string)
(2) = colum delimiter (e.g: ; or | or , ...)
(3) = values enclosed by (e.g: ' or " or ^ or ...)
(4) = with or without 1st row = head (true/false) 

<?php

// ----- call ------ 
$csvdata = csv_in_array( $yourcsvfile, ";", "\"", true ); 
// ----------------- 

// ----- view ------ 
echo "<pre>\r\n"; 
print_r($csvdata);
echo "</pre>\r\n"; 
// -----------------

?>

PS: also see: http://php.net/manual/de/function.fgetcsv.php to read CSV data into an array
... and other file-handling methods 

^
up
2
radler63 at hotmail dot com ΒΆ
7 years ago
My experience is that the function file does uses the cached content if the file has changed....
up
1
renanlazarotto at gmail dot com ΒΆ
5 years ago
Be aware that using file() to count lines can cause OOM on the server as it'll allocate all lines into an array.

If you're dealing with files that can have thousands of lines, SplFileObject might be a better idea and with little changes you can get the same result.
up
-1
sheldon at hyperlinked dot com ΒΆ
7 years ago
As of PHP 5.6 the file(), file_get_contents(), and fopen() functions will return false if you are referencing a source URL that doesn't have a valid SSL certificate. Presumably, you will run into this a lot in your development environments this will drive you crazy. 

You will need to create a stream context and provide it as an argument to the various file operations to tell it to ignore invalid SSL credentials. 

$args = array("ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false),"http"=>array('timeout' => 60, 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/3.0.0.1'));

$context = stream_context_create($args);
$httpfile = file($url, false, $context);