- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Смысл кода заключается в случайном выводе строк из файла в 2 местах. Код работает, но страшно грузит сервер=))
Первый вывод:
<?php $file_name = "1.txt";
$f = file($file_name);
$n = rand(0,count($f)-1);
$rstr1 = trim($f[$n]);
$exstr = explode('=', $rstr1);
echo "$rstr1"; /* 1 */
?>
второй:
<?php echo "$rstr1"; /* 1 */ ?>
может можно его как-то подправить??
А какой размер файла?
И для чего explode, если в итоге выводится полная строка?
какой размер файла 1.txt?
зачем вот эта строка?
$exstr = explode('=', $rstr1);
(я понимаю, что $exstr может еще где-нибудь использоваться)
Может в файл 1.txt кто-то пишет, возникают коллизии доступа.
1.тхт до 1 мб. Просто интересно ,нет ли ошибок в коде?
echo "$rstr1";
Используйте просто echo $rstr1;
WhiteSmartFox добавил 18-02-2011 в 16:33
$exstr = explode('=', $rstr1);
Если не надо удалите.
WhiteSmartFox добавил 18-02-2011 в 16:33
1.тхт до 1 мб
Файл 1 мб это слишком много, мало того что прочитать 1Мб долго + каждый процесс будет резервировать 1-2Мб'ний массив => что тоже не быстрое занятие, да и память кстати ограниченный ресурс.
Можно набросать простой парсер, который файл один раз загонит в таблицу и потом селектить оттуда случайные записи.
функцию разложения строки в массив непонятно зачем используете, если переменная потом нигде не участвует.
Можно так попробовать:
$file_cont = file("1.txt");
$rand_line = $file_cont[array_rand($file_cont)];
Смысл кода заключается в случайном выводе строк из файла в 2 местах. Код работает, но страшно грузит сервер=))
Может тогда переделать алгоритм, типа
Это код также выведет случайную строчку, правда немного изменится вероятность (чем больше строка, тем более вероятно что она будет выведена) + Есть некоторая вероятность что последняя строка может вывестись не полностью. Зато этот код не будет читать больше максимального размера строки * 2.
P.S. Можно создать дополнительный файл в который будет записывается размер начальный и конечный индекс строк при каждом обновлении 1.txt, при этом можно получать строку намного проще т.е. есть файл 1.txt вида
Привет Мир
Привет Мир!Ура!
создать для него доп файл 1.ind вида (средствами php конечно)
00000 00010
00012 00015
...
в коде при чтении будет что-то вида (не проверял)
Смысл такой, получаем размер файла, получаем случайное число от 0 до размера файла, перемещаем указатель в файле на полученную случайную позицию. Получаем строку в указанной позиции (там идет два раза $line = fgets($fhandle); - это не опечатка, т.к. первая полученная строка может быть не полной, читаем следующую).
Работает с файлами любого размера, не занимает кучу памяти. Минус - чем меньше строк в файле, тем больше шанс попасть на последнюю строку и прочитать ее не полностью (следующей строки не будет). Для предотвращения этого там стоит -20, можно увеличить до максимальной длины строки.