Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

Opgelost extra controle php loop

bewerkt zo 5 jun 2016 in PHP, MySQL Posts: 879
Als bestanden worden uitgepakt wil ik een echo geven of het wel of niet of gedeeltelijk gelukt is.

Dit is de array met allowed extensies:
$AllowedExts = array("gif", "jpeg", "jpg", "JPG", "png", "tif", "tiff", "bmp", "zip", "rar", "js", "css", "txt", "less", "pdf", "mp3"); // set allowed extensions
De extensie wordt zo uitgelezen:
$path_info = pathinfo($zip->getNameIndex($i));
$ext = $path_info['extension'];
Dan de loop voor extracten:
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 alle bestanden succesvol uitgepakt
}
else {
// echo niet alle bestanden werden uitgepakt
}
Nu moet er een tussenstation in:
Constructie:
if (alle bestanden uitgepakt) {
ech alle best uitgepakt
}
elseif (niet alle bestanden uitgepakt, maar wel sommige bestanden kunnen uitpakken) {
echo niet alle best uitgepakt
}
else (geen bestand uitgepakt) {
echo geen enkel bestand kon worden uitgepakt
}

Hoe kan ik het scenario, dat sommige bestanden wel uitgepakt kunnen worden maar sommigen ook niet, nu omzetten in een conditie? Hoe moet de loop er dan uitzien?

Reacties

  • Je kunt toch gewoon de loop voor het extracten gebruiken? (Als ik je vraag tenminste goed begrijp)

    $unzipped = 0;
    $fails = 0;
    $total = 0;

    for(....$i....)
    {
    $total ++;
    if(in_array($ext, $AllowedExts))
    {
    $zip->extractTo(dirname($_POST['extractfile']), $zip->getNameIndex($i));
    $unzipped ++;
    }
    else
    {
    $fails ++;
    }
    }//end for

    echo 'er zijn '.$unzipped.' bestanden van '.$total.' uitgepakt';
    of je houd de meuk bij in een array en toont daarmee wat er wel en niet uitgepakt is
    $unzipped = array();
    $fails = array();
    $total = 0;

    for(...$i....)
    {
    if(in_array($ext, $AllowedExts))
    {
    $zip->extractTo(dirname($_POST['extractfile']), $zip->getNameIndex($i));
    $unzipped[] = $zip->getNameIndex($i);
    }
    else
    {
    $fails[] = $bestanden[$i] ;
    }
    }//end for

    if (count($upzipped) < $total)
    {
    echo 'De volgende bestanden zijn niet uitgepakt';
    foreach($unzipped as $meuk)
    {
    echo $meuk.'<br>';
    }
    }
    elseif(count($unzipped) == $total)
    {
    echo 'Alle bestanden zijn uitgepakt';
    }
    else
    {
    echo 'er werd niets uitgepakt';
    }
    nuet
  • bewerkt ma 6 jun 2016
    PMPosts: 879
    Ik heb de eerste gebruikt en die werkt perfect! Dit is idd de meest makkelijke oplossing; gewoon aangeven hoeveel van hoeveel totaal er uitgepakt zijn. Dan kunnen ze zelf gelijk zien dat ze evt een forbidden file wilde uitpakken als het totaal niet klopt met aantal uitgepakt. Thanks.ziet er nu zo uit:
    if(isset($_POST['extract'])) {
    //protect manipulating extractfile_name via browser inspector
    $pieces = explode("/", $_POST['extractfile']);
    $protectedstring = $pieces[0].'/'.$pieces[1].'/'.$pieces[2];
    if($MainDir != $protectedstring) {
    $location = '/sfm';
    header("Location: " . "http://"; . $_SERVER['HTTP_HOST'] . $location);
    die();
    }
    $zip = new ZipArchive;
    if ($zip->open($_POST['extractfile']) === TRUE) {

    $unzipped = 0;
    $fails = 0;
    $total = 0;
    for ($i = 0; $i < $zip->numFiles; $i++) {
    $path_info = pathinfo($zip->getNameIndex($i));
    $ext = $path_info['extension'];
    $total ++; // extra

    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
    $unzipped ++;

    }
    else {
    $fails ++;

    }

    }
    include('plugins/sfm/includes/extract.php'); // echo


    $zip->close();

    }

    }
Login of Registreer om te reageren.