fgets () и fread () - в чем разница? - PullRequest
31 голосов
/ 02 мая 2010

Я понимаю разницу между fgets() и fgetss(), но я не понимаю разницу между fgets() и fread(), кто-то может уточнить этот вопрос? Какой из них быстрее? Спасибо!

Ответы [ 3 ]

49 голосов
/ 02 мая 2010

fgets читает строку - т.е. она остановится на новой строке.

fread читает необработанные данные - он остановится после указанного (или по умолчанию) количества байтов, независимо любой новой строки, которая может или не может присутствовать.


Скорость не является причиной для использования одной над другой, так как эти две функции просто не делают одно и то же:

  • Если вы хотите прочитать строку из текстового файла, используйте fgets
  • Если вы хотите прочитать некоторые данные (необязательно строку) из файла, используйте fread.
1 голос
/ 28 октября 2015

fread () для двоичных данных и fread имеет ограничение на количество символов, которые вы можете прочитать

$source_file = fopen( $filename, "r" ) or die("Couldn't open $filename");
while (!feof($source_file)) {
    $buffer = fread($source_file, 5);  
   var_dump($buffer); //return string with length 5 chars!
}

Число 5 - длина прочитанных байтов.

0 голосов
/ 25 сентября 2016

Функция fgets читает одну строку из текстового файла. Он читает так долго, пока не будет достигнут конец текущей строки (или конец файла). Поэтому, если вы хотите прочитать одну строку из текстового файла, вы должны использовать fgets. Функция fread читает не только до конца строки, но и до конца файла [например, fread ($ handle)] или столько байтов, сколько указано в параметре [например, fread ($ handle, 1024)]. Поэтому, если вы хотите прочитать полный файл, независимо от того, является ли он текстовым файлом, содержащим все строки или произвольные необработанные данные из файла, вы должны использовать fread.

...