Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   PHP-download (http://forum.oszone.net/showthread.php?t=30167)

Mitiai 02-11-2003 18:11 207618

Подскажите как на php сделать download файла.
например, чтобы вызывать

download.php?<параметр отвечающи за то, что хотим скачать>

и после выполнения download.php, открывалось окно с предложением
сохранения файла.


или киньте ссылку где это описано.


Спасибо, Дмитрий

Prisoner 02-11-2003 22:04 207619

Вот что-то валяется.

Mitiai 10-11-2003 22:29 207620

Ну вот вроде получилось, протестировал в IE, Opera, FlashGet

скрипт вызывается так: <URL путь к скрипту>download.php?file=1
т.е. для будущего предусмотрел параметр file, который будет принимать
и другие значения, не только "1".

<?
switch ($file)
  {
   case 1:
        $URL_download = 'Полный путь к файлу';
        $file_name='Имя файла, обычное, например prog.zip';
break;
  default:
    $URL_download = '';
  }

if ($URL_download!='')
{

if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'], $log_version)) {
define('BROWSER_USER_VER', $log_version[2]);
define('BROWSER_USER_AGENT', 'OPERA');
} else if (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'], $log_version)) {
define('BROWSER_USER_VER', $log_version[1]);
define('BROWSER_USER_AGENT', 'IE');
} else if (ereg('OmniWeb/([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'], $log_version)) {
define('BROWSER_USER_VER', $log_version[1]);
define('BROWSER_USER_AGENT', 'OMNIWEB');
} else if (ereg('Mozilla/([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'], $log_version)) {
define('BROWSER_USER_VER', $log_version[1]);
define('BROWSER_USER_AGENT', 'MOZILLA');
} else if (ereg('Konqueror/([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'], $log_version)) {
define('BROWSER_USER_VER', $log_version[1]);
define('BROWSER_USER_AGENT', 'KONQUEROR');
} else {
define('BROWSER_USER_VER', 0);
define('BROWSER_USER_AGENT', 'OTHER');
}

$mime_type = (BROWSER_USER_AGENT == 'IE' || BROWSER_USER_AGENT == 'OPERA')
? 'application/octetstream'
: 'application/octet-stream';


$file_size=filesize($URL_download);

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: ' . $mime_type);
header('Accept-Ranges: bytes');
header("Content-Length: ".$file_size);
header('Content-Disposition: inline; filename="'.$URL_download.'"');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header("Content-Transfer-Encoding: binary");

$fp = fopen($URL_download, 'rb');
$file_buffer = fread($fp, $file_size);
fclose ($fp);
print $file_buffer;

exit();
} else
{
 echo "File not found! Please change 'file' variable value!";
}
?>



Для того, чтобы вывести текст, а потом автоматом загружать файл,
я сделал следующее:

1. Создал файл info.php (вызывается тоже с параметром file,
  например <URL путь к скрипту>info.php?file=1
2. Этот файл выводит через обычные "echo" содержимое будущего
  html-файла. Ссылку на загрузку, если автоматическая не
  началась, т.к. такое возможно, если JavaScript отключить в
  браузере.
3. И в последок на OnLoad тела навешиваем функцию, в которой
  вызываем window.location = 'download.php?file=1, вот и всё.


Всем огромное спасибо.

Prisoner 11-11-2003 01:34 207621

Mitiai, на будущее просьба выводить какой-либо код в теге code. В противном случае некоторые элементы вашего кода могут быть отображены некорректно.


Время: 09:39.

Время: 09:39.
© OSzone.net 2001-