PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
GLF280
Отправлено: 25 Октября, 2018 - 07:22:00
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2018  


Помог: 0 раз(а)




Нужно было найти альтернативу Cron когда он не доступен на хостинге для фонового выполнения php скрипта нужное кол-во раз за заданное время.
Почему это не работает ? Если кому охота разбираться подскажите пожалуйста


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. session_start();  // Старт сессии
  5. $num_starts = 960; // Количество запусков скрипта за промежуток времени
  6. $hours = 8; // Количество часов, в течение которых нужно запускать скрипт $num_starts раз.
  7. $time_sec = $hours*3600; // Количество секунд в цикле запусков
  8. $time_to_start = array(); // Собственно, массив с временами запусков
  9. ignore_user_abort(1);   // Игнорировать обрыв связи с браузером
  10.  
  11.  
  12. //Генерируем интервал между запусками.
  13.  
  14. function add_time2start() {
  15.     global $time_sec, $time_to_start;
  16.     $new_time = time()+rand(0, $time_sec);
  17.     if (!in_array($new_time, $time_to_start)) {   // Если такого времени в массиве нет - добавим
  18.         $time_to_start[] = $new_time;
  19.     } else {
  20.         add_time2start(); // Если такое время уже есть - генерируем заново.
  21.     }
  22. }
  23.  
  24.  
  25. //массив времен запуска
  26.  
  27. $k = 1;
  28. if ($_SESSION["num_st"] == "" || $_SESSION["num_st"][$num_starts-1] < time()) {   // проверка, что в сессию не записаны данные и что эти данные не устарели.
  29.     do {
  30.         add_time2start($k);                                        
  31.         $k++;
  32.     } while ($k < = $num_starts);
  33.     sort($time_to_start, SORT_NUMERIC);      
  34.     $_SESSION["num_st"] = $time_to_start;
  35. }
  36.  
  37.  
  38. $start_time = microtime(); // Узнаем время запуска скрипта  
  39. $start_array = explode(" ",$start_time); // Разделяем секунды и миллисекунды
  40. $start_time = $start_array[1]; // получаем стартовое время скрипта
  41. $max_exec = ini_get("max_execution_time"); //Получаем максимально возможное время работы скрипта
  42.  
  43.  
  44. do{
  45.     $nowtime = time();  // Текущее время
  46.     //// Если текущее время есть в массиве с временами выполнения скрипта......
  47.     if (in_array($nowtime, $_SESSION["num_st"])) {
  48.         // Сокетом цепляемся к файлу с основным содержанием действий
  49.         $http = fsockopen('test.ru',80);
  50.         /// заодно передаем ему данные сессии и время когда он должен сработать
  51.         fputs($http, "GET http://test.ru/exec.php?".session_name()."=".session_id()."&nowtime=$nowtime HTTP/1.0\r\n");
  52.         fputs($http, "Host: test.ru\r\n");
  53.         fputs($http, "\r\n");
  54.         fclose($http);
  55.     } //// выполнили заданное действие
  56.     // Узнаем текущее время чтобы проверить, дальше ли вести цикл или перезапустить
  57.         $now_time = microtime();
  58.         $now_array = explode(" ",$now_time);
  59.         $now_time = $now_array[1];
  60.         // вычитаем из текущего времени начальное начальное
  61.         $exec_time = $now_time - $start_time+$exec_time;
  62.         /// тормозимся на секунду
  63.         usleep(1000000);
  64.         //Остановка скрипта, работающего в фоновом режиме. Я другого способа не придумал.
  65.         if (file_exists("stop.txt")) exit;
  66.         //Проверяем время работы, если до конца работы скрипта
  67.         //осталось менее 5 секунд, завершаем работу цикла.
  68. } while($exec_time < ($max_exec - 5));
  69.  
  70.  
  71. // Запускаем этот же скрипт новым процессом и завершаем работу текущего
  72. $http = fsockopen('test.ru',80);
  73. fputs($http, "GET http://test.ru/index.php?".session_name()."=".session_id()."&bu=$max_exec HTTP/1.0\r\n");
  74. fputs($http, "Host: test.ru\r\n");
  75. fputs($http, "\r\n");
  76. fclose($http);
  77.  
  78.  
  79. ?>
  80.  

(Отредактировано автором: 25 Октября, 2018 - 07:22:55)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB