Datei entpacken mit PHP

Der FTP-Upload komplexer Verzeichnisse kann auch bei einer schnellen Leitung jede Menge Zeit in Anspruch nehmen, da für jede Datei oder Verzeichnis eine extra Verbindung zum Server aufgebaut werden muss. Warum also nicht ein .zip-Archiv hochladen und auf dem Server entpacken lassen? Wer nun über keinen SSH-Zugang verfügt und der Webhoster sonst keine Möglichkeiten über das Backend zum Auspacken bereitstellt, der darf sich die Boardmittel von PHP zu nutze machen.

Das Verzeichnis gezipt und per FTP hochgeladen, lediglich auf die enthaltene Ordnerstruktur sollte acht gegeben werden. Dazu eine .php-Datei mit folgendem Script und es kann losgehen.

<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
  $file = '../laravel.zip';
  $path = pathinfo(realpath($file), PATHINFO_DIRNAME);
  $zip = new ZipArchive;
  $res = $zip->open($file);
  if ($res === TRUE) {
    $zip->extractTo($path);
    $zip->close();
    echo "WOOT! $file extracted to $path";
  } else {
    echo "Doh! I couldn't open $file";
  }
}
?>
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>unzip laravel</title>
</head>
<body>
  <form action="" method="POST">
    <input type="submit" name "install">
  </form>
</body>
</html>

Nennen wir die Datei mit dem Script laravel.php und rufen diese im Browser auf erscheint ein Button mit der Aufschrift install. Das Archiv laravel.zip befindet sich auf dem Webserver eine Ebene höher als das Script. Somit ist das .zip-File nicht öffentlich zugänglich und die laravel.php wird nach erfolgreichem Entpacken auf die selbe Ebene verschoben und somit ist damit kein Schindluder mehr zu betreiben.

Die Idee zu dieser Methode ergab sich aus der Notwendigkeit heraus und einen ersten Lösungsansatz fand ich auf stackoverflow.com. Allerdings wird das zlib-Package auf dem Apache-Server benötigt, welches allerdings in seltensten Fällen fehlen sollte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.