| 
<?php
 /**************************************************************************************
 
 class Thread
 
 version: 1.0
 
 by:Alex Lau
 
 email:[email protected]
 
 If you have any questions, feel free to ask me.
 
 
 
 In this class, there are six properties
 
 var $func;  //The function name that you want to call
 
 var $arg;    //The arguments you want to pass in
 
 var $thisFileName; //This file's name
 
 var $fp;    //File pointer
 
 var $host;    //Host
 
 var $port;    //Port
 
 And there are four methods,
 
 void Thread(string $host, [int $port = 80]) // constructor
 
 void setFunc(string $func,array $arg)
 
 $func is a string of the function name
 
 $arg is an array of the arguments
 
 Usage:
 
 $arg = array ( 2, 3);
 
 $func = "test";
 
 The method will call test(2,3).
 
 void start()                  To start the thread
 
 mixed getreturn()              To get the return value from the function that called by setFunc
 
 void setPort()                  To set the port
 
 void setHost()                  To set the host
 
 
 
 Since serialize() does not support the resource type, this class cannot be used to pass in or return the resource type.
 
 **************************************************************************************/
 
 
 
 class Thread{
 
 var $func;
 
 var $arg;
 
 var $thisFileName;
 
 var $fp;
 
 var $host;
 
 var $port;
 
 function Thread($host,$port=""){
 
 $this->host = $host;
 
 if ($port != ""){
 
 $this->port = $port;
 
 }else{
 
 $this->port = 80;
 
 }
 
 $this->thisFileName = $_SERVER["SCRIPT_NAME"];
 
 }
 
 function setFunc($func,$arg=false){
 
 $i=0;
 
 $this->arg = "";
 
 if ($arg){
 
 foreach ($arg as $argument){
 
 $this->arg .= "&a[]=".urlencode(serialize($argument));
 
 }
 
 }
 
 $this->func = $func;
 
 }
 
 function setPort($port){
 
 $this->port = $port;
 
 }
 
 function setHost($host){
 
 $this->host = $host;
 
 }
 
 function start(){
 
 $this->fp = fsockopen($this->host,$this->port);
 
 $header = "GET ".$this->thisFileName."?threadrun=1&f=".urlencode($this->func).$this->arg." HTTP/1.1\r\n";
 
 $header .= "Host: ".$this->host."\r\n";
 
 $header .= "Connection: Close\r\n\r\n";
 
 fputs($this->fp,$header);
 
 }
 
 function getreturn(){
 
 $flag=false;
 $output ="";
 
 while (!feof($this->fp)) {
 
 $buffer = fgets($this->fp, 4096);
 
 if ($flag){
 
 $output .= $buffer;
 
 }
 
 if (trim($buffer) == ""){
 
 $flag = true;
 
 }
 
 }
 
 return unserialize(trim($output));
 
 }
 
 }
 
 if (isset($_GET['threadrun'])){
 
 $arg = array();
 
 if (isset($_GET['a'])){
 
 foreach($_GET['a'] as $argument){
 if (get_magic_quotes_gpc() == 1)
 
 $arg[] = unserialize(stripslashes($argument));
 else
 $arg[] = unserialize($argument);
 
 }
 
 }
 $return = call_user_func_array($_GET["f"], $arg);
 
 echo serialize($return);
 
 exit;
 
 }
 
 
 
 ?>
 |