最も基本的な方法は次のとおりです。
$url = "http://other-site/image.png";
$dir = "/my/local/dir/";
$rfile = fopen($url, "r");
$lfile = fopen($dir . basename($url), "w");
while(!feof($url)) fwrite($lfile, fread($rfile, 1), 1);
fclose($rfile);
fclose($lfile);
ただし、これを何度も実行している場合(またはホストがリモートシステムへのファイルアクセスをブロックしている場合)は、CURLの使用を検討してください。これは、より効率的で、やや高速で、より多くの共有ホストで利用できます。
また、ユーザーエージェントを偽装して、ボットではなくデスクトップのように見せることもできます。
$url = "http://other-site/image.png";
$dir = "/my/local/dir/";
$lfile = fopen($dir . basename($url), "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
curl_setopt($ch, CURLOPT_FILE, $lfile);
fclose($lfile);
curl_close($ch);
どちらの場合も、GDを通過させて、実際に画像であることを確認することをお勧めします。