这是这个想法:一个 php 脚本将发布的数据发送到不同的服务器。如果服务器无法获取发布的数据,php 脚本应该在几分钟后重试。
如果第一次尝试失败,程序员如何让脚本在几分钟内再次执行以完成任务?
我想创建一个 php 脚本,当新更新或数据库插入通知时,它会调用不同的服务器并将数据发布到服务器。因此,不涉及 HTML/CSS/JS。它完全是命令行 - 在后台运行。那么,如果第一次执行失败怎么办,我该如何计时脚本在几分钟后重试呢?
这是这个想法:一个 php 脚本将发布的数据发送到不同的服务器。如果服务器无法获取发布的数据,php 脚本应该在几分钟后重试。
如果第一次尝试失败,程序员如何让脚本在几分钟内再次执行以完成任务?
我想创建一个 php 脚本,当新更新或数据库插入通知时,它会调用不同的服务器并将数据发布到服务器。因此,不涉及 HTML/CSS/JS。它完全是命令行 - 在后台运行。那么,如果第一次执行失败怎么办,我该如何计时脚本在几分钟后重试呢?
请参阅unix command,因此您在等待正确的时间时不需要运行脚本。
echo "php yourscript.php" | at $TIME
如果对其他服务器的调用失败,您可以将其放在 php 脚本的末尾。
shell_exec('echo "php yourscript.php" | at ' . $moment);
大多数情况下,如果您需要使用 PHP 来安排脚本,您将不得不依赖 cron,然后通过某种方式来保存与上次脚本执行失败或成功相关的数据(即 DB 或文本文件)。
但是,如果您有一个正在运行一次的脚本,并且您希望它定期重试直到成功,您可以使用带有计时器的 while 循环,如下所示:
// allow for long running execution
ignore_user_abort(true);
set_time_limit(0);
$success = false;
while($success === false) {
// attempt what you are trying to do, set $success to true if it works
if ($success === true) {
continue;
} else {
sleep(300); // this pauses execution for 300 seconds
}
}
根据罗斯史密斯二世的建议编辑
你偶然发现了ajax朋友。
例如:
var x = false;
function ajax()
{
if(x)
{
$.ajax({
url: "test.php"
}).done(function() {
x = true;
});
}
else
{
setTimeout(ajax(),3000);
}
您的问题不清楚此 PHP 脚本是通过 Web 服务器运行还是在命令行上运行。
如果您正在谈论在命令行上运行,请执行以下操作:
#!/bin/bash
while true
do
php script_that_returns_non_zero_if_it_fails.php && break
sleep 300 # sleep 5 minutes
done
我可能会创建一个在sleep()
if 条件返回 false 或等效项之后调用自身的函数。
<?php
function doSomething() {
// do request, should return true or false
$result = dymmyRequestFunction();
if ($result === false) {
sleep(300);
doSomething();
}
}
希望有帮助。
Ajax 将是答案.. 像这样
xmlHttp.open('GET', '/ajax/script.php?id=' + id, true);
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
{
//complete
}
else
{
//try again
}
}