Utilizando el código debajo de cada imagen descarga) file_get_contents()) tarda una media de 8-15 segundos .....file_get_contents() con el contexto para utilizar HTTP/1.1 significativamente lenta velocidad de descarga
Si yo no uso un contexto en file_get_contents() luego la descarga de la imagen es menos de un segundo.
Si cambio los $ opts a, a continuación, obtengo el mismo rendimiento que file_get_contents() sin un contexto que toma appox 13 segundos para procesar 2.500 imágenesx.
$opts = array(
'http'=>array(
'protocol_version'=>'1.1',
'method'=>'GET',
'header'=>array(
'Connection: close'
),
'user_agent'=>'Image Resizer'
)
);
Reproducir:
$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 />');
¡Gracias! Las solicitudes que tomaban 0.15s en HTTP 1.0 tomaban al menos 5s en HTTP 1.1. Un simple 'encabezado (" Conexión: cerrar "); ¡arreglado! – Mave