현재 사용자가 파일을 선택하여 다운로드 할 수 있도록 다음 PHP 함수를 사용하고 있습니다. 이것은 FTP를 통해 발생합니다. 그러나 사용자가 큰 파일을 선택하면 다운로드가 진행되는 동안 다른 요청에 대해 서버가 잠 깁니다. PHP가 요청에 계속 응답하는 동안 파일을 호스팅 할 수있는 방법이 있습니까?PHP 대용량 파일을 올바르게 호스팅하는 방법은 무엇입니까?
사용자가 자격 증명을 사용하여 파일을 다운로드 할 수 있도록 PHP가 필요하므로 자산으로 호스팅 할 수 없습니다. 파일은 FTP 서버에 있습니다.
function download($file) {
$fileStream = "";
if($this->get($file)) {
//Send header to browser to receive a file
header("Content-disposition: attachment; filename=\"$file\"");
header("Content-type: application/octet-stream");
header("Pragma: ");
header("Cache-Control: no-cache");
header("Expires: 0");
$data = readfile($this->downloadDir . $file);
$i=0;
while ($data[$i] != "")
{
$fileStream .= $data[$i];
$i++;
}
unlink($this->downloadDir . $file);
echo $fileStream;
exit;
} else {
return false;
}
}
무슨 일이 일어나고
(당신이 content-type 및 content-disposition 헤더를 유지할 수 있도록 다른 헤더는 유지됩니다)? – alex
죄송합니다. $ this-> get ($ file)이 서버의 tmp 폴더로 다운로드한다는 것을 잊어 버렸습니다. 그런 다음 사용자에게 제공합니다. FTP 서버가 웹 서버와 동일한 네트워크에 있기 때문에 tmp 폴더로 다운로드하는 것이 거의 즉시 발생합니다. –
@drdanielfc는'mod_xsendfile'을 사용합니다. https://tn123.org/mod_xsendfile/ – Petah