PHP copy与文件传输中断的恢复

发布时间:2024-09-13 19:04:41 作者:小樊
来源:亿速云 阅读:81

在 PHP 中,当使用 copy() 函数进行文件传输时,如果传输被中断,可能需要恢复传输并继续从中断点开始。为了实现这个功能,你可以使用 cURL 库来实现断点续传。

以下是一个使用 cURL 实现断点续传的示例:

<?php
function resume_broken_transfer($source, $destination, $timeout = 30) {
    // 获取已经下载的文件大小
    if (file_exists($destination)) {
        $downloadedBytes = filesize($destination);
    } else {
        $downloadedBytes = 0;
    }

    // 初始化 cURL
    $ch = curl_init();

    // 设置 cURL 选项
    curl_setopt($ch, CURLOPT_URL, $source);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOPROGRESS, false);
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function ($resource, $downloadSize, $downloaded, $uploadSize, $uploaded) use ($downloadedBytes) {
        echo "Downloaded: " . ($downloaded + $downloadedBytes) . " bytes\n";
    });
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RESUME_FROM, $downloadedBytes);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

    // 开始传输
    $result = curl_exec($ch);

    // 检查是否有错误
    if (curl_errno($ch)) {
        echo 'Error: ' . curl_error($ch);
        return false;
    }

    // 关闭 cURL
    curl_close($ch);

    // 将结果追加到目标文件
    file_put_contents($destination, $result, FILE_APPEND);

    return true;
}

// 使用示例
$source = 'http://example.com/large-file.zip';
$destination = 'local-large-file.zip';
$resumed = resume_broken_transfer($source, $destination);

if ($resumed) {
    echo "File transfer completed successfully.\n";
} else {
    echo "File transfer failed.\n";
}
?>

这个示例中的 resume_broken_transfer() 函数接受三个参数:源文件 URL、目标文件路径和超时时间(默认为 30 秒)。函数首先检查目标文件是否存在,如果存在,则获取已下载的字节数。然后,使用 cURL 库下载文件,并在下载过程中使用回调函数显示下载进度。如果传输被中断,函数将恢复传输并从中断点继续。最后,将下载的数据追加到目标文件。

推荐阅读:
  1. 怎么在PHP中利用SFTP实现一个文件上传下载功能
  2. Error与Logging函数怎么在PHP中使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:复制文件到临时目录的PHP实践

下一篇:PHP中文件复制与文件重命名的集成

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》