2

httpを使用してHTML5チャンクファイルAPIを使用してファイル転送Webサイトを作成しました。ファイルのアップロード中、サーバーの CPU 使用率がほぼ 100% であることを除いて、正常に動作します。このファイル転送は、平均で約 4 GB のファイルをアップロードするために使用されます。

ファイルを tmp ディレクトリから宛先ディレクトリに移動しようとするため、CPU 使用率がほぼ 100% になると思います。

一時ディレクトリを使用せずにファイルをアップロードする方法はありますか?

私の質問はPHPですが、他の言語も受け入れられます

ファイルのアップロード中の「top」コマンドの結果は次のとおりです(18mb、38mb、60mb、33mb)

 1904 apache    20   0 33504 5740 1952 R 28.3  0.2   0:02.19 httpd
 1905 apache    20   0 33504 5740 1952 R 28.3  0.2   0:01.99 httpd
 1903 apache    20   0 33232 6968 3060 R 28.0  0.2   0:01.98 httpd
 1910 apache    20   0 33240 6020 2248 S 11.5  0.2   0:02.85 httpd
 2133 root      20   0  2656 1124  896 R  1.6  0.0   0:00.71 top
    1 root      20   0  2864 1404 1188 S  0.0  0.0   0:03.99 init

httpd がすべてのリソースを使用していることを示しています。ファイルをサーバーにコピーまたはアップロードしたことが原因ではない場合、何が問題なのか知っている人はいますか?

4

4 に答える 4

0

http putメソッドを使用して、ファイルのアップロードを処理できます。この方法では、データはPHPスクリプトに直接ストリーミングされ、ファイル関数を使用して処理できます。

<?php
$f = fopen('php://input','r');
while(!feof($f)){
    $chunk = fread($f,CHUNK_SIZE);
    [Handle the uploading file here]
}
fclose($f);
?>

(CHUNK_SIZEを自分の値に置き換えます)

于 2012-12-12T02:42:29.433 に答える
0

tmpから宛先への移動が問題であることが確実な場合は、php.ini設定(upload_tmp_dir)を変更して、tmpdirを宛先ディレクトリと同じパターンの別のディレクトリに移動できます。

スクリプト内で変更するだけでなく、スクリプトが実行されるまでに、ファイルはすでにアップロードされています。

php.iniで変更するだけです。

于 2012-12-12T03:45:42.930 に答える
0

アプリケーションのプロファイルをもう少し増やす必要があると思います。ファイルの移動によってCPUが大幅に占有されることはないからです。

于 2012-12-12T03:45:50.613 に答える
0

4 GB もの大きなファイルの場合、アプリケーションのストリーミング先として Websocket をセットアップすることを検討してください。

http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-resumable-video-uploade-in-node-js/

于 2012-12-12T04:42:11.223 に答える