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 № 1Posiblemente 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
"