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

Sophia

Новичок
помогите исправить header (чтобы не показывал содержимое файла, а начинал закачку)

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

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

RIFFZ•♀ AVI LISTм◄ hdrlavih8 $ф ► T ☺ _☻ `☺
LIST"► strlstrh8 vidsdivx ☺ ► T ^_ ►'
_☻`☺strf( ( _☻ `☺ ☺ ↑ DX50 _¶ JUNK↑►

и так далее...

вот собственно сам скрипт:

PHP:
    $filesize = filesize($realDLfolder.$path.$filename);
    if (ereg(".mp3",$filename)){$xtype="audio/mpeg";}
    elseif(ereg(".zip",$filename)){$xtype="application/x-zip-compressed";}
    elseif(ereg(".exe",$filename)){$xtype="application/octet-stream";}
    elseif(ereg(".txt",$filename)){$xtype="text/plain charset='us-ascii'";}
    elseif(ereg(".doc",$filename)){$xtype="application/msword";}
    elseif(ereg(".xls",$filename)){$xtype="application/vnd.ms-excel";}
    elseif(ereg(".ppt",$filename)){$xtype="application/vnd.ms-powerpoint";}
    elseif(ereg(".gif",$filename)){$xtype="image/gif";}
    elseif(ereg(".png",$filename)){$xtype="image/png";}
    elseif(ereg(".jpg",$filename)){$xtype="image/jpg";}
    elseif(ereg(".wav",$filename)){$xtype="audio/x-wav";}
    elseif(ereg(".mpe",$filename)){$xtype="video/mpeg";}
    elseif(ereg(".mov",$filename)){$xtype="video/quicktime";}
    elseif(ereg(".avi",$filename)){$xtype="video/x-msvideo";}
    else { $xtype="application/force-download"; }

	$fp=@fopen($realDLfolder.$path.$filename,"rb");
	if ($fp) {
	// Create the headers used for downloading the file
	header("Content-Transfer-Encoding: binary");
	header("Expires: 0");
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
	header("Content-Type: ".$xtype);
	header("Accept-Ranges: bytes");				
	header("Content-Disposition: attachment; filename=\"".$filename."\";");
	header("Content-Length: ".$filesize);	
	// Actually start downloading the file
	while (!feof($fp)) { 
   	echo(@fgets($fp, 4096)); } 
	fclose ($fp);
	}
	else { 
	echo "There was a problem downloading that file!<br><font color='red'>".$path.$filename."</font><br><br><a href='".$badreferrer."'>Click here to get a proper link!</a>"; exit; }
я пробовала просто заменить в нем .avi на что-то другое - это не помогает...

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

я где-то читала, что force-download 2-х кратно увеличивает траффик с сайта... так ли это в моем случае?
путь к файлу указан без домена в начале ("file/")
 

WP

^_^
/me тянет руку
А зачем такие извращения с Content-Type?
header('Content-Type: application/force-download');
 

AmdY

Пью пиво
Команда форума
ereg это полный пипец. во первых регулярка неверная, во-вторых preg_match работает быстрее, в третих - регулярка здесь уместна, как стрельба с пушки по мошке.
 

dimagolov

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

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

Sophia

Новичок
ничего не получается...

я заменила все строчки header на header('Content-Type: application/force-download');

потом добавляла к ней и писала вместо нее header('Content-disposition: attachment; filename="' . $filename . '"');

результат тот же - начинает показывать содержимое файла :(

последний неработаюший вариант выглядит так:
PHP:
<?php
require "config.inc.php";

$filename = stripslashes($_REQUEST['file']);
$path = $_REQUEST['path'];

$refr = getenv("HTTP_REFERER");
list($remove,$stuff)=split('//',$refr,2);
list($domain,$stuff)=split('/',$stuff,2);

if(in_array($domain, $approvedDomains)!="1"){
  echo "You are not permitted to download that file!<br><a href='".$badreferrer."'>Click here to get a proper link!</a>"; exit; }
  else {
  if(is_file($realDLfolder.$path.$filename)!==true){
  echo "That file can't be found!<br><font color='red'>".$path.$filename."</font><br><br><a href='".$badreferrer."'>Click here to get a proper link!</a>"; exit; }
  else {
    // File exists, referrer checks out, and file is accessible to webserver... Let's download!
    $filesize = filesize($realDLfolder.$path.$filename);
    if (ereg(".mp3",$filename)){$xtype="audio/mpeg";}
    elseif(ereg(".hd",$filename)){$xtype="video/x-msvideo";}
    else { $xtype="application/force-download"; }

	$fp=@fopen($realDLfolder.$path.$filename,"rb");
	if ($fp) {
	// Create the headers used for downloading the file
	header('Content-disposition: attachment; filename="' . $filename . '"'); 
	// Actually start downloading the file
	while (!feof($fp)) { 
   	echo(@fgets($fp, 4096)); } 
	fclose ($fp);
	}
	else { 
	echo "There was a problem downloading that file!<br><font color='red'>".$path.$filename."</font><br><br><a href='".$badreferrer."'>Click here to get a proper link!</a>"; exit; }
    } 
}
?>
я опять что-то не так делаю?

так происходит со всеми файлами - и с расширением .avi и .rar

-~{}~ 11.08.07 02:44:

Автор оригинала: dimagolov
нет, это был не поток сознания. Sophia сама код не пишет. Она его находит по разным форумам и лепит в кучу не особо разбираясь что и зачем он делает. вот такой и результат выходит...

ой. мне тут подумалось что же это за фильмы для узкого круга друзей она выкладывает..... никак учебные пособия наверное :)
ну да... пытаюсь слепить из разных скриптов...

когда доделаю сайт - я напишу Вам его адрес, чтобы Вы попробовали его взломать :)
 

Sophia

Новичок
взламывать ничего не нужно...

помогите - почему скрипт неправитльно продолжает работать?
 

Sophia

Новичок
т.е. ты не видишь сразу, что в нем могло бы быть не так? жалко...

я просто думала, что здесь осталась какая-то ошибка, которую можно легко исправить...
 

WP

^_^
> т.е. ты не видишь сразу, что в нем могло бы быть не так?
Из чего сие следует?
> жалко...
Т.е. в конечном счете ты хочешь чтобы за тебя решили задачу и дали тебе готовый код?
> я просто думала, что здесь осталась какая-то ошибка, которую можно легко исправить...
Вот и найди.

http://www.youtube.com/watch?v=p9jEHEt5s8g
 

kruglov

Новичок
Попробуйте начать с простого, со скрипта из 3 строк максимум. Где ничего не проверяется, никакие параметры не ловятся, чисто выдается один-единственный предопределенный файл. Добейтесь, чтобы это работало.
Потом начинайте расширять функциональность, убедившись, что постепенные добавления ничего не ломают.
 

WP

^_^
;) А вообще достаточно прочесть мой первый пост в этой теме.
 

Ermitazh

Новичок
если такая ерунда вводится то значит header не передаётся вообще...
 

March

Новичок
Автор оригинала: Ermitazh
если такая ерунда вводится то значит header не передаётся вообще...
Идеологически неправильный ответ, значение хидера передаётся всегда, другое дело что здесь он передаётся как text\html
 
Сверху