📜  php 下载脚本 - PHP (1)

📅  最后修改于: 2023-12-03 15:03:40.899000             🧑  作者: Mango

PHP 下载脚本

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);
}
?>

上面的代码下载三个不同类型的文件。

下载大文件

对于大型文件,可以使用 fopenfread 函数来分段下载文件,以避免在下载过程中出现内存问题:

<?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 应用程序的易用性和功能。