Страница 2 из 3

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 09:40
Asmodey
Файл создаётся, значит скрипт начинает работать.
Чтоб понять в каком месте он не срабатывает как ожидается, надо после каждого этапа выводить отладочную информацию ручками.
Первый этап - получение информации из внешнего источника. Ну вот и выводите в файл результат:
$cur = curl_init();

if($cur)
  fwrite($log, date('c').' Curl инициализировали');
else
  {
      fwrite($log, date('c').' Сurl не получилось инициализировать');
      exit(1);
  }

if(curl_setopt($cur, CURLOPT_URL, $url)
  fwrite($log, date('c').' Curl  задали URL');
else
  {
      fwrite($log, date('c').' Сurl не получилось задать URL ['.curl_error($cur).']');
      exit(2);
  }

//Примерно так дальше.
Кста: по ошибке выхода сразу будет видно где вылетело. Собственно, для этого и изобретали.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 10:39
Vitalik
Asmodey писал(а):Файл создаётся, значит скрипт начинает работать.
Чтоб понять в каком месте он не срабатывает как ожидается, надо после каждого этапа выводить отладочную информацию ручками.
Первый этап - получение информации из внешнего источника. Ну вот и выводите в файл результат:
$cur = curl_init();

if($cur)
  fwrite($log, date('c').' Curl инициализировали');
else
  {
      fwrite($log, date('c').' Сurl не получилось инициализировать');
      exit(1);
  }

if(curl_setopt($cur, CURLOPT_URL, $url)
  fwrite($log, date('c').' Curl  задали URL');
else
  {
      fwrite($log, date('c').' Сurl не получилось задать URL ['.curl_error($cur).']');
      exit(2);
  }

//Примерно так дальше.
Кста: по ошибке выхода сразу будет видно где вылетело. Собственно, для этого и изобретали.
Вылетает ошибка, но лог не создается:
Warning: fwrite() expects parameter 1 to be resource, null given in D:\OpenServer\domains\test.ru\cron.php on line 9
<?php 
$ch = curl_init();

if($cur)
  fwrite($log, date('c').' Curl инициализировали');
else
  {
      fwrite($log, date('c').' Сurl не получилось инициализировать');
      exit(1);
  }

curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

 $results = json_decode($result, true);

foreach ($results as $result) {
    foreach ($result as $product) {
         echo $key . $product; 
		 
    }
}

?>

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 11:42
Asmodey
1. Первой строкой $log = fopen(__DIR__.'/log.txt','a');
2. В проверке на результат curl_init надо $cur заменить на $ch

ЗЫ. ИМХО. Вам надо плотно подтянуть матчасть

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 13:04
Vitalik
Asmodey писал(а):1. Первой строкой $log = fopen(__DIR__.'/log.txt','a');
2. В проверке на результат curl_init надо $cur заменить на $ch

ЗЫ. ИМХО. Вам надо плотно подтянуть матчасть
мда.., для меня это пока что дрова((
вот весь мой код:
<?php 

$log = fopen(__DIR__.'/log.txt','a');

$url = ('http://site.ru/h_api.php?api_key=$***************&action=getProductCol');
$cur = curl_init();

if($cur)
  fwrite($log, date('c').' Curl инициализировали');
else
  {
      fwrite($log, date('c').' Сurl не получилось инициализировать');
      exit(1);
  }

if(curl_setopt($cur, CURLOPT_URL, $url)
  fwrite($log, date('c').' Curl  задали URL');
else
  {
      fwrite($log, date('c').' Сurl не получилось задать URL ['.curl_error($cur).']');
      exit(2);
  }


curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);



$results = json_decode($result, true);
echo "<pre>"; print_r($results);

foreach ($results as $result) {
    foreach ($result as $product) {
         echo $key . $product; 		 
    }
}


?>
там походу лишняя или незакрытая скобка после if в строчке:
if(curl_setopt($cur, CURLOPT_URL, $url)
выдает ошибку
Parse error: syntax error, unexpected 'fwrite' (T_STRING) in D:\OpenServer\domains\test.ru\cron.php on line 17

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 13:34
Asmodey
<?php 

$log = fopen(__DIR__.'/log.txt','a');

$url = ('http://site.ru/h_api.php?api_key=$***************&action=getProductCol');
$cur = curl_init();

if($cur)
  fwrite($log, "\n".date('c').' Curl инициализировали');
else
  {
      fwrite($log, "\n".date('c').' Сurl не получилось инициализировать');
      exit(1);
  }


if(curl_setopt($cur, CURLOPT_URL, $url))
  fwrite($log, "\n".date('c').' Curl  задали URL');
else
  {
      fwrite($log, "\n".date('c').' Сurl не получилось задать URL ['.curl_error($cur).']');
      exit(2);
  }


if(curl_setopt($cur, CURLOPT_RETURNTRANSFER, true))
  fwrite($log, "\n".date('c').' Curl  задали RETURNTRANSFER');
else
  {
      fwrite($log, "\n".date('c').' Сurl не получилось задать RETURNTRANSFER ['.curl_error($cur).']');
      exit(3);
  }


$result = curl_exec($cur);

if($result)
  fwrite($log, "\n".date('c').' Curl получили результат');
else
  {
      fwrite($log, "\n".date('c').' Сurl не получилось c результатом-то ['.curl_error($cur).']');
      exit(4);
  }

curl_close($cur);



$results = json_decode($result, true);

if($results)
  fwrite($log, "\n".date('c').' JSON декодировали');
else
  {
      fwrite($log, "\n".date('c').' JSON не получилось декодировать');
      if($results===NULL)
	fwrite($log,"\n\tСлишком глубокая рекурсия или в данных чушь");
      exit(5);
  }


foreach ($results as $result) {
    foreach ($result as $product) {
	fwrite($log,"\n\t".date('c').' ['.$key.'] => '.$product);
    }
}

fwrite($log,"\n----------Всё кончилось\n\n");
fclose($log);
Примерно так.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 13:52
Vitalik
Asmodey писал(а):
Примерно так.
хм..., походу все работает, тогда в чем проблема непонимаю.. :cry: может в закрывающемся теге скрипта? Попробую чистый скрипт выполнить без него.
А вот и логи:
2016-08-09T13:43:01+03:00 Curl инициализировали
2016-08-09T13:43:01+03:00 Curl  задали URL
2016-08-09T13:43:01+03:00 Curl  задали RETURNTRANSFER
2016-08-09T13:43:01+03:00 Curl получили результат
2016-08-09T13:43:01+03:00 JSON декодировали
	2016-08-09T13:43:01+03:00 [] => 262
	2016-08-09T13:43:01+03:00 [] => 262
	2016-08-09T13:43:01+03:00 [] => 3
	2016-08-09T13:43:01+03:00 [] => 262
----------Всё кончилось


2016-08-09T13:44:02+03:00 Curl инициализировали
2016-08-09T13:44:02+03:00 Curl  задали URL
2016-08-09T13:44:02+03:00 Curl  задали RETURNTRANSFER
2016-08-09T13:44:02+03:00 Curl получили результат
2016-08-09T13:44:02+03:00 JSON декодировали
	2016-08-09T13:44:02+03:00 [] => 262
	2016-08-09T13:44:02+03:00 [] => 262
	2016-08-09T13:44:02+03:00 [] => 3
	2016-08-09T13:44:02+03:00 [] => 262
----------Всё кончилось


2016-08-09T13:45:01+03:00 Curl инициализировали
2016-08-09T13:45:01+03:00 Curl  задали URL
2016-08-09T13:45:01+03:00 Curl  задали RETURNTRANSFER
2016-08-09T13:45:01+03:00 Curl получили результат
2016-08-09T13:45:01+03:00 JSON декодировали
	2016-08-09T13:45:01+03:00 [] => 262
	2016-08-09T13:45:01+03:00 [] => 262
	2016-08-09T13:45:01+03:00 [] => 3
	2016-08-09T13:45:01+03:00 [] => 262
----------Всё кончилось

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 14:21
Asmodey
Ключи пустые. Там внутренний цикл другой foreach (array_expression as $key => $value).

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 15:06
Vitalik
Asmodey писал(а):Ключи пустые. Там внутренний цикл другой foreach (array_expression as $key => $value).
Спасибо, Сорри, я понимаю что это уже к теме не относится, но мне хотябы подсказка нужна, а то реально я запутался в этой теме уже и по поисковикам ничего нет, есть примеры с другими массивами как разбирать, но там другие вложенности, тоесть хотя бы хочу знать возможно ли это реализовать что бы авт. обновлялись данные, тогда пойду копать дальше, или этот массив невозможно будет разобрать на кусочки? просто не понял про пустые ключи.. Во всяком случаи Спасибо Большое за помощь. Пойду дальше читать и искать..

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 15:37
Asmodey
foreach ($results as $result) {
    foreach ($result as $product) {
   fwrite($log,"\n\t".date('c').' ['.$key.'] => '.$product);
    }
}
Попробуйте заменить на
foreach ($results as $result) {
    foreach ($result as $key => $product) {
   fwrite($log,"\n\t".date('c').' ['.$key.'] => '.$product);
    }
}

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 09 авг 2016, 15:57
Vitalik
Asmodey писал(а):
foreach ($results as $result) {
    foreach ($result as $product) {
   fwrite($log,"\n\t".date('c').' ['.$key.'] => '.$product);
    }
}
Попробуйте заменить на
foreach ($results as $result) {
    foreach ($result as $key => $product) {
   fwrite($log,"\n\t".date('c').' ['.$key.'] => '.$product);
    }
}
Я заменил на
$results = json_decode($result, true);

foreach ($results as $result) {

foreach ($result as $key => $value) {
    echo "Ключ: $key; Значение: $value<br />\n";
}
}
Сейчас так:
Ключ: product1; Значение: 165
 Ключ: product2; Значение: 165
 Ключ: product3; Значение: 22
 Ключ: product4; Значение: 164
но всеравно скрипт не выполняется((, логи планировщика идут, а остатки обновляются только после обновления странички из скриптом, 20 минут ждал, попробую ваш код сейчас еще..