I want to check if some files are unpacked whe they are part of an allowed array of extensions. This is the extensions which are allowed to be unpacked:
$AllowedExts = array("gif", "jpeg", "jpg", "JPG", "png", "tif", "tiff", "bmp", "zip", "rar", "js", "css", "txt", "less", "pdf", "mp3"); // set allowed extensions
For unzipping, i have this code so far:
if(in_array($ext, $AllowedExts)) { // only files with allowed Exts can be extracted
$zip->extractTo(dirname($_POST['extractfile']), $zip->getNameIndex($i)); // extract in the same folder as where the zip file is
echo 'file(s) are unpacked';
}
else {
echo 'file(s) could not be unpacked';
}
Now i want in this loop a check if some files are unpacked and some files not.
so there must be something like:
if (all file(s) can be unpacked) {
// alle files are unpacked
}
elseif (only some files can be unpacked) {
// only some files are unpacked
}
else (no file could be unpacked) {
// no file could be unpacked
}
How do i have to create the if/else loop for this?
Suppose you have a list of all extensions of your files in an array called $arr
. You could use array_reduce
to check if all, some or none of your files can be extracted.
This code should work:
<?php
$AllowedExts = array("gif", "jpeg", "jpg", "JPG", "png", "tif", "tiff", "bmp", "zip", "rar", "js", "css", "txt", "less", "pdf", "mp3"); // set allowed extensions
$myExtenstions = ["zip", "rar", "js", "css", "bb", "txt2"];
$some=false;
$res = array_reduce(
$myExtenstions,
function($res, $a) use ($AllowedExts, &$some) {
$allowed = in_array($a, $AllowedExts);
if (!$some && $allowed) $some=true;
return $res && $allowed;
}, true
);
if ($res) {
var_dump("all files are unpacked");
}else if ($some){
var_dump("only some files are unpacked");
}else {
var_dump("no file could be unpacked");
}