- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день!
Я не опытный программист, требуется небольшая помощь в решении ситауции!
Имеется небольшой скрипт вывода случайной строки из случайного файла из случайной папки.
Данный скрипт работает, но время от времени выдает ошибку:
Notice: Undefined offset: 0 on line 12
Итак, как работает скрипт:
1. Он берет список файлов из определенной папки и случайным образом выбирает один файл (в папке содержится около 2000 текстовых файлов, количество файлов постоянно меняется)
2. Из выбранного файла он берет случайную строку (все файлы разного размера с разным количеством строк, но в основном размер файлов колеблется от 5 Мб. до 50 Мб.)
3. Полученную строку он выводит на экран монитора.
Я прекрасно понимаю, что Notice - это не ошибка а предупреждение и ее можно смело заглушить, но проблема в том, что при возникновении этого предупреждения ничего на экран не выводится а нам требуется чтобы всегда выводилась случайная строка из файла при каждом перезагрузке страницы.
Я перерыл большое количество литературы и читал много ответов по этой "ОШИБКЕ" но ничего не могу сделать.
Пробовал оборачивать в Get и POST но результатов не дало.
Возможно есть другое решение или может ктото посоветует использовать какойто другой движок для сайта случайного вывода.
Забегая вперед скажу, что база строк занимает 10 Гб. Т.е. выборку нужно делать из 10 Гб. текстовых строк разной длины.
Возможно есть какоето решение с базой данных mysql или какойто движок сайта, который можно использовать под данную задачу?
А Вот и сам код:
ЗАРАНЕЕ БЛАГОДАРЕН!
первый пример со страницы http://php.net/manual/ru/function.scandir.php
иногда Ваш скрипт пытается открыть одну/две точки (это текущий каталог или вышестоящий каталог) как файл, из-за этого и происходит ошибка.
Во первых - у вас может быть пустая строка. Во вторых - функцию неверно используете.
//указываем папку с файлами
$folder = 'полный путь к папке с txt файлами';
$files = array();
$files = scandir($folder);
//выбираем случайный файл из папки
$files_rand = array_rand($files);
$files_rand = $files[$files_rand];
//выбираем случайную строку из файла
$all_str = file_get_contents($folder.'/'.$files_rand);
$all_str = explode("\n", $all_str);
$i = array_rand($all_str);
echo trim($all_str[$i]);
Итак решение найдено!!!
Всем СПАСИБО!
Дано:
1. бесплатный хостинг с поддержкой php 5.6
2. Папка объемом 10 ГБ. с файлами в кол-ве 2000 шт. средним размером в 30 Мб.
Нужно:
1. из папки выбрать случайный файл
2. Выбрать, из выбранного случайного файла, случайную строку.
РЕШЕНИЕ:
Код:
function randomString($files, $folder){
//выбираем случайный файл из папки
$files_rand = $files[rand(0, sizeof($files)-1)];
//выбираем случайную строку из файла
$all_str = file($folder . '/' . $files_rand);
$i = rand(0, sizeof($all_str)-1);
//выводим строку – если она существует в массиве, и не пуста
if(!empty($all_str[$i])){
echo $all_str[$i];
return;
}
else{
// иначе – вызываем функцию повторно
randomString($files, $folder);
}
}
//указываем папку с файлами
$folder = 'полный путь к папке с txt файлами';
$files = scandir($folder);
randomString($files, $folder);
В ИТОГЕ:
1. Прогнали данный скрипт 100000 раз
2. Ошибок не обнаружено!