0

実際の状況

MacBookPro2008年初頭

OSX Lion 10.7.3

MAMP 2.0.5

ImageMagick-x86_64-apple-darwin11.3.0.tar.gz-インストールされ、ターミナルから完全に機能します

gplgs-8.71.dmg-ターミナルとImagickからインストールされ、完全に機能しています

何が機能しますか?

ターミナルを使用すると、「変換」コマンドは完全に機能します。PDFをJPGに変換しても問題ありません...

何が問題ですか?

PHPでImagickを使用しようとすると、(最も単純な)デモコマンドが実行されます。

「ロゴの変換:logo.gif」

何も起こりません!私はこのガイドを段階的に実行し、「envvars」ファイルを変更する必要があることを知っており、それを作成しましたが...それは解決策ではありません!

シェルエラーを読み込もうとしましたが、PHPでは何も返されません...あらゆる種類のコマンドを試しました。

define('MAGICK_PATH', '/Applications/MAMP/bin/ImageMagick/ImageMagick-6.7.5/bin/');

echo exec(MAGICK_PATH.'convert logo: logo.gif', $output);
var_dump($output);
=> array(0) { }


$output = shell_exec(MAGICK_PATH."convert logo: logo.gif");
echo "<pre>$output</pre>";
=> *nothing*


$last_line = system(MAGICK_PATH.'convert logo: logo.gif', $retval);
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
=> Last line of the output:
=> Return value: 5


$last_line = system(MAGICK_PATH.'convert -version', $retval);
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
=> Last line of the output:
=> Return value: 5


$last_line = system(MAGICK_PATH."convert -colorspace RGB -interlace none -density 104.6x104.6 -quality 100 -bordercolor white doc.pdf[0] doc.png", $retval);
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
=> Last line of the output:
=> Return value: 5

プログラムがランチされていないのではないかと思いましたが...タスクマネージャーで確認でき、CPUが数秒間動作し、Imagickが何かを実行していますが、最終的には出力がありません!!! > _ <それについて多くのトピックを見つけましたが、実用的な解決策を見つけられませんでした...

4

2 に答える 2

2

次のようにコマンドをラップしてみてください。

exec($cmd." 2>&1", $out, $ret);
if ($ret){
    echo "There was a problem!\n";
    print_r($out);
}else{
    echo "Everything went better than expected!\n";
}

exec()すべての出力をキャプチャして終了コードを取得できます。追加2>&1すると必ず にリダイレクトさSTDERRれるSTDOUTため、エラー メッセージを確認できます。

于 2012-04-09T16:21:53.537 に答える
0

また、以前のコメントの補足として、入力および出力ファイル名に完全修飾パスを指定してみてください。コマンドは、デフォルトの現在の作業ディレクトリを使用して PHP で起動されます。これは、スクリプトが実際に含まれているディレクトリとは異なる場合があります。

システム コマンドのデフォルト ディレクトリを確認するには、次のコマンドを試してください。

exec('pwd');

パスにスペースが含まれている場合 (またはいずれかの段階でユーザー入力が含まれている場合) は、パラメーターを実行して、escapeshellarg()それらが機能することを確認する必要があります (および実行しても安全であることを確認してください)。

于 2012-04-09T17:39:49.490 に答える