4

imagemagick コマンド「convert」を使用して、.png から .tif 画像を作成しようとしています。

私が持ってきたものは次のとおりです。

$exec = "/opt/local/bin/convert -adaptive-resize 150% ".$pos.".png ".$pos.".tif";
exec($exec);

CLI「which convert」に遭遇すると、そのパスを取得します: /opt/local/bin/convert. /opt/local/bin/convert -adaptive-resize 150% ".$pos.".png ".$pos.".tifまた、パスなしで、 と のみを試しました/etc/local/bin/convert -adaptive-resize 150% ".$pos.".png ".$pos.".tif

そのコマンドをターミナルで実行している場合は期待どおりに機能しますが、PHP スクリプトから使用しようとすると機能しません。

編集:次のコードで .sh ファイルを作成しようとしても成功しませんでした:

#! /bin/bash
convert -adaptive-resize 150% 1.png 1.tif
convert -adaptive-resize 150% 2.png 2.tif
convert -adaptive-resize 150% 3.png 3.tif
convert -adaptive-resize 150% 4.png 4.tif
convert -adaptive-resize 150% 5.png 5.tif
convert -adaptive-resize 150% 6.png 6.tif
convert -adaptive-resize 150% 7.png 7.tif
convert -adaptive-resize 150% 8.png 8.tif
convert -adaptive-resize 150% 9.png 9.tif

ターミナルから実行すると、魔法のように機能します。代わりに、単純な PHP ファイルから実行しようとすると、.tif ファイルは作成されません。

<?php
$exec = "./convertpngtif.sh";
exec($exec);
?>
4

10 に答える 10

2

exec関数の代わりにphp imagickを使用することを検討してください。

于 2013-07-15T12:57:06.513 に答える
2

この回答はLINUX/MACで機能します

これは古い質問であることは知っていますが、同様の問題がありました。パスの問題なしでシェル コマンドを実行する方法は、新しいログイン シェルを作成することです。

/bin/bash -l 

そのため、bash はログイン シェルのように機能し、すべてのパス情報が設定されます。-c を使用して、コマンドを文字列として追加します

$exec = "/bin/bash -lc 'convert -adaptive-resize 150% ".$pos.".png".$pos.".tif'";
exec($exec,$out,$rcode);

これを使用して、変換するパスを取得できます

/bin/bash -lc 'which convert' 

bash部分なしで動作します

変換する権限が設定されていることと、php を実行するユーザーがログインできることが必要です。そのため、/etc/passwd (ubuntu/debian) にログイン シェルを設定する必要があります。

于 2016-01-11T10:22:45.287 に答える
1

私が見る限り、ImageMagick を使用して画像を変換しようとしています。

PHPにはImagickインストールが必要なライブラリがあります。root アクセス権があれば簡単に実行でき、imagick ライブラリ ラッパー関数を使用してイメージを変換できます (コマンド ラインを実行する必要はありません)。

ここにphp Imagickのドキュメントがあります

phpinfo();imagick がインストールされているかどうかを確認できます。

于 2013-07-15T12:57:22.377 に答える
1

最初にエラーメッセージを出力してエラーを診断します。

$out, $ret;
$exec = "/opt/local/bin/convert -adaptive-resize 150% ".$pos.".png ".$pos.".tif 2>&1";
exec($exec, $out, $ret);
var_dump($out);

他の人が述べているように、許可の問題のために CLI から適切に実行されていても、imagemagick が exec() から実行を停止する可能性は非常に高いです。

于 2013-07-24T07:46:35.310 に答える
1

適切な書き込み権限があるかどうかを確認してください。

Linux では、Apache サーバーの一般的なユーザー名は www-data です。

コンソールで:

cd /var/www (or where you are saving your php files)
ls -la (You will see permissions)
sudo chown www-data:youruser thisfolder (change primary user to www-data and group to youruser)
sudo chmod 775 thisfilder (change permissions, write read exec for user and usergroup and read for others.
于 2013-07-15T13:01:23.540 に答える
0

一時的なターゲットファイルを使用するのはどうですか:

$source = dirname( __FILE__ ) . '/' . $pos.".png";
$target = tempnam( '/tmp/', 'tif-' );
rename( $target, $target . '.tif' );
$target .= '.tif';

$command = '/opt/local/bin/convert';

assert( file_exists( $command ));
assert( file_exists( $source ));
assert( is_readable( $source ));
assert( ! file_exists( $target ));

$exec = $command . " -adaptive-resize 150% ". escapeshellarg( $source ) . " " . escapeshellarg( $target );
exec( $exec );
于 2013-07-19T22:42:17.517 に答える