Ich schreibe ein System für eine Browseranwendung, das einige bestimmte PHP-Skripte in einer Datenbank speichern und dann herausziehen und ausführen wird, wenn es benötigt wird. Zuerst habe ich versucht, exec() zu verwenden und die Ausgabe eines Skripts, das die Skripte aus der Datenbank holte und sie ausdruckte, an PHP weiterzuleiten. Dies hat in einem Anwendungsfall funktioniert, aber nicht in allen und fühlt sich so oder so anfällig an, also suche ich nach einem besseren Weg.
Ich versuche jetzt, dies durch die Verwendung eines PHP-Dateistreams im Speicher zu erreichen. Zum Beispiel:
$thing = <<<'TEST'
TEST;
$filename = "php://memory";
$fp = fopen($filename, "w+b");
fwrite($fp, $thing);
//rewind($fp);
fclose($fp);
include "php://memory";
Es wird jedoch nichts gedruckt, wenn das Skript ausgeführt wird. Ist dies überhaupt auf diesem Weg möglich und wenn nicht, gibt es einen anderen Weg, dies zu tun? Ich versuche zu vermeiden, temporäre Dateien schreiben und von ihnen lesen zu müssen, da der Zugriff auf das Dateisystem die Dinge verlangsamen würde. Gibt es eine URL, die ich zum "include" bereitstellen kann, damit der Speicherstrom gelesen wird, als ob es eine Datei wäre?
Ich glaube nicht, dass eval()
dies tun würde, da es, wenn ich mich richtig erinnere, auf eine einzige Zeile beschränkt ist.
Bitte auch keine Antworten wie "eval = include = die Hölle". Nicht-administrative Benutzer haben keinen Zugriff, um die Skripte, die in der Datenbank gespeichert sind, zu schreiben. Ich weiß, dass dies im Lebenszyklus meiner Anwendung eine besondere Behandlung erfordert.
0 Stimmen
Mein Wort, ich lag völlig falsch. Eval funktioniert tatsächlich für mehr als eine Zeile. Ich habe es nicht einmal ausprobiert lol... also wird das funktionieren. Ich bin jedoch immer noch neugierig auf Dateiströme, die im Speicher gespeichert sind, also wäre ich dankbar, wenn jemand eine Antwort auf diesen Teil hätte.
0 Stimmen
Gibt es einen bestimmten Grund, warum du keine Dateien erstellen möchtest? Das Dateisystem ist eine Datenbank für Dateien. Und: OH MEIN GOTT, TU ES NICHT, DAS IST GEFÄHRLICH. Es spielt keine Rolle, ob nur Admins in diese PHP-Dateien schreiben können, sobald du einen SQL-Injectionsfehler hast oder jemand deine MySQL-Zugangsdaten bekommt/rät/aufdeckt -> sofortige Remote-Code-Ausführung.