BUG: Les scripts php n'envoie pas l'output/STDOUT à Apache2
Posté : 11 avr. 2008, 10:06
J'ai un pbl avec les fonctions STDOUT/OUTPUT de PHP. J'utilise sur linux suse un script PHP avec une directive RewriteMap dans la configuration de APACHE2. J'ai isolé le pblm en constatant qur PHP n'envoie jamais de $OUTPUT et ou STDOUT à APACHE. J'ai fait le tests sur plusieurs plateformes: (winXP/apache2/PHP5 & OPENSUSE/apache2/PHP5.2.5)
Voila ma configuration Apache (Elle marche très bien avec un script perl la directive RewriteMap
J'ai vérifié qu mon script PHP fonctionne très bien à partir d'une console ou CMD sur XP => Il lit bien le STDIN et renvoie bien le STDOUT. Mais dès que je démarre Apache2 avec ce script il reçoit bien le STDIN mais ne reçoi jamais le STDOUT.
Mon script rewritemap.php ressemble à sa:
Merci bcp pour votre aide!!
A+
Voila ma configuration Apache (Elle marche très bien avec un script perl la directive RewriteMap
Code : Tout sélectionner
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/home/mywork/web/partenaire"
ServerName mytest.mydomain.com
DirectoryIndex index.php
ErrorLog /home/mywork/log/apache/error.log
LogLevel debug
RewriteLog /home/mywork/log/apache/rewrite.log
RewriteLogLevel 9
RewriteEngine on
#RewriteLock /home/mywork/web/partenaire/test/rewrite.lock
#RewriteMap rewritemap prg:/home/mywork/web/partenaire/test/rewritemap.perl
RewriteMap rewritemap prg:/home/mywork/web/partenaire/test/rewritemap.php
RewriteOptions Inherit
RewriteRule ^/test/(.*)$ ${rewritemap:%{REQUEST_URI}} [L]
<Directory "/home/mywork/web/partenaire">
Options FollowSymLinks
AllowOverride all
Order allow, deny
Allow from all
</Directory>
</VirtualHost>
J'ai vérifié qu mon script PHP fonctionne très bien à partir d'une console ou CMD sur XP => Il lit bien le STDIN et renvoie bien le STDOUT. Mais dès que je démarre Apache2 avec ce script il reçoit bien le STDIN mais ne reçoi jamais le STDOUT.
Mon script rewritemap.php ressemble à sa:
#!/usr/bin/php5
<?php
//Flag to verify the script is starting
//$handle = fopen ("home/stat.txt", 'a+');
//fwrite($handle, date("H")."h".date("i")."m".date("s").": start of the script\r\n");
//fclose($handle);
$stdin = fopen ('php://stdin', 'r');
$output = fopen('php://output', 'w');
ob_implicit_flush (true); // Use unbuffered output
while ($line = fgets ($stdin)) {
$line = trim($line);
//Flag to verify the script is receinving STDIN
//$handle = fopen ("home/stat.txt", 'a+');
//fwrite($handle, date("H")."h".date("i")."m".date("s").": Just receive: $line \r\n");
//fclose($handle);
fwrite(STDOUT,"mynewURL?".$line); //try this one and didn’t work with apache
fwrite($output,"mynewURL?".$line); //try this with OUTPUT and didn’t work with neither
echo "mynewURL?".$line //try this one also but only works with the console
}
?>
J'ai eu la confirmation que mon script PHP fonctionne grace aux flags que j'ai positionnés; il reçoit correctement le STDIN mais ne renvoie jamais le STDOUT à Apache. Et je me répète mais la même configuraiton avec le script Perl fonctionne correctement. Merci bcp pour votre aide!!
A+