2010-07-20 10 views
9

Używam CodeIgniter i nie mogę się dowiedzieć, jak rozpakować pliki!Jak rozpakować plik .gz w PHP?

+0

plik .gz różni się od pliku .zip, nawet jeśli normalnie to narzędzie, które jest w stanie rozpakować plików .zip jest również w stanie rozpakować. pliki gz. – kiamlaluno

Odpowiedz

3

Użyj funkcji realizowanych przez rozszerzenie Zlib Compression.

Ten fragment pokazuje, jak korzystać z niektórych funkcji udostępnianych z rozszerzenia:

// open file for reading 
$zp = gzopen($filename, "r"); 

// read 3 char 
echo gzread($zp, 3); 

// output until end of the file and close it. 
gzpassthru($zp); 
gzclose($zp); 
36

sama PHP posiada szereg funkcji do czynienia z plikami gzip.

Jeśli chcesz utworzyć nowy, nieskompresowany plik, będzie to coś takiego.

Uwaga: Nie sprawdza, czy plik docelowy istnieje wcześniej, nie usuwa pliku wejściowego ani nie sprawdza błędów. Naprawdę powinieneś to naprawić, zanim użyjesz tego w kodzie produkcyjnym.

// This input should be from somewhere else, hard-coded in this example 
$file_name = 'file.txt.gz'; 

// Raising this value may increase performance 
$buffer_size = 4096; // read 4kb at a time 
$out_file_name = str_replace('.gz', '', $file_name); 

// Open our files (in binary mode) 
$file = gzopen($file_name, 'rb'); 
$out_file = fopen($out_file_name, 'wb'); 

// Keep repeating until the end of the input file 
while(!gzeof($file)) { 
    // Read buffer-size bytes 
    // Both fwrite and gzread and binary-safe 
    fwrite($out_file, gzread($file, $buffer_size)); 
} 

// Files are done, close files 
fclose($out_file); 
gzclose($file); 

Uwaga: dotyczy gzip tylko. Nie zajmuje się tar.

+1

Użyłem tego kodu i to działa perfekcyjnie. po prostu pytam, jak zrobić to z folderami w pliku gz i jak wyświetlić folder wyjściowy wyodrębnionych plików. –

+1

@RealMan gzip obsługuje tylko pojedyncze pliki. Potrzebujesz pliku .tar.gz do wielu plików. Nie jestem pewien, czy PHP ma wbudowaną obsługę tar, czy nie. – Powerlord

3

Jeśli masz dostęp do systemu():

system("gunzip file.sql.gz"); 
+0

Powinien działać, ale większość czasu system() zostanie wyłączony ze względów bezpieczeństwa – fedmich