Как правильно оптимизировать код работы со строками в файле?

Статус
В этой теме нельзя размещать новые ответы.

viv

Новичок
Всем привет)

Подскажите пожалуйста, как можно оптимизировать этот код: PHP:
PHP:
<?php
 $file_array = file("links.txt");
 $max_colichestvo = count($file_array);
 $sluchainiy_link = rand(0, $max_colichestvo);
 print $file_array[$sluchainiy_link];
 ?>

Говорят я им положил сайт.

Его назначение, это выводить на сайте каждый раз при перезагрузке страницы, другую ссылку. Ссылок в файле более 8000.

Я думаю, что система грузиться массивом из 8000 элементов. Наверное нужно как то просто подсчитать соличество строк в файле, затем, рандомно выбрать строку и открыть файл и вытащить только эту строчку.
Но что то не пойму, ведь все равно придется использовать функцию file() и получается опять массив создается из 8000.

Что то я подзапутался, можете помочь направлением? :)
 

Ярослав

Новичок
viv
А если к примеру использовать рандомный fseek.
Найти возврат каретки $position.
Вывести все символы от $position до конца строки (опять ищем возврат каретки)

100% будет быстрее чем читать такой массив
 

Фанат

oncle terrible
Команда форума
Первый код - это какой-то творение доктора Франкенштейна.
что оно делает?
и зачем?

Насколько я понимаю, тебе надо прочесть ОДНУ строчку.
Зачем там цикл?
 

Фанат

oncle terrible
Команда форума
при чем здесь пхп?
алгоритм в голове должен быть?

кто мешает сделать ОДИН fseek, прочитать ОДИН кусок файла, гарантированно вмещающий строку, вырезать её и показать?
почему рандом берется от количетсва строк, а не не от размера файла?
документацию на fseek тоже незнание php прочесть мешает?
 

aspire

Новичок
а если например вырезать из файла первую строку(и вывести где надо) и потом записывать ее в конец
 

Redjik

Джедай-мастер
а если например вырезать из файла первую строку(и вывести где надо) и потом записывать ее в конец
насколько я знаю поток можно обрезать только по колличеству байт...
+ для записи в конец все-равно весь поток придется считывать.
 

aspire

Новичок
насколько я знаю поток можно обрезать только по колличеству байт...
+ для записи в конец все-равно весь поток придется считывать.
что мешает 2 раза открыть файл? сперва прочитать первую строку и вырезать ее, а потом открыть во второй раз только с режимом открытия a+ и записать. Но канешно это все надо тестить, особенно при таких нагрузках. и это все равно будет лучше чем считывать файл в массив


я повторю совет других, если у вас такая посещаемость то для этого лучше использовать БД.
 

Redjik

Джедай-мастер
к фтп есть, а к бд нет?

Гопстайл:"а если поискать"
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху