Полагаю, вы можете использовать cURL для запуска запроса HEAD для целевого URL. Это позволит веб-серверу, на котором размещены целевые файлы, mimetype и длина содержимого файла.
$url = 'http://www.example.com/path/somefile.ext';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true); // make it a HEAD request
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);
$mimeType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
$path = parse_url($url, PHP_URL_PATH);
$filename = substr($path, strrpos($path, '/') + 1);
curl_close($ch);
Затем вы можете записать эти заголовки в HTTP-запрос, сделанный в вашем скрипте:
header('Content-Type: '.$mimeType);
header('Content-Disposition: attachment; filename="'.$filename. '";' );
header('Content-Length: '.$size);
А затем вы добавляете содержимое файла.
readfile($url);