Home  >  Article  >  Backend Development  >  Application of curl_multi in php multi-process

Application of curl_multi in php multi-process

大家讲道理
大家讲道理Original
2017-05-28 09:37:581815browse

I believe many people have a headache about the functions of the curl_multi family that are unclear in PHP Manual. They have few documents and the examples given are so simple that you can’t learn from them. I have also I searched many web pages but could not find a complete application example.

  • curl_multi_add_handle

  • curl_multi_close

  • ##curl_multi_exec

  • curl_multi_getcontent

  • ##curl_multi_info_read
  • ##curl_multi_init
  • ##curl_multi_remove_handle

  • curl_multi_select

  • Generally speaking, when you think of using these functions, the purpose should obviously be to request multiple URLs at the same time, rather than one by one. Request, otherwise it is better to

    loop
  • to adjust curl_exec yourself.

The steps are summarized as follows: Step one: Call curl_multi_init

Step two: Call curl_multi_add_handle in a loop

It should be noted in this step that the second parameter of curl_multi_add_handle is given by Subhandle from curl_init.

Step 3: Continuously call curl_multi_exec

Step 4: Cyclically call curl_multi_getcontent to obtain the results as needed
Step 5: Call curl_multi_remove_handle, and call curl_close for each word handle
Step 6: Call curl_multi_close

Here is a simple example found online, the author calls it
dir
ty example, (I will explain why dirty later):

/*
Here's a quick and dirty example for curl-multi from PHP, tested on PHP 5.0.0RC1 CLI / FreeBSD 5.2.1
*/
Application of curl_multi in php multi-process##$conno<img src=mains = array(
"http://www.cnn.com /",Application of curl_multi in php multi-process ($connomains as $i => $url) { $conn[$i]=curl_init($url);
curl_se
topt($conn[$i],CURLOPT_RETURNTRANSFER ,1); curl_multi_add_handle ($mh,$conn[$i]);
}
Application of curl_multi in php multi-process##do { $n=curl_multi_exec($ mh,$active); } <img src=while
($active);
foreach ($connomains as $i => $url) {Application of curl_multi in php multi-process      $res[$i]=curl_multi_getcontent($conn[$i]);<img src=
print
_r($res);

The whole usage process is almost like this. However, this simple code has a fatal weakness, which is in the do loop. That section is an infinite loop during the entire URL request, which can easily cause the CPU to occupy 100%.

Now let's improve it. Here we need to use a function curl_multi_select that has almost no documentation. Although C's curl library has instructions for select, the

interface

and usage in php It is indeed different from C.

Change the do section above to the following:

do {
                                                                                                                                                                                                                                       because ULTI_PERFORM);
While ($ Active and $ Mrc == CURLM_OK) { IF (CURL_MultI_SELECT ($ MH)! = --1) {
## Do {Application of curl_multi in php multi-process$ Mrc = Curl_multi_exec ($ MH, $ Active); <img src=set

opt before curl_multi_add_handle :

curl_setopt($ch, CURLOPT_

TIME

OUT, $timeout);

To determine whether there is a timeout or other errors, use: curl_error($conn[$i] before curl_multi_getcontent );

The above is the detailed content of Application of curl_multi in php multi-process. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn