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