Fopen или file_get_contents, что сэкономит оперативку?

Структура самая обычная:
url1::Название1::какие-то_данные::какие-то_данные::какие-то_данные
url2::Название2::какие-то_данные::какие-то_данные::какие-то_данные
..
urlN::НазваниеN::какие-то_данные::какие-то_данные::какие-то_данные

10 000 подобных строк ~ 7Мб

Как я думаю, нужно сделать доп. файл, где будет хранится
url1=1
url2=124
...
urlN=M

Где 1, 124, M- начало строки данного url

Сначала считываем этот файл с "оглавлением". Затем из второго читаем лишь кусочек текста.
Решение напрашиваллось само по себе.
Но с файлами не все так гладко, особенно если идет одновременная запись.
 
Не все так гладко, согласен. Ну блокировку файла еще никто не отменял при записи.
Просто надеялся обойтись без второго файла, т.к. это костыли, или норм?
 
Не все так гладко, согласен. Ну блокировку файла еще никто не отменял при записи.
Просто надеялся обойтись без второго файла, т.к. это костыли, или норм?
У вас задача была сэкономить память.
 
Тем не менее, не везде она есть, не везде предусмотрена по умолчанию. На ВДС как минимум ее включать надо. Как-то заморачивался, получилось не с первого раза, так что отношение к ней не самое хорошее. С текстовыми файлами куда проще. И прошу, не надо меня посылать больше к СУБД.
Я прошу, что тут лучше выбрать из моих вариантов.

sqlite загружается в память 1 раз и неважно сколько пользователей зайдет.
sqlite это стандартный модуль php, если его нету на вашем хостинге\vps, то это повод задуматься о смене такового.

Если вас не устраивает sqlite, то используйте варианты, которые я вам написал в сообщении выше.
 
Мне надо, чтобы 20 зашедших в одно время человек не повесили VDS с 256 Мб оперативки, загрузив каждый файл на 10Мб.

Через fopen открываете файл на чтение + запись. Делаете свои дела.
В скрипте так же сделайте рекурсивную проверку на возможность записи с таймаутом в несколько десятков милисекунд.

В результате алгоритм будет таким по пунктам:

  1. Проверяем возможна ли запись в файл. Если возможна, то идем в пункт 2. Если не возможна, то таймаут и идем в пункт 1.
  2. Открываем файл на запись+чтение (файл блокируется для других скриптов). Выполняем действия. Закрываем файл.

В результате, если кто-то пользуется файлом, то у текущего юзера сайт откроется чуть позжее, чем хотелось бы из-за таймаута (ожидания) пока файл не будет доступен для записи.
 
В своё время... в далёкие стародавние времена... когда люди ещё писали на PHP4... и MySQL был доступен только Богам...
Каждый решал похожую задачу как мог...
И в те, стародавние времена были смельчаки, которые бросали вызов самому Богу Техногену и пытались из пластилина сделать алюминий...
Вот и один из таких Героев начал Для просмотра ссылки Войди или Зарегистрируйся ... осмелившись бросить вызов самому Техногену.
Великий Техноген был намного сильнее этого беспечного Героя и поверг его в "Ничто" создав sqLite!
Быль это, али небыль... но факты на лице :)

З.Ы.
Лично моё мнение... используйте sqlite. он есть даже на самом хреновом хостинге.
Не изобретайте себе новый вид Геморроя.
 
Назад
Сверху