Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Upload dużych katalogów na serwer.
Forum PHP.pl > Forum > Serwery WWW
kodereq
Zastanawia mnie jak sobie radzicie z uploadem rozbudowanych katalogów na serwer. Oczywisty jest fakt, że uploadowanie każdego pliku oddzielnie zajmuje znacznie więcej niż upload np. gotowej paczki .rar z katalogiem.

Tutaj rodzi się właśnie moje pytanie: czy znacie jakieś sposoby np. na uniwersalną kompresję umożliwiającą odpakowanie katalogu po uploadzie? Przykładem rozwiązania może być np. kompresja .rar i wywołanie exec "unrar" - jednak wiadomo, że nie wszędzie dostępne jest zarówno exec, jak i unrar.

Znalazłem coś takiego: http://www.php.net/manual/en/refs.compression.php jednak każde z tych rozszerzeń wymaga instalacji / konfiguracji w php.ini - więc nie wiem czy którekolwiek z nich jest dostatecznie elastyczne (dostępne na większości hostingów)
erix
Cytat
Tutaj rodzi się właśnie moje pytanie: czy znacie jakieś sposoby np. na uniwersalną kompresję umożliwiającą odpakowanie katalogu po uploadzie? Pr

Najbardziej uniwersalne są formaty uniksowe - tar, gzip, bzip2.

Ich obsługa jest wbudowana w PHP, więc nie ma z tym problemu. Tak samo do tara - jest gotowa klasa do tego.

Na szczęście, serwerów blokujących exec, itp, jest coraz mniej (a jeśli jeszcze są, to spokojnie zmień; konkurencja nie śpi), więc wystarczy wszystko spakować do tgz, stworzyć skrypt dekompresujący o podobnej budowie:

  1. <?PHP
  2. `tar -xzf archiwum.tgz`;

wywołać go z przeglądarki i problem z głowy. Korzystam z tej metody już dość długo i jest praktycznie niezawodna. winksmiley.jpg
kodereq
Dzięki za odpowiedź. Natrafiłem jeszcze na http://de3.php.net/manual/en/book.zlib.php i http://www.phpclasses.org/browse/package/2495.html Ponoć też bardzo elastyczne.
magnus
Najmniej problemu jest, jeśli mamy dostęp do konta przez shell smile.gif Jak jest shell, to jest i zazwyczaj MC (chociaż spotkałem się z serwerem, na którym nie było... ale dał się zainstalować na koncie usera winksmiley.jpg ). Wówczas bez żadnych kombinacji można sobie spakować co się chce, wysłać ftp-em i na serwerze rozpakować gdzie się chce.
erix
Ach, zapomniałem jeszcze o PHAR. winksmiley.jpg
DannyM
pozwolcie, ze sie dolacze z pytaniem.
Czy da sie zacignac z innego serwera plik + - 40mb na swoj i nie trafiajac na problem z pamiecia
"Fatal error: Allowed memory size of 62914560 bytes exhausted (tried to allocate 38355758 bytes) in" questionmark.gif
ShadowD
## Zwiekszenie limitu pamieci
php_value memory_limit 64M
DannyM
Cytat(ShadowD @ 18.03.2010, 14:42:22 ) *
## Zwiekszenie limitu pamieci
php_value memory_limit 64M


ale w php.ini mam
max_execution_time = 300 ; Maximum execution time of each script, in seconds
max_input_time = 70 ; Maximum amount of time each script may spend parsing request data
memory_limit = 70M ; Maximum amount of memory a script may consume (8MB)
dr_bonzo
A jak go sciagasz? file_get_contents() - wiesz pewnie ze to laduje caly plik do pamieci? masz przeciez fread() fwrite() itp.
DannyM
mam
  1. $data = file_get_contents($url, false, $context);
  2. $fp = fopen($file, "w");
  3. flock($fp, 2);
  4. fwrite($fp, $data);
  5. flock($fp, 3);
  6. fclose($fp);


Czy jest inne wyjscie?
dr_bonzo
Curl? Wazne zeby czytac plik partiami i od razu zapisywac.
DannyM
Szczerze powiem, ze nie wiem jak sie do tego zabrac blink.gif
erix
Otwórz plik źródłowy tymi samymi poleceniami, co zapisujesz, a nie via file_get_contents.
kubap007
A co zrobić jeżeli musimy dokonać w takim przypadku autoryzacji. Z tego co wiem w file_get_contents() jest taka opcja czy w fread() też questionmark.gifquestionmark.gif
DannyM
Cytat(kubap007 @ 20.03.2010, 18:25:28 ) *
A co zrobić jeżeli musimy dokonać w takim przypadku autoryzacji. Z tego co wiem w file_get_contents() jest taka opcja czy w fread() też questionmark.gifquestionmark.gif

Oo wlasnie oto jest pytanie
erix
A zaglądaliście czasem do manuala, co jest ostatnim parametrem? Podpowiedź: stream_context_create
kubap007
Oki nie doczytałem (mea culpa), ale mam jeszcze jedno może i głupie pytanie, ale nie wiem jak sprawdzić długość pliku (potrzebne do fread() ). filesize() nie zadziała (sprawdziłem) i nie wiem jak to ugryźć.
erix
Czytałeś kursy, czy nie?

Gdybyś czytał, to byś wiedział, do czego jest feof. (tak, to jest związane z Twoim pytaniem)
kubap007
Kurs czytałem, zawsze od tego zaczynam. Ale kilka(naście) godzin przed monitorem robi swoje.
BTW. Dzięki za pomoc.
DannyM
Cytat(erix @ 20.03.2010, 18:45:06 ) *
A zaglądaliście czasem do manuala, co jest ostatnim parametrem? Podpowiedź: stream_context_create

Super winksmiley.jpg
Dodaje punkcik
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.