IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   PHP headers (http://www.imho.ws/showthread.php?t=141405)

AlexGluker 30.09.2009 18:49

PHP headers
 
нужно открыть ворд документ, хранящийся в текстовом поле базы в виде base64encode

скриптом через window.open(url на представленный скрипт) открывается новое окно
Код:

....
ob_start();
header("Content-type: application/msword");
header('Content-Disposition: inline; filename="'.iconv_mime_decode($root.'template.doc').'";');
echo base64_decode(mysql_result($res,0,'ctext'));
ob_end_flush();
....

опера и мозилла открывают нормально, а мсексплорер выдает ошибку, не может найти файл.
подскажите, как победить?

Hubbitus 01.10.2009 14:11

"мсексплорер" какой версии?

И нафига здесь буферирование вывода, ведь с ним все равно ничего не делается в итога?

AlexGluker 01.10.2009 18:13

осел версии 6 и выше.
а чем буферизация может помешать?

Hubbitus 01.10.2009 19:41

Что за примеры? И что в них об осле говорится тогда?

BorLase 01.10.2009 21:18

может, не совсем в тему...

но когда мне нужно было сделать что-то подобное в проекте (правда, отдать pdf), я поступил самым простым и банальным способом

поставил сниффер, зашел на сайт, с которого файл считывался на ура, подсмотрел заголовки, вписал их себе... вуаля! все работает

не проще ли подсмотреть, как устроен велосипед, чем изобретать его заново?

AlexGluker 02.10.2009 20:39

опаньки.....
мозила HTTP Request Header
GET /***/openworddoc.php?id=6 HTTP/1.1
Host: www.***.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3

мозила HTTP Response Header
HTTP/1.1 200 OK
Date: Fri, 02 Oct 2009 15:24:00 GMT
Content-Type: application/msword; filename="8ebda540cbcc4d7336496819a46a1b68.doc"
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Disposition: attachment; filename="8ebda540cbcc4d7336496819a46a1b68.doc"
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Cache-Control: max-age=0
Expires: Fri, 02 Oct 2009 15:24:00 GMT

осел HTTP Request Header
GET /***/openworddoc.php?id=6 HTTP/1.1
Accept: */*
Accept-Language: ru

осел HTTP Response Header
HTTP/1.1 200 OK
Date: Fri, 02 Oct 2009 15:26:17 GMT
Content-Type: application/force-download; filename="b534ba68236ba543ae44b22bd110a1d6.doc"
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Disposition: attachment; filename="b534ba68236ba543ae44b22bd110a1d6.doc"
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Cache-Control: max-age=0
Expires: Fri, 02 Oct 2009 15:26:17 GMT

ответы Respons у мозилы и осла однаковые, а вот Request разные
если я правильно понимаю, осел не передает в запросе Host, может отсюда и ошибка? тогда как исправить?

добавлено через 3 минуты
выложил на площадку в инет, чтобы исключить возможные глюки локального xammp'a, при отключении буферизации ситуация с ослом не меняется

Hubbitus 03.10.2009 15:18

Цитата:

Сообщение от AlexGluker (Сообщение 1677118)
ответы Respons у мозилы и осла однаковые, а вот Request разные
если я правильно понимаю, осел не передает в запросе Host, может отсюда и ошибка?

Если ответ правильный, то пофигу. Но вообще странно, хост должен быть, раз контент отдается правильный. Да и HTTP/1.1 требует его. Чем сниферили?

Hubbitus 03.10.2009 16:36

Вы какие-то странный, честное слово. Правильно BorLase, предложил почти... Почти, потому что смысл какой смотреть у кого-то, если подсмотреть можно заголовки с оригинала, когда сам .doc-файл отдается, и их же сэмулировать на PHP?

К тому же

Цитата:

Сообщение от AlexGluker (Сообщение 1677118)
ответы Respons у мозилы и осла однаковые, а вот Request разные

Где же они одинаковые:

Цитата:

Сообщение от AlexGluker (Сообщение 1677118)
Content-Type: application/msword; filename="8ebda540cbcc4d7336496819a46a1b68.doc"

Цитата:

Сообщение от AlexGluker (Сообщение 1677118)
Content-Type: application/force-download; filename="b534ba68236ba543ae44b22bd110a1d6.doc"

Вы точно сниферили это на одном и том же скрипте???

Собственно, что касается самой проблемы, не хотел я с ослом возиться, все-таки пришлось... Если мы говорим о IE6, так посмотрите, он и doc-файл открывает точно также!
Вот файл реальный: http://ru.bir.ru/_temp/imho.ws/Headers/test.doc, вот он же через PHP - http://ru.bir.ru/_temp/imho.ws/Headers/test.php (исходник - http://ru.bir.ru/_temp/imho.ws/Headers/test.phps). Заметьте, та же Опера и Firefox понимает это все прекрасно.

Я думаю что IE6 (как минимум) придется просто выбросить... В принципе уже давно пора (особенно сейчас, когда такие монстры как youtube отказываются от его поддержки).

AlexGluker 04.10.2009 14:04

application/msword были по умолчанию для мозилы и оперы
application/force-download временно подставлял для осла, замена force-download на msword ничего не изменяет, в осле та же самая ошибка открытия файла

тогда есть еще вопрос - в 7-8 версии осла эту ошибку исправили? ставить восьмерку себе не имею желания :biggrin:, может ктото сталкивался с этим?

Hubbitus 04.10.2009 14:52

Цитата:

Сообщение от AlexGluker (Сообщение 1677315)
application/force-download временно подставлял для осла, замена force-download на msword ничего не изменяет, в осле та же самая ошибка открытия файла

Так нету никакой ошибки-то! Файл открывается нормально, он предлагает его сохранить. Открыть не предлагает, но сохраняет-то нормально вполне.

Цитата:

Сообщение от AlexGluker (Сообщение 1677315)
ставить восьмерку себе не имею желания

У меня не было желания вообще его ставить, любой, но приходится держать обоих под вайном...

BorLase 06.10.2009 16:53

AlexGluker, а может, у тебя просто с осликом что-то не так? какое-то расширение криво встало, или качалка не до конца удалилась...

пробовал с другой машины качнуть файл?

если выложил в инет - кинь ссылку на скрипт, попробуем качнуть

AlexGluker 07.10.2009 00:07

...
$handle = fopen($droot.'contracts\temp\\'.$fname.'.doc', 'x');
fwrite($handle,base64_decode(mysql_result($res,0,'ctext')));
fclose($handle);
header('Content-Type: application/msword');
header('Content-Disposition: attachment; filename="'.$fname.'.doc"');
readfile($droot.'contracts\temp\\'.$fname.'.doc');
unlink($droot.'contracts\temp\\'.$fname.'.doc');
...

сделал загрузку из файла напрямую - не открывает осел ((
но ведь это практически копия твоего примера

Hubbitus
да, твой пример работает, в локали тоже
но, небольшая просьба - можешь смоделировать мой случай? через window.open открой новое окно, а там загрузи документ

BorLase
чуть позже сваяю тестовую страницу на своем домене, затестим

добавлено через 7 минут
ob_start();
header('Content-Type: application/msword');
header('Content-Disposition: attachment; filename="'.$fname.'.doc"');
readfile($droot.'contracts\temp\\'.$fname.'.doc');
ob_end_flush();

добавил буфер - без изменений

BorLase 07.10.2009 11:49

Цитата:

Сообщение от AlexGluker (Сообщение 1677709)
BorLase
чуть позже сваяю тестовую страницу на своем домене, затестим

я думаю, это мало чем поможет; ИМХО, 99% что проблема в IE на твоей машине. попробуй переустановить или почистить адд-оны какой-нибудь тулзой

твой последний пример в виде
PHP код:

<?
ob_start
();
header('Content-Type: application/msword');
header('Content-Disposition: attachment; filename="test.doc"');
readfile('test.doc');
ob_end_flush();
?>

отработал в xampp у меня на отлично.

добавлено через 48 минут
PS: кстати, о птичках - у тебя $droot, случайно, не абсолютный путь содержит?

потому как замена readfile('test.doc'); на readfile('/test.doc'); выдала file not found:
PHP код:

<br />
<
b>Warning</b>:  readfile(/test.doc) [<a href='function.readfile'>function.readfile</a>]: 
failed to open streamNo such file or directory in <b>D:xampphtdocsload.php</bon line <b>5</b><br /> 


Hubbitus 07.10.2009 16:03

Цитата:

Сообщение от AlexGluker (Сообщение 1677709)
добавил буфер - без изменений

А для чего добавил?? И каких изменений стоило ждать?


Цитата:

Сообщение от AlexGluker (Сообщение 1677709)
Hubbitus
да, твой пример работает, в локали тоже
но, небольшая просьба - можешь смоделировать мой случай? через window.open открой новое окно, а там загрузи документ

Ну я и говорю работает, отчего нет-то.

Могу конечно. А при чем здесь уже клиентский JavaScript???
http://ru.bir.ru/_temp/imho.ws/Headers/test.htm

AlexGluker 09.10.2009 15:01

BorLase
да, в $droot полный путь, который взят из рабочего скрипта, дык опять же, мозила открывает без проблем

Hubbitus
для чего добавил? танцы с бубном

пример Hubbitus на моем осле работает, следовательно трабл гдето в моем скрипте, всем спасибо, ушел копать инет


Часовой пояс GMT +4, время: 01:19.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.