Несколько сообщений PHP cUrl на одной странице

Таким образом, суть в том, что мне нужно отправить XML-запрос данных на страницу шлюза, чтобы получить ответ XML, который будет обрабатываться позже, может быть где угодно от 3-60 запросов к этой веб-службе, я, к сожалению, должен запустить простой цикл прямо сейчас и делать их по одному. На стороне ответа мне понадобится только 1 (или максимум 5) строк в ответе, строка 2 – это первая строка, в которой мне нужны данные изображения. Поэтому мне хотелось бы выбрать, какие строки я читаю, если это вообще возможно.

Я создал простую функцию «Чтение», как я уже сказал, из базового цикла, вот код, который я сейчас использую, и хотел бы пересмотреть.


 $ part1 = 'XML Beginning';  $ part2 = XML End ';
 $ posts = array (0 => 'SC-010052214', 1 => 'SC-000032972', 2 => 'SC-012535460', 3 => 'SC-011257289', 4 => 'SC-010134078') ;


  $ ch = curl_init ();

   curl_setopt ($ ch, CURLOPT_URL, 'http://example.com/index.php');
   curl_setopt ($ ch, CURLOPT_RETURNTRANSFER => 1);
   curl_setopt ($ ch, CURLOPT_POST, 1);

  $ count = count ($ posts);
  for ($ i = 0; $ i <$ count; $ i ++) {

   curl_setopt ($ ch, CURLOPT_POSTFIELDS, "payload = $ part1 {$ posts [$ i]} $ part2");
   $ return [] = curl_exec ($ ch);

   }
  curl_close ($ ch); 

 print_r ($ возврата);

Ограничения: Я не могу использовать post = $ data0 & post = $ data1 & post = $ data3, к сожалению, поэтому мне нужно лучшее решение. Помимо этого, я хотел бы посмотреть, какие улучшения могут быть сделаны здесь.

Возможно, http://php.net/manual/en/function.curl-multi-init.php поможет вам

Из-за ограничений в быстром ответе,

 <? PHP

 функция m_curl ($ input) {

         // компилировать запросы для используемых мест
         foreach ($ input ['content'] как $ pos => $ item) {
             $ query = '<childDetailQuery> <запрос> <запрос-замена>';
             $ query. = "<item_number> {$ item} </ item_number>";

                     $ query. = (isset ($ input ['story']) && $ input ['story']! = NULL) 
                                 ?  "<Story_type>". $ Вход [ 'история']. "</ Story_type>"
                                 : '<story_type> SHORT </ story_type>';

                     $ query. = (isset ($ input ['party']) && $ input ['party']! = NULL) 
                                 ?  "<Party_number>". $ Вход [ 'сторона']. "</ Party_number>"
                                 : '';

             $ query. = "</ query-replacement> <latency-tolerance> NONE </ latency-tolerance>";
             $ query. = '</ request> </ childDetailQuery>';

         $ query [] = $ query;
                 снята с охраны ($ запроса);
         }


         // убедитесь, что окно катания не больше, чем число URL-адресов
         $ limit = 10;
         $ limit = (sizeof ($ queries) <$ limit)?  sizeof ($ queries): $ limit;

         $ master = curl_multi_init ();
         $ curl_arr = array ();

             // добавьте дополнительные параметры завитка
             $ std_options = array (
                 CURLOPT_RETURNTRANSFER => 1,
                 CURLOPT_FOLLOWLOCATION => 1,
                 CURLOPT_MAXREDIRS => 0,
             );

         $ options = ($ coptions)?  ($ std_options + $ coptions): $ std_options;

         echo $ input ['location'];
         // запускаем первую партию запросов
         for ($ i = 0; $ i <$ limit; $ i ++) {
             $ ch = curl_init ();

                 $ options [CURLOPT_POSTFIELDS] = "payload =". $ query [$ i];

             curl_setopt_array ($ ч, $ вариантов);
             curl_multi_add_handle ($ master, $ ch);
         }

         делать {
             while (($ execrun = curl_multi_exec ($ master, $ running)) == CURLM_CALL_MULTI_PERFORM);
                 if ($ execrun! = CURLM_OK) {
                                     echo 'Curl Error';  ломать;
                 }


             // запрос был только что завершен - узнать, какой из них
             while ($ done = curl_multi_info_read ($ master)) {
                 $ info = curl_getinfo ($ done ['handle']);
                 if ($ info ['http_code'] == 200) {
                     $ output = curl_multi_getcontent ($ done ['handle']);

                     // запрос успешно.  выход процесса с использованием функции обратного вызова.
                     parse_returns ($ выход);

                     // запускаем новый запрос (важно сделать это, прежде чем удалять старый)
                     $ ch = curl_init ();
                     $ options [CURLOPT_POSTFIELDS] = "payload =". $ query [$ i ++];  // приращение i
                     curl_setopt_array ($ ч, $ вариантов);
                     curl_multi_add_handle ($ master, $ ch);

                     // удаляем только что завершенный
                     curl_multi_remove_handle ($ master, $ done ['handle']);

                 } else {

                     echo 'Не удалось:';  var_dump ($ информация);
                     echo 'С параметрами:';  var_dump ($ вариантов);

                     // запрос не выполнен.  добавьте обработку ошибок.
                 }
             }
         } while ($ running);

         curl_multi_close ($ мастер);
         return false;
 }

 функция parse_returns ($ data) {
     print_r ($ данных);
 }

 // задать номера запросов
 $ data = array (
     0 => 'SC-010052214',
     1 => 'SC-000032972',
     2 => 'SC-012535460',
     3 => 'SC-011257289',
     4 => 'SC-010134078'
 );

 // набор опций array
 $ options = array (
     'location' => 'http://ibudev.wvus.org/websvc/actions/wvsMessageRouter.php',
     'readline' => 2,
     'coptions' => NULL,
     'content' => $ data,
     'story' => 'FULL',
     'party' => NULL,
 );


 m_curl ($ вариантов);

 ?>