Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> problem ze sciaganie plików z serwera windows
tomek34
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


witam!!
problem wygląda następująco: Plik wrzucam na serwer poprzez klienta FTP. Plik wgrywa sie poprawnie i bez problemu ściaga za pomocą FTP. Natomiast na stronie listuje się bez problemu. Otwiera się też bez problemu i pozwala wybrać czy będzie otwarty czy ściągnięty. Niestety ani nie otwiera się ani nie ściaga poprawnie. Tworzy się plik o zero bajtach. Całość obsluguje następujący plik:
  1. <?php
  2.             $dir = "D:sercomfotki";
  3.                  function printDir($dir)
  4.                  {
  5.                   $fd = opendir($dir);
  6.                       if(!$fd) return false;
  7.                                while (($file = readdir($fd)) !== false){
  8.                       $pos = strpos($file, ' ');
  9.                       if($file != "." && $file != ".." && $pos === false){
  10.                       echo("<a href=\"download.php?name=");
  11.                       echo("$file\" class='style3'>$file</a><br />");
  12.                       }
  13.                   }
  14.                   closedir($fd);
  15.               }
  16.               printDir($dir)
  17. ?>

Proszę o pomoc. Nie mam żadnego pomyslu.
Pozdrawiam
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Kod
D:\ser\com\fotki

Ekhm, używaj odwrotnych ukośników.

Cytat
Niestety ani nie otwiera się ani nie ściaga poprawnie.

A jakiego serwera używasz?
Go to the top of the page
+Quote Post
tomek34
post
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


niestety windowsowego IIS

ktos ma jakis pomysl??
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zmieniłeś ścieżki? Po linkach bezpośrednich do plików to samo?
Go to the top of the page
+Quote Post
tomek34
post
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


ale to windows serwer to jak ukosniki w druga strone??
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Normalnie. PHP sobie z nimi poradzi tym bardziej, że w tej chwili zapis wskazuje na encje, i tak: albo escape'ujesz, albo odwróć slesze. PHP sobie poradzi, IIS też.

Zresztą, w eksploratorze możesz stosować dowolne ukośniki, o URL-ach nie wspomnę.
Go to the top of the page
+Quote Post
tomek34
post
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


po odwroceniu nadal jest to samo.
nie uruchamia pliku i sciaga plik zerowej wartosci o poprawnej nazwie
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zadałem pytanie:
Cytat
Po linkach bezpośrednich do plików to samo?
Go to the top of the page
+Quote Post
tomek34
post
Post #9





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


po linku bezpośrednim się uruchamia
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ok, pokaż co w tej chwili wypluwa skrypt, chodzi mi o linki.
Go to the top of the page
+Quote Post
tomek34
post
Post #11





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


tzn plik się otwiera ale nie daje mozliwosci zapisania

mozesz jaksniej bo nie rozumiem

skrypt wyswietla zawartosc folderu w formie nazwa i rozszerzenie
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Załącz kod wynikowy, czyli wygenerowany HTML.

Cytat
tzn plik się otwiera ale nie daje mozliwosci zapisania

To w końcu o co chodzi?
Go to the top of the page
+Quote Post
tomek34
post
Post #13





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


całość mechanizmu stanowią dwa pliki: test.php i download.php
pierwszy wyświetla zawartość drugi uruchamia ściaganie pliku.
test.php jest następujący:
  1. <?php
  2.             $dir = "D:sercomfotki";
  3.                  function printDir($dir)
  4.                  {
  5.                   $fd = opendir($dir);
  6.                       if(!$fd) return false;
  7.                                while (($file = readdir($fd)) !== false){
  8.                       $pos = strpos($file, ' ');
  9.                       if($file != "." && $file != ".." && $pos === false){
  10.                       echo("<a href=\"download.php?name=");
  11.                       echo("$file\" class='style3'>$file</a><br />");
  12.                       }
  13.                   }
  14.                   closedir($fd);
  15.               }
  16.               printDir($dir)
  17. ?>

