62 votes

Comment rediriger STDOUT vers un fichier en PHP?

Le code ci-dessous fonctionne presque, mais ce n'est pas vraiment ce que je voulais :

ob_start();
echo 'xxx';
$contents = ob_get_contents();
ob_end_clean();
file_put_contents($file,$contents);

Y a-t-il un moyen plus naturel ?

2 votes

Vous devriez vraiment accepter une réponse ici. Bas Peters vous a donné la solution parfaite.

1 votes

Le code d'exemple redirige la SORTIE vers un fichier, pas vers STDOUT, la solution de Bas semble fonctionner uniquement parce que les environnements CLI (et dans une moindre mesure CGI) utilisent ces flux de manière interchangeable. Le module PHP Apache ne le fait pas.

2voto

Vaclav Krauz Points 11

Vous pouvez installer l'extension Eio

pecl install eio

et dupliquer un descripteur de fichier

$temp=fopen('/tmp/my_stdout','a');
$my_data='my something';
$foo=eio_dup2($temp,STDOUT,EIO_PRI_MAX,function($data,$esult,$request){
    var_dump($data,$esult,$request);
    var_dump(eio_get_last_error($request));
},$my_data);
eio_event_loop();
echo "something to stdout\n";
fclose($temp);

cela crée un nouveau descripteur de fichier et réécrit le flux cible de STDOUT

ceci peut également être fait avec STDERR

et les constantes STD[OUT|ERR] sont toujours utilisables

0voto

buburs Points 11

Voici une solution moche qui m'a été utile pour un problème que j'avais (besoin de déboguer).

if(file_get_contents("out.txt") != "en cours")
{
    file_put_contents("out.txt","en cours");
    $content = file_get_contents('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    file_put_contents("out.txt",$content);
}

L'inconvénient principal est que vous feriez mieux de ne pas utiliser les variables $_POST. Mais vous n'êtes pas obligé de le mettre au tout début.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X