file

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

fileLiest eine komplette Datei in ein Array

Beschreibung

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

Liest eine komplette Datei in ein Array.

Hinweis:

Sie können file_get_contents() benutzen, um den Inhalt einer Datei als String zurückgegeben zu bekommen.

Parameter-Liste

filename

Der Pfad zur Datei.

Tipp

Wenn fopen wrappers aktiviert ist, kann mit dieser Funktion eine URL als Dateiname verwendet werden. Mehr Details dazu, wie der Dateiname angeben werden muss, sind bei fopen() zu finden. Eine Liste der unterstützten URL-Protokolle, die Fähigkeiten der verschiedenen Wrapper, Hinweise zu deren Verwendung und Informationen zu den eventuell vorhandenen vordefinierten Variablen sind unter Unterstützte Protokolle und Wrapper zu finden.

flags

Der optionale Parameter flags kann aus einer oder mehreren der folgenden Konstanten bestehen:

FILE_USE_INCLUDE_PATH
Suche nach der Datei im include_path
FILE_IGNORE_NEW_LINES
Entferne den Zeilenumbruch am Ende jedes Array-Elements
FILE_SKIP_EMPTY_LINES
Überspringe leere Zeilen
FILE_NO_DEFAULT_CONTEXT
Verwende nicht den Standardkontext

context

Eine Stream-Kontext-Ressource.

Rückgabewerte

Gibt die Datei in einem Array zurück. Jedes Element des Arrays entspricht einer Zeile in der Datei, ohne dass der Zeilenumbruch entfernt wird. Im Fehlerfall gibt file() false zurück.

Hinweis:

Jede Zeile im resultierenden Array enthält den Zeilenumbruch, außer es wird FILE_IGNORE_NEW_LINES verwendet.

Hinweis: Wenn PHP Zeilenendezeichen nicht richtig erkennt, entweder beim Lesen von Dateien auf einem Macintosh oder bei Dateien, die auf einem Macintosh erstellt wurden, kann die Option auto_detect_line_endings aktiviert werden.

Fehler/Exceptions

Erzeugt einen Fehler der Stufe E_WARNING, wenn die Datei nicht existiert.

Beispiele

Beispiel #1 file()-Beispiel

<?php
// Liest eine Datei in ein Array. Hier gehen wir über HTTP, um den
// HTML-Quelltext einer URL zu bekommen
$lines = file('http://www.example.com/');

// Durchgehen des Arrays und Anzeigen des HTML-Quelltexts inkl. Zeilennummern
foreach ($lines as $line_num => $line) {
echo
"Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

// Benutzung des optionalen Parameters flags
$trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>

Anmerkungen

Warnung

Bei SSL-Verbindungen zusammen mit Microsoft IIS hält sich dieser Webserver nicht an das Protokoll und schließt die Verbindung ohne ein close_notify zu senden. PHP quittiert dieses Fehlverhalten mit "SSL: Fatal Protocol Error", wenn das Ende der Daten erreicht ist. Eine mögliche Lösung besteht darin, den Level von error_reporting herabzusetzten und Warnings auszuschließen. PHP kann fehlerhafte IIS-Serversoftware erkennen, wenn Sie einen Stream mit dem https://-Wrapper öffnen, und unterdrückt die Warnung für Sie. Falls Sie fsockopen() benutzen, um einen ssl://-Socket zu öffnen, müssen Sie selbst dafür Sorge tragen, die Warnung zu erkennen und diese zu unterdrücken.

Siehe auch

add a note

User Contributed Notes 7 notes

up
32
Martin K.
10 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
22
bingo at dingo dot com
11 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
15
d basin
15 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
13 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
0
radler63 at hotmail dot com
6 years ago
My experience is that the function file does uses the cached content if the file has changed....
up
-2
renanlazarotto at gmail dot com
3 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
-5
sheldon at hyperlinked dot com
5 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);
To Top