У меня есть простой, но критический вопрос (критический для моего приложения)
У меня будет файл 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);