如果没有回复,请拨打网址并继续

时间:2017-03-10 18:19:23

标签: php url curl cron

我有一个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);

2 个答案:

答案 0 :(得分:1)

只要您不想执行阻止I / O的进程,您将无法使用php本身执行此操作 - 。

你可以通过javascript setIntervalsetTimeout的一些帮助来解决这个问题。

<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)。