如何在PHP的后台运行cURL请求?

AL-*_*teb 3 php curl background

我正在尝试使用PHP和cURL扩展名构建某种基于Web的下载管理器,但是我遇到了一个问题,如何在不让用户等待的情况下使用cURL下载和保存文件,这意味着他将该请求,它将在后台处理。

现在我不能使用系统调用(exec,system等),因为我使用的大多数主机都禁用了这些功能,另一个问题是PHP脚本的最大执行时间,但是我想可以更改此脚本在.htaccess或使用ini_set还是可以吗?

我在某处读到将connect_timeout设置为1会起作用,但是那不终止连接吗?

一种解决方案是使用cronjobs,在用户提交要下载的文件后,cronjob将检查数据库,并且队列中是否有文件将开始下载,但我想我想避免使用cron job可能。

回到主要问题,是否有一种方法可以告诉php脚本在后台运行某些功能,并将响应传递给用户,而不管该功能的结果如何

谢谢

joe*_*erx 5

我认为已经有其他帖子探讨了这些选项。鉴于您的限制,我看到了另外两种方法:

  • `http://www.paul-norman.co.uk/2009/06/asynchronous-curl-requests/`此链接已失效:( (4认同)
  • @harishsharma 这里是存档链接:https://web.archive.org/web/20181010063625/http://www.paul-norman.co.uk/2009/06/asynchronous-curl-requests 但这些方法不不为我工作:( (2认同)

小智 5

        function background_curl_request($url, $method, $post_parameters){
            if (is_array($post_parameters)){
                $params = "";
                foreach ($post_parameters as $key=>$value){
                    $params .= $key."=".urlencode($value).'&';
                }
                $params = rtrim($params, "&");
            } else {
                $params = $post_parameters;
            }
            $command = "/usr/bin/curl -X '".$method."' -d '".$params."' --url '".$url."' >> /dev/shm/request.log 2> /dev/null &";
            exec($command);
        }
Run Code Online (Sandbox Code Playgroud)