0


我正在为 js 构建一个 combine/minify php 脚本,使用了一些在线 minify 脚本,我被困在 Google 的 Closure minify 脚本中。此特定脚本要求您对需要缩小的内容进行 POST,然后在响应中获得缩小后的代码。我的脚本需要这样工作:
1. 用户添加要缩小和/或合并的文件
2. 用户单击“开始”
3. 脚本在后台运行,并开始下载;下载的文件是:
3a。一个大 js 文件,其中包含所提供文件的组合缩小内容或
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 调用在我的脚本上设置了一些标题,这会阻止我稍后在代码中更改标题。
我如何解决它?我知道一个想法是将结果写入临时文件,然后下载它,但我不想这样做,除非它是唯一的选择。谢谢。

4

1 回答 1

1

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

于 2012-08-01T14:28:52.497 回答