Aktueller Standort: Startseite> Neueste Artikel> Wie überspringe ich bestimmte Dateieinträge wie __macosx, wenn ich die Funktion zip_read verwende?

Wie überspringe ich bestimmte Dateieinträge wie __macosx, wenn ich die Funktion zip_read verwende?

M66 2025-06-12

Bei der Verwendung von PHP zur Verarbeitung von Zip -Dateien ist die Funktion zip_read eine häufig verwendete Schnittstelle zum Lesen von Dateieinträgen in einem komprimierten Paketelement nach Element. Manchmal begegnen wir jedoch auf unerwünschte Ordner oder Dateieinträge, wie das vom MacOS -System oder andere versteckte Dateien generierte __macosx -Verzeichnis. Diese Einträge haben normalerweise keine Bedeutung für unsere Geschäftslogik und können sogar den Dateiverarbeitungsfluss beeinträchtigen, sodass sie während der Durchquerung übersprungen werden müssen.

In diesem Artikel wird erläutert, wie Sie diese spezifischen Dateieinträge herausfiltern, wenn die Funktion zip_read verwendet wird.

Grundlegende Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Sie eine ZIP -Datei öffnen und die darin enthaltenen Dateieinträge iterieren:

 <?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);

if ($zip) {
    while ($zipEntry = zip_read($zip)) {
        $entryName = zip_entry_name($zipEntry);
        echo "Found entry: $entryName\n";
    }
    zip_close($zip);
} else {
    echo "Failed to open ZIP file.";
}
?>

Überspringen Sie __macosx und andere angegebene Ordner oder Dateien

Wir müssen den Namen des aktuellen Eintrags während der Durchquerung bestimmen und Ordner ausschließen, beginnend mit __macosx und ähnlichen ungültigen Einträgen.

Der Schlüssel hier ist die Verwendung von PHP -String -Funktionsfunktions -Strpos, um das Präfix des Eintragsnamens zu erkennen:

 <?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);

if ($zip) {
    while ($zipEntry = zip_read($zip)) {
        $entryName = zip_entry_name($zipEntry);

        // über etwas springen __MACOSX Alle Einträge im Ordner
        if (strpos($entryName, '__MACOSX/') === 0) {
            continue;
        }

        // 还可以über etwas springen其他不想bewältigen的隐藏dokumentieren,Zum Beispiel .DS_Store
        if (basename($entryName) === '.DS_Store') {
            continue;
        }

        // Normaler Verarbeitungscode
        echo "Verarbeitungsdateien: $entryName\n";

        // Sie können einen Eintrag für das Lesen von Operationen eröffnen,Zum Beispiel:
        if (zip_entry_open($zip, $zipEntry)) {
            $contents = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry));
            // bewältigen $contents,Zum Beispiel保存dokumentieren
            zip_entry_close($zipEntry);
        }
    }
    zip_close($zip);
} else {
    echo "Nicht öffnen können ZIP dokumentieren";
}
?>

Zusammenfassen

  • Überprüfen Sie den Eintragsnamen, wenn Sie ZIP_READ zum Lesen von ZIP -Einträgen nacheinander verwenden.

  • Verwenden Sie Strpos, um festzustellen, ob der Eintragsname mit __macosx/ und überspringen Sie alle Dateien in diesem Verzeichnis.

  • Gleichzeitig kann die Filterung für bestimmte Dateinamen (z. B. .ds_store ) durchgeführt werden.

  • Dies kann effektiv vermeiden, nutzlose MacOS -Systemdateien zu verarbeiten und die Code -Robustheit und -Effizienz zu verbessern.