【问题标题】:Global Header for PHP with S3 Client带有 S3 客户端的 PHP 全局标头
【发布时间】:2016-10-13 06:34:35
【问题描述】:

我在一个目录中有一个全局头文件,用于检查用户是否拥有正确的凭据,并要求/包含重要的类。每个 PHP 页面都包含这个头文件;

    //Connect to Amazon AWS - Include Amazon AWS SDK - Using PHAR Method
    require_once($_SERVER['DOCUMENT_ROOT'] . 'php/aws.phar');

    // Instantiate the S3 client with hardcoded AWS credentials
    $s3Client = new Aws\S3\S3Client([
        'version'     => 'latest',
        'region'      => 'us-east-1',
        'credentials' => [
            'key'    => 'MY-KEY',
            'secret' => 'MY-SECRET',
        ],
    ]);

MY-KEY 和 MY-SECRET 的正确性。

然后我尝试在整个网页中使用上面创建的 S3 客户端类,但它不起作用。如果我将上述代码从头文件中复制出来并将其放在本地相关的 PHP 文档中,它似乎才有效。

我目前正在使用的文档通过 HTTP POST 表单来执行操作;

//Include connection details and check valid credentials
include_once '../php/header.php';

...

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //Use Amazon S3 Client to upload the file

    .... //IF THE HEADER CODE IS INSERTED HERE THE CODE WORKS   

    $result = $s3Client->putObject(array(
        'Bucket' => 'MY-BUCKET',
        'Key'    => $filepath,
        'SourceFile' => $_FILES["file"]["tmp_name"]
    ));
}

谁能解释为什么我的标题设置不起作用。我不想复制 S3 客户端凭据。谢谢。

【问题讨论】:

  • 您需要定义“不起作用”。什么错误?
  • putObject 函数根本不触发。但是,如果我将顶部的代码从标头中复制到本地文件中,它会突然起作用。
  • 那么您的文件没有被包含在内。请参阅下面的答案,也许您需要使用require 来确保它发生。

标签: php amazon-web-services amazon-s3 header phar


【解决方案1】:

尝试使用require_once('../php/header.php'); 然后代码在包含之前不会执行。此外,如果 include_once 在执行后返回 false,则表示它没有被包含在内,并且包含脚本可能存在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2023-04-03
    相关资源
    最近更新 更多