无论如何上传文件而不使用临时目录?

时间:2012-12-12 02:30:55

标签: php file-upload

我使用http使用HTML5分块文件api创建了文件传输网站。它工作正常,除了在上传文件期间,服务器中的CPU使用率几乎是100%。此文件传输将用于平均上传文件大约4GB。

我的猜测是,它占用CPU几乎100%,因为它试图将文件从tmp目录移动到目标目录。

无论如何上传文件而不使用临时目录?

我的问题是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 个答案:

答案 0 :(得分: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替换为您的值)

答案 1 :(得分:0)

如果您确定从tmp移动到目的地是问题,您可以更改php.ini设置(upload_tmp_dir)以将tmp目录移动到与目标目录相同的目录中的另一个目录。

不要在脚本中更改它,在脚本运行时,文件已经上传。

只需在php.ini中更改它。

答案 2 :(得分:0)

我认为你应该更多地分析你的应用程序,因为移动文件不会占用CPU。

答案 3 :(得分:0)

对于4GB以上的文件,您可以考虑设置一个websocket来流式传输到您的应用程序。

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