2016-06-12 48 views
0

我在一個目錄中有一個全局頭文件,用於檢查用戶是否擁有正確的憑證,並要求/包含重要的類。每個PHP頁面都包含這個頭文件;S3客戶端的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 Client類,但它不起作用。如果我將上面的代碼複製出頭文件並將其放在相關的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客戶端憑據。謝謝。

+1

您需要定義「不起作用」。什麼是錯誤? – jszobody

+0

putObject函數根本不觸發。但是,如果我將頂級代碼從頭文件複製到本地文件中,它會突然生效。 – WelshJohn

+0

然後你的文件不包括在內。看到下面的答案,也許你需要使用'require'來確保它發生。 – jszobody

回答

0

嘗試使用require_once('../php/header.php');然後代碼將不會執行,直到包含。另外,如果include_once在執行後返回false,則意味着它沒有被包含,並且include腳本可能存在問題。