2011-05-03 89 views
0

我想從S3文件並將其移動到我的本地文件系統,我收到此錯誤的file_get_contents需要一個字符串

的file_get_contents()預計參數1是字符串,對象給出

$upload_directory = "C:\wamp\test"; 

$s3 = new AmazonS3("key", "pass"); 



$source = $s3->getObject("bucket","file.mp3"); 
$destination = "C:\wamp\test\file.mp3"; 

$data = file_get_contents($source); 

$handle = fopen($destination, "w"); 
fwrite($handle, $data); 
fclose($handle); 
+1

'AmazonS3'類從哪裏來?那個類的文檔在哪裏?當你處理它時:文檔對這個類的getObject方法說了些什麼? – Oswald 2011-05-03 01:33:27

回答

2

你正在向它傳遞一個對象var_dump($ source)來查看你首先得到的數據類型。它需要是一個字符串

2

顯然,AmazonS3::getObject()不返回一個字符串。從getObject()返回的對象是否提供URL字符串方法或屬性?

編輯:我知道這是不是你使用的是什麼,但amazon-s3-php-class似乎提供了一個更簡單的界面,用於在本地保存的S3對象。

+0

+1 yep,在那裏看到第三個參數。看起來他們正在嘗試請求並將其保存在本地。 'file_put_contents()'會更容易:) – alex 2011-05-03 01:37:54

+0

Hi phil。我在對象中看到有一個url。不知道我該如何使用它來獲取文件 – Autolycus 2011-05-03 15:36:18

0

看看返回對象是否有一個可以調用的__toString()函數。如果它返回文件的路徑,則可以在函數file_get_contents中使用它。

0

將該對象轉換爲字符串。

$source = (string) $s3->getObject("bucket","file.mp3"); 
+1

這是非常冒失的,除非你知道神祕的'AmazonS3'類來自 – Phil 2011-05-03 02:02:49

+0

同意。這隻適用於如果你知道$ source包含你想要的數據的情況。使用上面的var_dump建議來確保它。如果不是: http://docs.amazonwebservices.com/AmazonS3/latest/API/ – Ryre 2011-05-03 02:15:02

0

鑄造字符串不會爲對象的工作從$ S3->的getObject返回。如果你需要從$ s3-> getObject返回的字符串,請改爲:

$image = $s3->getObject($bucket, "file.jpg"); 
if ($image->body) { 
    return $image->body; 
} else { 
    return ''; 
}