/ / muestra el número de versión de ghostscript a través de PHP en ubuntu - php, ghostscript

muestra el número de versión de ghostscript a través de PHP en ubuntu - php, ghostscript

He escrito el siguiente código para mostrar el número de versión 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>

Puedo conseguir el A Impreso, pero no el número de versión ¿por qué?

Gracias.

Respuestas

2 para la respuesta № 1

Posiblemente ghostscrsipt está escribiendo los datos en STDERR en lugar de STDOUT. Trata de hacerlo

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

para redireccionar stderr a stdout e intentarlo de nuevo


1 para la respuesta № 2

Deberías usar var_dump($ver); para propósitos de depuración, porque su código simplemente funciona:

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

Acabo de ejecutarlo en mi caja de Linux y de acuerdo con shell_exec() Docs, debería estar bien.

Cosas a buscar:

  • Modo seguro habilitado?
  • exec() Puede devolver el código de salida / estado de retorno del comando.
  • si vuelve NULL, ver esta respuesta.

STDERR y shell_exec ()

shell_exec() solo devolverá la salida de comandos escrita a STDOUT. En caso de que el comando no pueda invocar el comando, esta función devolverá NULL y ocultará lo que se ha reportado como error.

Para incluir errores también en el valor de retorno, STDERR debe redirigirse a STDOUT. Esto se hace agregando 2>&1 hasta el final del comando. Aquí está el mismo código de ejemplo con un comando incorrecto para la demostración:

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