molily: Upload: Zip Datei erkennen

Beitrag lesen

Hallo,

Trotzdem würde ich gern wissen, ob es eine Möglichkeit gibt, ganz sicher zu sein, ob es sich um eine ZIP Datei handelt. (...)
So direkt nicht, aber in der PHP-Doku steht ein sauber ausgeführtes Beispiel, welches entweder die interne PHP-Funktion nutzt (ab PHP 4.3.0) oder eben das file-Kommando. (...)

Ich würde darüber hinaus mit der Zip-Extension von PHP http://de3.php.net/manual/en/ref.zip.php arbeiten, um in Erfahrung zu bringen, ob es sich um eine fehlerfreie Zip-Datei handelt, die auch Inhalt hat.
Ich nehme mal an, dass file nur die ersten vier Bytes prüft. Was eine solche Prüfung angeht, so ist sowohl mime_content_type() als auch der Shellaufruf von file überdimensioniert. Dasselbe ließe sich auch so bewerkstelligen:

function is_zip ($filename) {
 if (!file_exists($filename)) return NULL;
 $zipfile=fopen($filename, 'r');
 if (!$zipfile) return NULL;
 $str=fread($zipfile, 4);
 fclose($zipfile);
 if ($str=="PK\x3\x4")
  return true;
 else
  return false;
}

$dateiname='bla.zip';
$iszip=is_zip($dateiname);
if ($iszip===true) {
 echo($dateiname.' ist eine Zip-Datei.');
 /* ... */
} elseif ($iszip===false) {
 echo($dateiname.' ist keine Zip-Datei.');
 /* ... */
} elseif ($iszip==NULL) {
 echo('Fehler beim Öffnen der Datei '.$dateiname.'.');
 /* ... */
}

Nur hat eben die Bedingung aus der magic-DAtei, dass die ersten vier Bytes PK[ETX][EOT] lauten, nichts damit zu tun, ob es eine sinnvolle Zip-Datei ist. Ich nehme einmal an, dass mime_content_type() und file eine Datei mit dem Inhalt PKbla als ZIP-Datei klassifizieren.

Mathias