Forums / Localized forums / Japanese / 【質問】複数人が同時にダウンロード

【質問】複数人が同時にダウンロード

Author Message

Kouichi Sakamoto

Friday 13 August 2010 12:44:50 am

いつもお世話になっております。CSKシステムズ坂本です。

不明な点がございますので、質問をさせてください。
【目的】
ダウンロードをautoloads内でオペレータとして実装し、テンプレートから呼び出すことで、複数人が同時にダウンロード処理をおこないたい。
【ダウンロード方法】
ダウンロード用のHTTPヘッダを指定し、ファイルを読んで出力
header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($filepath));
readfile($filepath);
【環境】
ezpublish 4.1.3
PHP 5.2.10
【事象】
Firefox:複数人が同時にダウンロードが可能。
IE8:複数人が同時にダウンロードができない。
<詳細>
ダウンロードダイアログでキャンセルを行うと、30秒間以下の事象が発生する。
・自端末から別ウィンドウ、別タブでダウンロードができない。
・別の端末からダウンロードができない。
・autoload内のダウンロードオペレータと同じphpファイルの、オペレータもすべて呼び出せない。
-----------------------------------------------------------------------------------------
以下の仮説を立て、実験。
<<仮説>>
autoload内のPHPファイルは並列処理できない。
【実験】
オペレータ内でsleepを入れ、複数ブラウザから並列処理が可能か実験を行った。
【実験の事象】
複数ブラウザからのリクエストに対して並列処理する事を期待しているが、
autoloadsで定義した関数を経由した場合に、
後発ブラウザからの処理が、先発ブラウザの処理完了後に実行される。
【実験詳細】
・エクステンションの autoloads に以下の定義と処理を実装
login_check.php (内容の抜粋)
function namedParameterList()
{
return array( 'mailcheck' => array( 'str' => array
( 'type'
=>
'string',
'required' => true,
'default' => '' ) ),
'strcheck' => array( 'str' => array
( 'type'
=>
'string',
'required' => true,
'default' => '' ) )
);
}
function mailcheck( $str )
{
$fp = fopen("/tmp/sample0804.txt", "a+");
fwrite($fp, "call mailcheck start --> \n");
fwrite($fp, $str);
fwrite($fp, "\n");
fwrite($fp, date('h:i:s'));
fwrite($fp, "\n");
sleep(30);
fwrite($fp, "<--- call mailcheck end \n");
fclose($fp);
}
※問題切り分けの為、sleepを入れて30秒待機するようにしています。
・FireFoxとIEの2つのブラウザでほぼ同時にアクセス
 →それぞれ、mailcheck関数が呼ばれるが、後発が先発の処理実行後に処理さ
れる
/tmp/sample0804.tx ログ
call mailcheck start -->
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115
Firefox/3.6
09:57:39
<--- call mailcheck end
call mailcheck start -->
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322;
.NET CLR 2.0.50727)
09:58:09
<--- call mailcheck end
★後発のIEの処理が先発のFFの処理完了後に受付されています。
【質問事項】
eZ Publishにおいて、autoloadsの処理は並列処理にならない仕様でしょうか?
その場合、どのように回避するものでしょうか?

長文で申し訳ございませんが、ご回答いただければと存じます。

以上、よろしくお願い致します。