运行 PHP + 用户中止后在后台卷曲

Run PHP + Curl in background after user abort

我有一家在线商店,我使用在线会计软件手动 post 下订单。网上记账软件很大api我想客户下单的时候自动发过来

订单完成后,客户会进入成功页面,即 successpage.php

在此页面中,我有以下内容:

$sendOrder = file_get_contents("https://myonlinestore.com/sendorder.php?order=1234");

在 sendorder.php,我收到 $_GET 参数 "order" 这是订单号,我处理了几个 SQL 请求以从中检索订单数据数据库。

获得所有这些数据后,我将启动一个 CURL post 以使用会计系统的 API 发送数据。

这是我的代码的简化版本,其中包含基本部分:

$orderNum = htmlspecialchars($_GET["order"]) // SENT OVER FILE_GET_CONTENTS

// bOf process SQL here and get order info stored in various variables
// EXECUTE SQL HERE
// eOf process SQL here and get order info stored in various variables

$invoice = array(
'customer_id' => $custaccount,
'estimate_number' => $orderRef,
'reference_number' => $orderNum
// MANY OTHER VARIABLES ENTERED HERE, BUT LEFT OUT TO KEEP THINGS SHORT
);

$jsonInvoice = json_encode($invoice);


$url = 'https://ACCOUTINGAPP.com/api/v2/orders';

$data = array(
'authtoken'  => '***********',
'JSONString'  => $jsonInvoice,
'company_id' => '***********'     

);


$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded") );

$response = false;

$response = curl_exec($ch);
curl_close($ch);


// TEST RESPONSE

if($response !== false) {

var_dump($response);
}
else
{
echo "oops error hehehe";
}

我主要关心的问题:

我希望用户在打开 successpage.php 后立即关闭选项卡或页面。

但我想确保 successpage.php 的 $sendOrder = file_get_contents() 和它在 sendorder.php 上执行的代码继续 运行 而不管用户连接。

所以我的问题是,我应该放在哪里:

ignore_user_abort(TRUE);

另外,我应该使用输出缓冲吗?我之所以这么问,是因为我在其他网站上读到过 post 相关内容,它建议这样做。

最后,我应该包括:

set_time_limit(0);

尽快致电 ignore_user_abort(TRUE);。而且你不需要输出缓冲,因为一旦浏览器选项卡关闭,任何人都不会看到你的输出,所以你只需要确保你的脚本继续执行,如果它已经在做任何事情。