我有一个PHP脚本(插件),它在我的网站中导入一些产品。要导入产品,我强制使用两个正在执行此导入的链接。
第一个URL退出以触发导入。此URL解锁第二个URL以导入产品。如果导入完成,退出执行导入的第二个URL,则URL显示代码(200)。
我现在的问题是,如何检查,例如如果第二个URL返回200,则每30秒一次? - 因为这是识别导入是否完成的唯一方法。
我已经尝试了fopen(..)
,但问题是我的脚本被停止了,因为fopen
没有收到回复。
所以我需要的是一个函数或代码来检查例如如果第二个URL在10秒后返回一些内容,如果没有,则代码会休眠30秒并再次检查。只有当我返回200时,我才能退出此循环。
正如我所说,我已经尝试过fopen(..)
但这个函数会停止我的脚本。我尝试这个的第二种方式是卷曲。但问题是,我只是不检查我是否得到了返回的东西......这里是我的卷曲代码:
$ch = curl_init("https://myurl.de/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_close($ch);
答案 0 :(得分:1)
只要您不想执行阻止I / O的进程,您将无法使用php本身执行此操作 - 。
你可以通过javascript setInterval或setTimeout的一些帮助来解决这个问题。
<script>
var timer = setInterval(function () {
// executing some ajax to call php url
// which is check for the response status
$.ajax({
....
success: function(data) {
// check if the response is finished
clearInterval(timer);
}
....
});
});
</script>
答案 1 :(得分:0)
我认为这种方式(使用循环和卷曲调用)是不可预测的,不可扩展的。如果每秒钟会有大量的导入操作怎么办?如果您需要很长时间的导入操作怎么办?我认为您必须使用一些库来创建和处理后台作业(here),并且您的服务器必须使用套接字与浏览器(用户)通信(例如,queueing systems)。