【问题标题】:PHP won't execute code in cmdPHP不会在cmd中执行代码
【发布时间】:2018-05-31 08:56:56
【问题描述】:

当我执行时

s3cmd put --acl-public --guess-mime-type /html/file.png s3://bucket/files/file.png

通过腻子中的 cmd 它可以完美运行,但是当我尝试通过 PHP 执行此操作时:

system("s3cmd put --acl-public --guess-mime-type /html/file.png s3://bucket/files/file.png");

什么都没有发生。有谁知道它为什么不起作用?我必须修改 php.ini 中的设置还是我做错了什么?

【问题讨论】:

  • 我也试过 exec,但它不起作用。
  • 它是什么类型的服务器? (我相信 *nix 命令以www-data 运行,并且某些命令被排除在外)
  • 您还应该能够使用$response = exec('ls'); print_r($response); 来查看回复。
  • 我尝试输出响应,但它是空白的

标签: php http amazon-s3 amazon-ec2 amazon-web-services


【解决方案1】:

我会支持查看 Apache 日志文件的建议,但我敢打赌这是一个权限问题(我遇到过这个问题......)。 Apache (httpd?) 是否具有对 /html/file.pngs3://bucket/files/file.png 的读/写访问权限? s3cmd 是否需要特殊权限?需要使用 gksudo 吗?

【讨论】:

  • 我检查了 Apache 的错误日志文件,它报告了 ERROR: Can't find a config file. Please use --config option. 这是干什么用的?
  • 这听起来像是s3cmd 命令问题。我猜?它将配置数据存储在您的主目录中。您也许可以从您的主目录中复制它。当然,您也可以 su 进入您的 Apache 用户并运行 s3cmd --configure
【解决方案2】:

s3cmd 在用户主目录中查找.s3cfg 文件。在您的情况下,apache 可能是运行程序的用户,而 apache 没有 .s3cfg 文件。

您需要以您打算使用 s3cmd 的用户身份再次运行它。

/usr/bin/s3cmd --configure

【讨论】:

    【解决方案3】:

    系统命令可能有这么大的限制,你应该尝试查看error_log,增加error_reporting级别或禁用php.ini中的safe_mode

    【讨论】:

    • 安全模式已关闭。由于某种原因,PHP 没有生成 error_log。 php.ini 中的设置看起来不错。如果是权限问题,我应该怎么做才能解决这个问题? php文件的所有者设置为root,在httpd.conf中所有者设置为apache,这可能是问题吗?
    【解决方案4】:

    从 php 文件(apache 用户)执行 s3cmd 时出现问题 s3cmd 找不到 s3cfg 文件,我把它放在命令中它可以工作:

    s3cmd -c /var/www/.s3cfg put file...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 2014-05-25
      • 2015-10-25
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多