Перейти к содержимому


CRON

cron

Сообщений в теме: 7

#1 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 09 Июль 2018 - 12:42

Добрый день.
Настраиваем вычисление в кроне.
Все , вроде,по инстркукции, но почему-то не работает.
Отдельно, вне цикла, как доп. действие, код работает.

$result = data_select(380, "status=0"); // цикл по всем активным записям таблицы Наши сотрудники
while ($line = sql_fetch_assoc($result)) // помещаем в $line текущую запись на очередном проходе цикла
{

$snoopy = new Snoopy;
$snoopy->proxy_host = $config['proxy_host'];
$snoopy->proxy_port = $config['proxy_port'];
$snoopy->proxy_user = $config['proxy_user'];
$snoopy->proxy_pass = $config['proxy_pass'];
$url="https://smsc.ru/sys/senders.php?get=1&login=sms34&psw=bvn773ked&fmt=3&operators=1";
$snoopy->fetch($url);
$var = $snoopy->results;
$var2 = json_decode($var,true);

$senderName = $line['f7200'];
   
    foreach($var2 as $item){
	    if($item['sender'] == $line['f7200']){
		    $mega = $item['mega'];
		    $mts = $item['mts'];
		    $tele = $item['tele2'];
		    switch($mega){
			    case '0':
			    case '1':
				    $mega = 'Подано';
				    break;
			    case '2':
				    $mega = 'Допущено';
				    break;
			    case '3':
				    $mega = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $mega = 'Отключено';
				    break;
			    case '6':
				    $mega = 'Дубль';
				    break;
			    case '8':
				    $mega = 'Треб. документы';
				    break;
			    default:
				    $mega  = 'Не подано';
				    break;
		    }
		   
		    switch($mts){
			    case '0':
			    case '1':
				    $mts= 'Подано';
				    break;
			    case '2':
				    $mts= 'Допущено';
				    break;
			    case '3':
				    $mts = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $mts= 'Отключено';
				    break;
			    case '6':
				    $mts= 'Дубль';
				    break;
			    case '8':
				    $mts= 'Треб. документы';
				    break;
			    default:
				    $mts = 'Не подано';
				    break;
		    }
		   
		   
		    switch($tele){
			    case '0':
			    case '1':
				    $tele = 'Подано';
				    break;
			    case '2':
				    $tele = 'Допущено';
				    break;
			    case '3':
				    $tele = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $tele = 'Отключено';
				    break;
			    case '6':
				    $tele = 'Дубль';
				    break;
			    case '8':
				    $tele = 'Треб. документы';
				    break;
			    default:
				    $tele = 'Не подано';
				    break;
		    }
		  
		    $line['f7220'] = $mega;
		    $line['f7240'] = $mts;
		    $line['f14211'] = $tele;
		    $line['f14201'] = json_encode($item).PHP_EOL.PHP_EOL.'Значения статусов: '.PHP_EOL.' 0 - ожидает регистрации '.PHP_EOL.' 1 - отправлено на регистрацию'.PHP_EOL.' 2 - допущено оператором '.PHP_EOL.' 3 - не принято оператором '.PHP_EOL.' 4 - временно отключено '.PHP_EOL.' 5 - автоотключение из-за окончания баланса '.PHP_EOL.' 6 - дубль другого имени (конфликт) '.PHP_EOL.' 8 - необходимы подтверждающие документы';
	    }
			   
    }

data_update(380, $line, "id=",$line['id']); // обновляем текущую строку запросом, если поля в $line менялись!
}


#2 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 09 Июль 2018 - 15:58

А что конкретно то не работает? На первый взгляд код выглядит корректно.

#3 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 09 Июль 2018 - 16:00

Просмотр сообщенияCbCoder (09 Июль 2018 - 15:58) писал:

А что конкретно то не работает? На первый взгляд код выглядит корректно.
Не происходит обновление полей. Единственное, что приходит на ум, это то , что мы делаем запрос на сторонний ресурс и мб это из -за того, что много записей и на каждую он тратит время.

А можно как то отследить ,когда заканчивается проход по всем записям?

#4 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Июль 2018 - 13:53

