PHP: Указать "место" для записи в файл

numer482
На сайте с 06.07.2011
Offline
44
3520

Здравствуйте!

Можно ли как то указать место где будет производиться запись в файле? Или замена одного "куска текста" на другой?

То есть:

- Указать ряд

- Или, возможно, при помощи регулярных выражений

:confused:

DiAksID
На сайте с 02.08.2008
Offline
218
#1

в чём вопрос?

1. то что надо записать видимо уже в строке

2. читаем файл в другую строку

3. делаем с этими строками то что и так как хотим

4. результат пишем в файл

проще процесс придумать сложно...

show must go on !!!...
DV
На сайте с 01.05.2010
Offline
644
#2

Буквально писать в произвольное место файла невозможно. Можно дописывать в конец, либо переписывать, создав заново. В любом языке. Если я правильно понял суть вопроса.

Писать в произвольное знакоместо позволяют только БД.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
numer482
На сайте с 06.07.2011
Offline
44
#3
DiAksID:
в чём вопрос?

1. то что надо записать видимо уже в строке
2. читаем файл в другую строку
3. делаем с этими строками то что и так как хотим
4. результат пишем в файл

проще процесс придумать сложно...

Спасибо! Сам не додумался:)

bsyomov
На сайте с 25.01.2012
Offline
31
#4
DenisVS:
Буквально писать в произвольное место файла невозможно. Можно дописывать в конец, либо переписывать, создав заново. В любом языке. Если я правильно понял суть вопроса.
Писать в произвольное знакоместо позволяют только БД.

С какого такого перепугу-то? Вполне возможно.

file(), file_get_conetents() и file_put_contents() отнюдь не единственные функции для работы с файлами на php.

В том же php, например, используя fopen(), fseek(), fwrite() можно писать по произвольному смещению в файл. Только вот смещение надо будет считать самостоятельно - файл в этом случае представляется не как набор строк или символов, а как набор байтов.

В общем стоит почитать http://www.php.net/manual/en/ref.filesystem.php

1. то что надо записать видимо уже в строке
2. читаем файл в другую строку
3. делаем с этими строками то что и так как хотим
4. результат пишем в файл

проще процесс придумать сложно...

Этот подход хорошо работает тогда, когда файл относительно небольшой, иначе это очень расточительно, и простота может выйти боком.

DiAksID
На сайте с 02.08.2008
Offline
218
#5
bsyomov:
С какого такого перепугу-то? Вполне возможно.

file(), file_get_conetents() и file_put_contents() отнюдь не единственные функции для работы с файлами на php.
В том же php, например, используя fopen(), fseek(), fwrite() можно писать по произвольному смещению в файл. Только вот смещение надо будет считать самостоятельно - файл в этом случае

и? тогда процесс "вставить что то в середину файл" будет типа такого:

0. открыть поток fopen-ом

1. прочитать fread-ом в строку n байт начиная с начала файла

2. сдвинуться fseek-ом на k байт

3. прочитать fread-ом в строку всё до конца файла

5. поизвращаться со строками - получить строку-результат

4. сбросить rewind-ом позицию на начало

6. записать fwrite-ом из строки-результата новое содержимое файла

7. закрыть поток fclose-ом

в чём особый выигрыш? что не пишем в память старый вариант того, что меняем? это да, но обычно это доли процента от общего объёма.

если бы fwrite умел вставлять данные, а не тупо переписывать байт в байт эти игры имели бы смысл. а так - одно и то же как в самом простом варианте по сути...

bsyomov
На сайте с 25.01.2012
Offline
31
#6

Вопрос как звучал?

Можно ли как то указать место где будет производиться запись в файле? Или замена одного "куска текста" на другой?

И вторая цитата:


Буквально писать в произвольное место файла невозможно. Можно дописывать в конец, либо переписывать, создав заново. В любом языке. Если я правильно понял суть вопроса.
Писать в произвольное знакоместо позволяют только БД.

На которую я и ответил.

Вы же вообще говорите про вставку фрагмента, а не его перезапись.

По поводу же вашего алгоритма - он совершенно не оптимален по тому же расходу памяти, как и тот, что вы описали постом выше.

Что вы будете делать, если размер файла больше размера памяти, которую может использовать скрипт? А это вполне решаемо, если правильно всё сделать.

n0name
На сайте с 22.12.2006
Offline
54
#7

bsyomov, увы, но это не так. Писать в произвольное место файла нельзя.

Почитайте примечания к функции fseek.

DiAksID это и пытался объяснить.

Сервис сравнения цена на VPS (http://vpska.com/)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий