Mam taki skrypt (pobierz.php):
  1. $filename = $_GET['plik'];
  2. // required for IE, otherwise Content-disposition is ignored
  3. if(ini_get('zlib.output_compression'))
  4. ini_set('zlib.output_compression', 'Off');
  5. $file_extension = strtolower(substr(strrchr($filename,"."),1));
  6. switch( $file_extension ){
  7. case "pdf": $ctype="application/pdf"; break;
  8. case "exe": $ctype="application/octet-stream"; break;
  9. case "zip": $ctype="application/zip"; break;
  10. case "rar": $ctype="application/rar"; break;
  11. case "docx":
  12. case "doc": $ctype="application/msword"; break;
  13. case "xlsx":
  14. case "xls": $ctype="application/vnd.ms-excel"; break;
  15. case "pptx":
  16. case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  17. case "gif": $ctype="image/gif"; break;
  18. case "png": $ctype="image/png"; break;
  19. case "jpeg":
  20. case "jpg": $ctype="image/jpg"; break;
  21. case "mp3": $ctype="audio/mpeg"; break;
  22. case "wav": $ctype="audio/x-wav"; break;
  23. case "mpeg":
  24. case "mpg":
  25. case "mpe": $ctype="video/mpeg"; break;
  26. case "mov": $ctype="video/quicktime"; break;
  27. case "avi": $ctype="video/x-msvideo"; break;
  28. default: $ctype="application/force-download"; break;
  29. }
  30. header("Pragma: public"); // required
  31. header("Expires: 0");
  32. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  33. header("Cache-Control: private",false); // required for certain browsers
  34. header("Content-Type: $ctype");
  35. // change, added quotes to allow spaces in filenames, by Rajkumar Singh
  36. header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
  37. header("Content-Transfer-Encoding: binary");
  38. header("Content-Length: ".filesize($filename)."");
  39. readfile("".$sciezka."/".$filename ."");
  40. exit();

I zamiast archiwum pobiera mi html [nazwa i rozszerzenie jak plik - plik1.rar] - po zmianie rozszerzenia na txt/html pokazuje:
  1. <br />
  2. <b>Warning</b>: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for plik1.zip in <b>/sciezka/pobierz.php</b> on line <b>46</b><br />
  3. <br />
  4. <b>Warning</b>: Cannot modify header information - headers already sent by (output started at /sciezka/pobierz.php:46) in <b>/sciezka/pobierz.php</b> on line <b>46</b><br />
  5. body {
  6. background-color: #999;
  7. font-family: Verdana, Arial, Helvetica, sans-serif;
  8. font-size: 12px;
  9. color: #333;
  10. }
  11. #reszta{
  12. ...
  13. }
  14. .css {
  15. ktory nie jest nigdzie załączany do pliku
  16. }
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  20. </head>
  21. <body></body></html>


46 linijka: header("Content-Length: ".filesize($filename)."");

Jak ją wywaliłam nie wyświetlało mi błędu tylko nadal tworzyło plik html...
plik nie jest includowany w index.php - a tylko tam jest załączony css [oddzielny plik.css] - nie wiem skąd i dlaczego go wyciąga.

Link do pobierania pliku wygląda tak:
http://www.adres.pl/pobierz/2/plik1.zip

wpis .htaccess
RewriteRule ^pobierz/([0-9]+)/([a-z0-9.]+)$ pobierz.php?user=$1&plik=$2 [L]

Jak w nazwie pliku występuje więcej niż 1 kropka jest ok np: nazwa.jakiegos.innego.zip