download на файл от database

jamal

Registered
Здравейте,

Имам един проблем от известно време със скрипт за сваляне на файл от база данни. Скрипта, който виждате по-долу, незнайно защо винаги при прoчитането му започва да сваля index.php, а не файла, който отговаря на id. Мисля, че хедърите, които изпращам са правилните. Вижте сами :

PHP:
if( isset($_GET['download']) ) {


       if( is_numeric($_GET['id']) ) { $id = $_GET['id']; } else { /*dobavqne na za6titata */  } 
	  
	  
if( isset($id) ) {

       $zaqvka6 = "SELECT id,kat_uni,kat_spec,ime_file,type,materiali,size FROM drugo.materiali WHERE id='$id'"; 
	   
	   $rezultat = mysql_query($zaqvka6);
	   
	   
	   list($id,$uni,$spec,$name,$type,$file,$size) = mysql_fetch_assoc($rezultat); 
	   
	   
	   
	   $open = fopen($file,"rb"); 
	   
	   
	   
	   header("Content-Type: $type");
	   
	   header("Content-Description: file transfer");
	   
	   header("Content-Transfer-Encoding: binary");
	   
	   header("Content-Lenght: $size");
	   
	   header("Cache-control: private");
	   
	   header("Content-Disposition: attachment; filename = $name");
	   
	   fread($file); 
	   
	   fclose($open);


Ще ви бъда много благодарен ако ми кажете къде ми е грешката. Този скрипт ме мъчи вече от много време.

Поздрави
 
А защо да не слага header-и ?
Ако просто препрати и файлът е да речем текстов документ ще му го отвори в браузъра а няма да му даде да го сваля.
А с header-и ще му излезе прозорец за сваляне на файла ;)
Отнася се и за други видове файлове.
 
Най-накрая намерих решението на проблема със свалянето на файл от БД!

Сега ще напиша ясно обяснение за тези които в бъдеще ще имат нужда от подобен скрипт и как точно работи той.

След супер много тестове и четене на всякакви неадекватни форуми сам стигнах до решението. Първо файла не се сваля от самата база данни а просто там се съхранява неговата информация за по-лесен достъп до нея в последствие. Файла се намира физически на сървъра (за това трябва при качването му да използвате move_uploaded_file() и да го сложите където желаете). В БД ще сухраниме: MIME тип на файла,името на файла и големината му, за да я ползваме на по-късен етап. А ето и самия скрипт как трябва да изглежда за да работи.

PHP:
if( isset($id) ) {

       $zaqvka6 = "SELECT id,kat_uni,kat_spec,ime_file,type,materiali,size FROM drugo.materiali WHERE id='$id'"; 
	   
	   $rezultat = mysql_query($zaqvka6);
	   
	   
	   list($id,$uni,$spec,$name,$type,$file,$size) = mysql_fetch_array($rezultat); 
	   
	   
	   $path = "download/".$name;	   
	   
	   
	   header("Content-Type: ".$type);
	   
	   header("Content-Description: file transfer");
	   
	   header("Content-Transfer-Encoding: binary");
	   
	   header("Content-Lenght: ".$size);
	   
	   header("Cache-control: public");
	   
	   header("Content-Disposition: attachment; filename = ".$name);
	   
       
       ob_clean();
	   
	   flush();

       readfile($path);	   
	   
	   
    }

Това е всичко, за да сваляте файл качен на сървър!

Някои от съфорумците тук ги бива само да лаят и да се правят на големи разбирачи, вместо да помагат.

Надявам се да съм ви помогнал.
 
Благодарим ти за което, ще ни е от полза решението на проблема :-)
А иначе ... сега разбирам, защо останалите потребители избягват да ти помгата :D
 
:) всъщност почти винаги спазвам етикета за поведение във форума
 

Back
Горе