Таким образом, суть в том, что мне нужно отправить 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 ($ вариантов); ?>