📅  最后修改于: 2023-12-03 15:03:40.899000             🧑  作者: Mango
PHP 是一种广泛应用于 Web 开发的服务器端编程语言,具有丰富的开源库和工具,其中包括用于处理文件下载的下载脚本。
以下是一个简单的 PHP 下载脚本示例,用于下载文件:
<?php
$file_url = 'http://example.com/sample.pdf';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);
?>
上面的代码将文件类型设置为二进制流,并告诉浏览器下载该文件,而不是在浏览器中打开它。它还使用 readfile
函数从指定的 URL 读取文件,并将其发送到输出缓冲区。
可以使用一个循环来下载多个文件,只需更改 $file_urls
数组中的 URL 列表:
<?php
$file_urls = array(
'http://example.com/sample.pdf',
'http://example.com/sample.docx',
'http://example.com/sample.jpg'
);
foreach ($file_urls as $file_url) {
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);
}
?>
上面的代码下载三个不同类型的文件。
对于大型文件,可以使用 fopen
和 fread
函数来分段下载文件,以避免在下载过程中出现内存问题:
<?php
$file_url = 'http://example.com/large_file.zip';
$buffer_size = 1024 * 1024; // 1MB chunks
$file_size = remote_filesize($file_url);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=\"" . basename($file_url) . "\"");
header("Content-Length: " . $file_size);
$remote_file = fopen($file_url, 'rb');
$pos = 0;
while (!feof($remote_file)) {
print(fread($remote_file, $buffer_size));
flush();
$pos += $buffer_size;
set_time_limit();
}
fclose($remote_file);
function remote_filesize($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
return $size;
}
?>
上面的代码使用 curl
函数获取文件大小,并使用 while
循环从剩余数据中读取数据。在每个循环中使用 flush
函数来刷新输出缓冲区,并使用 set_time_limit
函数防止超时。
上述示例说明了如何使用 PHP 建立一个简单Web 下载脚本,处理单个和多个文件,避免内存问题和超时。通过使用这些技巧,可以轻松地实现文件下载功能,增加 Web 应用程序的易用性和功能。