PHP.SU

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


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

> Описание: Нужно разбить один большой цикл на несколько маленьких и пустить через crontab.
igosja
Отправлено: 08 Ноября, 2013 - 18:49:19
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Март 2013  
Откуда: https://vhol.org


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




Здравствуйте, нужна помощь в следующем вопросе.

На сайте есть необходимость постоянной обработки больших циклов (обновление бд через цикл). Так как на хостинге стоят ограничения на использование процессорного времени, приходиться разбивать цикл на несколько маленьких и запускать их цепочкой.

Выглядит это так:
Файл 1.php
PHP:
скопировать код в буфер обмена
  1. include '../database.php';
  2. if (isset($_GET['limit']))
  3. {
  4.         $limit = mysql_escape_string($_GET['limit']);
  5. }
  6. else
  7. {
  8.         $limit = 0;
  9. }
  10. $sql = mysql_query("    SELECT `table_id`
  11.                         FROM `table`
  12.                         ORDER BY `table_id` ASC
  13.                         LIMIT $limit, 10");
  14. $count_sql = mysql_num_rows($sql);
  15. if ($count_sql > 0) //если выбрались какие-то данные
  16. {
  17.         for ($i=0; $i<$count_sql; $i++)
  18.         {
  19.                 $table_id = mysql_result($sql,$i,'table_id');
  20.                 //обрабатываем данные и обновляем таблицу
  21.         }
  22.         $limit = $limit + 10; //увеличиваем лимит
  23.         $href = '1.php?limit='.$limit;
  24.         print   '<script type="text/javascript">
  25.                 function doit()
  26.                 {
  27.                         window.location.href="'.$href.'";
  28.                 }
  29.                 setTimeout(doit, 2000);
  30.                 </script>'; // и перезапускаем файл
  31. }
  32. else //если все данные уже обработаны, запускаем второй файл
  33. {
  34.         $href = '2.php?limit=0';
  35.         print   '<script type="text/javascript">
  36.                 function doit()
  37.                 {
  38.                         window.location.href="'.$href.'";
  39.                 }
  40.                 setTimeout(doit, 2000);
  41.                 </script>';
  42. }
  43.  

При запуске руками в браузере файлы работают нормально, но в crontab нет браузера, который бы выполнял js или header(location).

Как реализовать такой редирект в crontab?

(Отредактировано автором: 10 Ноября, 2013 - 14:26:32)

 
 Top
T1grOK
Отправлено: 08 Ноября, 2013 - 20:07:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


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




Так для crontab установите необходимый период запуска, а данные о limit храните в файле или БД.


-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
igosja
Отправлено: 08 Ноября, 2013 - 20:12:43
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Март 2013  
Откуда: https://vhol.org


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




T1grOK пишет:
Так для crontab установите необходимый период запуска, а данные о limit храните в файле или БД.

Просто как пельмени, а я себе уже 3 день голову ломаю как сэмулировать браузер в консоли. Спасибо большое.
 
 Top
Ch_chov
Отправлено: 09 Ноября, 2013 - 11:38:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


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




igosja пишет:
день голову ломаю как сэмулировать браузер в консоли
А зачем? Для консоли тоже установлено ограничение времени?
 
 Top
caballero
Отправлено: 09 Ноября, 2013 - 12:38:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 5999
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




ограничение времени вообще то ставиться для работы PHP скрипта, а ему все равно консоль или нет


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Ch_chov
Отправлено: 09 Ноября, 2013 - 13:23:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


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




caballero пишет:
а ему все равно консоль или нет

У консольного PHP обычно свой php.ini и соотвенно другое значение в max_execution_time
 
 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