2 votes

afficher le numéro de version de ghostscript via PHP dans ubuntu

J'ai écrit le code suivant pour afficher le numéro de version de ghostscript :

<html>
<head>
<title></title>
</head>
<body>
<?

$ver = shell_exec("/usr/bin/gs --version");
//$ver = exec(GS_BIN . " --version");
print "$ver";
print "A";

?>
</body>
</html>

Je peux obtenir le A imprimé, mais pas le numéro de version pourquoi ?

Gracias.

2voto

Marc B Points 195501

Il est possible que ghostscrsipt écrive les données dans STDERR au lieu de STDOUT. Essayez de faire

/usr/bin/gs --version 2>&1 

pour rediriger stderr vers stdout et essayer à nouveau

1voto

hakre Points 102271

Vous devez utiliser var_dump($ver); à des fins de débogage, car votre code fonctionne tout simplement :

$ php -r "echo shell_exec('/usr/bin/gs --version');"
8.71

Je viens de le faire fonctionner sur ma boîte Linux et selon shell_exec() Docs ça devrait être bon.

Les choses à rechercher :

  • Mode sans échec activé ?
  • exec() peut renvoyer le code de sortie / le statut de retour de la commande.
  • s'il renvoie NULL voir cette réponse .

STDERR et shell_exec()

shell_exec() ne retournera que la sortie des commandes écrite sur STDOUT. Dans le cas où la commande ne peut pas être invoquée par le shell, cette fonction retournera NULL et il dissimulera ce qui a été signalé comme une erreur.

Pour inclure les erreurs également dans la valeur de retour, STDERR doit être redirigé vers STDOUT. Ceci est fait en ajoutant 2>&1 à la fin de la commande. Voici le même exemple de code avec une commande erronée pour la démonstration :

$ php -r "var_dump(shell_exec('/usr/bin/gs2 --version 2>&1'));"
string(44) "sh: /usr/bin/gs2: No such file or directory
"

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