我有一个网站使用Ghostscritp来重新定义一些PDF文件。在使用Imagick遇到麻烦之后,我决定使用php exec命令手动运行Ghostscipt gs命令行。这工作正常。
但是在我的localhost MAMP测试服务器中,它不起作用。我做了这个PHP脚本来测试并试图找到原因。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
$root = getcwd();
$dirTemp = $root.'/teste';
$imgTeste = new Imagick();
echo('<h1>Teste</h1>');
echo('<h2>Unix</h2>');
echo('<h3>exec date</h3>');
$Exec = array();
$execResult = NULL;
exec("date", $Exec, $execResult);
echo('<div style="width:100%; height:200px; overflow:scroll; border:1px solid #000;"><p>Resultado: '.$execResult.'</p>');
foreach($Exec as $linha){ echo('<p>'.$linha.'</p>'); }
echo('</div>');
echo('<h3>exec ls</h3>');
$Exec = array();
$execResult = NULL;
exec("ls", $Exec, $execResult);
echo('<div style="width:100%; height:200px; overflow:scroll; border:1px solid #000;"><p>Resultado: '.$execResult.'</p>');
foreach($Exec as $linha){ echo('<p>'.$linha.'</p>'); }
echo('</div>');
echo('<h2>Ghostscript</h2>');
echo('<h3>Info</h3>');
$Exec = array();
$execResult = NULL;
exec("gs -h", $Exec, $execResult);
echo('<div style="width:100%; height:200px; overflow:scroll; border:1px solid #000;"><p>Resultado: '.$execResult.'</p>');
foreach($Exec as $linha){ echo('<p>'.$linha.'</p>'); }
echo('</div>');
echo('<h3>Teste</h3>');
$arqTeste = $dirTemp."/teste.gs.jpeg";
$arqTesteOrig = $root."/teste.pdf";
if(is_file($arqTeste)){
unlink($arqTeste);
if(is_file($arqTeste)) die('<p>Não foi possível excluir o teste anterior!</p>');
}
echo('<p>Renderizar "'.$arqTesteOrig.'" para "'.$arqTeste.'"...');
$gscmd = "gs -dSAFER -sDEVICE=jpeg -r75 -dDOINTERPOLATE -dFirstPage=1 -dLastPage=1 -o ".$arqTeste." ".$arqTesteOrig;
echo('<p>Ghostscript: '.$gscmd.'</p>');
$Exec = array();
$execResult = NULL;
exec($gscmd, $Exec, $execResult);
echo('<div style="width:100%; height:200px; overflow:scroll; border:1px solid #000;"><p>Resultado: '.$execResult.'</p>');
foreach($Exec as $linha){ echo('<p>'.$linha.'</p>'); }
echo('</div>');
list($width, $height, $type, $attr) = getimagesize($arqTeste);
echo('<img src="temp/_teste.jpeg" '.$attr.' />');
echo('<h2>Imagick</h2>');
echo('<h3>Info</h3>');
$Ver = $imgTeste->getVersion();
foreach($Ver as $prop=>$val){ echo('<p>'.$prop.': '.$val.'</p>'); }
echo('<p>Fim do Teste ---+</p>');
?>
</body>
</html>
这个脚本做了几个测试。两个第一个exec命令工作正常,但gs命令失败(返回127,我gess -1或FALSE)。奇怪的是,如果我将命令行从浏览器(在“Ghostscript:”之后)复制并粘贴到终端(命令行shell),它就可以了!为什么呢?