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:
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:
Output:
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:
Code:
Informatie over dit bestand
[:]
map[|]mapnaam[|][|]0666[|][-]
file[|]bestandsnaam.php[|]config/[|]0666[|]halli
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: