/ / zobraziť číslo verzie ghostscriptu prostredníctvom PHP v ubuntu - php, ghostscript

zobraziť číslo verzie ghostscript prostredníctvom PHP v ubuntu - php, ghostscript

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ď č. 1

Mož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
"