Просмотр сообщенияTelecomMedia (09 Июль 2018 - 16:00) писал:

А можно как то отследить ,когда заканчивается проход по всем записям?

Добавьте echo в конце и смотрите лог задания. Вообще, и без эхо там выведется ошибка вылета по таймауту, если не успевает отработать.

Можно также добавить LIMIT в запрос и проверить вначале на малом числе записей.

#5 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 19 Июль 2018 - 11:57

Скрипт почему-то не обновляет строку после изменения $line.
$result = data_select(380, "status=0"); // цикл по всем активным записям таблицы Наши сотрудники
$snoopyFree = new Snoopy;
$snoopyFree ->proxy_host = $config['proxy_host'];
$snoopyFree ->proxy_port = $config['proxy_port'];
$snoopyFree ->proxy_user = $config['proxy_user'];
$snoopyFree ->proxy_pass = $config['proxy_pass'];

/*
$snoopy = new Snoopy;
$snoopy->proxy_host = $config['proxy_host'];
$snoopy->proxy_port = $config['proxy_port'];
$snoopy->proxy_user = $config['proxy_user'];
$snoopy->proxy_pass = $config['proxy_pass'];
*/
//Мультиподпись (бесплатные имена)
$url="https://smsc.ru/sys/senders.php?get=1&login=sms34&psw=bvn773ked&fmt=3&operators=1";
$url2="https://smsc.ru/sys/senders.php?get=1&login=sms34_sub&psw=dhk736&fmt=3&operators=1";
$snoopyFree ->fetch($url);
$var = $snoopyFree ->results;
$var = json_decode($var,true);
/*
$snoopy->fetch($url2);
$varR = $snoopy->results;
$varR = json_decode($varR,true);
*/
while ($line = sql_fetch_assoc($result)) // помещаем в $line текущую запись на очередном проходе цикла
{
if(intval($line['id']) > 5514){
$senderName = $line['f7200'];
   
    foreach($var as $item){
	    if($item['sender'] == $line['f7200']){
	   
	
		    $mega = $item['mega'];
		    $mts = $item['mts'];
		    $tele = $item['tele2'];
			    echo 'End OF CRON '.$mega.$mts.$tele."<br>";
			   
		    switch($mega){
			    case '0':
			    case '1':
				    $mega = 'Подано';
				    break;
			    case '2':
				    $mega = 'Допущено';
				    break;
			    case '3':
				    $mega = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $mega = 'Отключено';
				    break;
			    case '6':
				    $mega = 'Дубль';
				    break;
			    case '8':
				    $mega = 'Треб. документы';
				    break;
			    default:
				    $mega  = 'Не подано';
				    break;
		    }
		   
		    switch($mts){
			    case '0':
			    case '1':
				    $mts= 'Подано';
				    break;
			    case '2':
				    $mts= 'Допущено';
				    break;
			    case '3':
				    $mts = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $mts= 'Отключено';
				    break;
			    case '6':
				    $mts= 'Дубль';
				    break;
			    case '8':
				    $mts= 'Треб. документы';
				    break;
			    default:
				    $mts = 'Не подано';
				    break;
		    }
		   
		   
		    switch($tele){
			    case '0':
			    case '1':
				    $tele = 'Подано';
				    break;
			    case '2':
				    $tele = 'Допущено';
				    break;
			    case '3':
				    $tele = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $tele = 'Отключено';
				    break;
			    case '6':
				    $tele = 'Дубль';
				    break;
			    case '8':
				    $tele = 'Треб. документы';
				    break;
			    default:
				    $tele = 'Не подано';
				    break;
		    }
		   
	   
		    $line['f7220'] = $mega;
		    $line['f7240'] = $mts;
		    $line['f14211'] = $tele;
		    echo $line['f7220'].PHP_EOL.$line['f7240'].PHP_EOL.$line['f14211']; <- ВОТ ТУТ ДАННЫЕ ПОЛУЧАЮТСЯ КОРРЕКТНЫЕ А НА ВЫХОДЕ ПУТСЫЕ ПОЛЯ
		   // $line['f14201'] = json_encode($item).PHP_EOL.PHP_EOL.'Значения статусов: '.PHP_EOL.' 0 - ожидает регистрации '.PHP_EOL.' 1 - отправлено на регистрацию'.PHP_EOL.' 2 - допущено оператором '.PHP_EOL.' 3 - не принято оператором '.PHP_EOL.' 4 - временно отключено '.PHP_EOL.' 5 - автоотключение из-за окончания баланса '.PHP_EOL.' 6 - дубль другого имени (конфликт) '.PHP_EOL.' 8 - необходимы подтверждающие документы'.PHP_EOL;
	    }
	 
	   }

	  

  /*
    foreach($varR as $item){
	    if($item['sender'] == $line['f7200']){
		    $line['f14201'] = json_encode($item);
		    $mega2 = $item['mega_step'];
		    $beeline2 = $item['bee_step'];
		    $tele2 = $item['tele2_step'];
		    switch($mega2){
			    case '0':
			    case '1':
				    $mega2 = 'Подано';
				    break;
			    case '2':
				    $mega2 = 'Допущено';
				    break;
			    case '3':
				    $mega2 = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $mega2 = 'Отключено';
				    break;
			    case '6':
				    $mega2 = 'Дубль';
				    break;
			    case '8':
				    $mega2 = 'Треб. документы';
				    break;
			    default:
				    $mega2= 'Не подано';
				    break;
		    }
		   
		    switch($beeline2){
			    case '0':
			    case '1':
				    $beeline2= 'Подано';
				    break;
			    case '2':
				    $beeline2= 'Допущено';
				    break;
			    case '3':
				    $beeline2= 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $beeline2= 'Отключено';
				    break;
			    case '6':
				    $beeline2= 'Дубль';
				    break;
			    case '8':
				    $beeline2= 'Треб. документы';
				    break;
			    default:
				    $beeline2= 'Не подано';
				    break;
		    }
		   
		   
		    switch($tele2){
			    case '0':
			    case '1':
				    $tele2 = 'Подано';
				    break;
			    case '2':
				    $tele2 = 'Допущено';
				    break;
			    case '3':
				    $tele2 = 'Отклонено';
				    break;
			    case '4':
			    case '5':
				    $tele2 = 'Отключено';
				    break;
			    case '6':
				    $tele2 = 'Дубль';
				    break;
			    case '8':
				    $tele2 = 'Треб. документы';
				    break;
			    default:
				    $tele2 = 'Не подано';
				    break;
		    }
		  
		    $line['f14901'] = $mega2;
		    $line['f14911'] = $beeline2;
		    $line['f14921'] = $tele2;
		   
		  
	 }	 
    }
*/

}
data_update(380, $line, "id=",$line['id']); // обновляем текущую строку запросом, если поля в $line менялись!
}


