PHP Запрос CURL для 10K раз с тем же URL - PullRequest
0 голосов
/ 14 июля 2020

У меня есть файлы Excel ок. 1,29 МБ, и он имеет 11500 строк данных.

В моем PHP коде сначала я читаю целые файлы и помещаю их в массивы через библиотеку PHPExcel / IOFactory.

После помещения в foreach l oop я начинаю создавать $ postvars для cUrl.

gonderi_referans=REF&alici=Sarah&alici_telefon=55544448885&alici_adres=Krg&alici_ulke=DE

В foreach l oop код создаст 11500 раз $ postvars и сделает запрос curl.

    $url = "https://$_SERVER[HTTP_HOST]/api572.php";
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST, 1);          
    curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,30);
    curl_setopt($ch,CURLOPT_TIMEOUT, 20);
    $response =json_decode(curl_exec($ch), true);

Эта операция занимает около 5 минут. Я хочу сделать это быстрее. Как я могу это сделать?

Код читает файлы Excel за 10 секунд, запрос curl занимает много раз.

1 Ответ

1 голос
/ 14 июля 2020

Попробуйте использовать пакетную обработку, чтобы минимизировать количество отправленных запросов, в основном c PO C:

excel-reader.php:

    <?php

// Dummy data START
$dummyExcelRows = [];
for ($i = 0; $i <= 11500; $i++) {
    $dummyExcelRows[] = "gonderi_referans=REF&alici=Sarah&alici_telefon=55544448885&alici_adres=Krg&alici_ulke=DE&id=$i";
}
// Dummy data END

// Serialize multiple URI into one string START
$data = [];
foreach ($dummyExcelRows as $postvars) {
    $data[] = $postvars;
}
$dataToSend = ['payload' => json_encode($data)];
// Serialize multiple URI into one string END



$url = "http://$_SERVER[HTTP_HOST]/test/api572.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataToSend);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
//    $response =json_decode(curl_exec($ch), true);
$response = curl_exec($ch);

var_dump($response);

api572.php :

<code><?php

$decoded = json_decode($_POST['payload']);
foreach ($decoded as $row) {
    echo "Do something with $row <br/>";
    echo '<pre>';
    parse_str($row, $fakePost);
    print_r($fakePost);
    echo '
'; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...