@Davidaa_WoW

Как решить проблему с fgets(), который возвращает false?

Есть большой текстовый файл. Нужно прочитать его при помощи php. Стандартно циклом
while (!feof($text)) {
                $line = fgets($text);
        }

Однако, в файле были нулевые ASCII символы, из-за которых fgets возвращает false и происходит выход из цикла, хотя до завершения файла ещё далеко.
Нулевые символы удаляю при помощи:
shell_exec("tr < file -d '\000' > file2");
Пробовал ещё выполнять различные манипуляции с iconv, применяя ASCII//IGNORE
Визуально, всё хорошо, никаких нулевых символов не видно. Однако fgets продолжает на том месте возвращать false.
Как исправить эту ошибку?
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 2
Daemon23RUS
@Daemon23RUS
$text=fopen("data.txt", "rb");- флаг b возможно поможет.

P.S.
из-за которых fgets возвращает false
а разве не !feof($text) у Вас в приведенном коде за это отвечает ?
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
do {
    $line = fgets($text);
} while ($line !== false);

как вариант, пример из мануала https://www.php.net/manual/ru/function.fgets#refse...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы