Hier een http socket class

[COLOR= #0000BB]<?php[/COLOR]
[COLOR= #FF8000]/**
* Socket communication class.
*
* Originally designed for use with DirectAdmins API, this class will fill any HTTP socket need.
*
* Very, very basic usage:
* $Socket = new HTTPSocket;
* echo $Socket->get(http://user:pass@somesite.com/somedir/some.file?query=string&this=that);
*
* @author Phi1 l0rdphi1 Stier <l0rdphi1@liquenox.net>
* @package HTTPSocket
* @version 2.7
*/[/COLOR]
[URL="http://www.php.net/class"]class[/URL] HTTPSocket [COLOR= #007700]{
var[/COLOR] [COLOR= #0000BB]$version[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]2.7[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #FF8000]/* all vars are private except $error, $query_cache, and $doFollowLocationHeader */[/COLOR]
[COLOR= #007700]var[/COLOR] [COLOR= #0000BB]$method[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]GET[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$remote_host[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$remote_port[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$remote_uname[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$remote_passwd[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$result[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$result_header[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$result_body[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$result_status_code[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$lastTransferSpeed[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$bind_host[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$error[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();
var[/COLOR] [COLOR= #0000BB]$warn[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();
var[/COLOR] [COLOR= #0000BB]$query_cache[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();
var[/COLOR] [COLOR= #0000BB]$doFollowLocationHeader[/COLOR] [COLOR= #007700]=[/COLOR] TRUE[COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$redirectURL[/COLOR][COLOR= #007700];
var[/COLOR] [COLOR= #0000BB]$extra_headers[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
[COLOR= #FF8000]/**
* Create server "connection".
*
*/[/COLOR]
[COLOR= #007700]function[/COLOR] connect[COLOR= #007700]([/COLOR][COLOR= #0000BB]$host[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$port[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][URL="http://www.php.net/is_numeric"]is_numeric[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$port[/COLOR][COLOR= #007700]))
{[/COLOR]
[COLOR= #0000BB]$port[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]80[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_host [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$host[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_port [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$port[/COLOR][COLOR= #007700];
}
function[/COLOR] bind[COLOR= #007700]([/COLOR] [COLOR= #0000BB]$ip[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$ip[/COLOR] [COLOR= #007700]==[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$ip[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]SERVER_ADDR[/COLOR][COLOR= #007700]];
}[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]bind_host [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$ip[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Change the method being used to communicate.
*
* @param string|null request method. supports GET, POST, and HEAD. default is GET
*/[/COLOR]
[COLOR= #007700]function[/COLOR] set_method[COLOR= #007700]([/COLOR] [COLOR= #0000BB]$method[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]GET[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]method [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/strtoupper"]strtoupper[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$method[/COLOR][COLOR= #007700]);
}[/COLOR]
[COLOR= #FF8000]/**
* Specify a username and password.
*
* @param string|null username. defualt is null
* @param string|null password. defualt is null
*/[/COLOR]
[COLOR= #007700]function[/COLOR] set_login[COLOR= #007700]([/COLOR] [COLOR= #0000BB]$uname[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$passwd[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$uname[/COLOR][COLOR= #007700]) >[/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_uname [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$uname[/COLOR][COLOR= #007700];
}[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$passwd[/COLOR][COLOR= #007700]) >[/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_passwd [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$passwd[/COLOR][COLOR= #007700];
}
}[/COLOR]
[COLOR= #FF8000]/**
* Query the server
*
* @param string containing properly formatted server API. See DA API docs and examples. Http:// URLs O.K. too.
* @param string|array query to pass to url
* @param int if connection KB/s drops below value here, will drop connection
*/[/COLOR]
[COLOR= #007700]function[/COLOR] query[COLOR= #007700]([/COLOR] [COLOR= #0000BB]$request[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$doSpeedCheck[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]error [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]warn [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_status_code [COLOR= #007700]=[/COLOR] NULL[COLOR= #007700];[/COLOR]
[COLOR= #FF8000]// is our request a http:// ... ?[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][URL="http://www.php.net/preg_match"]preg_match[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]!^http://!i[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$request[/COLOR][COLOR= #007700]))
{[/COLOR]
[COLOR= #0000BB]$location[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/parse_url"]parse_url[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$request[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]connect[COLOR= #007700]([/COLOR][COLOR= #0000BB]$location[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]host[/COLOR][COLOR= #007700]],[/COLOR][COLOR= #0000BB]$location[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]port[/COLOR][COLOR= #007700]]);[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]set_login[COLOR= #007700]([/COLOR][COLOR= #0000BB]$location[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]user[/COLOR][COLOR= #007700]],[/COLOR][COLOR= #0000BB]$location[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]pass[/COLOR][COLOR= #007700]]);[/COLOR]
[COLOR= #0000BB]$request[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$location[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]path[/COLOR][COLOR= #007700]];[/COLOR]
[COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$location[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]query[/COLOR][COLOR= #007700]];[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$request[/COLOR][COLOR= #007700]) <[/COLOR] [COLOR= #0000BB]1[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$request[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]/[/COLOR][COLOR= #007700];
}
}[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR]
[COLOR= #DD0000]User-Agent[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]"HTTPSocket/$this->version"[/COLOR][COLOR= #007700],[/COLOR]
[COLOR= #DD0000]Host[/COLOR] [COLOR= #007700]=> ([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_port [COLOR= #007700]==[/COLOR] [COLOR= #0000BB]80[/COLOR] [COLOR= #007700]?[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_host [COLOR= #007700]:[/COLOR] [COLOR= #DD0000]"$this->remote_host:$this->remote_port"[/COLOR] [COLOR= #007700]),[/COLOR]
[COLOR= #DD0000]Accept[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]*/*[/COLOR][COLOR= #007700],[/COLOR]
[COLOR= #DD0000]Connection[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]Close[/COLOR] [COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/foreach"]foreach[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]extra_headers [COLOR= #007700]as[/COLOR] [COLOR= #0000BB]$key[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]$value[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]$key[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #0000BB]$value[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_header [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_body [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #FF8000]// was content sent as an array? if so, turn it into a string[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][URL="http://www.php.net/is_array"]is_array[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]))
{[/COLOR]
[COLOR= #0000BB]$pairs[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
[URL="http://www.php.net/foreach"]foreach[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]as[/COLOR] [COLOR= #0000BB]$key[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]$value[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$pairs[/COLOR][COLOR= #007700][] =[/COLOR] [COLOR= #DD0000]"$key="[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/urlencode"]urlencode[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$value[/COLOR][COLOR= #007700]);
}[/COLOR]
[COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/join"]join[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]&[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$pairs[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/unset"]unset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$pairs[/COLOR][COLOR= #007700]);
}[/COLOR]
[COLOR= #0000BB]$OK[/COLOR] [COLOR= #007700]=[/COLOR] TRUE[COLOR= #007700];[/COLOR]
[COLOR= #FF8000]// instance connection[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]bind_host[COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$socket[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/socket_create"]socket_create[/URL][COLOR= #007700]([/COLOR]AF_INET[COLOR= #007700],[/COLOR] SOCK_STREAM[COLOR= #007700],[/COLOR] SOL_TCP[COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/socket_bind"]socket_bind[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]bind_host[COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](!@[/COLOR][URL="http://www.php.net/socket_connect"]socket_connect[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_host[COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_port[COLOR= #007700]))
{[/COLOR]
[COLOR= #0000BB]$OK[/COLOR] [COLOR= #007700]=[/COLOR] FALSE[COLOR= #007700];
}
}[/COLOR]
[URL="http://www.php.net/else"]else[/URL]
[COLOR= #007700]{[/COLOR]
[COLOR= #0000BB]$socket[/COLOR] [COLOR= #007700]= @[/COLOR][URL="http://www.php.net/fsockopen"]fsockopen[/URL][COLOR= #007700]([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_host[COLOR= #007700],[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_port[COLOR= #007700],[/COLOR] [COLOR= #0000BB]$sock_errno[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$sock_errstr[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]10[/COLOR] [COLOR= #007700]);
}[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]( ![/COLOR][COLOR= #0000BB]$socket[/COLOR] [COLOR= #007700]|| ![/COLOR][COLOR= #0000BB]$OK[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]error[COLOR= #007700][] =[/COLOR] [COLOR= #DD0000]"Cant create socket connection to $this->remote_host:$this->remote_port."[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]0[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]// if we have a username and password, add the header[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_uname[COLOR= #007700]) &&[/COLOR] [URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_passwd[COLOR= #007700]) )
{[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]Authorization[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #DD0000]Basic [/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/base64_encode"]base64_encode[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"$this->remote_uname:$this->remote_passwd"[/COLOR][COLOR= #007700]);
}[/COLOR]
[COLOR= #FF8000]// for DA skins: if $this->remote_passwd is NULL, try to use the login key system[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_uname[COLOR= #007700]) &&[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]remote_passwd [COLOR= #007700]==[/COLOR] NULL [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]Cookie[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #DD0000]"session={$_SERVER[SESSION_ID]}; key={$_SERVER[SESSION_KEY]}"[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]// if method is POST, add content length & type headers[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]method [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]POST[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]Content-type[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #DD0000]application/x-www-form-urlencoded[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]Content-length[/COLOR][COLOR= #007700]] =[/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]);
}[/COLOR]
[COLOR= #FF8000]// else method is GET or HEAD. we dont support anything else right now.[/COLOR]
[URL="http://www.php.net/else"]else[/URL]
[COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$request[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #DD0000]"?$content"[/COLOR][COLOR= #007700];
}
}[/COLOR]
[COLOR= #FF8000]// prepare query[/COLOR]
[COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"$this->method $request HTTP/1.0rn"[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/foreach"]foreach[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$array_headers[/COLOR] [COLOR= #007700]as[/COLOR] [COLOR= #0000BB]$key[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]$value[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$query[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #DD0000]"$key: $valuern"[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #0000BB]$query[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #DD0000]"rn"[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #FF8000]// if POST we need to append our content[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]method [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]POST[/COLOR] [COLOR= #007700]&&[/COLOR] [COLOR= #0000BB]$content[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$query[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #DD0000]"$contentrnrn"[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]// query connection[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]bind_host[COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/socket_write"]socket_write[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$query[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #FF8000]// now load results[/COLOR]
[URL="http://www.php.net/while"]while[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$out[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/socket_read"]socket_read[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]2048[/COLOR][COLOR= #007700]) )
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result [COLOR= #007700].=[/COLOR] [COLOR= #0000BB]$out[/COLOR][COLOR= #007700];
}
}[/COLOR]
[URL="http://www.php.net/else"]else[/URL]
[COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/fwrite"]fwrite[/URL][COLOR= #007700]([/COLOR] [COLOR= #0000BB]$socket[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700],[/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$query[/COLOR][COLOR= #007700]) );[/COLOR]
[COLOR= #FF8000]// now load results[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lastTransferSpeed [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$status[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/socket_get_status"]socket_get_status[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$startTime[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/time"]time[/URL][COLOR= #007700]();[/COLOR]
[COLOR= #0000BB]$length[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$prevSecond[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/while"]while[/URL] [COLOR= #007700]( ![/COLOR][URL="http://www.php.net/feof"]feof[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700]) && ![/COLOR][COLOR= #0000BB]$status[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]timed_out[/COLOR][COLOR= #007700]] )
{[/COLOR]
[COLOR= #0000BB]$chunk[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/fgets"]fgets[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]1024[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$length[/COLOR] [COLOR= #007700]+=[/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$chunk[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result [COLOR= #007700].=[/COLOR] [COLOR= #0000BB]$chunk[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$elapsedTime[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/time"]time[/URL][COLOR= #007700]() -[/COLOR] [COLOR= #0000BB]$startTime[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$elapsedTime[/COLOR] [COLOR= #007700]>[/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lastTransferSpeed [COLOR= #007700]= ([/COLOR][COLOR= #0000BB]$length[/COLOR]/[COLOR= #0000BB]1024[/COLOR][COLOR= #007700])[/COLOR]/[COLOR= #0000BB]$elapsedTime[/COLOR][COLOR= #007700];
}[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$doSpeedCheck[/COLOR] [COLOR= #007700]>[/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700]&&[/COLOR] [COLOR= #0000BB]$elapsedTime[/COLOR] [COLOR= #007700]>[/COLOR] [COLOR= #0000BB]5[/COLOR] [COLOR= #007700]&&[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lastTransferSpeed [COLOR= #007700]<[/COLOR] [COLOR= #0000BB]$doSpeedCheck[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]warn[COLOR= #007700][] =[/COLOR] [COLOR= #DD0000]"kB/s for last 5 seconds is below 50 kB/s (~"[/COLOR][COLOR= #007700].( ([/COLOR][COLOR= #0000BB]$length[/COLOR]/[COLOR= #0000BB]1024[/COLOR][COLOR= #007700])[/COLOR]/[COLOR= #0000BB]$elapsedTime[/COLOR] [COLOR= #007700]).[/COLOR][COLOR= #DD0000]"), dropping connection..."[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_status_code [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]503[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/break"]break[/URL][COLOR= #007700];
}
}[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lastTransferSpeed [COLOR= #007700]==[/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lastTransferSpeed [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$length[/COLOR]/[COLOR= #0000BB]1024[/COLOR][COLOR= #007700];
}
}[/COLOR]
[URL="http://www.php.net/list"]list[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_header[COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_body[COLOR= #007700]) =[/COLOR] [URL="http://www.php.net/preg_split"]preg_split[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"/rnrn/"[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result[COLOR= #007700],[/COLOR][COLOR= #0000BB]2[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]bind_host[COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/socket_close"]socket_close[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700]);
}[/COLOR]
[URL="http://www.php.net/else"]else[/URL]
[COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/fclose"]fclose[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$socket[/COLOR][COLOR= #007700]);
}[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]query_cache[COLOR= #007700][] =[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$headers[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]fetch_header[COLOR= #007700]();[/COLOR]
[COLOR= #FF8000]// what return status did we get?[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_status_code[COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/preg_match"]preg_match[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"#HTTP/1.. (d+)#"[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]],[/COLOR][COLOR= #0000BB]$matches[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_status_code [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$matches[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]1[/COLOR][COLOR= #007700]];
}[/COLOR]
[COLOR= #FF8000]// did we get the full file?[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]( ![/COLOR][URL="http://www.php.net/empty"]empty[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]content-length[/COLOR][COLOR= #007700]]) &&[/COLOR] [COLOR= #0000BB]$headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]content-length[/COLOR][COLOR= #007700]] !=[/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_body[COLOR= #007700]) )
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_status_code [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]206[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]// now, if were being passed a location header, should we follow it?[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]doFollowLocationHeader[COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][URL="http://www.php.net/empty"]empty[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]location[/COLOR][COLOR= #007700]]))
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]redirectURL [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]location[/COLOR][COLOR= #007700]];[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]query[COLOR= #007700]([/COLOR][COLOR= #0000BB]$headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]location[/COLOR][COLOR= #007700]]);
}
}
}
function[/COLOR] getTransferSpeed[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lastTransferSpeed[COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* The quick way to get a URLs content :)
*
* @param string URL
* @param boolean return as array? (like PHPs file() command)
* @return string result body
*/[/COLOR]
[COLOR= #007700]function[/COLOR] get[COLOR= #007700]([/COLOR][COLOR= #0000BB]$location[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$asArray[/COLOR] [COLOR= #007700]=[/COLOR] FALSE [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]query[COLOR= #007700]([/COLOR][COLOR= #0000BB]$location[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]get_status_code[COLOR= #007700]() ==[/COLOR] [COLOR= #0000BB]200[/COLOR] [COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$asArray[/COLOR][COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [URL="http://www.php.net/preg_split"]preg_split[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"/n/"[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]fetch_body[COLOR= #007700]());
}[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]fetch_body[COLOR= #007700]();
}[/COLOR]
[URL="http://www.php.net/return"]return[/URL] FALSE[COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Returns the last status code.
* 200 = OK;
* 403 = FORBIDDEN;
* etc.
*
* @return int status code
*/[/COLOR]
[COLOR= #007700]function[/COLOR] get_status_code[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_status_code[COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Adds a header, sent with the next query.
*
* @param string header name
* @param string header value
*/[/COLOR]
[COLOR= #007700]function[/COLOR] add_header[COLOR= #007700]([/COLOR][COLOR= #0000BB]$key[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$value[/COLOR][COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]extra_headers[COLOR= #007700][[/COLOR][COLOR= #0000BB]$key[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #0000BB]$value[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Clears any extra headers.
*
*/[/COLOR]
[COLOR= #007700]function[/COLOR] clear_headers[COLOR= #007700]()
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]extra_headers [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();
}[/COLOR]
[COLOR= #FF8000]/**
* Return the result of a query.
*
* @return string result
*/[/COLOR]
[COLOR= #007700]function[/COLOR] fetch_result[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result[COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Return the header of result (stuff before body).
*
* @param string (optional) header to return
* @return array result header
*/[/COLOR]
[COLOR= #007700]function[/COLOR] fetch_header[COLOR= #007700]([/COLOR] [COLOR= #0000BB]$header[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$array_headers[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/preg_split"]preg_split[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"/rn/"[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_header[COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$array_return[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR] [COLOR= #0000BB]0[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]] );[/COLOR]
[URL="http://www.php.net/unset"]unset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$array_headers[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]]);[/COLOR]
[URL="http://www.php.net/foreach"]foreach[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$array_headers[/COLOR] [COLOR= #007700]as[/COLOR] [COLOR= #0000BB]$pair[/COLOR] [COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/list"]list[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$key[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$value[/COLOR][COLOR= #007700]) =[/COLOR] [URL="http://www.php.net/preg_split"]preg_split[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"/: /"[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]$pair[/COLOR][COLOR= #007700],[/COLOR][COLOR= #0000BB]2[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$array_return[/COLOR][COLOR= #007700][[/COLOR][URL="http://www.php.net/strtolower"]strtolower[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$key[/COLOR][COLOR= #007700])] =[/COLOR] [COLOR= #0000BB]$value[/COLOR][COLOR= #007700];
}[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR] [COLOR= #0000BB]$header[/COLOR] [COLOR= #007700]!=[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$array_return[/COLOR][COLOR= #007700][[/COLOR][URL="http://www.php.net/strtolower"]strtolower[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$header[/COLOR][COLOR= #007700])];
}[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$array_return[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Return the body of result (stuff after header).
*
* @return string result body
*/[/COLOR]
[COLOR= #007700]function[/COLOR] fetch_body[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_body[COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Return parsed body in array format.
*
* @return array result parsed
*/[/COLOR]
[COLOR= #007700]function[/COLOR] fetch_parsed_body[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/parse_str"]parse_str[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]result_body[COLOR= #007700],[/COLOR][COLOR= #0000BB]$x[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$x[/COLOR][COLOR= #007700];
}
}[/COLOR]