#6 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Июль 2018 - 12:21

У вас в коде есть некий цикл foreach($var as $item), который несколько раз (столько, сколько элементов в $var) перезаписывает $line. Возможно в последнем проходе цикла он в итоге записывает пустые значения, хотя до этого могли быть и корректные (и echo их вывело). Может алгоритм некорректен? Как то странно выглядит многократная перезапись $line в цикле.

#7 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 19 Июль 2018 - 12:23

Просмотр сообщенияCbCoder (19 Июль 2018 - 12:21) писал:

У вас в коде есть некий цикл foreach($var as $item), который несколько раз (столько, сколько элементов в $var) перезаписывает $line. Возможно в последнем проходе цикла он в итоге записывает пустые значения, хотя до этого могли быть и корректные (и echo их вывело). Может алгоритм некорректен? Как то странно выглядит многократная перезапись $line в цикле.

Цикл прогоняет все записи полученные по API со стороннего сервиса.
Там по идеи всего 1 раз записываются LINE, т.к. идет сравнение значения в ЦРМ с полученным по АПИ и только в случае соответствия значения перезаписываются.
Такое соответствие всего 1 может быть.

#8 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Июль 2018 - 12:27

Тогда я в ступоре честно говоря. Не соображаю в чем еще может быть дело. Попробуйте все таки вывод echo сделать не из цикла, а непосредственно перед запросом.





Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных