J'ai un script PHP qui est censé contenir une URL et rechercher une base de données pour une version en cache de l'URL. S'il le trouve, il imprime la version mise en cache à l'utilisateur, sinon il la télécharge en utilisant cURL et l'envoie à l'utilisateur. À l'heure actuelle, le script de téléchargement ressemble à quelque chose comme ceci:PHP Curl: lire de manière incrémentielle
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
// grab URL and pass it to the browser
$data = curl_exec($ch);
$mimetype = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
// close cURL resource, and free up system resources
curl_close($ch);
mysql_query("INSERT INTO `cache_files` (`key`, `original_url`, `file_data`, `mime_type`) VALUES (".
"'" . mysql_real_escape_string($key) . "', " .
"'" . mysql_real_escape_string($url) . "', " .
"'" . mysql_real_escape_string($data) . "', " .
"'" . mysql_real_escape_string($mimetype) . "')"
);
if (isset($_GET["no_output"])) die;
header ("Content-Type: " . $mimetype);
header ('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 157680000), true);
header ('Last-Modified: '.gmdate('D, d M Y H:i:s \G\M\T'), true);
header ('Cache-Control: public; max-age=157680000');
header ('Pragma: ');
print $data;
Cela fonctionne actuellement bien, cependant, de gros fichiers ne sont pas envoyés à l'utilisateur final jusqu'à ce qu'ils soient téléchargés 100%, ce qui provoque un rendu supplémentaire ne doit être déclenchée. Je veux savoir s'il existe un moyen pour cURL de transmettre les données à l'utilisateur lors du téléchargement, mais aussi de disposer les données dans une chaîne pour la consommation de script.