Почему PHP Curl с l oop дает 504 Timeout? - PullRequest
0 голосов
/ 04 апреля 2020

Добрый день. Я пытаюсь создать несколько виртуальных карт с массивом json из файла CSV. В файле CSV есть 100 карт, которые я пытаюсь создать. Если я пытаюсь опубликовать все 100 строк в CSV-файле, я получаю ошибку 504. Если я публикую его только с 10 строками, сообщение будет успешно напечатано.

Я размещаю его на учетной записи общего хостинга. Я не могу изменить http.conf или любую другую конфигурацию apache.

Мой CSV-файл

First,Lasy,DOB,Phone,Email,Address 1,Address 2,City,State,Zip,Country
John,Doe,1/1/2000,5555555555,something@example.com,123 something street,,Atlanta,GA,00000,US
Jimmy,Doe,1/1/2000,5555555555,something@example.com,123 something street,,Atlanta,GA,00000,US

Мой код. , .

$handle = fopen('sgvc.csv', 'r')
$header = fgetcsv($handle);
while(($data = fgetcsv($handle)) !== false){

        $sv = '{
      "VirtualCards":[{  
      "FirstName":"'.$data[0].'",  
     "LastName":"'.$data[1].'",  
     "DateOfBirth":"'.$data[2].'", 
    "Phone":"'.$data[3].'", 
     "Email":"'.$data[4].'", 
     "ProfileAddress":{  
      "AddressLine1":"'.$data[5].'", 
       "AddressLine2":"'.$data[6].'", 
       "City":"'.$data[7].'", 
       "State": "'.$data[8].'", 
       "PostalCode":"'.$data[9].'", 
       "Country":"'.$data[10].'", 
       }, 
      "GroupId": ""}]

     }';

        echo $sv;
       $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,  $sv);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
        curl_setopt($ch, CURLOPT_TIMEOUT, 900);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: token ','Content-Type: application/json'));
        $result = curl_exec($ch);
        curl_close($ch);
    }
    fclose($handle);
}

Мое эхо json ..

    { "VirtualCards":[{ "FirstName":"John", "LastName":"Doe", "DateOfBirth":"2/3/1981", "Phone":"5555555555", "Email":"something@example.com", "ProfileAddress":{ "AddressLine1":"123something rd", "AddressLine2":"", "City":"atlanta", "State": "GA", "PostalCode":"00000", "Country":"US", }, "GroupId": "123",}] }
{ "VirtualCards":[{ "FirstName":"John", "LastName":"Doe", "DateOfBirth":"2/3/1981", "Phone":"5555555555", "Email":"something@example.com", "ProfileAddress":{ "AddressLine1":"123something rd", "AddressLine2":"", "City":"atlanta", "State": "GA", "PostalCode":"00000", "Country":"US", }, "GroupId": "123",}] } //...array of json

Я пытался это понять. Например, помещая это в блоки данных или используя stream_context_create. Есть ли лучший способ сделать это, например, 10 строк за раз?

1 Ответ

0 голосов
/ 04 апреля 2020

504 - ошибка тайм-аута шлюза. Поскольку ваш код отправляет запросы последовательно, сценарий php, вероятно, занимает слишком много времени, чтобы ответить. Вы можете попытаться напечатать что-нибудь и flush() это клиенту или сделать запросы curl параллельно.

Вы можете использовать curl_multi для параллельного выполнения запросов curl. Вот пример кода: PHP Параллельные запросы curl

...