我試圖上傳很多圖像到S3存儲桶。考慮到速度,我希望通過將數據保存在內存中來減少磁盤讀取和寫入的次數。爲此,我想出了以下方案:傳遞二進制數據到S3 PutObject
//fetch binary image data from remote URL
$contents = file_get_contents("http://somesite.com/image.jpg");
//trim the image as per: http://stackoverflow.com/a/15104071/568884
$out = shell_exec('echo ' . base64_encode($contents) . " | base64 -d | convert - -fuzz 10% -trim jpeg:-");
//create a temporary resource to pass to S3's inputResource() method.
$resource = fopen('php://temp', 'r+');
//write the binary data into the empty resource.
fwrite($resource, $out);
//pass the resource and length of binary data into inputResource()
$ir = $this->s3->inputResource($resource, strlen($out));
//finally transfer the resource from machine to S3.
$this->s3->putObject($ir, $bucket, $s3_path, S3::ACL_PUBLIC_READ);
的錯誤是:S3 :: putObject():將requestTimeout]你的套接字連接到服務器是無法讀取或內寫入超時期限。空閒連接將被關閉並且數據不會寫入S3。
如果我將$ out的賦值替換爲簡單的空字符串:$out = "";
然後,庫按預期方式成功地將0字節文件寫入S3。
我正在使用CodeIgniter S3庫...這只是AWS S3 API afaik的一個包裝。
PHP是不是真的這個東西的最佳選擇。一個更好的設計會使用諸如Python,Java或Ruby之類的批處理工作排隊。您可以輕鬆地從您的PHP應用程序創建工作,並讓工作人員處理繁重的工作。 – jamieb 2013-03-04 02:06:35
你使用s3 SDK還是第三方課程? – 2013-03-09 00:27:00
按照問題「我正在使用CodeIgniter S3庫,它只是AWS S3 API afaik的包裝器。」 – 2013-03-09 02:25:20