Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czy to bug firefoxa?
Forum PHP.pl > Forum > Po stronie przeglądarki
mrok
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)

  1. <?php
  2. class File {
  3.  
  4. private $fileName;
  5. private $filePosition;
  6. private $extension;
  7.  
  8. public function __construct($newName=''){
  9. $this->fileName=$newName;
  10. $this->extension = strtolower(substr($this->fileName, strripos($this->fileName,'.')+1));;
  11. $this->fullPatch = 'files/' .$this->fileName;
  12. }
  13.  
  14.  
  15. public function sendFileToUser(){
  16. //wysyla plik do przegladarki
  17. $this->prepareHeaderToSend();
  18. $this->sendFile();
  19. }
  20.  
  21. private function sendFile(){
  22. //wysyla plik
  23. $fp = fopen($this->fullPatch, 'rb');
  24. fpassthru($fp);
  25. }
  26.  
  27. private function prepareHeaderToSend ()
  28. {
  29. $filesize = filesize($this->fullPath);
  30. //ustawiam Content-Type dla danego pliku
  31. switch ($this->extension)
  32. {
  33. case 'pdf': $type='application/pdf'; break;
  34. case 'exe': $type='application/octet-stream'; break;
  35. case 'zip': $type='application/zip'; break;
  36. case 'doc': $type='application/msword'; break;
  37. case 'xls': $type='application/vnd.ms-excel'; break;
  38. case 'ppt': $type='application/vnd.ms-powerpoint'; break;
  39. case 'gif': $type='image/gif'; break;
  40. case 'png': $type='image/png'; break;
  41. case 'jpeg':
  42. case 'jpg': $type='image/jpg'; break;
  43. case 'mp3': $type='audio/mpeg'; break;
  44. case 'wav': $type='audio/x-wav'; break;
  45. case 'mpeg':
  46. case 'mpg':
  47. case 'mpe': $type='video/mpeg'; break;
  48. case 'mov': $type='video/quicktime'; break;
  49. case 'avi': $type='video/x-msvideo'; break;
  50. //Ponizszych w zadnym wypadku nie mozna sciagac
  51. case 'php':
  52. case 'htm':
  53. case 'html': 
  54. throw new Exception('wrong file type'); 
  55. break;
  56. default: $type='application/force-download';
  57. }
  58. header('Cache-Control: max-age=0');
  59. header('Cache-Control: private');
  60. header('Content-Description: File Transfer');
  61. header('Content-Type: ' .$type);
  62.  
  63. $tmpName = 'Plik' .date('d-m-y') .'.' .$this->extension;
  64. header('Content-Disposition: attachment; filename=' .$tmpName);
  65. header('Content-Transfer-Encoding: binary');
  66. header('Content-Length: '.$filesize);
  67. }
  68.  
  69. }
  70. ?>

oraz
  1. <?php
  2. $f = new File("plik.pdf");
  3. $f->sendFileToUser();
  4. ?>


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ć??
pethus
Witam, miałem kiedyś podobny problem w moim przypadku pomogło wstawienie filename do Content-Type

  1. <?php
  2. header('Content-Type: ' .$type);
  3. ?>


na

  1. <?php
  2. header('Content-Type: ' .$type.'; filename=' .$tmpName);
  3. ?>
mrok
niestety nie pomoglo ;(
hmm zglosze im to - moze w ff3 bedzie inaczej winksmiley.jpg

dzieki pethus
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.