1

我想s3cmd从我的 PHP 脚本中使用。一切都在 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 用户并且我从 www-data 的 PHP 运行的问题。如果这是问题,我该如何为 www-data 创建配置文件。

帮助我做错了什么。

谢谢

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

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

s3cmd ls

这工作正常。因为我使用root用户登录。

我尝试使用 runuser 命令运行它

运行用户 -l root -c "s3cmd ls"

这工作正常并显示存储桶列表。但是当我使用

运行用户 -l root -c "s3cmd ls"

这不起作用。我尝试给出 s3cmd 的完整路径

/usr/bin/s3cmd ls

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

我更改了 php 脚本的权限 777 并使 root 成为该用户的所有者。但仍然无法正常工作。

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

4

2 回答 2

1

为什么不使用适用于 PHP 的 AWS 开发工具包?您可以使用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 回答