2016-05-12 28 views
2

eine PHP-Datei zu extrahieren ich dieses Stück Code bin mit einer ZIP-Datei, wie man verhindern, dass zip

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 
    $zip->extractTo('/my/destination/dir/'); 
    $zip->close(); 
    echo 'ok'; 
} else { 
    echo 'failed'; 
} 

Lassen Sie uns sagen entpacken: eine Php-Datei in der ZIP ist und ich will nicht eine .php-Datei, die extrahiert werden soll. Wie kann ich das verhindern?

+0

Mögliches Duplikat [Öffnen und Erstellen von Passwort geschützten Zip-Dateien mit PHP] (http://stackoverflow.com/questions/7712960/opening-and-creating-password-protected-zip-files-with-php) – Parixit

+1

@Parixit Wie wird das dupliziert? –

+0

@PedroLobito Ich denke, das ist in Bezug auf sichere zip als er fragt, nicht zu extrahieren "php" Datei – Parixit

Antwort

2

Sie können für PHP >= 5.5 so etwas wie dies versuchen:

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 

for ($i = 0; $i < $zip->numFiles; $i++) { 
    if(pathinfo($zip->getNameIndex($i)['extension'] != "php")){ 
     $zip->extractTo('/my/destination/dir/', $zip->getNameIndex($i)); 
    } 
} 
    $zip->close(); 
} 

Oder diese für PHP < 5.5:

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 

for ($i = 0; $i < $zip->numFiles; $i++) { 
    $path_info = pathinfo($zip->getNameIndex($i)); 
    $ext = $path_info['extension']; 
    if($ext != "php")){ 
     $zip->extractTo('/my/destination/dir/', $zip->getNameIndex($i)); 
    } 
} 
    $zip->close(); 
} 

Der einzige Unterschied zwischen den beiden die Funktion pathinfo ist. Beide werden alle Dateien innerhalb der ZIP-Datei durchlaufen und, wenn die Dateierweiterung nichtphp ist, extrahiert es zu /my/destination/dir/.

1
$zip= new ZipArchive; 
if($zip->open('test.zip') === TRUE){ 
for($i = 0; $i < $zip->numFiles; $i++) { 
    $filename = pathinfo($zip->getNameIndex($i)); 
    $fileinfo = $filename['extension']; 
    if($fileinfo!="php"){ 
    $zip->extractTo('extract/',$zip->getNameIndex($i)); 
    } 
    $zip->close(); 
} 
+0

Bitte beschränken Sie Ihre Antworten nicht nur auf Code-Snippets. Durch Hinzufügen einer Erklärung wird es besser lesbar. –

+0

danke für den Vorschlag – Ashish

+0

Was ist der Unterschied zwischen Ihrer Antwort und mir? Es ist mir wirklich egal, ob Sie meine Antwort kopiert haben, aber es ist keine gute Übung. –

Verwandte Themen