<?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; 
 
} 
 
 
 
?> 
 
 |