Intereting Posts
Как отключить / включить плагины? Как авто Войти и перенаправление после регистрации в yii? Содержимое ведра S3 не попадает в список до последнего Как защитить контроллер от прямого доступа? Обновление движка приложения разбивает CloudStorage в dev php env Допустимо ли распространять функции библиотеки PHP исключительно для изменения имен? Конкретный японский символ не отображается правильно в PDF почему ob_start () должен опережать session_start () для работы в PHP? Добавить дополнительный текст в конце всех ссылок в определенном классе Получение измененной модели обхода дерева предзаказов (вложенный набор) в <ul> Значения по умолчанию для типов данных varchar и int mysql отметьте все флажки Пользовательские сеансы с Joomla Как извлечь фреймы анимированного GIF с помощью PHP показать отдельную запись на новой странице с отправкой идентификатора строки

Служебный файл, размещенный на другом сервере, для загрузки

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

У меня будет файл url как:

http://img.ruphp.com/php/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 (Check Example1 на http://php.net/manual/en/function.readfile.php ), но я не знаю, как размер файла и mimetype, как я могу получить уверенность в том, что файл будет загружаться должным образом?

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

Я полагаю, вы можете использовать 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); 
  1. хранить файл за пределами веб-корня
  2. filesize (filename) получит размер файла
  3. в качестве вашей принудительной загрузки вам не нужно знать тип mime