如何覆盖curl_exec设置标头

时间:2012-08-01 10:07:38

标签: php curl header download


我正在为js构建一个combine / minify php脚本,使用了许多在线缩小脚本,而且我坚持使用Google的Closure minify脚本。此特定脚本要求您使用需要缩小的内容执行POST,并在响应中获得缩小的代码。我的脚本需要像这样工作:
1.用户添加要缩小和/或组合的文件 2.用户点击“开始”
3.脚本在后台运行,并开始下载;下载的文件是:
3A。一个大的js文件,包含提供的文件的组合缩小内容OR
3B。一个存档包含所提供文件的缩小版本。

3a的重点是服务器上没有创建文件,而是更改标题并输出缩小的内容。这就是我遇到问题的地方。 minify方法中的代码如下所示:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://closure-compiler.appspot.com/compile');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'output_info=compiled_code&output_format=text&compilation_level=SIMPLE_OPTIMIZATIONS&js_code=' . urlencode($str));
$result = curl_exec($ch);

return $result;

以后在代码中,我有

$js = mini($js);
header('Content-Description: File Transfer');
header('Content-Type: application/javascript');
header('Content-Disposition: attachment; filename='.$ourFileName);
header('Content-Transfer-Encoding: text');
echo $js;

如果不清楚,第一个代码段中的 $ str 变量是所有文件的实际组合内容, mini 是minify方法。问题是,如果我运行它,我在浏览器窗口中看到内容(截断),如果我检查页面,我看到一个错误:

Cannot modify header information - headers already sent by (output started at E:\work\AdoTube\workspace\php\script.php:47)

(第47行是curl_exec调用)。 如果我绕过minify方法,我得到一个很好的'下载文件',文件看起来不错。所以,我的猜测是curl_exec调用在我的脚本上设置了一些标题,这使我无法在代码中更改标题。
我如何解决它?我知道一个想法是将结果写入临时文件,然后下载,但我不想这样做,除非它是唯一的选择..谢谢。

1 个答案:

答案 0 :(得分:1)

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);