Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 016 113 раз!

Форум

Добро пожаловать, Гость!

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

Обсуждение вопросов на другие темы связанные с веб-разработкой
Аватара пользователя
Asmodey
Сообщения: 299
C нами: 4 года 7 мес

Непрочитанное сообщение Asmodey » 09 авг 2016, 09:40

Файл создаётся, значит скрипт начинает работать.
Чтоб понять в каком месте он не срабатывает как ожидается, надо после каждого этапа выводить отладочную информацию ручками.
Первый этап - получение информации из внешнего источника. Ну вот и выводите в файл результат:
$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);
  }

//Примерно так дальше.


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

Vitalik
Сообщения: 14
C нами: 3 мес 25 дней

Непрочитанное сообщение Vitalik » 09 авг 2016, 10:39

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;
      
    }
}

?>

Аватара пользователя
Asmodey
Сообщения: 299
C нами: 4 года 7 мес

Непрочитанное сообщение Asmodey » 09 авг 2016, 11:42

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

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

Vitalik
Сообщения: 14
C нами: 3 мес 25 дней

Непрочитанное сообщение Vitalik » 09 авг 2016, 13:04

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

Аватара пользователя
Asmodey
Сообщения: 299
C нами: 4 года 7 мес

Непрочитанное сообщение Asmodey » 09 авг 2016, 13:34

<?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);


Примерно так.

Vitalik
Сообщения: 14
C нами: 3 мес 25 дней

Непрочитанное сообщение Vitalik » 09 авг 2016, 13:52

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
----------Всё кончилось

Аватара пользователя
Asmodey
Сообщения: 299
C нами: 4 года 7 мес

Непрочитанное сообщение Asmodey » 09 авг 2016, 14:21

Ключи пустые. Там внутренний цикл другой foreach (array_expression as $key => $value).

Vitalik
Сообщения: 14
C нами: 3 мес 25 дней

Непрочитанное сообщение Vitalik » 09 авг 2016, 15:06

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

Спасибо, Сорри, я понимаю что это уже к теме не относится, но мне хотябы подсказка нужна, а то реально я запутался в этой теме уже и по поисковикам ничего нет, есть примеры с другими массивами как разбирать, но там другие вложенности, тоесть хотя бы хочу знать возможно ли это реализовать что бы авт. обновлялись данные, тогда пойду копать дальше, или этот массив невозможно будет разобрать на кусочки? просто не понял про пустые ключи.. Во всяком случаи Спасибо Большое за помощь. Пойду дальше читать и искать..

Аватара пользователя
Asmodey
Сообщения: 299
C нами: 4 года 7 мес

Непрочитанное сообщение Asmodey » 09 авг 2016, 15:37

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);
    }
}

Vitalik
Сообщения: 14
C нами: 3 мес 25 дней

Непрочитанное сообщение Vitalik » 09 авг 2016, 15:57

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 минут ждал, попробую ваш код сейчас еще..


Вернуться в «Оффтоп и другие темы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость