当前位置:首页 > PHP

php实现app下载

2026-02-16 05:42:00PHP

实现 PHP 下载功能

在 PHP 中实现文件下载功能通常通过设置 HTTP 头信息并输出文件内容来完成。以下是实现的基本方法:

设置正确的 HTTP 头信息

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));

读取并输出文件内容

readfile($file);
exit;

完整下载函数示例

function downloadFile($file) {
    if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        readfile($file);
        exit;
    } else {
        die('文件不存在');
    }
}

处理大文件下载

对于大文件下载,可以使用分块读取的方式减轻内存压力:

$chunkSize = 1024 * 1024; // 1MB chunks
$handle = fopen($file, 'rb');
while (!feof($handle)) {
    $buffer = fread($handle, $chunkSize);
    echo $buffer;
    ob_flush();
    flush();
}
fclose($handle);

安全注意事项

验证用户权限 在提供下载前应验证用户是否有权限下载该文件。

防止目录遍历攻击

$basePath = '/safe/download/directory/';
$realBase = realpath($basePath);
$userPath = $basePath . $_GET['file'];
$realUserPath = realpath($userPath);

if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) {
    die('非法文件路径');
}

设置下载限速

$downloadRate = 100; // 100KB/s
while (!feof($handle)) {
    $buffer = fread($handle, $downloadRate * 1024);
    echo $buffer;
    ob_flush();
    flush();
    sleep(1);
}

php实现app下载

标签: phpapp
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_sh…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…