2014-06-27 7 views
1

J'utilise le code suivant pour ouvrir un fichier avec Runkit_Sandbox:Comment ouvrir un fichier en utilisant Runkit_Sandbox

<?php 
$options = array(
    'open_basedir'=>'/var/www/html/test/', 
    'allow_url_fopen'=>'true', 
); 
$sandbox = new Runkit_Sandbox($options); 
$sandbox->ini_set('html_errors',true); 

$sandbox->fopen('/var/www/html/test/data.txt', 'r'); 

?> 

Je crée déjà le fichier data.txt dans le répertoire/var/www/html/test/'avec un permission appropriée. Cependant, j'ai toujours cette erreur:

Warning: Runkit_Sandbox::__call(): Unable to translate resource, or object variable to current context. in /var/www/html/test/write1.php on line 10 

Qu'est-ce qui me manque ici?

+0

Je ne sais pas runkit, mais quelque chose me dit que vous devriez changer ' 'open_basedir' => '/ var/www/html/test',' à '' open_basedir '=>'/var/www/html/test/', 'then' (' /var/www/html/test/data.txt ',' r ') 'à' (' data.txt ',' r ') 'essayez cela, voyez si ça le met en marche. –

+0

J'ai mis à jour la question. En fait, j'ai d'abord écrit le script comme dans votre commentaire ci-dessus mais cela n'a pas fonctionné. Runkit a besoin d'un chemin de fichier absolu. – petwho

+0

Ok. Je suis incapable de tester votre code. Après avoir essayé l'exemple de code de PHP.net, j'obtiens l'erreur suivante: Erreur fatale: Classe 'Runkit_Sandbox' introuvable dans ... 'désolé je ne pourrais pas être plus utile (* j'ai essayé *). (suis sur un serveur hébergé). –

Répondre

1

fopen() renvoie une ressource. Les ressources et les objets ne peuvent pas être échangés entre interprètes. Ce que vous faites fondamentalement est d'ouvrir le fichier dans le sandbox, et de demander à ce que le handle de fichier du sandbox soit retourné dans votre contexte actuel. Ce n'est pas possible.

Vous pouvez utiliser eval():

$sandbox->eval(' 
    $f = fopen("/var/www/html/test/data.txt", "r"); 
    // ... rest of the code 
'); 
Questions connexes