PHP multi-threading classes and usage examples, php multi-threading examples
The examples in this article describe PHP multi-threading classes and their usage. Share it with everyone for your reference. The specific analysis is as follows:
Generally speaking, PHP multi-threading functions can be implemented through a WEB server. Of course, anyone with a deep understanding of multi-threading knows that multi-threading through a WEB server can only imitate some of the effects of multi-threading, not in the true sense. Multi-threading.
But no matter what, it can still meet some of our needs. If you need functions similar to multi-threading, you can still use this class. The code is as follows:
Copy code The code is as follows:
/**
* @title: PHP多线程类(Thread)
* @version: 1.0
*
* PHP多线程应用示例:
* require_once 'thread.class.php';
* $thread = new thread();
* $thread->addthread('action_log','a');
* $thread->addthread('action_log','b');
* $thread->addthread('action_log','c');
* $thread->runthread();
*
* function action_log($info) {
* $log = 'log/' . microtime() . '.log';
* $txt = $info . "rnrn" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn";
* $fp = fopen($log, 'w');
* fwrite($fp, $txt);
* fclose($fp);
* }
*/
class thread {
var $hooks = array();
var $args = array();
function thread() {
}
function addthread($func)
{
$args = array_slice(func_get_args(), 1);
$this->hooks[] = $func;
$this->args[] = $args;
return true;
}
function runthread()
{
if(isset($_GET['flag']))
{
$flag = intval($_GET['flag']);
}
if($flag || $flag === 0)
{
call_user_func_array($this->hooks[$flag], $this->args[$flag]);
}
else
{
for($i = 0, $size = count($this->hooks); $i < $size; $i++)
{
$fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']);
if($fp)
{
$out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn";
$out .= "Host: {$_SERVER['HTTP_HOST']}rn";
$out .= "Connection: Closernrn";
fputs($fp,$out);
fclose($fp);
}
}
}
}
}
How to use, the code is as follows:
Copy code The code is as follows:
$thread = new thread();
$thread->addthread('func1','info1');
$thread->addthread('func2','info2');
$thread->addthread('func3','info3');
$thread->runthread();
Description:
addthread() is to add a thread function. The first parameter is the function name, and the subsequent parameters (optional) are the parameters passed to the specified function.
runthread() is the function of executing thread.
PHP Example: Using curl to implement multi-threaded image downloading
is actually a multi-threaded class implemented by PHP using curl. With this class, we can also use this class to perform multi-threaded tasks. The code is as follows:
Copy code The code is as follows:
class curl_multi{
Private $url_list=array();
Private $curl_setopt=array(
'CURLOPT_RETURNTRANSFER' => 1,//The result is returned to the variable
'CURLOPT_HEADER' => 0,//Whether HTTP header needs to be returned
'CURLOPT_NOBODY' => 0,//Whether the returned content is required
‘CURLOPT_FOLLOWLOCATION’ => 0,//Automatic tracking
'CURLOPT_TIMEOUT' => 6//Timeout time (s)
);
Function __construct($seconds=30){
set_time_limit($seconds);
}
/*
* Set URL
* @list array
*/
Public function setUrlList($list=array()){
$this->url_list=$list;
}
/*
* Set parameters
* @cutPot array
*/
Public function setOpt($cutPot){
$this->curl_setopt=$cutPot+$this->curl_setopt;
}
/*
* Execute
* @return array
*/
Public function execute(){
$mh=curl_multi_init();
foreach($this->url_list as $i=>$url){
$conn[$i]=curl_init($url);
foreach($this->curl_setopt as $key => $val){
curl_setopt($conn[$i],preg_replace('/(CURLOPT_w{1,})/ie','$0',$key),$val);
curl_multi_add_handle($mh,$conn[$i]);
$active=false;
do{
$mrc=curl_multi_exec($mh,$active);
}while($mrc == CURLM_CALL_MULTI_PERFORM);
while($active and $mrc == CURLM_OK){
If(curl_multi_select($mh) != -1){
$mrc=curl_multi_exec($mh,$active);
}while($mrc == CURLM_CALL_MULTI_PERFORM);
$res=array();
foreach($this->url_list as $i => $url){
$res[$i]=curl_multi_getcontent($conn[$i]);
curl_close($conn[$i]);
curl_multi_remove_handle($mh,$conn[$i]);//Release resources
curl_multi_close($mh);
return $res;
}
}
PHP uses multi-threaded download class example to download remote images, the code is as follows:
Copy code
The code is as follows:
$curl_mul=new curl_multi();
$curl_mul->setUrlList(array('http://www.bkjia.com/img/logo.jpg','http://www.bkjia.com/img/logo.jpg','http:// www.bkjia.com/img/logo.jpg'));
$a=$curl_mul->execute();
$i=1;
foreach($a as $v){
$filename=$i.'.gif';
$fp2=@fopen($filename,'a');
fwrite($fp2,$v);
fclose($fp2);
$i++;
}
I hope this article will be helpful to everyone’s PHP programming design.
http://www.bkjia.com/PHPjc/920982.html
www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/920982.htmlTechArticlePHP multi-threaded classes and usage examples, php multi-threaded examples This article describes PHP multi-threaded classes and usage. Share it with everyone for your reference. The specific analysis is as follows: Generally speaking, it can be done through WEB service...