PHP

Интересует ответ касательно этой темы. Щас будет идти разговор про fopen

Если на серваке лежит файл 1 gb, и я его подключаю к странице. fopen открывает файл сначала перед записью fwrite?

Мне надо чтоб не считывался файл сразу, а только в момент записи. fwrite
Я знаю есть замена этому file_put_contents, и он как раз записывает в файл, не открывая его

fopen('log.txt', 'r') Например он весит 500 мб, и мне нужно вывести на страницу 100 последних записей, ну или 100 первых записей. fopen сначала считывает сразу весь файл? и как убрать это чтение, перебросив каретку, типо читай отсюда, но не грузи его сразу весь
Миша Кочемаев
Миша Кочемаев
4 516
fopen просто открывает файл и всё, а что дальше с ним будешь делать - зависит уже от тебя. Самостоятельно fopen ничего не читает и не записывает.

Но фишка в том, что ты не сможешь из текстового файла прочитать 100 последних записей, не прочитав перед этим весь файл, т. к. строки текста не имеют фиксированного размера, ты не сможешь "вслепую" определить, где начинается новая строка, не сможешь математически посчитать нужное смещение (разве что использовать ещё один файл в качестве индекса, хранить там смещения каждой строки, но проще тогда уж использовать любую СУБД, они это хорошо умеют делать из коробки). Хотя можешь, конечно, читать из файла задом наперёд и остановиться, когда насчитаешь 100 символов новой строки, но это черезжопие)
Zhomart & Sandugash
Zhomart & Sandugash
67 680
Лучший ответ
Миша Кочемаев но всё равно ведь я должен прочитать весь файл перед тем как прочитать 100 строк . Или не так?
fseek -- Устанавливает смещение в файловом указателе

int fseek ( resource handle, int offset [, int whence] )

Устанавливает смещение в файле, на который ссылается handle . Новое смещение, измеряемое в байтах от начала файла, получается путём прибавления параметра offset к позиции, указанной в параметре whence, значения которого определяются следующим образом:

SEEK_SET - Устанавливает смещение в offset байт.
SEEK_CUR - Устанавливает смещение в текущее плюс offset .
SEEK_END - Устанавливает смещение в размер файла плюс offset . (Чтобы перейти к смещению перед концом файла, вы должны передать отрицательное значение в параметр offset .)

Если whence не указан, по умолчанию он устанавливается в SEEK_SET.
Вадим Арцых
Вадим Арцых
95 741
Миша Кочемаев но это python, а тут php. у php нет whence.

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