Quiero cargar un archivo desde una URL externa directamente a un depósito de Amazon S3 utilizando el SDK de PHP. Me las arreglé para hacer esto con el siguiente código:Cargar archivo externo al segmento AWS S3 con PHP SDK
$s3 = new AmazonS3();
$response = $s3->create_object($bucket, $destination, array(
'fileUpload' => $source,
'length' => remote_filesize($source),
'contentType' => 'image/jpeg'
));
Cuando el remote_filesize función es la siguiente:
function remote_filesize($url) {
ob_start();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$ok = curl_exec($ch);
curl_close($ch);
$head = ob_get_contents();
ob_end_clean();
$regex = '/Content-Length:\s([0-9].+?)\s/';
$count = preg_match($regex, $head, $matches);
return isset($matches[1]) ? $matches[1] : "unknown";
}
Sin embargo, sería bueno si pudiera saltar establecer el tamaño del archivo para la carga en Amazon desde esto me ahorraría un viaje a mi propio servidor. Pero si elimino la configuración de la propiedad 'longitud' en la función $ s3-> create_object, aparece un mensaje de error que indica que no se puede determinar el tamaño de la secuencia para la carga de la transmisión. ¿Alguna idea de cómo resolver este problema?
No tengo control sobre el servidor/host remoto. Ya probé el método sugerido, pero a pesar de que solo solicita el encabezado, redujo considerablemente el proceso. Decidí mover mi servidor a Amazon también (en la misma zona de disponibilidad que el cubo), y ahora está actualizado. – Bjorn