Hallo,

Voor een simpele plugin systeem wil ik graag dat er door een map met plugins word gekeken. Er word in elke map gekeken of index.plugin.php bestaat. Vervolgens zou [#pluginnaam] moeten worden gereplaced met de genoemde file.

Jammer genoeg(ook logisch maargoed) werken de ondestaande codes niet:
$storage = str_replace("[#".$entry."]", require_once("./Plugins/".$entry."/index.plugin.php"), $storage);

$storage = str_replace("[#".$entry."]", file_get_contents("./Plugins/".$entry."/index.plugin.php"), $storage);


file_get_contents weergeeft alleen html(uiteraard logisch) en require_once is het volgende als resulaat:

regel 1
[#testplugin]
regel 3



dit is gereplaced
regel 1
1
regel 3

Oftewel een random getal 1 op de plek waar de replace moet staan, en de replace zelf staat boven aan.

Weet iemand raad?
Die 1 is geen random getal maar waarschijnlijk de 1 van (true) gelukt.

Eerst de file ophalen en dan de replace doen.
Hoe dan precies?


					$timebased = require_once("./Plugins/".$entry."/index.plugin.php");
					$storage = str_replace("[#".$entry."]", $timebased, $storage);

<< Dit werkt alleen met file_get_contents waarmee je geen php kan uitvoeren.
Je kan toch eerst de file ophalen.
Het is voor een simpele plugin systeem dus ik moet het replacen. Als ik eerst 'require_once' uitvoer kan ik het niet meer in de replace gebruiken :(
require geeft een 1 terug bij succes en een 0 ij een failure. Behalve als je een return in het geïnclude bestand plaatst.

Als ik het goed begrijp wil je het php bestand uitvoeren en vervolgens die waarde gebruiken? Dan kun je als ik het goed heb ob_start() en ob_end_flush() gebruiken. Zo niet dan ben je waarschijnlijk uitgeleverd op file_get_contents() en eval().
eval heb ik al geprobeerd maar deze wil maar niet werken.


if(isset($_GET['page'])) {
	$storage = file_get_contents($connect['root'] . "Sources/pages/" . $_GET['page'] . ".php");
}else{
	$storage = file_get_contents($connect['root'] . "Sources/pages/index.php");
}

/* Collect plugins */
if ($handle = opendir("./Plugins/")) {
		while (false !== ($entry = readdir($handle))) {
			if($entry!="."&&$entry!=".."){
				if(file_exists("./Plugins/".$entry."/index.plugin.php")){
					ob_start();
					$timebased = file_get_contents("./Plugins/".$entry."/index.plugin.php");
					$storage = str_replace("[#".$entry."]", $timebased , $storage);
					ob_end_flush();
				}
			}
		}
}

eval("return $storage;");

eval("$storage");

eval($storage);


In het geincluded bestand heb ik zowel met <?php ?> en zonder gewerkt :( Toch blijft deze code staan:

Parse error: syntax error, unexpected '<' in D:\WampServer\www\cms\index.php(30) : eval()'d code on line 1

<?php
$storage = file_get_contents(...); // haal bestand op

$plugin = file_get_contents(...); // haal plugin bestand op
$plugin = str_replace('[#'.$entry.']', $storage); // replace [#entry] met $storage

eval($plugin); // voer plugin bestand uit
?>
Dat is precies wat ik doe! Enkel heb ik hier en daar een paar checks bijvoorbeeld of de file index.plugin.php wel bestaat en bovendien moet het mogelijk zijn meerdere plugins te replacen. Daarom staat eval NA
if ($handle = opendir("./Plugins/")) {}


Reageren