Используя приведенный ниже код каждой загрузки изображения) file_get_contents()) в среднем занимает 8-15 секунд .....file_get_contents() с контекстом, чтобы использовать HTTP/1.1 значительно медленно скорость загрузки
Если я не использую контекст на file_get_contents(), тогда загрузка изображения меньше секунды.
Если я изменю $ opts, ниже, я получаю такую же производительность, как и file_get_contents(), без контекста, который занимает 13 секунд для обработки 2,500 изображений.
$opts = array(
'http'=>array(
'protocol_version'=>'1.1',
'method'=>'GET',
'header'=>array(
'Connection: close'
),
'user_agent'=>'Image Resizer'
)
);
ВОПРОИЗВЕДЕНИЕ:
$start_time = mktime();
$products = array(
array('code'=>'A123', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A124', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A125', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A126', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A127', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A128', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A134', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A135', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A146', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png'),
array('code'=>'A165', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png')
);
if (count($products) > 0) {
$opts = array(
'http'=>array(
'protocol_version'=>'1.1',
'method'=>'GET',
'user_agent'=>'Image Resizer'
)
);
$context = stream_context_create($opts);
$def_width = 100;
$max_width = $def_width;
foreach($products as $product) {
$code = $product['code'];
$folder = substr($code, 0, 3);
echo('Looking at: ' .$product['code'] ."<br />");
$file = '/tmp/' .$folder .'/' .$code .'_' .$def_width .'.jpg';
$filemtime = @filemtime($file);
$gen_file = true;
if ($filemtime !== false) {
$file_age = (time() - $filemtime);
if ($file_age <= 300) {
$gen_file = false;
}
}
echo(' File not cached or cached file has expired<br />');
if ($gen_file) {
echo(' Getting File...');
$imgStr = file_get_contents($product['image_url'], false, $context);
$img = @imagecreatefromstring($imgStr);
if (is_resource($img)) {
echo('DONE' .'<br />');
$image_x = imagesx($img);
$image_y = imagesy($img);
if ($def_width >= $image_x) {
$def_width = $image_x;
}
echo(' Calculating Scale<br />');
$ts = min($max_width/$image_x,$max_width/$image_y);
$thumbhght = $ts * $image_y;
$thumbwth = $ts * $image_x;
$thumb_image_resized = imagecreatetruecolor($thumbwth, $thumbhght);
imagecopyresampled($thumb_image_resized, $img, 0, 0, 0, 0, $thumbwth, $thumbhght, $image_x, $image_y);
echo(' Checking For Directory<br />');
if (!is_dir('/tmp/' .$folder)) {
mkdir('/tmp/' .$folder);
}
echo(' Writing File<br />');
$new_file = '/tmp/' .$folder .'/' .$code .'_' .$def_width .'.jpg';
imagejpeg($thumb_image_resized, $new_file, 100);
echo(' DONE<br />');
imagedestroy($img);
imagedestroy($thumb_image_resized);
} else {
echo('Problem Getting Image<br />');
die();
}
} else {
echo(' Already Exists<br />');
}
}
}
$end_time = mktime();
echo('Completed In...' .($end_time - $start_time) .' seconds(s)<br />');
Спасибо! Запросы, которые принимали 0,15 с HTTP 1.0, занимали не менее 5 с по HTTP 1.1. Простой заголовок («Соединение: закрыть»); починил это! – Mave