0


いくつかのオンラインミニファイスクリプトを使用して、js用のcombine / minify phpスクリプトを作成していますが、GoogleのClosureミニファイスクリプトで立ち往生しています。この特定のスクリプトでは、縮小する必要のあるコンテンツを使用してPOSTを実行し、応答で縮小されたコードを取得する必要があります。スクリプトは次のように機能する必要が
あります。1。ユーザーが縮小または結合するファイルを追加します
。2。ユーザーが[開始]をクリックします。3
。スクリプトがバックグラウンドで実行され、ダウンロードが開始されます。ダウンロードされたファイルは次のいずれかです
。3a。提供されたファイルの縮小されたコンテンツを組み合わせた1つの大きなjsファイルまたは
3b。提供されたファイルの縮小バージョンを含む1つのアーカイブ。

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 に答える