PHP скрипт занимает слишком много времени - PullRequest
0 голосов
/ 18 октября 2018

У меня есть скрипт, который извлекает данные из другого API.Сценарий занимает слишком много времени при извлечении данных из API около 1 часа 30 минут.Цель этого скрипта - скопировать отзывы и отправить их в другой аккаунт.Сценарий сначала собирает отзывы, а затем на основе идентификатора заказа, полученного из обратной связи, выполняет итерацию этого массива обратной связи, а затем выполняет запрос скручивания к другому API, чтобы получить некоторые данные на основе этого идентификатора заказа.Но этот запрос curl в цикле занимает слишком много времени, чтобы вернуть данные.Обратная связь 3000 вокруг.Как я могу обработать скрипт для возврата данных раньше?

$feedbacks = getFeedbacks();

        if(count($feedbacks)>0){
            foreach($feedbacks as $feedback){
                $getData($feedback->order_id);
            }
        }
function getData($orderId)
{
    $orderId = $orderId;

        $api = "api address here";


    $curl = curl_init($api);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $curl_response = curl_exec($curl);
    $json = json_decode($curl_response);

}

1 Ответ

0 голосов
/ 18 октября 2018

Проблема здесь в том, что когда вы вызываете curl в цикле, второй вызов должен завершиться первым, затем может начаться второй, и это займет много времени. Чтобы исправить это, вы можете использовать (pclose popen), скрипт будет передавать их в фоновом режиме и ввторой сценарий вы можете управлять вашими возвращаемыми данными:

первый сценарий:

<?php 
$feedbacks = getFeedbacks();

        if(count($feedbacks)>0){
            foreach($feedbacks as $feedback){
                $getData($feedback->order_id);
            }
        }
function getData($orderId)
{
    $orderId = $orderId;

     pclose(popen('sudo /usr/bin/php  /home/secondscript.php -o '.$orderId." >/dev/null &", 'r'));

}

второй сценарий:

<?php


 $command_line_args= getopt("o:");

 $orderId=$command_line_args["o"];

   $api = "api address here";


    $curl = curl_init($api);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $curl_response = curl_exec($curl);
    $json = json_decode($curl_response);

    {here u can use the json return ..}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...