【发布时间】:2009-09-09 02:06:13
【问题描述】:
我有一个 PHP 脚本,它应该接收 URL 并在数据库中搜索 URL 的缓存版本。如果找到它,它会将缓存的版本打印给用户,否则它使用 cURL 下载它并将其回显给用户。目前,下载脚本如下所示:
// 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;
目前运行良好,但是,大文件在 100% 下载之前不会发送给最终用户,这会导致不会触发增量渲染。我想知道 cURL 是否有一种方法可以在下载时将数据传递给用户,同时也可以将数据以字符串形式提供给脚本使用。
【问题讨论】: