iigor
Новичок
скачать с сервера мою бинарную строку
Здраствуйте.
Я пытаюсь скачать с сервера мою бинарную строку с поддержкой докачки дома пробую выходит на сервере только 200 ответ пишет. (а мне так нужен 206)
Формально мой код выгладит так:
<?php
$binarydata = pack("V", 0);//4 байта
$binarydata .= pack("V", 1);//4 байта
$binarydata .= 'Строка';
$binarydata .= pack("V", 2);//4 байта
$binarydata .= pack("V", 3);//4 байта
...
echo $binarydata; //отправим
?>
Побывал использовать ob_start() чтото мне не помогает.
Нашел пример кода вот он:
$headers = getallheaders();
$auth=$headers[authorization];
if ($auth=='') { $auth=$headers[Authorization]; }
if($auth=='')
{
Header("WWW-Authenticate: Basic realm=\"Это тебе не мелочь по карманам тырить\"");
Header("HTTP/1.0 401 Unauthorized");
}
list($user, $pass) = explode(":", base64_decode(substr($auth, 6)));
if ($user=="login" && $pass=="password") {
$fullPath = "c:/Mus/Rammstein/15-Mutter 2001/06-Mutter.mp3";
if ($fd = fopen ($fullPath, "rb")) {
$fsize =filesize($fullPath);
$fname = basename ($_SERVER['REQUEST_URI']);
if ($range = $headers['Range']) {
$range = (int) substr($range, 6);
fseek($fd, $range);
header("HTTP/1.1 206 Partial Content");
header("Accept-Ranges: bytes");
header("Content-Range: bytes $range-".($fsize-1)."/$fsize");
} else {
header("HTTP/1.0 200 OK");
}
header("Content-type: audio/mpeg");
header("Content-length: ".($fsize - (int)$range));
fpassthru($fd);
}
}
Его конечно можно использовать если знать размер $binarydata и как сикнуться в нужное место и отправить этот кусочек(как это сделать?). Может есть более элегантный вариант типа задать какуюто системную переменную чтоб она сама кешировала всё и отправляла этими самыми кусками...
Здраствуйте.
Я пытаюсь скачать с сервера мою бинарную строку с поддержкой докачки дома пробую выходит на сервере только 200 ответ пишет. (а мне так нужен 206)
Формально мой код выгладит так:
<?php
$binarydata = pack("V", 0);//4 байта
$binarydata .= pack("V", 1);//4 байта
$binarydata .= 'Строка';
$binarydata .= pack("V", 2);//4 байта
$binarydata .= pack("V", 3);//4 байта
...
echo $binarydata; //отправим
?>
Побывал использовать ob_start() чтото мне не помогает.
Нашел пример кода вот он:
$headers = getallheaders();
$auth=$headers[authorization];
if ($auth=='') { $auth=$headers[Authorization]; }
if($auth=='')
{
Header("WWW-Authenticate: Basic realm=\"Это тебе не мелочь по карманам тырить\"");
Header("HTTP/1.0 401 Unauthorized");
}
list($user, $pass) = explode(":", base64_decode(substr($auth, 6)));
if ($user=="login" && $pass=="password") {
$fullPath = "c:/Mus/Rammstein/15-Mutter 2001/06-Mutter.mp3";
if ($fd = fopen ($fullPath, "rb")) {
$fsize =filesize($fullPath);
$fname = basename ($_SERVER['REQUEST_URI']);
if ($range = $headers['Range']) {
$range = (int) substr($range, 6);
fseek($fd, $range);
header("HTTP/1.1 206 Partial Content");
header("Accept-Ranges: bytes");
header("Content-Range: bytes $range-".($fsize-1)."/$fsize");
} else {
header("HTTP/1.0 200 OK");
}
header("Content-type: audio/mpeg");
header("Content-length: ".($fsize - (int)$range));
fpassthru($fd);
}
}
Его конечно можно использовать если знать размер $binarydata и как сикнуться в нужное место и отправить этот кусочек(как это сделать?). Может есть более элегантный вариант типа задать какуюто системную переменную чтоб она сама кешировала всё и отправляла этими самыми кусками...