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).
(PHP 4, PHP 5, PHP 7, PHP 8)
file — Lee el fichero y devuelve el resultado en un array
Lee el fichero y devuelve el resultado en un array.
Nota:
Puede utilizarse la función file_get_contents() para devolver el contenido de un fichero en un string.
filename
Ruta de acceso al fichero.
Puede utilizar una URL como nombre de archivo con esta función, si el gestor fopen ha sido activado. Véase fopen() para más detalles sobre cómo especificar el nombre del archivo. Consulte Protocolos y Envolturas soportados para más información sobre las capacidades de los diferentes gestores, las notas sobre su uso, así como la información sobre las variables predefinidas que proporcionan.
flags
El argumento opcional flags
puede ser
una o más de las siguientes constantes:
FILE_USE_INCLUDE_PATH
FILE_IGNORE_NEW_LINES
FILE_SKIP_EMPTY_LINES
FILE_NO_DEFAULT_CONTEXT
context
Nota: Un resource de contexto de flujo.
Devuelve el fichero en un array.
Cada elemento del array corresponde a una línea del fichero,
y los retornos de carro se colocan al final de la línea. Si ocurre un error,
file() devolverá false
.
Nota:
Cada línea del array resultante incluirá un final de línea, a menos que se utilice
FILE_IGNORE_NEW_LINES
.
Nota: Si PHP no reconoce correctamente los finales de línea al leer archivos que han sido creados o leídos en un Macintosh, la activación de la opción de configuración auto_detect_line_endings puede resolver el problema.
A partir de PHP 8.3.0, se lanza una excepción ValueError
si el flags
contiene valores inválidos,
como FILE_APPEND
.
Emite un error de nivel E_WARNING
si el fichero
no existe.
Versión | Descripción |
---|---|
8.3.0 |
Se lanza una excepción ValueError para
cualquier valor inválido del flags .
|
Ejemplo #1 Ejemplo con file()
<?php
// Lee una página web en un array.
$lines = file('http://www.example.com/');
// Muestra todas las líneas del array como código HTML, con los números de línea
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
// Uso de flag
$trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>
Cuando SSL es utilizado, el servidor IIS de Microsoft violará el protocolo al cerrar la conexión sin
enviar un indicador close_notify
. PHP lo reportará como "SSL: Fatal Protocol Error"
cuando se llegue al final de los datos. Para evitar esto, el nivel de la directiva
error_reporting debe ser bajado para no incluir los avisos.
PHP puede detectar automáticamente los servidores IIS defectuosos al abrir
el flujo utilizando https://
y suprimirá el aviso.
Al utilizar fsockopen() para crear un socket ssl://
,
es responsabilidad del desarrollador detectar y suprimir el aviso.
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).
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
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...
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
^
My experience is that the function file does uses the cached content if the file has changed....
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.
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);