dAnIK SeNT » Вс сен 14, 2008 12:57 pm
Piloan,
Если бы ты не был зарегистрирован аж в 2003 году, я бы решил, что ты тролль и решил поглумиться. Однако, буду исходить из того, что ты просто не в полной мере понимаешь, что такое php, html, txt, doc, xls и чем всё это отличается друг от друга.
php - это серверный язык программирования. Результатом работы php-скрипта должен являться корректный html-файл, который передаётся браузеру.
Команда include включает внешний файл в результат вывода.
Очевидно, что когда ты включаешь в каком-то месте своего скрипта текстовый файл, его содержимое более или менее корректно интерпретируется браузером, т.к. html по своей сути - просто текстовый файл с небольшими дополнениями в виде тагов.
А теперь посмотри по F3 на содержимое файлов xls, или doc. Или открой их в Notepad'е. Как по-твоему, это похоже на валидный HTML? С какого перепугу твой браузер должен всё это нормально отображать? Ведь include - исключительно неинтеллектуальная команда, она просто берёт содержимое файла и передаёт его твоему браузеру.
Ещё раз: задача php-скрипта - выдать браузеру корректный html. Ты можешь в качестве исходника брать всё, что угодно - xls, doc, pdf, чёрта лысого, но ты обязан преобразовать всё это в HTML (я слышал, что есть соответствующие библиотеки для php). Либо можно использовать ActiveX/Java-объект, умеющий парсить и отображать содержимое таких файлов, но php тут ни при чём, делается это на голом html с использованием тага <object>.
Есть ещё вариант - если твой браузер умеет сам отображать xls/doc файлы (т.е., если в нём установлен соответствующий плагин; такое есть, к примеру, в составе Microsoft Office). Проверить просто - попробуй на своём локальном компе открыть xls-файл с помощью Internet Explorer. Если откроется, то всё, что тебе надо сделать, это:
1. послать корректные HTML-заголовки вместо стандартных с помощью команды header()
2. заслать далее в поток файл чем-то типа readfile() или fpassthru()
Пример кода, отправляющий gzip-файл (для DOC/XLS придётся изменить Content-Type на что-то типа Application/MSWord, или как там оно называется):
<!--quoteo--><div class='quotetop'>Цитата</div><div class='quotemain'><!--quotec-->$fn = 'myfile.gz';
$fp = fopen($fn, "r");
header('Expires: ' . $conf['now']); // rfc2616 - Section 14.21
header('Last-Modified: ' . $conf['now']);
header('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
header("Content-Type: application/x-gzip");
header("Content-Length: " . filesize($fn));
header("Content-Disposition: attachment; filename=\"backup-".date('Ymd-His').".gz\"");
fpassthru($fp);
fclose($fp);<!--QuoteEnd--></div><!--QuoteEEnd-->
Очень важно, чтобы ни до, ни после подобного кода твой скрипт не выводил ни одной строчки текста!
Минус данного подхода - работать он будет только у тебя и у тех несчастных, которые открывают твой сайт Internet Explorer'ом с установленным MSOffice-плагином. У всех остальных просто откроется окошко с предложением сохранить файл на диск.
Последний раз редактировалось
dAnIK SeNT Вс сен 14, 2008 12:59 pm, всего редактировалось 1 раз.
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->