Как отдавать файл с произвольным именем? - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB89.7026
BTC/USD67831.0975
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 22.01.2013, 13:24   #1
inkubus
Senior Member
 
Аватар для inkubus
 
Регистрация: 11.02.2010
Сообщений: 928
Бабло: $176835
По умолчанию Как отдавать файл с произвольным именем?

На моем сайте лежит файл, http://domain.com/win7.exe

Как сделать чтобы юзеру отдавался файл с именем который есть в урле по которому он перешел?
Например зашел по урлу http://domain.com/getfile.php?file=blah-blah-blah получил файл blah-blah-blah_win7.exe
зашел по http://domain.com/getfile.php?file=123123 получил файл 123123_win7.exe

Т.е. как в файловых партнерках сделано

в php не силен, нагуглить толком не получилось.
inkubus вне форума  
Старый 22.01.2013, 13:33   #2
medar
кодер-энтузиаст
 
Аватар для medar
 
Регистрация: 04.04.2007
Адрес: Джамайка
Сообщений: 3,381
Бабло: $447150
По умолчанию

getfile.php :
PHP код:
$filename "/path/to/win7.exe";
$blah $_GET['file'];
if(isset(
$_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) header('Content-Type: application/force-download');
else  
header('Content-Type: application/octet-stream');
header("Content-Description: File Transfer");
$len filesize($filename);
header("Content-Length: ".$len);
header('Content-disposition: attachment; filename="'.$blah.'_win7.exe"');
readfile($filename); 
medar вне форума  
Старый 22.01.2013, 13:34   #3
groos
Ебланнед
 
Регистрация: 18.01.2013
Сообщений: 44
Бабло: $8330
По умолчанию

Цитата:
Сообщение от inkubus Посмотреть сообщение
На моем сайте лежит файл, http://domain.com/win7.exe

Как сделать чтобы юзеру отдавался файл с именем который есть в урле по которому он перешел?
Например зашел по урлу http://domain.com/getfile.php?file=blah-blah-blah получил файл blah-blah-blah_win7.exe
зашел по http://domain.com/getfile.php?file=123123 получил файл 123123_win7.exe

Т.е. как в файловых партнерках сделано

в php не силен, нагуглить толком не получилось.

Вот так:

PHP код:
<?php

file_force_download
(basedir(__FILE__) . "/pathtofile/file.exe");

function 
file_force_download($file) {
  if (
file_exists($file)) {
    
// сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
    // если этого не сделать файл будет читаться в память полностью!
    
if (ob_get_level()) {
      
ob_end_clean();
    }
    
// заставляем браузер показать окно сохранения файла
    
header('Content-Description: File Transfer');
    
header('Content-Type: application/octet-stream');
    
header('Content-Disposition: attachment; filename=' $_GET['file'] . "_win7.exe");
    
header('Content-Transfer-Encoding: binary');
    
header('Expires: 0');
    
header('Cache-Control: must-revalidate');
    
header('Pragma: public');
    
header('Content-Length: ' filesize($file));
    
// читаем файл и отправляем его пользователю
    
readfile($file);
    exit;
  }
}
?>
__________________
groos = VadCrot = http://www.gofuckbiz.com/showpost.php?p=850317&postcount=97

Последний раз редактировалось groos; 22.01.2013 в 13:39.
groos вне форума  
Старый 22.01.2013, 13:36   #4
mirikas
Senior Member
 
Аватар для mirikas
 
Регистрация: 25.12.2008
Сообщений: 1,099
Бабло: $272735
По умолчанию

потер))))
mirikas вне форума  
Старый 22.01.2013, 15:52   #5
inkubus
Senior Member
 
Аватар для inkubus
 
Регистрация: 11.02.2010
Сообщений: 928
Бабло: $176835
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от medar Посмотреть сообщение
getfile.php :
PHP код:
$filename "/path/to/win7.exe";
$blah $_GET['file'];
if(isset(
$_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) header('Content-Type: application/force-download');
else  
header('Content-Type: application/octet-stream');
header("Content-Description: File Transfer");
$len filesize($filename);
header("Content-Length: ".$len);
header('Content-disposition: attachment; filename="'.$blah.'_win7.exe"');
readfile($filename); 
почему-то добавляет пробел первым символом в файле.
где поправить?
inkubus вне форума  
Старый 22.01.2013, 15:55   #6
rushter
Senior Member
 
Регистрация: 28.11.2009
Сообщений: 1,800
Бабло: $299365
По умолчанию

Цитата:
location = /driver.exe {
root /var/www/catalog;
internal;
}
location ~ ^/sdownload/(.*)$ {
set $fname $1;
add_header 'Content-Disposition' 'attachment;filename=$fname';
rewrite ^ /driver.exe last;
}
Если с nginx дело имел, то поймёшь куда пихать.
Отдаёт фаил driver.exe с любым именем по запросу downloads/filename.exe

Php не очень хорошая идея использовать, нагузка всётаки приличная от этого.
rushter вне форума  
Старый 22.01.2013, 16:09   #7
sspy
главный злодей гофака
 
Аватар для sspy
 
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953848
По умолчанию

Offtopic
__________________
sspy вне форума  
Старый 22.01.2013, 16:16   #8
rushter
Senior Member
 
Регистрация: 28.11.2009
Сообщений: 1,800
Бабло: $299365
По умолчанию

Цитата:
Сообщение от sspy Посмотреть сообщение
Offtopic
Православный nginx с апачем не ровняй
rushter вне форума  
Старый 22.01.2013, 18:52   #9
inkubus
Senior Member
 
Аватар для inkubus
 
Регистрация: 11.02.2010
Сообщений: 928
Бабло: $176835
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от rushter Посмотреть сообщение
Если с nginx дело имел, то поймёшь куда пихать.
Отдаёт фаил driver.exe с любым именем по запросу downloads/filename.exe

Php не очень хорошая идея использовать, нагузка всётаки приличная от этого.
c nginx к сожалению дел не имел, мне бы на php решение, чтобы на любом шареде работало.


первый вариант кода добавляет пробел в начало файла, второй не смог запустить.

помогите - люди добрые
inkubus вне форума  
Старый 22.01.2013, 18:55   #10
dealer
me gusta
 
Аватар для dealer
 
Регистрация: 01.06.2009
Сообщений: 746
Бабло: $135376
По умолчанию

Цитата:
Сообщение от inkubus Посмотреть сообщение
первый вариант кода добавляет пробел в начало файла, второй не смог запустить.
$blah = $_GET['file'];
замени на
$blah = trim($_GET['file']);
__________________
Знать путь и пройти его — не одно и то же. Pharmcash & PharmcashUSA - знаем, проходили... Лидеры в фарме
dealer вне форума