J'écris un système pour une application de navigateur qui va stocker certains scripts php particuliers dans une base de données, puis les retirer et les exécuter en cas de besoin. Au début, j'ai essayé d'utiliser exec() et piping pour php la sortie d'un script qui a sorti les scripts de la base de données et les a imprimés. Cela a fonctionné dans un cas d'utilisation, mais pas tous, et se sent fragile de toute façon, donc je cherche un meilleur moyen.Inclure du flux "php: // memory"
Je tente maintenant d'accomplir ceci en utilisant un flux de fichier PHP en mémoire. Par exemple:
$thing = <<<'TEST'
<?php
$thing = array();
print "Testing code in here.";
var_dump($thing);
?>
TEST;
$filename = "php://memory";
$fp = fopen($filename, "w+b");
fwrite($fp, $thing);
//rewind($fp);
fclose($fp);
include "php://memory";
Cependant, rien n'est imprimé lors de l'exécution du script. Est-ce possible même par ce moyen, et sinon, y a-t-il une autre façon de le faire? J'essaie d'éviter d'avoir à écrire des fichiers temporaires et de les lire, car je suis sûr que l'accès au système de fichiers ralentirait les choses. Y at-il une URL que je peux fournir à "include" pour qu'il lise le flux de mémoire comme s'il s'agissait d'un fichier?
Je ne pense pas que eval()
ferait cela, car, si je me souviens bien, c'est limité à une seule ligne.
En outre, s'il vous plaît pas de réponses "eval = include = hell". Les utilisateurs non-administrateurs n'ont pas accès à l'écriture des scripts stockés dans la base de données, je sais que cela nécessite un traitement spécial tout au long du cycle de vie de mon application.
Mon mot, j'avais totalement tort. Eval fonctionne pour plus d'une ligne. Je ne l'ai même pas essayé lol ... suppose que ça marchera alors. Cependant, je suis toujours curieux au sujet des flux de fichiers stockés dans la mémoire, donc si quelqu'un a une réponse à cette partie, je serais reconnaissant. –
Y a-t-il une raison particulière pour laquelle vous ne voulez pas créer de fichiers? Le système de fichiers est une base de données pour les fichiers. Et: OMG NE FAITES PAS CELA EST DANGEREUX. Peu importe si seuls les administrateurs peuvent écrire dans ces fichiers php, dès que vous avez un bug d'injection SQL ou que quelqu'un parvient à obtenir/deviner/révéler vos informations d'identification MySQL -> insta-remote-code-execution. – mensi