Napísal som nasledujúci kód na zobrazenie čísla verzie ghostscriptu:
<html>
<head>
<title></title>
</head>
<body>
<?
$ver = shell_exec("/usr/bin/gs --version");
//$ver = exec(GS_BIN . " --version");
print "$ver";
print "A";
?>
</body>
</html>
Môžem dostať A
vytlačené, ale nie číslo verzie, prečo?
Vďaka.
odpovede:
2 pre odpoveď č. 1Možno ghostscrsipt zapisuje údaje do STDERR namiesto STDOUT. Skúste urobiť
/usr/bin/gs --version 2>&1
presmerujte stderr na štandardný výstup a skúste to znova
1 pre odpoveď č. 2
Mali by ste používať var_dump($ver);
na účely ladenia, pretože váš kód funguje:
$ php -r "echo shell_exec("/usr/bin/gs --version");"
8.71
Práve som to nechal bežať na svojom linuxovom boxe a podľa shell_exec()
Docs, malo by to byť v poriadku.
Čo treba hľadať:
- Je zapnutý núdzový režim?
exec()
môže vrátiť výstupný kód / návratový stav príkazu.- ak sa vráti
NULL
, pozri túto odpoveď.
STDERR a shell_exec ()
shell_exec()
vráti iba výstup príkazov zapísaný do STDOUT. V prípade, že príkaz nemožno vyvolať pomocou shellu, táto funkcia sa vráti NULL
a skryje to, čo bolo nahlásené ako chyba.
Ak chcete do návratovej hodnoty zahrnúť aj chyby, musí byť STDERR presmerovaný na STDOUT. To sa robí pridaním 2>&1
do konca príkazu. Tu je ten istý príklad kódu s nesprávnym príkazom na ukážku:
$ php -r "var_dump(shell_exec("/usr/bin/gs2 --version 2>&1"));"
string(44) "sh: /usr/bin/gs2: No such file or directory
"