Как заставить скрипт вызывать сам

У меня есть PHP-скрипт, который получает и отправляет большое количество данных через / в API. Он работает правильно, но API, который вызывает мой скрипт, иногда ломается и возвращает мне 500 Ошибка сервера. В этом случае я хотел бы сделать свой сценарий запустить снова

Как я могу это сделать?
Я старался header("Location: http://example.com/myscript.php"); но безуспешно

РЕДАКТИРОВАТЬ (из-за 6 человек нажали поставить этот вопрос на удержание):

  • хорошо, у меня есть мой myscript.php который должен работать как crontab ..

  • этот myscript.php отправляет большой объем данных во внешний / удаленный API (это не мой API, поэтому я не могу исправить проблемы здесь) .. но API иногда выходит из строя после изменяющегося количества данных … (данные, которые я отправляю, я проверено и подтверждено)

myscript.php сначала спрашивает API, какие данные уже были ему отправлены, и пропускает, поэтому, когда myscript.php может перезагрузить себя, когда-нибудь это будет закончено 🙂

0

Решение

Похоже, вы не говорите, что ваш Сценарий не работает, но ваш сценарий использует веб-API, который иногда дает сбой.

Если API возвращает ошибку из-за данных, которые вы отправляете ему, вы должны пересмотреть свой код, чтобы выяснить, как предотвратить создание таких данных.

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

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

$max_attempts = 4;  // Decide on a reasonable number of times to retry the call

while ($max_attempts--) {
// Try the API call up to the specified maximum number of attempts
$returned_data = $api->call($sent_data);
// Stop trying when you get a successful response
if ($returned_data != '500 Server Error') break;
}

Если случайный сбой встречается относительно редко, такой подход должен значительно снизить общую частоту отказов. И если вам нужно повторить определенные части кода перед вызовом API при последующих попытках, вы можете просто включить их в цикл повторных попыток.

Если вы достигли максимального числа повторных попыток и все еще не имеете хороших данных, возможно, происходит что-то необычно плохое, поэтому вам, вероятно, следует прекратить попытки.

if ($returned_data == '500 Server Error') die ("The API probably isn't working at all");

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

4

Другие решения

Сделать curl позвони самому себе, тогда exit();

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/myscript.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
exit();

Это приведет к запуску другого экземпляра вашего скрипта (вы вызываете свой URL с помощью GET), вынудите этот вызов умереть через 5 секунд вместо ожидания завершения выполнения другого экземпляра, а затем exit (); с любым текстом, который вы можете захотеть

РЕДАКТИРОВАТЬ: Вам также может потребоваться установить ignore_user_abort(true) чтобы ваш новый скрипт не умирал, когда вы останавливаете вызов curl для выполнения exit

2

По вопросам рекламы [email protected]