Okay, I attached the code. Not everyone will click the paste bin link. :P
the code is a downloading function of a class.
the class has some methods need to be explained.
1) $this->debugMessage, it sends message to a call back function to a caller
2) $this->doCallback, sends the amount of bytes read to a call back function
to the caller\
3) $this->localfilename is the file where the remote file will be downloaded
4) $this->lfp is localfilepointer
5) read_chunk_size = 512
6) $headers is a predefined array of headers
7) $postdata is the url encoded data to send by post method.
Here is the code....
_________________________________________________________________________
$this->lfp = fopen($this->localfilename,"wb");
if($this->lfp===false){return false;}
if(function_exists('fsockopen')){
$pu = parse_url($this->download_url);
$request="POST {$pu['path']} HTTP/1.1\r\n";
$request.="Host: {$pu['host']}\r\n";
$request.="Content-type:
application/x-www-form-urlencoded\r\n";
$request.=implode("\r\n",$headers)."\r\n";
$request.="Connection: close\r\n";
$request.="Content-length: ".strlen($postdata)."\r\n\r\n";
$sock = fsockopen($pu['host'],80,$errno,$errstr);
fwrite($sock,$request);
$this->debugMessage("Headers Sent\r\n".$request);
fwrite($sock,$postdata);
$headers="";
do{
$headers.=fread($sock,128);
}while(strpos($headers,"\r\n\r\n")===false);
$pos = strpos($headers,"\r\n\r\n");
$headers = split("\r\n\r\n",$headers);
$headers = $headers[0];
$this->debugMessage("Headers recieved".$headers."\r\n");
$this->debugMessage("Downloading started. . .\r\n");
$content = substr($headers,$pos+4);
if($content!==false){
$this->doCallback(fwrite($this->lfp,$content));
}
while(!feof($sock)){
$this->doCallback(fwrite($this->lfp,fread($sock,$this->read_chunk_size)));
}
$this->debugMessage("Download finished\r\n");
fclose($sock);
}else {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$this->download_url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
if(!empty($this->cookiefile)){
curl_setopt($ch, CURLOPT_COOKIEFILE,
$this->cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR,
$this->cookiefile);
}
curl_setopt($ch,CURLOPT_FILE,$this->lfp);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postdata);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_exec($ch);
curl_close($ch);
}
fclose($this->lfp);
_________________________________________________________________________
--
Blog: http://talk.cmyweb.net/
Follow me: http://twitter.com/shiplu