Автор оригинала: Gas
Alkinoy
у меня твой скрипт работает нормально в IE6, FF 2.0.0.11 и Opera 9.24, без всяких Accept-Ranges
разница между простой отдачей файла напрямую самим апачем и отдачей скриптом только в этих занчениях хидеров:
Date: Thu, 17 Jan 2008 12:14:02 GMT
Server: Apache/2.2.6 (Win32)
X-Powered-By: Zend Core/2.5.0 PHP/5.2.4
Set-Cookie: PHPSESSID=jthpnb0jun7q4dlluojkjgait7; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Tue, 21 Dec 2004 13:19:04 GMT
Accept-Ranges: bytes
Content-Length: 146977
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/pdf
красным - это то, что есть при прямой отправке, но нет при отправке скриптом, полужирным - то, что есть при отправке скриптом и нет при прямой отправке... вот и все различие...
-~{}~ 27.02.08 12:14:
реанимирую тему, потому как проблема вернулась...
файл отдается таким скриптом:
PHP:
if (is_file($name)) {
$path_parts = pathinfo($name);
$fp = fopen($name, 'rb');
header("Content-Type: ".get_content_type($path_parts['extension']));
header("Content-Length: " . filesize($name));
fpassthru($fp);
flush();
exit;
} else {
header("HTTP/1.1 404 Not Found");
echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL '.$_SERVER["QUERY_STRING"].' was not found on this server.</p>
</body></html>';
}
function get_content_type($ext) {
$types = array("pdf" => "application/pdf",
"doc" => "application/msword",
"rtf" => "text/rtf",
"txt" => "text/plain");
if (array_key_exists($ext, $types)) {
return $types[$ext];
}
return "text/html";
}
в ИЭ все работает прекрасно. под оперой сам файл грузится (идет прогресс-бар загрузки документа), но после загрузки - не отображается... Если же документ отдается не скриптом, а Апачем - все пучком...
вот заголовки при передаче документа скриптом:
HTTP/1.1 200 OK
Date: Wed, 27 Feb 2008 10:15:21 GMT
Server: Apache/2.0.50 (FreeBSD) mod_ssl/2.0.50 OpenSSL/0.9.7d PHP/4.3.8
X-Powered-By: PHP/4.3.8
Set-Cookie: PHPSESSID=6d83db1562a4d65b48fb2a0584119a69; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 85160
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: application/pdf
вот заголовки при передаче документа самим апачем:
HTTP/1.1 200 OK
Date: Wed, 27 Feb 2008 10:20:00 GMT
Server: Apache/2.0.50 (FreeBSD) mod_ssl/2.0.50 OpenSSL/0.9.7d PHP/4.3.8
Last-Modified: Wed, 27 Feb 2008 10:18:17 GMT
ETag: "7be43-1701e-1fa14c40"
Accept-Ranges: bytes
Content-Length: 94238
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/pdf