【发布时间】:2014-02-06 18:09:56
【问题描述】:
我希望能够转到mydoma.in/tunnel.php?file=http://otherdoma.in/music.mp3,然后将http://otherdoma.in/music.mp3的数据流式传输到客户端。
我尝试通过 Header(); 执行此操作,但它重定向而不是“调整”数据。
我该怎么做?
【问题讨论】:
我希望能够转到mydoma.in/tunnel.php?file=http://otherdoma.in/music.mp3,然后将http://otherdoma.in/music.mp3的数据流式传输到客户端。
我尝试通过 Header(); 执行此操作,但它重定向而不是“调整”数据。
我该怎么做?
【问题讨论】:
使用 cURL 进行流式传输:
<?php
$url = $_GET["file"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256);
curl_exec($ch);
curl_close($ch);
?>
【讨论】:
https 请求,我需要这个项目。有解决办法吗?
如果它们很小,您也许可以使用 file_get_contents()。否则,您可能应该使用 cURL。您可能希望从获取变量“文件”中卷曲 URL。然后使用 PHP 将其保存到本地临时位置。然后,使用 header() 将自己定向到本地文件。删除临时文件是唯一的问题,因为没有办法确定您何时完成下载。因此,您可能可以休眠或延迟文件删除,但您可能会发现稍后使用 cron 作业清理所有临时文件是一个更好的选择。
【讨论】:
让您的 PHP 脚本拉取远程内容:
$data = file_get_contents($remote_url);
然后吐出来:
echo $data;
或者简单地说:
echo file_get_contents($remote_url);
您可能需要添加一些标题来指示内容类型。
或者,您可以使用 nginx 之类的东西配置代理 - 这将允许您将特定 URL 重写到远程站点,然后将它们作为本地站点提供,无需编码。
【讨论】:
domain.com/tunnel/{URL} 将代理 {URL})。