fgets () и fread () - в чем разница?

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

3 ответов


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

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


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

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

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-байты длины были прочитаны .


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