为什么php exec不在我的Mac OS X MAMP服务器上运行gs命令?

时间:2016-08-05 13:52:48

标签: php macos exec mamp ghostscript

我有一个网站使用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),它就可以了!为什么呢?

0 个答案:

没有答案