Aktueller Standort: Startseite> Neueste Artikel> So verwenden Sie die Funktion von PHP von ZIP_READ (), um die interne Struktur des ZIP -komprimierten Pakets im Detail zu analysieren und zu lesen?

So verwenden Sie die Funktion von PHP von ZIP_READ (), um die interne Struktur des ZIP -komprimierten Pakets im Detail zu analysieren und zu lesen?

M66 2025-06-23

Bei der Verarbeitung komprimierter Dateien bietet PHP leistungsstarke Zip -Erweiterungen, um das Lesen und den Betrieb von .zip -Dateien zu unterstützen. In diesem Artikel wird die Verwendung der Funktion zip_read () eingehend erläutert und mit anderen verwandten Funktionen zusammenarbeiten, um zu demonstrieren, wie jeder Eintrag in der ZIP -Datei durchquert und den Inhalt oder die Informationen darin extrahiert wird.

1. Voraussetzungen

Stellen Sie vor der Verwendung von ZIP_READ () sicher, dass Ihre PHP -Umgebung eine ZIP -Erweiterung aktiviert hat. Wenn Sie sich nicht sicher sind, können Sie den folgenden Code verwenden, um festzustellen, ob die Erweiterung geladen wird:

 <?php
if (class_exists('ZipArchive')) {
    echo "Zip Erweiterung aktiviert";
} else {
    echo "Zip Erweiterung nicht aktiviert";
}
?>

Wenn das Rückgabeergebnis "ZIP-Erweiterung nicht aktiviert" ist, müssen Sie die relevante Erweiterung in der Datei php.ini aktivieren oder die Option -with-zip beim Installieren von PHP hinzufügen.

2. Grundlegende Verwendung von Zip_read ()

ZIP_READ () wird in Verbindung mit zip_open () und zip_entry_* Serienfunktionen verwendet. Sein Zweck ist es, einen Eintrag in der offenen .zip -Datei zu lesen. Jeder Anruf gibt einen Ressourcenhandle für den nächsten Eintrag zurück, bis False angibt, dass keine Einträge mehr zu lesen sind.

3. Beispielcode: Lesen Sie Einträge in der ZIP -Datei nach Element

Hier ist ein vollständiges Beispiel, das zeigt, wie eine .zip -Datei geöffnet wird, alle seine Einträge durchzusetzen und den Namen und den Inhalt jedes Eintrags zu lesen:

 <?php
$zipFile = '/path/to/example.zip'; // Ersetzen Sie durch Ihren lokalen zip Dateipfad
$zip = zip_open($zipFile);

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        echo "<strong>Dateiname:</strong> " . zip_entry_name($zip_entry) . "<br>";

        if (zip_entry_open($zip, $zip_entry, "r")) {
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
            echo "<strong>Inhaltsvorschau:</strong><br><pre>" . htmlentities(substr($contents, 0, 500)) . "</pre><hr>";
            zip_entry_close($zip_entry);
        }
    }
    zip_close($zip);
} else {
    echo "Die komprimierte Datei kann nicht geöffnet werden。";
}
?>

4. Erklärung der Kernfunktion

Hier sind die wichtigsten Funktionen, die mit zip_read () verwendet werden:

  • ZIP_OPEN (String $ Dateiname) : Öffnen Sie die ZIP -Datei und senden Sie das Ressourcenhandle zurück.

  • ZIP_READ (Ressource $ ZIP) : Lesen Sie den nächsten Eintrag aus der Ressource für ZIP -Datei.

  • ZIP_ENTRY_NAME (Ressourceneintrag) : Ruft den Dateinamen des aktuellen Eintrags ab.

  • ZIP_ENTRY_OPEN (Ressource $ ZIP, Ressource $ Eintrag, String $ -Modus) : Öffnen Sie einen Eintrag und bereiten Sie das Lesen des Inhalts vor.

  • ZIP_ENTRY_READ (Ressourceneintrag, int $ Länge) : Lesen Sie den Inhalt des aktuell geöffneten Eintrags.

  • ZIP_ENTRY_CLOSE (Ressource $ Eintrag) : Schließen Sie den offenen Eintrag.

  • ZIP_CLOSE (Ressource $ ZIP) : Schließen Sie die Ressource für ZIP -Datei.

5. Praktische Anwendung: Scannen Sie den hochgeladenen Zip -Dateiinhalt

Wenn Sie ein System erstellen, in dem Benutzer .zip -Dateien hochladen können, müssen Sie möglicherweise den hochgeladenen Dateiinhalt scannen , z.

Zum Beispiel:

 <?php
function scanZipForPhp($zipPath) {
    $zip = zip_open($zipPath);
    if (!is_resource($zip)) {
        return false;
    }

    $suspicious = [];

    while ($entry = zip_read($zip)) {
        $name = zip_entry_name($entry);
        if (preg_match('/\.php$/i', $name)) {
            $suspicious[] = $name;
        }
    }

    zip_close($zip);
    return $suspicious;
}

$flaggedFiles = scanZipForPhp('/tmp/uploaded.zip');
if (!empty($flaggedFiles)) {
    echo "Verdächtig gefunden PHP dokumentieren:<br>";
    echo implode('<br>', $flaggedFiles);
} else {
    echo "未Verdächtig gefundendokumentieren。";
}
?>

6. Dinge zu beachten

  1. Die Funktionen zip_read () und zip_entry_* sind in den frühen Tagen Methoden, die von PHP bereitgestellt werden und für Reißverschlussoperationen auf niedrigerer Ebene geeignet sind. Wenn Sie mehr reichhaltige Funktionen benötigen (z. B. das Erstellen von Zip -Dateien, Hinzufügen von Kommentaren usw.), wird empfohlen, die Ziparchive -Klasse zu verwenden.

  2. Verwenden von ZIP_READ () kann nicht direkt auf den Inhalt im verschlüsselten Zip -Paket zugreifen.

  3. Wenn der Inhalt der ZIP -Datei groß ist, sollten Sie vermeiden, alle Inhalte gleichzeitig zu lesen, um den Speicherüberlauf zu verhindern.

7. Schlussfolgerung