Amazon AWSSDKforPHP太慢了
你好,
我正在使用Amazon AWSSDKforPHP将我的Web应用程序连接到S3。但是,与该过程或向服务发出请求有关的问题使其变得太慢。
例如,我有以下代码:
// Iterate an array of user images
foreach($images as $image){
// Return the Bucket URL for this image
$urls[] = $s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '5 minutes');
}
假设$images是用户图片数组,这将返回一个名为$urls的数组,其中包含(如其名称所示)具有5分钟凭据的图片URL。对于35张图片,此请求至少需要6秒钟,这很好。但是......当图片不存在于存储桶中时,我想为用户分配默认图片,例如“images/noimage.png”。
以下是代码:// Iterate an array of user images
foreach($images as $image){
// Check if the object exists in the Bucket
if($s3->if_object_exists($bucket, 'users/'.trim($image).'.jpg')){
// Return the Bucket URL for this image
$urls[] = $s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '5 minutes');
} else {
// Return the default image
$urls[] = 'http://www.example.com/images/noimage.png';
}
}
这个条件可以正常工作,但速度非常慢。使用"$s3->if_object_exists()"这个条件,在有35张图片的情况下,脚本至少需要40秒的时间!
我已经修改了我的脚本,并使用cURL发送请求:
// Iterate an array of user images
foreach($images as $image){
// Setup cURL
$ch = curl_init($s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '1 minutes') );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// Get Just the HTTP response code
$res = curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($res == 200){ //the image exists
$urls[] = $s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '5 minutes');
}else{ // The response is 403
$urls[] = 'http://www.example.com/images/noimage.png';
}
}
这个修改后的脚本需要花费16到18秒的时间。这是一个很大的时间差异,但仍然需要很长时间 :(。
请帮忙看看有没有任何帮助,非常感谢。
谢谢。