Есть два варианта поиска строки определенной. И получение соответственно ключа к нему.Формат ключ => URL. Обычно ищется по строке URL.
1.Строка такого вида для первого варианта. ключ === http://google.com .Получаем содержимое файла через file_get_contents().Потом через strpos получаем строку(ну позицию).Строку разделяем по explode ('===', $str).Получаю ключ по $str[0].
2.Строка вида массива и используются массивы.(key=>11) Массив помещен также как и в первом варианте в файл с помощью serialize().И потом unserialize( достаю с file_get_contents).Получится массив и с помощью array_search() достаю мой заветный ключ к URL.
Какой вариант лучше и почему?
И может свои варианты...
Как известно файловые системы - это неплохие базы данных, при правильном подходе... Предлагаю следующий вариант:
от url по которому будем искать получаем какой нибудь быстрый хэш. можно md5, можно функцией hash() например md4 (он вроде самый быстрый из встроенных в php).
От строки хеша в шестнадцетиричном виде (типа 8a64c7cb7a794bce2b727acc0362ee27) получаем первые символы и представляем их в таком виде /8/a/64.
Получаем file_get_contents файл по вычисленному пути, т.е. you-dir/8/a/64.dat
Разбираем файл как вы предложили, поиском в массиве. Ищем строку. Только строки я предлагаю хранить задом наперед. Т.е. сначала URL потом знак табуляции (\t) и ключ. И файл начинать пустой строкой, что бы первым символом шел перевод каретки. Тогда strpos ищем строку "\n$url\t" - таким образом мы исключим любые разночтения.
Почему так ? Много файлов в одном каталоге на диске будут сильно тормозить. 256 файлов или каталогов - это не много для чтения одного каталога. Поэтому делаем иерархическую структуру. Делать более 2-3х уровней вложенности - то же плохо, да и смысла не особо много. При данном подходе мы в дерево уложим наши url так, что наш 50Mб файл будет разбит в среднем на куски по 762 байта ...
Продвижение своими сайтами как стратегия роста и независимости