3

PHP をexec()使用して、ImagicMagick を使用して画像を変換していconvertます。これは CentOS サーバーで実行されています。

exec(convert http://www.google.com/images/srpr/logo3w.png.jpg 
    -resize 640 /home/mysite/public_html/public/img/posts/original/1414_301a4.jpg);

を使用exec()しても、新しいイメージは宛先フォルダーに表示されません。ただし、シェルで同じコマンドを実行すると、完全に機能します。

これはPATHの問題だと思います。その場合、PHP が使用しているパスを確認するにはどうすればよいですか? また、PHP で正しいパスを設定するにはどうすればよいですか?

4

3 に答える 3

4
function execute($command)
{
    # remove newlines and convert single quotes to double to prevent errors
    $command = str_replace(array("\n", "'"), array('', '"'), $command);
    # replace multiple spaces with one
    $command = preg_replace('#(\s){2,}#is', ' ', $command);
    # escape shell metacharacters
    $command = escapeshellcmd($command);
    # execute convert program
    return shell_exec($command); // or whatever you like
}
于 2012-08-21T19:03:44.817 に答える
3

まず、実際に存在し、取得可能な入力ファイルを試してください。

wget http://www.google.com/images/srpr/logo3w.png.jpg

  --2012-08-21 20:55:24-- http://www.google.com/images/srpr/logo3w.png.jpg
  www.google.com (www.google.com) を解決しています... 173.194.35.179、173.194.35.177、173.194.35.178、...
  www.google.com (www.google.com)|173.194.35.179|:80... に接続しています... 接続しました。
  HTTP 要求が送信され、応答を待っています... 404 Not Found
  2012-08-21 20:55:24 エラー 404: 見つかりません。

次に、 PHP が使用するものを確認しconvertます。

exec(which convert 2>/tmp/whichconvert.2 1>whichconvert.1)

cat /tmp/whichconvert.{1,2}

最後に、次へのフル パスも試してくださいconvert

exec(/usr/local/full/path/to/convert logo: 
-resize 640 /home/mysite/public_html/public/img/posts/original/1414_301a4.jpg);

その後

identify /home/mysite/public_html/public/img/posts/original/1414_301a4.jpg

アップデート:

取得しようとしていたファイルは、おそらく ではありませんlogo3w.png.jpgが、次のlogo3w.pngとおりです。

  wget http://www.google.com/images/srpr/logo3w.png
  --2012-08-21 21:04:22-- http://www.google.com/images/srpr/logo3w.png
  www.google.com (www.google.com) を解決しています... 173.194.35.180、173.194.35.177、173.194.35.179、...
  www.google.com (www.google.com)|173.194.35.180|:80... に接続しています... 接続しました。
  HTTP 要求が送信され、応答を待っています... 200 OK
  長さ: 7007 (6.8K) [画像/png]
  保存先: 「logo3w.png」
  
  100%[============================================ ======>] 7,007 --.-K/s in 0.02s   
  
  2012-08-21 21:04:22 (451 KB/秒) - 「logo3w.png」が保存されました [7007/7007]

また、 (リモートの http-URI ではなく) ローカル ファイルに対してのみ機能する場合は、によって使用されるhttp デリゲートconvertが実際にシステムにインストールされているかどうかを確認する必要がある場合があります。

convert -list delegate | grep http
      https =>          "/opt/local/bin/curl" -s -k -o "%o" "https:%M"

さらに、 PHP を実行しているユーザー アカウントにターゲット ディレクトリへの書き込み権限があるかどうかを確認します。

exec(touch /home/mysite/public_html/public/img/posts/original/touchtest);

その後

ls -l  /home/mysite/public_html/public/img/posts/original/touchtest
于 2012-08-21T19:01:00.513 に答える
0

ImageMagick私にとってうまくいったのは、バイナリへのフルパスを提供することでした。の代わりにconvert、 を使用します/path/to/convert

$command = $this->imageMagickFullBinaryPath . ' -resize ' . $dimensions . 
           ' ' . $imageFileToResize . ' ' . $resultingThumbnail; 
exec($command, $output);
于 2016-01-28T22:27:55.033 に答える