PHP чтение файла, разница между file_get_contents, readfile, exec cat

Автор: Igor Kirsanov

На PHP прочитать данные из файла можно несколькими способами, разница между ними не всегда очевидна. Допустим есть файл readme.txt, прочитаем его:

1)
file_get_contents("readme.txt");
2)
readfile("readme.txt");
3)
exec("readme.txt");

 

Если измерить производительность то получим разницу в производительности только для вызова функции exec. За счет системного вызова медленнее встроенных решений примерно в 10 раз для одной операции.
 
У встроенных функци разница только в способе обработки данных.

file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до maxlen байт. В случае неудачи, file_get_contents() вернёт FALSE.

readfile -  Читает файл и записывает его в буфер вывода. Возвращает количество прочитанных из файла байт. В случае возникновения ошибки вернёт FALSE, и (если только функция не была вызвана как @readfile()) выведет сообщение об ошибке.

При простом чтении текстовых файлов - разницы нет, file_get_contents представит данные из файла в виде строки и они будут находиться в памяти.
readfile предварительно выведет в буфер вывода, но так как чаще всего присваивается значение какой-то переменной, то они тоже будут в памяти.

Разница в специфических задачах. Например, нужно прочитать файл не до конца, а только начало; получить данные по url, и т.п.

exec command  лучше использовать когда все уже написано на bash и переработка на php не рациональна.

Официальная документация
http://www.php.net/manual/ru/function.readfile.php
http://www.php.net/manual/ru/function.file-get-contents.php
http://www.php.net/manual/ru/function.exec.php