2015-01-17 134 views
3

編輯:問題已解決(感謝this post)!我只是需要捲曲安裝:使用Amazon S3的PHP SDK的錯誤

sudo apt-get install php5-curl 

我一個工具的工作從瀏覽器上傳的AWS S3存儲桶的圖像。我正在使用亞馬遜提供的PHP SDK。 我試圖在documentation提供的代碼,但它不和我一起工作:即使我只保留這兩條線

use Aws\S3\S3Client; 

$bucket = '*** Your Bucket Name ***'; 
$keyname = '*** Your Object Key ***'; 
// $filepath should be absolute path to a file on disk      
$filepath = '*** Your File Path ***'; 

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

// Upload a file. 
$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'SourceFile' => $filepath, 
    'ContentType' => 'text/plain', 
    'ACL'   => 'public-read', 
    'StorageClass' => 'REDUCED_REDUNDANCY', 
    'Metadata'  => array( 
     'param1' => 'value 1', 
     'param2' => 'value 2' 
    ) 
)); 

echo $result['ObjectURL']; 

use Aws\S3\S3Client; 
$s3 = S3Client::factory(); 

...我得到這些錯誤:

Notice: Use of undefined constant CURLE_COULDNT_RESOLVE_HOST - assumed 'CURLE_COULDNT_RESOLVE_HOST' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_COULDNT_CONNECT - assumed 'CURLE_COULDNT_CONNECT' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_PARTIAL_FILE - assumed 'CURLE_PARTIAL_FILE' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_WRITE_ERROR - assumed 'CURLE_WRITE_ERROR' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_READ_ERROR - assumed 'CURLE_READ_ERROR' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_OPERATION_TIMEOUTED - assumed 'CURLE_OPERATION_TIMEOUTED' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_SSL_CONNECT_ERROR - assumed 'CURLE_SSL_CONNECT_ERROR' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_HTTP_PORT_FAILED - assumed 'CURLE_HTTP_PORT_FAILED' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_GOT_NOTHING - assumed 'CURLE_GOT_NOTHING' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_SEND_ERROR - assumed 'CURLE_SEND_ERROR' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Notice: Use of undefined constant CURLE_RECV_ERROR - assumed 'CURLE_RECV_ERROR' in phar:///var/www/aws.phar/Aws/S3/S3Client.php on line 244

Fatal error: Uncaught exception 'Guzzle\Common\Exception\RuntimeException' with message 'The PHP cURL extension must be installed to use Guzzle.' in phar:///var/www/aws.phar/Guzzle/Http/Client.php:72 Stack trace: #0 phar:///var/www/aws.phar/Aws/Common/Client/AbstractClient.php(79): Guzzle\Http\Client->__construct(' https://s3.amaz ...', Object(Guzzle\Common\Collection)) #1 phar:///var/www/aws.phar/Aws/Common/Client/ClientBuilder.php(249): Aws\Common\Client\AbstractClient->__construct(Object(Aws\Common\Credentials\RefreshableInstanceProfileCredentials), Object(Aws\S3\S3Signature), Object(Guzzle\Common\Collection)) #2 phar:///var/www/aws.phar/Aws/S3/S3Client.php(207): Aws\Common\Client\ClientBuilder->build() #3 /var/www/response.php(30): Aws\S3\S3Client::factory() #4 {main} thrown in phar:///var/www/aws.phar/Guzzle/Http/Client.php on line 72

+0

[attach a logger](http://docs.aws.amazon.com/aws-sdk-php/guide/latest/faq.html#how-can-i-see-what-data-is-sent在線)來調試電匯。 – tedder42

+0

我正在與nginx合作。我在開發過程中轉向了Apache,現在我收到了錯誤。我編輯了我的消息。 – Cinn

回答

0

剛安裝AWS PHP SDK我的本地機器上,無需任何註冊AWS, 幾經改掉了這個工作代碼:

use Aws\S3\S3Client; 

$bucket = '*** Your Bucket Name ***'; 
$keyname = '*** Your Object Key ***'; 
// $filepath should be absolute path to a file on disk      
$filepath = '*** Your File Path ***'; 

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

// Upload a file. 
$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'SourceFile' => $filepath, 
    'ContentType' => 'text/plain', 
    'ACL'   => 'public-read', 
    'StorageClass' => 'REDUCED_REDUNDANCY', 
    'Metadata'  => array( 
     'param1' => 'value 1', 
     'param2' => 'value 2' 
    ) 
)); 
echo $result['ObjectURL']; 

} catch (Exception $e) { 
    echo $e->getMessage() . "\n"; 
} 

此代碼返回AWS異常消息:

您必須指定機構或參數的SourceFile一個非空值。

,如果我改變$filepath的路徑任何真正的文件,該代碼輸出:

錯誤檢索憑證從實例配置文件元數據服務器。當您不在Amazon EC2內部運行時,創建客戶端或提供實例化的Aws \ Common \ Credentials \ CredentialsInterface對象時,必須在「密鑰」和「祕密」選項中提供AWS訪問密鑰ID和祕密訪問密鑰。 ([捲曲] 28:5000毫秒後連接超時[url] http://XXX.xxx.xxx.xxx/latest/meta-data/iam/security-credentials/

所以,如果有任何問題,你是非常歡迎,但它必須工作。

順便說一句,如果我從代碼中刪除catch部分我從我的破碎的頁面上從PHP獲取相同的錯誤消息。

希望這可以幫助你在你的情況。

+0

謝謝你的回答,它現在可以工作,我只需要安裝curl ... – Cinn

相關問題