2

php で変換するシステム コールは、何年も機能していましたが、今年の初めに機能しなくなりました。Putty を使用してコマンド ラインから発行した場合、使用しているすべてのコマンドは正しく機能します。

これをデバッグするために作成したテストphpファイルは

<?  
$string = "convert  -verbose -resize 200x200  \"startline/main_menu.png\" \"image/temp222_main_menu.png\" ";
passthru($string);
?>

<IMG SRC='image/temp222_main_menu.png '  alt='main_menu'>

出力ファイルは作成されません。私はこの応答を得る

startline/main_menu.png PNG 600x1024 600x1024+0+0 8-bit DirectClass 92.1KB 0.020u 0:00.020

文字列をこれに置き換えると

$string = "convert  -version -resize 200x200  \"startline/main_menu.png\" \"image/temp222_main_menu.png\" ";

出力ファイルは作成されますが、サイズは変更されません。

私はこの応答を受け取ります:

Version: ImageMagick 6.6.0-4 2012-04-26 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC Features: OpenMP

興味深いことに、これは 2008 年から今年初めまで機能していました。PHP5 と新しいサーバーに切り替えたときだったのかもしれませんが、わかりません。これは 1and1.com で実行されています

1and1 の技術サポートは、outfile が存在しないことが問題であると述べ、ケースをクローズしました。それはあまり役に立ちませんでした。

php.ini ファイルなどに入れる必要があるものがあるかどうか疑問に思っています。


私もこれを試しました: exec("/usr/bin/convert -resize 200x200 image/temp222_main_menu.png"); ?>

ただのメモ。実際にプログラムを実行していて、何らかの出力が返されたことを確認できるように、詳細を入れました。また、正しいファイルをロードしていることも示しています。これが、exec や system の代わりに passthru を使用した理由でもあります。これは単なるテスト スクリプトです。壊れる前に使用していたスクリプトはパススルーを使用していませんでしたが、あまりにも多くの投稿が行われていました。重要なのは、実行される文字列が php では機能しないが、コマンド ラインでは機能するため、正しいことです。

4

2 に答える 2

2

私はこれとまったく同じ問題を経験しました。私が気付いた本当に奇妙なことは、画像がたまたまサイズ変更しようとした正確なサイズであった場合、それが機能したことです。とにかく、これはメモリ使用量の問題のようで、PHPの構成設定で修正できます。他のフォーラムを閲覧した後、私はこれを見つけ、それを修正しました。

imagemagickを呼び出すPHPスクリプトの先頭に次の行を配置します。

putenv("MAGICK_THREAD_LIMIT=1");
于 2012-08-25T00:13:12.387 に答える
2

問題をデバッグするには、次の手順を試してください。

まず、すべてのファイル名とコマンドへのフル パスを指定して、セットアップが機能するかどうかを確認します。

<?php  
exec("which convert");
?>

<?php  
exec("/path/to/convert  /path/to/a.png  -resize 200x200  /tmp/a200x200.png");
?>

(もちろん、状況に合わせてパスを調整する必要があります。)

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

<?php  
exec("pwd");
exec("touch $(pwd)/image/temp222_main_menu.png");
?>

コードを次のように変更して、まったく機能させるようにします。

<?php  
exec("/usr/bin/convert -resize 200x200  image/temp222_main_menu.png");
?>

<IMG SRC='image/temp222_main_menu.png'  alt='main_menu'>

ノート...

  1. ...一部を削除しました( stderr-verboseに追加の行を生成するだけで、おそらくconvertコマンドが変換を完了しない原因です. startline/main_menu.png PNG 600x1024 600x1024+0+0 8-bit DirectClass 92.1KB 0.020u 0:00.020

  2. ...私はあなたの-version変更を使用しませんでした。なぜなら、それはあなたの文脈では意味をなさないからです (また、その-resize部分をスキップすることにもつながります)。

  3. ...あなたの<IMG SRC=....行からスペースを削除しました。

  4. ...に切り替えましたexec(...)

stderr出力に何らかのノイズを追加したい場合は、 ...-monitorの代わりにパラメーターを追加してみてください。-verbose

于 2012-08-21T19:37:57.577 に答える