dowload.php taki:
  1. <?php
  2. $filesPath = "./";
  3.  
  4. function securityCheck($name)
  5. {
  6.  $wyr = "^[a-z0-9_-]+(.[a-z0-9_-]+)*$";
  7.  return eregi($wyr, $name);
  8. }
  9. function send($fileName, $filePath)
  10. {
  11.  
  12.  $fd = fopen($filePath.$fileName,"r");
  13.  $size = filesize($filePath.$fileName);
  14.  $contents = fread($fd, filesize($filePath.$fileName));
  15.  
  16.  fclose($fd);
  17.  
  18.  header("Content-Type: application/octet-stream");
  19.  header("Content-Length: $size;");
  20.  header("Content-Disposition: attachment; filename=$fileName");
  21.  
  22.  echo $contents;
  23. }
  24. if(isSet($_GET['name'])){
  25.  if(!securityCheck($_GET['name'])){
  26.    echo('Nie ma takiego pliku na serwerze!');
  27.  }
  28.  else{
  29.    send($_GET['name'], $filesPath);
  30.  }
  31. }
  32. else{
  33.  echo('Nie ma takiego pliku na serwerze!');
  34. }
  35. ?>

Problem opisałem dokładnie na początku. Pliki są wyświetlane jako lista.
Po kliknięciu pojawia się akcja okienko wybory czy otworzyć plik czy zapisać.
Jak klikam otworzyć to niby probuje się otworzyć ale plik się nie pobiera i wyświetla błąd natomast jak klikam zapisz plik sie zapisuje ale jako zero bajtowy, czyli nie pobiera się właściwie.
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




O, fajnie że powiedziałeś o skrypcie wysyłającym...

  1. <?php
  2. $fd = fopen($filePath.$fileName,"r");
  3. $size = filesize($filePath.$fileName);
  4. $contents = fread($fd, filesize($filePath.$fileName));
  5. ?>

Zamiast wysyłać od razu całość, porcjuj odczyt.
Go to the top of the page
+Quote Post
tomek34
post
Post #15





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


ale w ten sposób to nie wysyła
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Pokaż, co zrobiłeś.
Go to the top of the page
+Quote Post
tomek34
post
Post #17





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


uzyłem kod który napisałeś:
  1. <?php
  2. $fd = fopen($filePath.$fileName,"r");
  3. $size = filesize($filePath.$fileName);
  4. $contents = fread($fd, filesize($filePath.$fileName));
  5. ?>

ale te pliki przedtem działy ok w takim stanie jak były
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A czy Ty czytasz, co ja piszę?
Cytat
Zamiast wysyłać od razu całość, porcjuj odczyt.

A ja tylko zacytowałem Twój kod.
Go to the top of the page
+Quote Post
tomek34
post
Post #19





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


wiec co moge poprawic bo te pliki nadal nie działają
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Popraw to, co napisałem - odczytujesz cały plik za jednym zamachem. Napisałem o porcjowaniu, to się do tego zastosuj, nie będę więcej męczył palców, żeby N-ty raz pisać o tym samym.
Go to the top of the page
+Quote Post
tomek34
post
Post #21





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


dany plik do pobrania uruchamia właściwą akcję i próbuje się otworzyć we właściwej aplikacji ale ponieważ się nie pobiera występuje błąd. Czy te pliki php zawierają jakiś błąd?

żebym ja jescze wiedział co to znaczy porciować plik to byłoby cudownie.

czy ktos mi moze wyjasnic o co chodzi z tym porcjowaniem??
te dwa pliki przed miesiacem dzialaly mi bez zarzutu i nagle przestaly bez mojej ingernecji?
co sie moglo stac?
Go to the top of the page
+Quote Post
erix
post
Post #22





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




U siebie masz tak:
  1. <?php
  2. fread($p, filesize('plik'));
  3. ?>


Czytaj segmentami, np. po 512 bajtów
  1. <?php
  2. while(!feof($p)){
  3.  echo fread($p, 512);
  4. }
  5. ?>


Cytat
te dwa pliki przed miesiacem dzialaly mi bez zarzutu i nagle przestaly bez mojej ingernecji?

Chyba tylko wróżka wie. Nic nie wiadomo o zmianach w oprogramowaniu, wersji IIS-a, systemu... Za dużo czynników.
Go to the top of the page
+Quote Post
tomek34
post
Post #23





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


