Запустить curl для 20k в последовательности и сохранить данные в Excel: не удается - PullRequest
0 голосов
/ 19 марта 2020

Мне нужно выполнить около 20 000 запросов на скручивание, извлечь данные из запроса и сохранить их в Excel, используя Spout. Важно то, что мне нужно запускать последовательно и сохранять данные последовательно.

Я установил таймаут PHP на 0, но он все равно не работает. Показывает пустую страницу без предупреждения и без сообщения об успешном завершении, а продукт не сохраняется в файле xls. Если я запускаю его для 1000 продуктов или около того, то он работает нормально. Как я могу это исправить?

После получения XML путем отправки локона я делаю foreach для получения необходимых данных и

$writer->openToFile('products.xlsx');

foreach ($xml->Body->product as $products) {
   $values = [ $products ];
   $rowFromValues = WriterEntityFactory::createRowFromArray($values);
   $writer->addRow($rowFromValues);
}

$writer->close();

function getCurl($url, $soapBody) {
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => $soapBody,
        CURLOPT_HTTPHEADER => array(
            "Content-Type: text/xml",
            "cache-control: no-cache"
        ),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);
    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        curl_close($curl);
        return $response;
    }
}
...