Нужно было найти альтернативу Cron когда он не доступен на хостинге для фонового выполнения php скрипта нужное кол-во раз за заданное время.
Почему это не работает ? Если кому охота разбираться подскажите пожалуйста
PHP:
скопировать код в буфер обмена
<?PHP $num_starts = 960; // Количество запусков скрипта за промежуток времени $hours = 8; // Количество часов, в течение которых нужно запускать скрипт $num_starts раз. $time_sec = $hours*3600; // Количество секунд в цикле запусков $time_to_start = array(); // Собственно, массив с временами запусков //Генерируем интервал между запусками. function add_time2start() { global $time_sec, $time_to_start; if (!in_array($new_time, $time_to_start)) { // Если такого времени в массиве нет - добавим $time_to_start[] = $new_time; } else { add_time2start(); // Если такое время уже есть - генерируем заново. } } //массив времен запуска $k = 1; if ($_SESSION["num_st"] == "" || $_SESSION["num_st"][$num_starts-1 ] < time()) { // проверка, что в сессию не записаны данные и что эти данные не устарели. do { add_time2start($k); $k++; } while ($k < = $num_starts); sort($time_to_start, SORT_NUMERIC ); $_SESSION["num_st"] = $time_to_start; } $start_time = microtime(); // Узнаем время запуска скрипта $start_array = explode(" ",$start_time); // Разделяем секунды и миллисекунды $start_time = $start_array[1]; // получаем стартовое время скрипта $max_exec = ini_get("max_execution_time"); //Получаем максимально возможное время работы скрипта do{ $nowtime = time(); // Текущее время //// Если текущее время есть в массиве с временами выполнения скрипта...... if (in_array($nowtime, $_SESSION["num_st"])) { // Сокетом цепляемся к файлу с основным содержанием действий /// заодно передаем ему данные сессии и время когда он должен сработать fputs($http, "Host: test.ru\r\n"); } //// выполнили заданное действие // Узнаем текущее время чтобы проверить, дальше ли вести цикл или перезапустить $now_array = explode(" ",$now_time); $now_time = $now_array[1]; // вычитаем из текущего времени начальное начальное $exec_time = $now_time - $start_time+$exec_time; /// тормозимся на секунду //Остановка скрипта, работающего в фоновом режиме. Я другого способа не придумал. //Проверяем время работы, если до конца работы скрипта //осталось менее 5 секунд, завершаем работу цикла. } while($exec_time < ($max_exec - 5)); // Запускаем этот же скрипт новым процессом и завершаем работу текущего fputs($http, "Host: test.ru\r\n"); ?>
(Отредактировано автором: 25 Октября, 2018 - 07:22:55)
|