Может быть. Попробуйте добавить также заголовок длины содержимого:
header('Content-length: '.filesize($filename));
Если это по-прежнему не работает, проверьте наличие выходных данных до readfile
(echo
или пробел до <?php
). Проверьте также, что после ?>
у вас нет пробелов или просто пропустите ?>
(это не обязательно, если у вас ничего нет после).
Как уже упоминал Бруно, для поддержки потоковой передачи вам также необходимо подчиняться заголовку Range
. Вот упрощенный пример, который учитывает только левую границу:
if (empty($_SERVER["HTTP_RANGE"])) {
//do your current stuff...
}
else { //violes rfc2616, which requires ignoring the header if it's invalid
preg_match("/^bytes=(\d+)-/i",$_SERVER["HTTP_RANGE"], $matches);
$offset = (int) $matches[1];
if ($offset < $filesize && $offset >= 0) {
if (@fseek($fp, $offset, SEEK_SET) != 0)
die("err");
header("HTTP/1.1 206 Partial Content");
header("Content-Range: bytes $offset-".($filesize - 1)."/$filesize");
}
else {
header("HTTP/1.1 416 Requested Range Not Satisfiable");
die();
}
//fread in loop here
}