Heim php教程 php手册 php中foreach curl实现多线程例子

php中foreach curl实现多线程例子

May 26, 2016 am 08:20 AM
foreach request

多线程是php不支持的但我们可以通过foreach来伪多线程了,但这个伪多线程速度不一定比单线程要单到哪里去了,具体来看个例子。

在利用foreach语句循环图片URL,并通过CURL将所有图片进行本地保存的函数时 ,出现了只能采集到一个的问题。现将foreach和CURL结合进行多URL请求的方法进行下总如。

方法1:循环请求

1

2

3

4

5

6

7

8

9

10

$sr=array(url_1,url_2,url_3);

foreach ($sr as $k=>$v) {

    $curlPost=$v.'?f=传入参数';

    $ch = curl_init($curlPost) ;

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回

    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回

    $data = curl_exec($ch) ;

    echo $k.&#39;##:&#39;.$data.&#39;<br>&#39;;

}

curl_close($ch);

Nach dem Login kopieren

上面代码需要特别注意的是,curl_close 一定要放在foreach循环结束的外面,如果放在里面的话,就会出现我上面提到的多个IMGURL ,只能采集到一个URL的问题。

方法2:多线程循环

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<?php

multi_threads_request($nodes){

$mh = curl_multi_init();

$curl_array = array();

foreach($nodes as $i => $url)

{

$curl_array[$i] = curl_init($url);

curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);

curl_multi_add_handle($mh, $curl_array[$i]);

}

$running = NULL;

do {

usleep(10000);

curl_multi_exec($mh,$running);

} while($running > 0);

$res = array();

foreach($nodes as $i => $url)

{

$res[$url] = curl_multi_getcontent($curl_array[$i]);

}

foreach($nodes as $i => $url){

curl_multi_remove_handle($mh, $curl_array[$i]);

}

curl_multi_close($mh);

return $res;

}

print_r(multi_threads_request(array(

    &#39;http://www.phprm.com&#39;,

    &#39;http://qq.phprm.com&#39;,

));

Nach dem Login kopieren

这里主要利用curl_multi_init()实现多个url 的请求,不过由于php自身并不支持多线程。所以伪多线程速度也不见得会比单线程快。


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Apr 27, 2023 pm 03:40 PM

Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList?

So bestimmen Sie die Anzahl der foreach-Schleifen in PHP So bestimmen Sie die Anzahl der foreach-Schleifen in PHP Jul 10, 2023 pm 02:18 PM

So bestimmen Sie die Anzahl der foreach-Schleifen in PHP

Was bedeutet PHP-Anfrage? Was bedeutet PHP-Anfrage? Jul 07, 2021 pm 01:49 PM

Was bedeutet PHP-Anfrage?

Was ist das Request-Objekt in PHP? Was ist das Request-Objekt in PHP? Feb 27, 2024 pm 09:06 PM

Was ist das Request-Objekt in PHP?

So verwenden Sie die Funktion urllib.request.urlopen() zum Senden einer GET-Anfrage in Python 3.x So verwenden Sie die Funktion urllib.request.urlopen() zum Senden einer GET-Anfrage in Python 3.x Jul 30, 2023 am 11:28 AM

So verwenden Sie die Funktion urllib.request.urlopen() zum Senden einer GET-Anfrage in Python 3.x

Die Rolle und Bedeutung von Request in PHP Die Rolle und Bedeutung von Request in PHP Feb 27, 2024 pm 12:54 PM

Die Rolle und Bedeutung von Request in PHP

PHP gibt ein Array mit umgedrehten Schlüsseln zurück PHP gibt ein Array mit umgedrehten Schlüsseln zurück Mar 21, 2024 pm 02:10 PM

PHP gibt ein Array mit umgedrehten Schlüsseln zurück

So kapseln Sie den Vue3 Axios-Interceptor in eine Anforderungsdatei So kapseln Sie den Vue3 Axios-Interceptor in eine Anforderungsdatei May 19, 2023 am 11:49 AM

So kapseln Sie den Vue3 Axios-Interceptor in eine Anforderungsdatei

See all articles