Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sciaganie i wyswietlanie plików poza public_html
Forum PHP.pl > Forum > PHP
sanchoo
Mam uplad nas stronie. Pliki sa zapisywane po za public_html.
Znalazlem i przerobilem skrypt do pobierania:
  1. <?php
  2. public function download($filename)
  3. {
  4. if(ini_get('zlib.output_compression'))
  5.  ini_set('zlib.output_compression', 'Off');
  6.  
  7. $file_extension = strtolower(substr(strrchr($filename,"."),1));
  8.  
  9. if( $filename == "" ) 
  10. {
  11. }
  12. elseif ( ! file_exists( $filename ) ) 
  13. {
  14.  
  15. };
  16.  
  17. switch( $file_extension )
  18. {
  19. case "pdf": $ctype="application/pdf"; break;
  20. case "exe": $ctype="application/octet-stream"; break;
  21. case "zip": $ctype="application/zip"; break;
  22. case "doc": $ctype="application/msword"; break;
  23. case "xls": $ctype="application/vnd.ms-excel"; break;
  24. case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  25. case "gif": $ctype="image/gif"; break;
  26. case "png": $ctype="image/png"; break;
  27. case "jpeg":
  28. case "jpg": $ctype="image/jpg"; break;
  29.  
  30. default: $ctype="application/force-download";
  31. }
  32.  
  33. header("Pragma: public"); // required
  34. header("Expires: 0");
  35. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  36. header("Cache-Control: private",false); // required for certain browsers 
  37. header("Content-Type: $ctype");
  38. //  change, added quotes to allow spaces in filenames, by Rajkumar Singh
  39. header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
  40. header("Content-Transfer-Encoding: binary");
  41. header("Content-Length: ".filesize($filename));
  42. readfile("$filename");
  43.  
  44.  
  45. }
  46. ?>


niby pobiera... ale :/
plik tekstowy np. wyglada tak:
  1. <b>Warning</b>: readfile(/home/XXX/demo-modal-message-3.inc) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: Permission denied in <b>/home/inf_sto_1/sanchoo/public_html/services/class_model.php</b> on line <b>859</b><br />
  2. MODELincinczipdllmp3iniexetxtmp3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stri


wogole czy jest to mozliwe??
Potrzebuje aby plik sie sciagal a graficzny byl wyswietlany.
tsharek
No ale przecież wyraźnie pisze Ci że php nie ma dostępu do tego pliku! Musisz albo:
1. dodać katalog (i chyba wszystkie pliki) tak żeby były widziane przez php
2. albo przenieść do to katalogu public_html i zabezpieczyć cały katalog plikiem htacces, np. takim:
Kod
Order deny,allow
deny from all
allow from none
sanchoo
.. wiem wiem.. mialem nadzieje ze istnieje jakis magiczny sposob...smile.gif
A co myslisz nad takim rozwiązaniem.. jak plik bedzie pobierany kopia bedzie tworzona w tmp w public:>??
jest sens?

kazdy user ktory sie zaloguje bedzie mogl wysylac pliki i otrzymywac.. otrzymane pliki beda bardzo bardzo wartosciowe:) Dlatego wymyslem ze po za public.... bylo by najbezpieczniej.
tsharek
hmm.. ale jak byś chciał kopie robić? W jakiś sposób musiałbyś kopiować pliki do tymczasowego katalogu, więc siłą żeczy musiałbyś mieć dostęp z poziomu PHP, tak więc IMO jest to złe rozwiązanie. Jak dla mnie to: albo dać prawa do katalogu/plików phpkowi jeżeli katalog jest poza document_root, albo jeżeli jest w to zabezpieczyć .htaccess
sanchoo
Zdrobilem 2 sposobem i nadal to samo. Jest w publicu. Dodam ze foldery w których znajdują się pliki są tworzone również z poziomu php i nalezda do grupy www-data. Tworzenie folderow:
  1. <?phpmkdir(LINK_UPDOWN.&#092;"/\".$login, 0777);mkdir (LINK_UPDOWN.\"/\".$login.\"_upload\", 0777);?>
a i plik po wyslaniu:
  1. <?php@chmod($path, 755);?>
roznica teraz jest taka że plik ktory się pobiera.. wyglada tak:
  1. readfile(/home/inf_sto_1/sanchoo/public_html/XXXX/sanchoo_upload/siatka.JPG) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: Permission denied in <b>/home/inf_sto_1/sanchoo/XXX/class_model.php</b> on line <b>864</b><br />MODELJPG<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"><head> <title>login</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" /> <style type="text/css" media="all">@import url(tpl/style.css);</style> <link rel="stylesheet" type="text/css" media="screen, projection" href="tpl/scroll/scroller.css"> <script language=JavaScript src="tpl/script.js" type="text/javascript"></SCRIPT><script type="text/javascript"(...)
Roznica polega na tym że teraz jest cala cawartosc strony w postaci HTML :/problem jest w prawach dostepu.. jesli podam bezposrednia sciezke do pliku w przegladarce to mam:
  1. You don't have permission to access /~sanchoo/XXX/sanchoo85_upload/a.zip on this server.
dzieki tsharek .. naprowadziles mnie na blad..<?php@chmod($path, 755);?>powinno byc 0777
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.