pliki testowałem na dwóch serwerach:
IIS 6.0 z mySQL 5.0.51 i PHP 5.2.6
oraz na
Linux apache z mySQL 4.1.22 i PHP5.2.3
na obu te same obiawy
Go to the top of the page
+Quote Post
erix
post
Post #24





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. zrobiłeś, jak pisałem?
  2. generalizacja MIME na application/octet-stream nieraz powoduje takie jaja
Go to the top of the page
+Quote Post
tomek34
post
Post #25





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


zrobiłem tak ale pewnie źle:
  1. <?php
  2.  
  3. $filesPath = "./";
  4.  
  5. function securityCheck($name)
  6. {
  7.  $wyr = "^[a-z0-9_-]+(.[a-z0-9_-]+)*$";
  8.  return eregi($wyr, $name);
  9. }
  10. function send($fileName, $filePath)
  11. {
  12. //  if(!file_exists($filePath.$fileName)){
  13. //   echo('Nie ma takiego pliku na serwerze!');
  14. //   return;
  15. // }
  16.  $fd = fopen($filePath.$fileName,"r");
  17.  $size = filesize($filePath.$fileName);
  18.  //$contents = fread($fd, filesize($filePath.$fileName));
  19. while(!feof($fd)){
  20. echo fread($fd, 512);
  21. }
  22.  
  23.  fclose($fd);
  24.  
  25.  header("Content-Type: application/octet-stream");
  26.  header("Content-Length: $size;");
  27.  header("Content-Disposition: attachment; filename=$fileName");
  28.  
  29.  //echo $contents;
  30. }
  31. if(isSet($_GET['name'])){
  32.  if(!securityCheck($_GET['name'])){
  33.    echo('Nie ma takiego pliku na serwerze!');
  34.  }
  35.  else{
  36.    send($_GET['name'], $filesPath);
  37.  }
  38. }
  39. else{
  40.  echo('Nie ma takiego pliku na serwerze!');
  41. }
  42. ?>
Go to the top of the page
+Quote Post
erix
post
Post #26





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




I co? Bez zmian?

Poza tym, wspomniałem coś o MIME.
Go to the top of the page
+Quote Post
tomek34
post
Post #27





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


bardzo spowolnil...i zniknelo okienko wyboru czy otwierac czy sciagac a na tym mi zalezy zeby zostalo
a co do mime to w tym folderze sa rozne pliki i nie wiem czy wtedy trzebaby definiować każdy typ mime?
Go to the top of the page
+Quote Post
erix
post
Post #28





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
a co do mime to w tym folderze sa rozne pliki i nie wiem czy wtedy trzebaby definiować każdy typ mime?

Owszem.

Cytat
bardzo spowolnil...i zniknelo okienko wyboru czy otwierac czy sciagac a na tym mi zalezy zeby zostalo

To się innymi nagłówkami załatwia.

Żeby nie przeciągać - poszukaj gotowych skryptów downloadu i sprawdź, czy one działają. Jeśli nie - problemu szukaj w konfiguracji usługi.
Go to the top of the page
+Quote Post
tomek34
post
Post #29





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


kompletny system tych dwóch pliczków do ściągania pochodzi z książki Marcina Lisa pt.
PHP. 101 praktycznych skryptów. Całość systemu działała mi na dwóch serwerach i na linuxie i na IIS i nagle nie wiem czemu przestała testowałem tez inny skrypt i jeden z nich działa ale nie spełnia założeń czyli nie listuje automatycznie wrzuconych plików (wymaga pisania specialnej listy) i nie ukrywa oryginalnej ścieżki do pliku co jest dla mnie bardzo ważne. Zaznaczam jeszcze raz ze całość systemu dowload działała bez zarzutu i z niewiadimych mi przyczyn przestała. na 100% jest to wina pliku download.php ponieważ ten od listowania plików działa bez zarzutu. Na prawdę już zgłupiałem i nie mam żadnego pomysłu na to co to może być. Ponownie proszę o pomoc.
pozdrawiam
Tomek
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:54