On hosts with safe_mode turned on, it can be difficult to get remote files with a system call to wget or curl. Here is a PHP function that will get a file with an HTTP GET. I use it to download remote images. It returns the binary data in a variable that can be written to a file.
function http_get_file($url) {
$url_stuff = parse_url($url);
$port = isset($url_stuff['port']) ? $url_stuff['port']:80;
$fp = fsockopen($url_stuff['host'], $port);
$query = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
$query .= 'Host: ' . $url_stuff['host'];
$query .= "\n\n";
fwrite($fp, $query);
while ($line = fread($fp, 1024)) {
$buffer .= $line;
}
preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
return substr($buffer, - $parts[1]);
}
?>
Original function found on php.net
Update: 3-Feb-11
Updated function to download a remote file with PHP and cURL.
Popularity: 48%
{ 7 comments… read them below or add one }
What about 2GB file download. I don’t think $buffer variable is able to handle this much of binary data and then save later on disk.. do you have any idea about this.. please share..
Why dont u use FTP then. 2GB file is not for http small packets.
If I tell you solution for 2GB then you will ask tomorrow “what
about 25GB file I have on server” .. there is no end to your demands.
How to read excel data with php ?
Why not just do file_get_contents() ?
how can i downlaod file using PHP??
wat is the code/script for it??
please help me..
Salamo Alikom
@iallien
use curl ,it is more easy since the knowledge of HTTP protocol is optional .
Yes cURL would be easier, but the caveat in the first sentence of the post is that this is a workaround when cURL is not available on the host or other security features prevent other methods of downloading a remote file.
Back in 2005 when this was written, cURL was not as standard as it is now.
{ 2 trackbacks }