質問: ImageMagickにPHP拡張機能を使用するか、PHPのExec()関数を使用して端末コマンドを実行するだけですか? 私は自分のサイトでユーザーがアップロードした画像に対して以下の画像操作を行う必要があります: 1. イメージのサイズを変更する(特定のディメンションを超える場合) 2. すべての画像形式をjpgに変換する 3. すべての画像の下部にウォーターマークを追加する MagickWandやiMagickのいずれかの拡張機能を使用する必要がありますか、PHPのexec関数内で端末コマンドを実行するだけでよいのですか? PHPの拡張が好まれる理由はありますか?これはパフォーマンスがより速く、より優れています(このサイトには多くのユーザーがいて、ある時点で1トンの画像処理が行われます)。
回答: 私はdrew010の答えに対抗することを望みます。彼の答えでは、彼は述べています: > execを使う代わりにPHP拡張機能を使うと多くのメリットがあります > または同様の機能を有する。内蔵された拡張機能は、より速く、より少ない > 新しいプロセスを生成して出力を読む必要がないので、メモリ > 戻る > > 画像を処理する場合は、これが当てはまります。さて、PHPの `exec()`関数(または同様の関数)を使用してImageMagickバイナリを呼び出すと、埋め込みPHPライブラリを使用する上でオーバーヘッドがかかりますが、*オーバーヘッド*があります。 But there's another side of the coin. If you embed the ImageMagick code into PHP via an extension, then *every request using PHP takes more memory whether the request processes an image or not*. If you're using Apache's `mod_php` then this becomes even *more* of an issue because now **every request to your server has the ImageMagick libraries in memory even if it's serving an HTML file!** それは本当に依存します。あなたは本当にPHPのメモリフットプリントをできるだけ低く保つ必要があります。 ImageMagicを必要とする多数のリクエストを処理していて、FastCGIまたは `php_fpm` を使用している場合は、埋め込まれたImageMagickを使用する利点があります。しかし、ImageMagickやApacheの `mod_php` を使ってリクエストを処理することがある場合は、 `exec()`を使ってImageMagickを呼び出す方がパフォーマンスが向上します。