企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
我想下载一个带有curl的远程文件,并立即将其输出给用户.用户应该认为他从我的服务器而不是远程服务器下载文件.我无法缓冲整个文件,因为有些文件大于200MB.此外,用户必须等待完成缓冲,直到他可以开始下载文件.我找到了一个直接从远程服务器下载文件的脚本:<?php$file_name=$ 我想下载一个带有curl的远程文件,并立即将其输出给用户. 用户应该认为他从我的服务器而不是远程服务器下载文件.我无法缓冲整个文件,因为有些文件大于200 MB.此外,用户必须等待完成缓冲,直到他可以开始下载文件. 我找到了一个直接从远程服务器下载文件的脚本: ``` <?PHP $file_name = $_GET['file']; $file_url = 'http://www.remote.tld/' . $file_name; header('Content-Type: application/octet-stream'); header("Content-transfer-encoding: Binary"); header("Content-disposition: attachment; filename=\"".$file_name."\""); readfile($file_url); exit; ?> ``` 这种直接远程下载也可以卷曲吗? 解决方法: 您需要以块的形式读取和输出文件,因为整个200MB文件可能不适合您的PHP脚本的内存. 有关如何在curl中执行此操作,请参阅this question.在the manual有一个现实的例子.被盗和修改,这样的东西应该工作(未经测试): ``` <?PHP curl_setopt($this->curl_handle, CURLOPT_WRITEFUNCTION, "receiveResponse"); function receiveResponse($curlHandle,$data) { echo $data; // Ouput to the user $length = strlen($data); return $length; } ?> ``` 请注意,这不是一个好主意.它给服务器带来了相对沉重的负担 – 如果你有相当高的流量数量,那么为代表下载服务的虚荣心付出的代价是很高的.当然,200 MB下载将为您的流量账单创建400MB!