Chcę rozpakować plik, a to działa dobrze
system('unzip File.zip');
Ale muszę przekazać nazwę pliku przez adres URL i nie mogę go uruchomić, oto co mam.
$master = $_GET["master"];
system('unzip $master.zip');
czego mi brakuje? Wiem, że to musi być coś małego i głupiego, co przeoczam.
Dziękuję Ci,
system("unzip $master.zip");
powinna działać.Odpowiedzi:
Mogę tylko założyć, że Twój kod pochodzi z samouczka w Internecie? W takim razie dobra robota próbuje to samemu rozwiązać. Z drugiej strony fakt, że ten kod może być gdzieś opublikowany online jako właściwy sposób rozpakowania pliku, jest nieco przerażający.
PHP ma wbudowane rozszerzenia do obsługi skompresowanych plików. W tym celu nie powinno być potrzeby korzystania z
system
połączeń.ZipArchive
Dokumenty to jedna z opcji.Ponadto, jak skomentowali inni,
$HTTP_GET_VARS
jest on przestarzały od wersji 4.1 ... która była naprawdę dawno temu. Nie używaj tego.$_GET
Zamiast tego użyj superglobalu.Wreszcie, bądź bardzo ostrożny przy akceptowaniu wszelkich danych wejściowych przekazywanych do skryptu przez
$_GET
zmienną.ZAWSZE ODCZYTAJ WEJŚCIE UŻYTKOWNIKA.
AKTUALIZACJA
Zgodnie z komentarzem najlepszym sposobem na wyodrębnienie pliku zip do tego samego katalogu, w którym się znajduje, jest określenie twardej ścieżki do pliku i wyodrębnienie go konkretnie do tej lokalizacji. Więc możesz zrobić:
źródło
$zip->extractTo('./');
Prawdopodobnie tak nie jest. Lepszą opcją jest określenie lokalizacji pliku zip w systemie plików i wyodrębnienie go. Zaktualizuję moją odpowiedź, aby zademonstrować.Fatal error: Class 'ZipArchive' not found
błąd, który próbuję tego skryptu :-( Czy jest jakaś opcja w tym momencie?zlib
biblioteki, aby wykonać prawie wszystkie operacje kompresji / dekompresji za pomocą PHP. Nawet do wykonywania wywołań systemowych potrzebujesz podstawowej biblioteki. Jest to jednak bardzo wszechobecna rzecz, a jej brak jest wyjątkiem. Jeśli korzystasz z hostingu współdzielonego, powinni go zainstalować. W przeciwnym razie, po prostu google coś takiego jak „Jak zainstalować obsługę funkcji Zip dla PHP”Nie rób tego w ten sposób (przekazanie GET var jako części wywołania systemowego). Zamiast tego użyj ZipArchive .
Twój kod powinien więc wyglądać następująco:
Aby odpowiedzieć na twoje pytanie, twój błąd brzmi: „coś $ var coś innego” powinno być „coś $ var coś innego” (w podwójnych cudzysłowach).
źródło
Używanie
getcwd()
do wypakowywania w tym samym kataloguźródło
Po prostu wypróbuj ten twójDestinationDir jest miejscem docelowym do wyodrębnienia lub usunięcia -d yourDestinationDir do wyodrębnienia do katalogu głównego.
źródło
yourDestinationDir
jakosession_save_path() . DIRECTORY_SEPARATOR . "$name" . DIRECTORY_SEPARATOR
gdzie$name
jest folder docelowy do rozpakowania w folderze sesji.Zaktualizowałem odpowiedź @rdlowrey na czystszy i lepszy kod. To rozpakuje plik do bieżącego katalogu przy użyciu
__DIR__
.źródło
PHP ma własną wbudowaną klasę, której można użyć do rozpakowania lub wypakowania zawartości z pliku zip. Ta klasa to ZipArchive. Poniżej znajduje się prosty i podstawowy kod PHP, który rozpakuje plik zip i umieści go w określonym katalogu:
Jeśli chcesz jakieś zaawansowane funkcje, poniżej znajduje się ulepszony kod, który sprawdzi, czy plik zip istnieje, czy nie:
Źródło: Jak rozpakować lub wyodrębnić pliki zip w PHP?
źródło
Zaktualizowałem odpowiedź Morteza Ziaeemehr do czystszego i lepszego kodu. To rozpakuje plik dostarczony w formularzu do bieżącego katalogu za pomocą DIR .
źródło
Po prostu zmień
Do tego
albo ten
system("unzip {$master}.zip");
źródło
możesz użyć funkcji paczkowanej
Jak tego użyć.
źródło
Użyj poniżej kodu PHP, z nazwą pliku w parametrze URL „nazwa”
źródło
Prosta funkcja PHP do rozpakowania. Upewnij się, że masz rozszerzenie zip zainstalowane na serwerze.
źródło
Po prostu użyj tego:
w kodzie
$master
jest przekazywany jako ciąg znaków, system będzie szukał pliku o nazwie$master.zip
źródło
'unzip' $master
nie będzie działać, chyba że dodasz spację po rozpakowaniu i dodasz kropkę po pojedynczym cudzysłowie. Byłoby o wiele łatwiej zasugerowaćsystem("unzip $master.zip")
z podwójnymi cytatami lub przynajmniej prawidłową odpowiedzią.$_GET
ciągu zapytania i wstrzyknąć własny kod dosystem
wywołania