【发布时间】:2013-01-20 22:35:15
【问题描述】:
我目前正在使用以下 PHP 函数来允许用户选择一个文件然后下载它。这发生在 FTP 上。但是,如果用户选择了一个大文件,那么在下载过程中它会锁定服务器以接收任何其他请求。有什么方法可以在让 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;
}
}
【问题讨论】:
-
这是通过 FTP 发生的?
-
抱歉我忘了解释 $this->get($file) 将它下载到服务器上的 tmp 文件夹。然后它将它提供给用户。下载到 tmp 文件夹几乎是立即发生的,因为 FTP 服务器与 Web 服务器位于同一网络上。
-
@drdanielfc 使用
mod_xsendfiletn123.org/mod_xsendfile
标签: php html ftp timeout request