状況:ユーザーはAJAXを介して多数の写真をアップロードし、PHPスクリプトがバックグラウンドで実行され続け、アップロードされた写真に基づいてさまざまなサムネイルを生成している間、Webサイトとの対話を続けます。
サイト構成:
- jQuery AJAX(v1.9.1)
- PHP 5.4.7、FastCGIモード
- IIS 7.5、gzip付き
私が参照して実装しようとした以前の投稿(しかし役に立たなかった):
- PHPとの接続を早期に閉じる
- PHP:出力が完了した後も続行します
- AJAXの結果を送信しますが、PHPで処理を続行します
- 早期に接続を閉じる
- IISで単一のphpファイルのGzip圧縮を無効にする
- http://www.php.net/manual/en/features.connection-handling.php#71172
以前の投稿に基づいて膨大な数のスクリプトオプションを試しましたが、PHPが処理を続行している間、ユーザーに続行させるようにAJAXスクリプトに指示するものはないようです...
PHPコードの例:
<?php
// Save images to db, etc
// Now tell AJAX to let the user continue, before generating thumbnails
if(ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off'); // turn IIS gzip for this file
}
ob_end_clean();
header("Connection: close");
header("Content-Encoding: none"); //ensures gzip is not sent through
ob_start();
echo '123'; // 3 digit number will be sent back to AJAX
$size = ob_get_length(); // should mean Content-Length = 3
header("Content-Length: $size");
ob_end_flush();
flush();
ob_end_clean();
// Generate thumbnails, etc
?>
jQuery AJAXコードの例:
$.ajax({
type: 'POST',
url: ajax_url,
data: { foo: bar },
beforeSend:function(){
//
},
success:function(data){
alert(data); // Only seems to be firing once the thumbnails have been generated.
}
});
応答ヘッダーは問題ないようです...
質問:PHPスクリプトがサムネイルを生成し続けている間に、PHPスクリプトの途中からコードを受け取った後、ユーザーが続行できるようにAJAXを取得するにはどうすればよいですか?