1

s3cmdPHPスクリプトから使用したい。すべてがシェルから機能していますが、PHPスクリプトからは機能していません。

shell_exec('s3cmd --config=/root/s3cmd.conf ls');

これは機能していません、そして私は私のs3cmdインストールへのフルパスを与えました

shell_exec('/usr/sbin/s3cmd --config=/root/s3cmd.conf ls');

PHPスクリプトでは機能しませんが、コマンドでも同じように機能します。

shell_execを呼び出しているPHPファイルはwebrootにあります。

s3cmdがrootユーザーとして構成されていて、www-dataであるPHPから実行していることが問題である可能性があります。これが問題である場合、www-dataの構成ファイルを作成するにはどうすればよいですか。

私が間違っていることを助けてください。

ありがとう

編集 私はS3cmdを使用しています。cronスクリプトでコマンドを実行します。cronスクリプトはPHPスクリプトです。cronを実行しているユーザーはweb11であり、s3cmdはrootユーザーを使用して構成されます。

そのため、PHPスクリプトでshell_exec()を使用してs3cmdを実行すると、失敗します。しかし、シェルで実行すると正常に動作します。

s3cmd ls

これは正常に機能します。私はrootユーザーを使用してログインしています。

runuserコマンドを使用して実行しようとしました

runuser -l root -c "s3cmd ls"

これは正常に機能し、バケットのリストを表示します。しかし、私が使用して実行すると

runuser -l root -c "s3cmd ls"

これは動作しません。s3cmdのフルパスを指定してみました

/ usr / bin / s3cmd ls

これはシェルでは機能しますが、私のPHPスクリプトでは機能しません。

phpスクリプトのパーミッション777を変更し、rootをそのユーザーの所有者にしました。しかし、それでも機能しません。

PHPスクリプトからs3cmdを実行するにはどうすればよいですか。?私はAmazonEc2インスタンスを使用しています。

4

2 に答える 2

1

AWS SDK for PHP を使用しないのはなぜですか? S3Client.listObjects()メソッドを使用して同じ機能を持つことができます

于 2013-02-07T09:24:52.350 に答える
0

shell_exec('s3cmd --config=/root/s3cmd.conf ls');

ここで欠落している可能性があるのは、S3 コマンド「ls」のターゲットです?!

次のようなPHPスクリプトで正常に動作しています:

exec("/usr/bin/s3cmd --config=.s3cfg info s3://YOUR-BUCKET/YOUR-FILE 2> /dev/null", $s3output, $s3return);

// switch due to return code (of shell !)
if($s3return == "0"){
    echo "my file exists";
}
else {
    echo "Error Code : " . $s3return;
}

これは、「s3cmd --configure」を正常に実行したことを前提としています。

于 2017-10-05T20:15:19.783 に答える