для браузера отдавать прямой юрл не проще? А у себя в фоне спокойненько закачать.
вообще можно начать с того, что
$file= fopen("http://127.0.0.1/testfile.txt", "r");
открывает удалённый юрл, так же открываем локальный файл на запись
$savefile = fopen("testfile.txt", "w");
затем задаём заголовки, что бы браузер понял, что это файл
header('Content-Type: application/octet-stream');
header('Content-Disposition: filename='.$fileName);
затем спокойненько читаем файл, при этом отдавая и клиенту
while(!feof($file)) //-- пока не конец файла
{
$data = fread($file); //-- читаем
print $data; //-- отдаём в браузер
fwrite($savefile, $data); //-- записываем прочитанное в локальный файл
}
//-- закрываем файлы
fclose($file);
fclose($savefile);
Это просто быстрый набросок, на работоспособность не проверял, так же нужно скорее всего дополнить необходимые заголовки.
Хотя может я вообще не прав и тогда стоит смотреть в сторону curl
Так же стоит учесть - время выполнения скрипта может выйти за лимит сервера и он убьётся так и не докачав.