【问题标题】:Running S3cmd from PHP Script not working从 PHP 脚本运行 S3cmd 不起作用
【发布时间】:2013-01-21 17:07:30
【问题描述】:

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

帮我看看我做错了什么。

谢谢

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

所以当我在 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 实例上。

【问题讨论】:

    标签: amazon-s3 s3cmd


    【解决方案1】:

    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”。

    【讨论】:

      【解决方案2】:

      为什么不使用AWS SDK for PHP?您可以使用S3Client.listObjects() 方法获得相同的功能

      【讨论】:

      • 其实我想在 cronjob 中执行任务,比如获取所有对象的大小,删除对象。
      猜你喜欢
      • 2021-03-07
      • 2013-09-18
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多