Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wypakowanie archiwum z hasłem.
Forum PHP.pl > Forum > Przedszkole
Gruchol
Witam,
Czy jest możliwość aby PHP przy rozpakowaniu plików z archiwum .zip podawał hasło ?
Chodzi o to czy jak bym zabezpieczył archiwum hasłem to czy php jest w stanie rozpakować plik ?

Aktualnie mam taki kod :

  1. $nazwa = $_POST["user_name"];
  2. mkdir("files/$nazwa", 0777);
  3. $zip = new ZipArchive();
  4. if ($zip->open("/usr/share/nginx/www/pliki.zip") !== TRUE) {die ('Błąd rozpakowywania archiwum.');}
  5. $zip->extractTo("/usr/share/nginx/www/files/$nazwa");
  6. $zip->close();


I chciałbym aby przy rozpakowaniu archiwum PHP podał hasło które będzie np. z zmiennej.
Z góry dziękuję i pozdrawiam.
Gruchol
Zrobiłem to tak :
  1. <?php
  2. $zip = new ZipArchive();
  3. $zip_status = $zip->open("test.zip");
  4.  
  5. if ($zip_status === true)
  6. {
  7. if ($zip->setPassword("testpassword"))
  8. {
  9.  
  10. if (!$zip->extractTo(__DIR__))
  11. echo "Extraction failed (wrong password?)";
  12. }
  13.  
  14. $zip->close();
  15. }
  16. else
  17. {
  18. die("Failed opening archive: ". @$zip->getStatusString() . " (code: ". $zip_status .")");
  19. }
  20. ?>

Jednak nic się nie dzieje ani nie wyświetla się żaden błąd.
Gdzie popełniłem błąd ?
aras785
To oznacza, że zip został wypakowany smile.gif
Gruchol
No właśnie nie do końca, dałem na początku echo "test"; jednak ono też się nie wyświetliło, zrobiłem złe hasło - 0 reakcji.
rad11
Usun @ i sprobuj jeszcze raz.
Gruchol
Teraz się wyświetliło.
Tylko teraz gdzie wstawić dalszy kod np. przeniesienia plików ?

Zrobiłem to tak :

<?php
echo "test12";
$zip = new ZipArchive();
$zip_status = $zip->open("test.zip");

if ($zip_status === true)
{
if ($zip->setPassword("test"))
{
echo "test12345";
if (!$zip->extractTo(__DIR__))
echo "Extraction failed (wrong password?)";
}

$zip->close();
}
else
{
die("Failed opening archive: ". $zip->getStatusString() . " (code: ". $zip_status .")");
}
?>
Jednak echo "test12345"; nie wyświetla się i nie rozpakowywuje archiwum.
rad11
Jaka masz wersje PHP? Spojz w logi. Napewno sciezka do pliku sie zgadza?U mnie dziala.

Zrob tak moze jeszcze bez zadnego sprawdzania:

  1. $zip = new ZipArchive();
  2. $zip_status = $zip->open("test.zip");
  3. $zip->setPassword("twojehaslo");
  4. $zip->extractTo(__DIR__');
Gruchol
Ścieżki mam ustawione tak :
<?php
$zip = new ZipArchive();
$zip_status = $zip->open("/usr/share/nginx/www/test/test.zip");
$zip->setPassword("gruszek");
$zip->extractTo("/usr/share/nginx/www/test");

?>
Jednak nadal nic się nie dzieje :/

Wrzuciłem to samo, bez hasła i się rozpakowało.
Tylko dla czego z tym hasłem nie chce działać :/
Ma ktoś jeszcze jakieś pomysły ?
rad11
A sprawdzales w logach ?
Gruchol
2015/04/04 13:48:57 [error] 18734#0: *160 FastCGI sent in stderr: "PHP message: PHP Fatal error: Call to undefined method ZipArchive::setPassword() in /usr/share/nginx/www/test/index.php on line 4" while reading response header from upstream, client: xxxx, server: localhost, request: "GET /test/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "1xxxx"
rad11
No to masz odpowiedz dlaczego nie dziala otwieranie pliku z haslem. Jaka masz wersje PECL zip i PHP ? Mozesz jeszcze zobaczyc czy uda sie poprzez:

  1. echo system('unzip -P password file.zip file.txt');
  2. echo shell_exec('unzip -P password file.zip');
Gruchol
Znalazłem coś takiego :

http://screenshooter.net/101976163/nneuhbd

To o to chodzi ?
Mam php-fpm którego zainstalowałem z pakietu apt-get install php5-fpm.
Czy mogę go jakoś zaktualizować ?
rad11
Tak o to chodzi ogolnie do uzycia setPassword potrzeba wersji PHP 5.6.xx i pecl zip > 1.12 musisz sobie zaktualizowac to co jest potrzebne
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.