Witam
Mam taki oto problem
Korzystam ze skryptu, ktory wysyła pliki do usera. Niektóre pliki są przeznaczone tylko dla zalogowanych osob, wiec nie mogą być dostępne w prosty sposob przez linka.
oto kod (tak wiem ze juz pokazywalem go z okazji innego pytania)
<?php
private $fileName;
private $filePosition;
private $extension;
public function __construct($newName=''){
$this->fileName=$newName;
$this->extension = strtolower(substr($this->fileName, strripos
($this->fileName,'.')+1
));; $this->fullPatch = 'files/' .$this->fileName;
}
public function sendFileToUser(){
//wysyla plik do przegladarki
$this->prepareHeaderToSend();
$this->sendFile();
}
private function sendFile(){
//wysyla plik
$fp = fopen($this->fullPatch, 'rb'); }
private function prepareHeaderToSend ()
{
//ustawiam Content-Type dla danego pliku
switch ($this->extension)
{
case 'pdf': $type='application/pdf'; break;
case 'exe': $type='application/octet-stream'; break;
case 'zip': $type='application/zip'; break;
case 'doc': $type='application/msword'; break;
case 'xls': $type='application/vnd.ms-excel'; break;
case 'ppt': $type='application/vnd.ms-powerpoint'; break;
case 'gif': $type='image/gif'; break;
case 'png': $type='image/png'; break;
case 'jpeg':
case 'jpg': $type='image/jpg'; break;
case 'mp3': $type='audio/mpeg'; break;
case 'wav': $type='audio/x-wav'; break;
case 'mpeg':
case 'mpg':
case 'mpe': $type='video/mpeg'; break;
case 'mov': $type='video/quicktime'; break;
case 'avi': $type='video/x-msvideo'; break;
//Ponizszych w zadnym wypadku nie mozna sciagac
case 'php':
case 'htm':
case 'html':
throw new Exception('wrong file type');
break;
default: $type='application/force-download';
}
header('Cache-Control: max-age=0'); header('Cache-Control: private'); header('Content-Description: File Transfer'); header('Content-Type: ' .$type);
$tmpName = 'Plik' .date('d-m-y') .'.' .$this->extension; header('Content-Disposition: attachment; filename=' .$tmpName); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.$filesize); }
}
?>
oraz
<?php
$f = new File("plik.pdf"); $f->sendFileToUser();
?>
plik w którym znajduje się ten kod to download.php
i teraz problem.
Klikam na linka do pliku, aby go pobrać - wszystko działa. Po ściagnięciu klikam pobierz ponownie i opera radzi sobie z tym bez problemu, natomiast ff sciąg plik download.php w którym jest zawartość pliku jaki został do niego wysłany (czyli wystarczy zmienić rozszerzenie i jest oki).
Szukałem trochę w googlach, ale nie znalazłem nic ciekawego ;(
Zastanawiam się czy nie zglosić mozilli tego na bugzille, ale wolę jeszcze Was o zdanie zapytać.
Ma ktoś może pomysł co z tym fantem zrobić??
uppps wysłalo sie dwa razy - czy ktoś może to skasować??