从PHP脚本运行S3cmd不起作用

时间:2013-02-06 13:21:14

标签: amazon-s3 s3cmd

我想从PHP脚本中使用s3cmd。一切都是从shell开始工作但同样不能用我的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用户的问题,我从PHP运行,这是www-data。如果这是问题,我该如何为www-data创建配置文件。

帮助我做错了什么。

由于

修改 我正在使用S3cmd。在我的cron脚本中运行命令。 cron Script是一个PHP脚本。运行cron的用户是web11,使用root用户配置s3cmd。

因此,当我在PHP脚本中使用shell_exec()运行s3cmd时,它会失败。但是当我在shell中运行时,它运行正常。

s3cmd ls

这很好用。因为我使用root用户登录。

我尝试使用runuser命令运行它

runuser -l root -c“s3cmd ls”

这很好用并显示存储桶列表。但是当我使用

运行时

runuser -l root -c“s3cmd ls”

这不起作用。我试着通过提供s3cmd

的完整路径

/ usr / bin / s3cmd ls

这适用于shell,但不适用于我的PHP脚本。

我更改了php脚本的权限777,并使root用户成为该用户的所有者。但仍然无效。

如何从PHP脚本运行s3cmd。 ?我在亚马逊Ec2 Instance。

2 个答案:

答案 0 :(得分:1)

为什么不使用AWS SDK for PHP?您可以使用S3Client.listObjects()方法

使用相同的功能

答案 1 :(得分: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"成功。