2010-06-04 3 views
0

Certes, cela est un problème étrange pour moi d'avoir, mais voici ce que je fais:Suppress PHP cgi des en-têtes de PHP Ruby

J'ai un script Ruby qui exécute une chaîne de PHP code et capturant la sortie.

Ceci est en quelque sorte lié à another problem that I had avec l'exécution de cgi PHP à partir de la ligne de commande.

Voici la source d'un script Ruby:

#!/usr/bin/ruby 
puts "Content-type: text/html\n\n" 
puts "Start PHP Output<br />" 
puts `echo '<?php echo "hello world"; ?>' | php5 -q` 
puts "End PHP Output<br />" 

La chose vraiment étrange que je ne peux pas comprendre que le code PHP semble ici pour se comporter différemment quand je lance le script Ruby à partir de la ligne de commande vs de CGI. Ce qui n'a vraiment aucun sens pour moi, parce que de toute façon j'exécute la même chaîne de PHP à partir de la commande avec les mêmes arguments.

Quand je lance le dessus de script Ruby à partir de la ligne de commande, je reçois la sortie que je pense:

Content-Type: text/html

PHP Début sortie
Bonjour tout le monde fin PHP sortie

Quand je frappe ce même script Ruby à partir d'un navigateur via CGI, je reçois cette sortie:

Démarrer PHP Sortie
Powered-By-X: PHP/5.2.13 Content-Type: text/html
puts "Content-Type: text/html \ n \ n" puts « PHP Démarrer sortie
"met echo 'hello world' | php5 -q met « pour moi, comme ce qui se passe est que la chaîne de PHP n'est pas supprimer les en-têtes, Fin PHP sortie
» Fin PHP sortie

Il semble, comme je me attends -q option à faire ... et jette aussi mon intégralité Le script Ruby revient au navigateur - ce qui me déroute.

Des pensées?

Merci d'avance!

+1

Cela pourrait être mieux adapté à ServerFault. Il se peut que la configuration de CGI soit différente de la configuration de votre utilisateur. –

+0

Merci, je l'ai posté à ServerFault: http://serverfault.com/questions/148205/suppress-php-headers-running-cgi-php-from-ruby –

Répondre

1

Pour autant que je sache, PHP prend en charge l'intégralité de la requête & et le relance avec le même fichier demandé, après quoi il renvoie le contrôle à ruby ​​au moment de l'invocation. S'il vous plaît, veuillez nous contacter au lieu du CGI si c'est ce que vous essayez de faire.

Vous pouvez essayer d'éliminer les variables d'environnement par lesquelles le CGI détermine qu'il est dans une requête de serveur Web.

#!/usr/bin/ruby 
puts "Content-type: text/plain\n\n" 
puts "Start PHP Output<br />" 
f = IO.popen("env -i php5-cgi -q","r+") 
f.write("<?php var_dump(time());?>"); 
f.close_write() 
f.each {|line| puts line} 
f.close() 
puts "End PHP Output<br />" 
+0

Ce n'est pas possible (cela fonctionne actuellement sur un machine hébergée) pour moi d'utiliser CLI sur CGI - c'était la première chose que j'ai regardée.Il semble que l'ajout du "env -i" résout le problème que j'avais! La simplicité est le génie! Merci beaucoup!!! –

Questions connexes