1.2.621. Joining file()

Use file() to read lines separately.

Applying join('', ) or implode('', ) to the result of file() provides the same results than using file_get_contents(), but at a higher cost of memory and processing.

If the delimiter is not '', then implode() and file() are a better solution than file_get_contents() and str_replace() or nl2br().

Always use file_get_contents() to get the content of a file as a string. Consider using readfile() to echo the content directly to the output.

This analysis also checks for the reverse feature: loading a file with file_get_contents() and splitting it into rows with explode() or an alternative. Such association should be replaced by a single call to file(), with may be the FILE_IGNORE_NEW_LINES.

<?php

// memory intensive
$content = file_get_contents('path/to/file.txt');

// memory and CPU intensive
$content = join('', file('path/to/file.txt'));

// Consider reading the data line by line and processing it along the way,
// to save memory
$fp = fopen('path/to/file.txt', 'r');
while($line = fget($fp)) {
    // process a line
}
fclose($fp);

// Reverse feature
$file = file_get_contents('/path/to/file.txt');
$rows = explode(PHP_EOL, $file);

?>

See also file_get_contents, file and explode.

1.2.621.1. Suggestions

  • Use file_get_contents() instead of implode(file()) to read the whole file at once.

  • Use readfile() to echo the content to standard output stdout at once.

  • Use fopen() to read the lines one by one, generator style.

1.2.621.2. Specs

Short name

Performances/JoinFile

Rulesets

All, Performances

Exakat since

0.8.4

PHP Version

All

Severity

Minor

Time To Fix

Quick (30 mins)

Precision

High

Features

csv

Examples

WordPress, SPIP

Available in

Entreprise Edition, Exakat Cloud