PHP安装threads多线程扩展

php5.3或以上,且为线程安全版本。apache和php使用的编译器必须一致,通过phpinfo()查看Thread Safety为enabled则为线程安全版,通过phpinfo()查看Compiler项可以知道使用的编译器

一、下载pthreads扩展

下载地址:http://windows.php.net/downloads/pecl/releases/pthreads

二、判断PHP是ts还是nts版

通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。

三、根据PHP ts/nts版选择对应pthreads的版本

本人php版本是5.4.17的所以下载php_pthreads-0.1.0-5.4-ts-vc9-x86.zip文件包,其中0.1.0表示为当前pthreads版本号,5.4为php版本号,ts就是之前判断php对应的ts、nts版,vs9代表是Visual Studio 2008 compiler编译器编译的,最后的x86代表的是32位的版本。

四、下载pthreads扩展

下载地址:http://windows.php.net/downloads/pecl/releases/pthreads

五、安装pthreads扩展

复制php_pthreads.dll 到目录 bin/php/ext/ 下面。

复制pthreadVC2.dll 到目录 bin/php/ 下面。

复制pthreadVC2.dll 到目录 C:/windows/system32 下面。

打开php配置文件php.ini。在后面加上extension=php_pthreads.dll

提示!Windows系统需要将 pthreadVC2.dll 所在路径加入到 PATH 环境变量中。我的电脑--->鼠标右键--->属性--->高级--->环境变量--->系统变量--->找到名称为Path的--->编辑--->在变量值最后面加上pthreadVC2.dll的完整路径(本人的为C:/WINDOWS/system32/pthreadVC2.dll)。

六、添加thread类

/
  1. <?php 
  2. class Thread 
  3.   var $hooks = array(); 
  4.   var $args = array(); 
  5.   function thread() 
  6.   { 
  7.   } 
  8.   function addthread($func) 
  9.   { 
  10.     $args = array_slice(func_get_args(), 1); 
  11.     $this->hooks[] = $func; 
  12.     $this->args[] = $args; 
  13.     return true; 
  14.   } 
  15.   function runthread() 
  16.   { 
  17.     if(isset($_GET['flag'])) 
  18.     { 
  19.       $flag = intval($_GET['flag']); 
  20.     } 
  21.     if($flag || $flag === 0) 
  22.     { 
  23.       call_user_func_array($this->hooks[$flag], $this->args[$flag]); 
  24.     } 
  25.     else 
  26.     { 
  27.       for($i = 0, $size = count($this->hooks); $i < $size; $i++) 
  28.       { 
  29.         $fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']); 
  30.         if($fp) 
  31.         { 
  32.           $out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn"; 
  33.           $out .= "Host: {$_SERVER['HTTP_HOST']}rn"; 
  34.           $out .= "Connection: Closernrn"; 
  35.           fputs($fp,$out); 
  36.           fclose($fp); 
  37.         } 
  38.       } 
  39.     } 
  40.   } 

七、测试pthreads扩展

/
  1. include('thread.php'); 
  2. class AsyncOperation extends Thread { 
  3.   public function __construct($arg){ 
  4.     $this->arg = $arg; 
  5.   } 
  6.   public function run(){ 
  7.     if($this->arg){ 
  8.       printf("Hello %s/n", $this->arg); 
  9.     } 
  10.   } 
  11. $thread = new AsyncOperation("World"); 
  12. if($thread->start()) 
  13.   $thread->join(); 

你可能感兴趣的