cURL响应文件的一部分 - 大JSON文件 - PHP

时间:2015-11-06 15:26:27

标签: php json curl

我正在尝试将大量数据从我的服务器转移到门户网站。 数据是一个JSON,包含大约1000篇文章的数据。 显然,数据很大,可以一气呵成。

我尝试增加所有参数以增加超时限制,但它不起作用:

set_time_limit(0);
ini_set('memory_limit','1024M');
ini_set('max_execution_time', 1200);

我的PHP代码:

$oJsonResponse = json_decode(call_API(json_encode($oJsonMessage)));

function call_API($data)
{
    $API_URL = "~some url~";
    $ch = curl_init($API_URL);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'data='.$data);

    $return = curl_exec($ch);
    return $return;
}

我想尝试的是发送部分cURL请求的响应。 有可能吗?

PS: 我正在使用数据表来显示数据,如果我可以显示第一部分并且在我得到它时加载其余部分会很棒,但我猜PHP不是那种语言?

1 个答案:

答案 0 :(得分:0)

您需要从远程服务器逐段获取数据。请查看以下建议的代码。

$page = 0;
$resp = true;
while ($resp) {
    $page++;
    $resp = call_API(json_encode($oJsonMessage), $page);
    //consume your data
    if ($resp) {
        $data = json_decode($resp);
    }
}

function call_API($data, $page) {
    $API_URL = "~some url~";
    $ch = curl_init($API_URL);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'data=' . $data . '&page=' . $page);

    $return = curl_exec($ch);
    //Test for end of result here before returning a value
    return empty($return) ? false : $return;
}

理论上,远程服务器上的代码看起来像这样。

$data = $_POST['data'];
$page = $_POST['page'];
$itemsPerPage = 200;
$offset = ($page - 1) * $itemsPerPage + 1;
$resp = $db->getFunction($data, $offset, $itemsPerPage);
echo $resp ? json_encode($resp) : '';