[php] Installatiescript geeft fout

Status
Niet open voor verdere reacties.

5blabla5

Gebruiker
Lid geworden
27 apr 2009
Berichten
485
Voor educatieve doeleinden maak ik een script wat een ander script kan installeren, aan de hand van een installatiebestand. Dit installatiebestand heeft de volgende structuur:
Code:
Informatie over dit bestand
[:]
map[|]mapnaam[|][|]0666[|][-]
file[|]bestandsnaam.php[|]config/[|]0666[|]halli
De [:] is een scheidingsteken van het informatie gedeelte en het bestandsgedeelte
De [-] is een scheidingsteken voor de regels
De [|] is een scheidingsteken voor de data per regel

Met het volgende script wordt het installatiebestand (hierboven) verwerkt, en worden de bestanden en mappen geschreven:
PHP:
<?php
error_reporting(E_ALL);

$instalfile = "installatie2.txt"; // Relatief pad naar installatiebestand

echo 'Bestand ophalen...<br />';

$file = base64_decode(file_get_contents($instalfile));

echo 'Bestand opgehaald!<br />';
echo 'Bestand decoderen en uitvoeren...<br />';

list($info, $files) = explode('[:]', $file);
$info = trim($info);
$files = trim($files);

echo 'Bestand gedecodeerd en uitgevoerd<br />';
echo 'Bestandscontrole...<br />';

if(empty($files) && !isset($files)) {
    echo 'Foutief installatiebestand (installatiebestand niet compatibel)!';
    die();
}

$filelines = explode('[-]', $files);

$numfilelines = count($filelines) + 1;

$i = 0;
while($i < $numfilelines) {

    $y = $i + 1;

    list($instal[$y]['type'], $instal[$y]['name'], $instal[$y]['map'], $instal[$y]['chmod'], $instal[$y]['data']) = explode('[|]', $filelines[$i]);

    if($instal[$y]['type'] != 'map' && $instal[$y]['type'] != 'file') {
        echo 'Foutief installatiebestand (installatiebestand niet compatibel)!';
        die();
    }

    $i++;
}


$numfile = count($instal) + 1;

$i = 1;
while($i < $numfile) {
    if(!isset($instal[$i]["type"]) || !isset($instal[$i]["name"])) {
        echo 'Foutief installatiebestand (installatiebestand niet compatibel)!';
        die();
    }
    $i++;
}

echo 'Bestandscontrole voltooid!<br />';
echo 'Bestand- en mapstructuur schrijven...<br />';

$i = 1;
while($i < $numfile) {
    if($instal[$i]["type"] == "file") {
        $handle = fopen($instal[$i]["map"].$instal[$i]["name"], 'w');
        if(!handle) {
            echo 'Installatiefout (fopen)';
            die();
        }
        if(!fwrite($handle, base64_decode($instal[$i]["data"]))) {
            echo 'Installatiefout (fwrite)';
            die();
        }
        if(!fclose($handle)) {
            echo 'Installatiefout (fclose)';
            die();
        }

        if(!isset($instal[$i]["chmod"])) {
            $instal[$i]["chmod"] = 0666;
        }

        if(!chmod($instal[$i]["map"].$instal[$i]["name"], $instal[$i]["chmod"])) {
            echo 'Installatiefout (chmod)!';
            die();
        }

    } elseif($instal[$i]["type"] == "map") {
        if(!isset($instal[$i]["chmod"])) {
            $instal[$i]["chmod"] = 0777;

        }

        echo $instal[$i]['type'];
        echo $i;

        if(!mkdir($instal[$i]["map"].$instal[$i]["name"], $instal[$i]["chmod"])) {
            echo 'Installatiefout (mkdir)!';
            die();
        }
    } else {
        echo 'Foutief installatiebestand (type niet herkend)!';
        die();
    }
$i++;
}

echo 'Bestand- en mapstructuur schrijven voltooid!<br />';

echo 'Installatie voltooid!!';



?>

Output:
Code:
Bestand ophalen...
Bestand opgehaald!
Bestand decoderen en uitvoeren...
Bestand gedecodeerd en uitgevoerd
Bestandscontrole...
Foutief installatiebestand (installatiebestand niet compatibel)!

Overige informatie:
Het script draait op een windows testserver (XAMPP)


Ik weet verder niet of het gedeelte met chmodden enzo werkt, aangezien windows daar niet mee werkt.

Weet iemand wat het probleem is, en waarom ik die onverwachte output krijg? Alvast bedankt! :thumb:
 
Heb je er al wat debug meldingen ingezet? Zoals echo'en wat de waarde van je values dan wel is? Dat helpt waarschijnlijk al een hoop.
 
Je wilt niet weten hoeveel pogingen ik al gedaan heb o_O''

Het gaat telkens mis vanaf de while loop die de variabelen iets toe wijst...
 
Wijst ie de juiste dingen toe?

Je kunt gewoon een var_dump( $instal ); doen, dan krijg je precies te zien wat ie toegewezen heeft.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan