2016-09-09 4 views
6

मैंने PHP प्रति the getting started instructions found here के लिए एडब्ल्यूएस एसडीके स्थापित करने के लिए संगीतकार का उपयोग किया है। मैंने इसे अपने एचटीएमएल रूट में स्थापित किया। मैंने "AmazonU3FullAccess" की एकमात्र अनुमति के साथ "ImageUser" नामक एक आईएएम उपयोगकर्ता बनाया और इसकी चाबियाँ कैप्चर की।मैं PHP के माध्यम से AWS S3 तक कैसे पहुंच सकता हूं?

[default] 
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID 
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY 

हाँ, मैं उचित कुंजी के साथ उन लोगों के अपर केस शब्द की जगह:

Per the instructions here, मैं एक फ़ाइल "साख" कहा जाता है इस प्रकार बनाया। फ़ाइल HTML रूट में छिपी उपनिर्देशिका ".aws" में रहती है।

<?php 
// Include the AWS SDK using the Composer autoloader. 
require '../vendor/autoload.php'; 

use Aws\S3\S3Client; 
use Aws\S3\Exception\S3Exception; 
$bucket = 'testbucket'; 
$keyname = 'test.txt'; 

// Instantiate the client. 
$s3 = S3Client::factory(); 

try { 
    // Upload data. 
    $result = $s3->putObject(array(
     'Bucket' => $bucket, 
     'Key' => $keyname, 
     'Body' => 'Hello, world!', 
     'ACL' => 'public-read' 
    )); 

    // Print the URL to the object. 
    echo $result['ObjectURL'] . "\n"; 
} catch (S3Exception $e) { 
    echo $e->getMessage() . "\n"; 
} 
?> 

: फ़ाइल की यूनिक्स अनुमतियाँ 664.

मैं S3 के लिए एक फ़ाइल को अपलोड करने का परीक्षण करने के ("टी" कहा जाता है मेरी एचटीएमएल जड़ की उप-निर्देशिका के "test.php" कहा जाता है) इस सरल फ़ाइल बनाई हैं दुर्भाग्य से, यह एक http त्रुटि 500 ​​फेंकता लाइन पर:

$s3 = S3Client::factory(); 

हाँ, autoloader निर्देशिका सही है। हाँ, बाल्टी मौजूद है। नहीं, फ़ाइल "test.txt" पहले से मौजूद नहीं है।

उपर्युक्त पृष्ठ के अनुसार, "अगर एसडीके को कोई प्रमाण-पत्र या प्रोफाइल स्पष्ट रूप से प्रदान नहीं किया गया था और पर्यावरण चर में कोई प्रमाण-पत्र परिभाषित नहीं किया गया था, लेकिन एक क्रेडेंशियल फ़ाइल परिभाषित की गई है, तो एसडीके 'डिफ़ॉल्ट' प्रोफ़ाइल का उपयोग करेगा।" फिर भी, मैंने केवल वही परिणाम प्राप्त करने के लिए फैक्ट्री स्टेटमेंट में प्रोफ़ाइल "डिफ़ॉल्ट" को स्पष्ट रूप से निर्दिष्ट करने का प्रयास किया।

मैं क्या गलत कर रहा हूं?

+0

मुझे लगता है कि एसीएल में कोई समस्या है। मुझे लगता है कि आपको 'एसीएल' => 'सार्वजनिक-पढ़ने' के बजाय 'एसीएल' => 'पब्लिक-रीड-राइट' के साथ प्रतिस्थापित करने की आवश्यकता है => 'पब्लिक-रीड' http://docs.aws.amazon.com/cli/latest/reference/ s3api/put-object-acl.html – Nandakumar

+0

जबकि मुझे लगता है कि यह भी एक समस्या हो सकती है, हम 500 त्रुटि के साथ विफल होने से पहले कभी भी स्क्रिप्ट में इसे प्राप्त नहीं करते हैं। –

उत्तर

4

tldr; आप एडब्ल्यूएस SDK संस्करण का मिश्रण

  • लिंक आप अपने संदेश (link) आप php एसडीके v3
  • स्थापित किया है अपने उदाहरण के अनुसार, आप PHP SDK v2 का उपयोग में प्रदान की प्रति है

V3 को S3Client::factory विधि के बारे में पता नहीं है, इसलिए कारण यह आपको त्रुटि देता है। आप उपयोग https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html उपयोग करने के लिए अपने लिंक की जांच जारी रख सकते हैं। सरल विधि

<?php 
// Include the SDK using the Composer autoloader 
require 'vendor/autoload.php'; 

$s3 = new Aws\S3\S3Client([ 
    'version' => 'latest', 
    'region' => 'us-east-1' 
]); 
  • एक ग्राहक बना सकते हैं - - आप एक बार का उपयोग कर एसडीके वर्ग

    // Use the us-west-2 region and latest version of each client. 
    $sharedConfig = [ 
        'region' => 'us-west-2', 
        'version' => 'latest' 
    ]; 
    
    // Create an SDK class used to share configuration across clients. 
    $sdk = new Aws\Sdk($sharedConfig); 
    
    // Create an Amazon S3 client using the shared configuration data. 
    $s3 = $sdk->createS3(); 
    
  • कुछ तरीकों S3 ग्राहक

    1. एक ग्राहक बनाने के मिल रहे हैं अपने क्लाइंट के पास आप अपने मौजूदा कोड का उपयोग कर सकते हैं (हाँ, यह एक v3 है) एस 3 पर एक नया ऑब्जेक्ट डालने के लिए ताकि आपको

      <?php 
      // Include the AWS SDK using the Composer autoloader. 
      require '../vendor/autoload.php'; 
      
      use Aws\S3\S3Client; 
      use Aws\S3\Exception\S3Exception; 
      $bucket = 'testbucket'; 
      $keyname = 'test.txt'; 
      
      // Instantiate the client. 
      
      -- select method 1 or 2 -- 
      
      try { 
          // Upload data. 
          $result = $s3->putObject(array(
           'Bucket' => $bucket, 
           'Key' => $keyname, 
           'Body' => 'Hello, world!', 
           'ACL' => 'public-read' 
          )); 
      
          // Print the URL to the object. 
          echo $result['ObjectURL'] . "\n"; 
      } catch (S3Exception $e) { 
          echo $e->getMessage() . "\n"; 
      } 
      
    +0

    जोड़ने के बाद: "Aws \ S3 \ Exception \ S3Exception का उपयोग करें;" और $ बाल्टी और $ keyname परिभाषित, उपरोक्त कोड समस्या हल करता है। –

    संबंधित मुद्दे