Другой общий случай, когда можно получить это исключение, включает в себя насмешливые классы во время модульного тестирования. Независимо от используемой насмешливой структуры, вы должны убедиться, что все соответствующие уровни иерархии классов должным образом высмеиваются. В частности, все свойства HttpContext
, на которые ссылается тестируемый код, должны быть изделены.
См. « Исключение NullReferenceException при проверке пользовательского AuthorizationAttribute » для несколько подробного примера.
Первоначально из http://paul.luminos.nl/update/471 :
Сайт CrimsonBase проверяет закачки, проходя мимо их через надежный PHP-скрипт, аналогичный тому, который был опубликован Эндрю Джонсоном в в его статье о файлах с файлами, контролируемыми PHP .
Андрей делает очень важный комментарий в конце статьи :
«Если вы сжимаете файлы с Zlib, mod_deflate и т. д., заголовок Content-Length не будет точным, так что вы увидите« Неизвестный размер »и« Неизвестное время », при загрузке файлов.
blockquote>Я хотел бы подчеркнуть это: если ваш браузер, похоже, не подчиняется заголовкам, сгенерированным вашим PHP-скриптом, особенно
Content-Length
- это довольно вероятно что расширение Apachemod_deflate
включено.Вы можете легко отключить его для одного скрипта, используя следующую строку в соответствующем файле
.htaccess
:SetEnvIfNoCase Request_URI ^/download\.php no-gzip dont-vary
, где загружается. Предполагается, что php находится в сценарии загрузки, расположенном в s путь корневого каталога erver (например,
blockquote>www.crimsonbase.com/download.php
). (Это потому, что регулярное выражение^/download\.php
.)
У меня была такая же проблема, и я исправил ее, отправив заголовок Content-Length
до Content-Disposition
.
header('Content-Type: video/mp4');
header("Content-Transfer-Encoding: Binary");
header("Content-Length: ".filesize($file_url));
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);
Не пытайтесь очистить кеш до функции readfile (). Мой код почти идентичен вашему, и работает отлично.