Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅强制下载一个范围_Php_Html_Curl - Fatal编程技术网

Php 仅强制下载一个范围

Php 仅强制下载一个范围,php,html,curl,Php,Html,Curl,我想强制下载管理器只下载一个字节范围 现在发生了什么,我的下载管理器从我的php文件中请求多个范围,我不希望发生这种情况(我有理由这样做),是否有任何http头设置为仅强制一个范围下载 我正在使用此代码阻止任何第二个范围的连接,但代码的问题是“恢复”被禁用 if ($_SERVER['REQUEST_METHOD']=='GET' && isset($_SERVER['HTTP_RANGE']) && $range=stristr(trim($_SERVER['H

我想强制下载管理器只下载一个字节范围

现在发生了什么,我的下载管理器从我的php文件中请求多个范围,我不希望发生这种情况(我有理由这样做),是否有任何http头设置为仅强制一个范围下载

我正在使用此代码阻止任何第二个范围的连接,但代码的问题是“恢复”被禁用

if ($_SERVER['REQUEST_METHOD']=='GET' && isset($_SERVER['HTTP_RANGE']) && $range=stristr(trim($_SERVER['HTTP_RANGE']),'bytes='))
{
$arrr = explode('-', $range);
if (isset($arrr[1])) die();
$f= fopen('era','w');
fwrite($f, $range);
fclose($f);
$start_range = $arrr[0];
$range=substr($range,6);
header("Content-Range: bytes $range/$filesize");
}

事实上,我找到了一个解决这个问题的窍门,它可能不是专业的方式,但它就像一个魅力。我检查标题范围,如果它从xxxx字节到结尾,那么允许它。如果请求范围为xxx到yyy,则发送一个错误的头(这是一个技巧),以便下载管理器将等待有效的响应,但它永远不会得到响应,因此操作将超时,并重复请求。下面是一个简单的if命令,它可以生成这个咒语

$range=substr($range,6);
$arrr = explode('-', $range);
$start_range = $arrr[0];
if(!isset($arrr[1])) header("Content-Range: bytes $range/$filesize");
else header("Content-Range: bytes bytes $arrr[0]");//bad header