Обслуживание файла, размещенного на другом сервере, для загрузки - PullRequest
0 голосов
/ 26 марта 2011

У меня есть простой, но важный вопрос (критический для моего приложения)

У меня будет URL-адрес файла:

http://a.com/b.jpg
http://a.com/b.zip
http://a.com/b.mp3
<or any valid file>

Когда пользователь нажмет на ссылку для загрузки любого конкретногофайл (скажем, b.jpg) на моем сайте, т. е. b.com, пользователь увидит URL как

http://b.com/?f=1

Я не хочу, чтобы пользователь видел исходный URL, и, во-вторых, хочу принудительно загрузить файл,независимо от типа файла

Я знаю, что могу добиться этого с помощью readfile (см. Пример 1 в http://php.net/manual/en/function.readfile.php),, но я не знаю размер файла и тип mime, как я могу получить гарантию, что файл будет загружен правильно?

Пожалуйста, помогите, ребята

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Полагаю, вы можете использовать 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);
0 голосов
/ 26 марта 2011
  1. сохранить файл за пределами корневого веб-узла
  2. размер файла (имя файла) получит размер файла
  3. , поскольку при принудительной загрузке вам не нужно знать тип mime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...