Autor Zpráva
Milda Jaroušek
Profil *
Hezký den,

začínám s PHP a na testovacím serveru mám PHP 7.0 ....

Uvítal bych jednoduchou aplikaci která přijme ZIP soubor a potřeboval bych ho projít nějakým cyklem a rozbalit pouze soubory ze zipu které mají "MIME-type" = image/jpeg a jsou zároveň menší než 1 MB. Ostatní větší a soubory jiných formátu ponechat nerozbalené.

Jak mám postupovat?

Na netu jsem pár podobných tipů našel, ale jde převážně o články staré 5 -10 let a pro starší verze PHP (4 a 5) , mne by zajímal optimální postup z dnešních doby pro PHP 7 a vyšší ... Díky moc za navedení.
Keeehi
Profil
<?php
$filename = 'archive.zip';
$za = new ZipArchive();

if($za->open($filename)) {
    $filesToExtract = [];
    for ($i = 0; $i < $za->numFiles ; $i++) {
        $entryStats = $za->statIndex($i);
        if(strtolower(substr($entryStats['name'], -4)) === '.jpg' && $entryStats['size'] < 1000000) {
            $filesToExtract[] = $entryStats['name'];
        }
    }
    
    if (!empty($filesToExtract)) {
        if($za->extractTo('extract', $filesToExtract)) {
            echo 'Extracted';
        } else {
            echo 'Extraction failed';
        }
    } else {
        echo 'No files for extraction';
    }
    $za->close();
} else {
    echo "Archive $filename can't be opened";
}

Mime-type zevnitř archivu nezvládneš zjistit. Na to by jsi musel ten soubor vyextrahovat. Můžeš ale kontrolovat jméno souboru a jeho koncovku.
Milda Jaroušek
Profil *
Keeehi:
Mockrát děkuji, to je přesně ono co jsem potřeboval!
Jelikož ty soubory budu dále "projíždět" GD knihovnou, tak pouhá kontrola koncovek uvnitř extrakce bude stačit ;-).
Ještě jednou díky.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0