Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576

Манипуляции с заголовками

21.09.2010, 17:15. Показов 5816. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
мне нужно выдать файл и отобразить страницу. Вывожу в самом начале документа header который выдаёт файл
PHP
1
2
3
4
header ('HTTP/1.1 200 OK');
header ('Content-Type: application/octet-stream;');
header('Content-Disposition: attachment; filename=1.txt;');
readfile('1.txt');
Файл выдаётся, но всё содержимое штмл страницы выдаётся в броузер как текст со всеми тегами. Добавляю в конец приведённого примера такой заголовок
PHP
1
2
header ('HTTP/1.1 200 OK');
header ('Content-Type: text/html;');
Файл выдаётся на загрузку, весь штмл следующие ниже - тоже отобразился нормально, но в файл, который выдаётся на загрузку, дописывается всё, что идёт после последних добавленых двух строк заголовка, дописывается в виде текста с тегами, тоесть файл по сути ломается.
Подскажите как вывести заголовок на выдачу файла так, чтобы после выдачи нормально отобразился весь штмл на странице и в выдаваемый файл ничего не писалось?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2010, 17:15
Ответы с готовыми решениями:

Не могу разобраться с заголовками
Здравствуйте, дорогие друзья! Полдня вчера просидел, помогите разобраться, пожалуйста. Выдается вот такая ошибка: . Вот сам...

заголовками уже отправлены, да я читай гайд
Подскажите пожалуйста, имеется файл index.php, в котором содержится html код, соответственно заголовки уже отправлены, я пилю авторизацию...

Задание на работу с COOKIE и HTTP-заголовками
Задание 3. Составьте сценарий, работающий с cookies и http-заголовками. Сценарий должен проверять, установлена ли переменная cookies?...

35
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
22.09.2010, 06:59
Я вот вставил только такую строку:
header('location: gb.txt');
И все нормально - вывелось содержимое файла gb.txt без всяуих искажений.
Другой вариант - загонять построчно файл в переменную и потом
echo для этой переменной. Тогда и все теги будут нормально восприниматься.
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
22.09.2010, 07:27
И еще, а почему не сделать просто:
создаешь нужную страницу со всеми необходимыми элементами и в ней
require '1.txt';
И просто, и все теги нормально обработаются...
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
22.09.2010, 11:02  [ТС]
Ты не много не понял вопрос!
Вопрос по сути вот в чём - как прервать выполнение одного заголовка и дать понять , что уже пошёл следующий.
Сейчас, когда я посылаю хедер
PHP
1
2
3
4
header ('HTTP/1.1 200 OK');
header ('Content-Type: application/octet-stream;');
header('Content-Disposition: attachment; filename=1.txt;');
readfile('1.txt');
Весь штмл идущий после заголовка попадает в поток выдающий файл на загрузку. Надеюсь теперь стало более понятно!
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
22.09.2010, 13:34
Да, теперь понял. Попробовал... действительно в файл 1.тхт пишется весь штмл после хеадера...
Наверное тут придется делать отдельный пхп для каждой загрузки и строка readfile должна быть последней. Загружаемый файл передавать в этот пхп в качестве параметра. Иначе никак не выйдет.
Что-нибудь типа:
PHP
1
2
3
4
5
6
7
8
9
10
11
<?
if (isset($_GET['myfile'])){
 $file = $_GET['myfile'];
}else{
exit;
}
header ('HTTP/1.1 200 OK');
header ('Content-Type: application/octet-stream;');
header('Content-Disposition: attachment; filename=$file;');
readfile($file);
?>
0
evge
22.09.2010, 16:00
Насколько я понял, с одного клика нужно выдать новую страницу и файл на загрузку.
Выдай просто нвую страницу, а в ней допиши:
top.window.location.href='download.php'.
В download.php укажи заголовки и выдай нужный файл.
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
22.09.2010, 16:07  [ТС]
Я, так понял, есть предложение делать загрузку в отдельном окне!
Тогда возникает другая задача - Как отследить конец загрузки файла чтобы закрыть окно выдающее файл?
0
evge
22.09.2010, 20:10
Отдельного окна не будет, если правильно заголовки поставиш:
PHP
1
2
3
4
5
<?//download.php
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename=$fname1');
@readfile($fname2);
?>
Будет стандартное оконо поп-ап для загрузки файла $fname1
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
23.09.2010, 13:53  [ТС]
все то же самое, вставь после своего кода штмл, и попробуй таким образом выдать текстовый файл, весь штмл запишется в конец файла!
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
23.09.2010, 14:41
У меня нормально получается, ничего в конец файла не пишется. Вот например файл с штмл
[code]
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!doctype html public '-//w3c//dtd html 4.0 transitional//en'>
<html>
<head>
<title> New Document </title>
<meta http-equiv='content-type' content='text/html; charset=1251'>
<meta http-equiv='content-language' content='ru'>
</head>
<body>
Привет!!!
 
 
<?
$ip=$REMOTE_ADDR;
echo $ip;
?>
<script language='JavaScript'><!--
top.window.location.href='download.php?myfile=1.txt'
//--></script>
</body>
</html>
А вот файл загрузки...
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if (isset($_GET['myfile'])){
 $file = $_GET['myfile'];
}else{
exit;
}
header ('HTTP/1.1 200 OK');
header ('Content-Type:  application/force-download;
');
header('Content-Disposition: attachment; filename=$file;
');
readfile($file);
?>
Правда Эксплорер после закрытия ошибку выдает и пытается отправить репорт в Майкрософт
0
evge
23.09.2010, 16:52
После моего кода ничего вставлять не надо. HTML идет отдельно.
AlexKar все правильно понял. только зачем
header ('HTTP/1.1 200 OK');
это лишнее.
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
23.09.2010, 21:50  [ТС]
Народ, ну не тупите!
Одному говорю пятый раз, что всё в одном окне, второй не может сам попробовать своим методом получить текстовый файл и поглядеть, что весь штмл идущий после заголовков - записался в конец загруженного файла!
0
evge
23.09.2010, 22:31
Да ты сам тормозиш. Попробуй код который AlexKar написал.
Где ты там другое окно увидел?
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
23.09.2010, 23:29  [ТС]
>>А вот файл загрузки...

найди эту строку в его мессейдже, там начинается файл выдающий файл на загрузку.
Еси всё это вставить в один документ, и попытаться загрузить текстовый файл, то весь штмл запишется в конец получаемого файла!
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
26.09.2010, 06:49
sl_play, ты не прав, вот посмотри:
Файл index.php
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<title> New Document </title>
<meta http-equiv='content-type' content='text/html; charset=1251'>
<meta http-equiv='content-language' content='ru'>
</head>
<body>
Здесь сколько угодно штмл 
и он не будет добавляться в загружаемый файл
И никакие новые окна не будут появляться
<script language='JavaScript'><!--
top.window.location.href='download.php?myfile=1.txt'
//--></script>
</body>
</html>
Файл download.php
PHP
1
2
3
4
5
6
7
8
9
10
<?
if (isset($_GET['myfile'])){
 $file = $_GET['myfile'];
}else{
exit;
}
header ('Content-Type:  application/force-download;');
header('Content-Disposition: attachment; filename=$file;');
readfile($file);
?>
Создай эти 2 файла, положи рядом файл 1.txt и просто запусти index.php
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
26.09.2010, 10:24  [ТС]
Алекс, не надо со мной говорить как с человеком, который вчера начал учить пхп. Подобных примеров я продумал десять штук, до того как они тебе пришли в голову. И вот что надумал - никто так толком и не понял, почему я всё хотел сделать в одном документе! Когда вы открываете ещё одно окно для выдачи файла, это окно остаётся открытым безразлично - загрузил клиент файл или ещё нет, тоесть, мы заставляем клиента сделать одно лишнее действие - закрыть вручную окно. Если мы пошли по варианту двух окон, давайте тогда придумаем как программно закрыть окно после загрузки файла.
Ну теперь-то стало понятно, почему всё в одном окне?
Думаю нужно немного с заголовками покопаться и можно будет делать изначально как я писал - в одном окне!
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
26.09.2010, 12:13
sl_play, извини, не хотел тебя обидеть, тем более, что ты и сам мне многое подсказывал.
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
27.09.2010, 14:13  [ТС]
Народ, ну помогите с заголовками, что это за глюк такой?
Почему если таким макаром выдаёшь файл весь штмл, что после заголовка, записывается в файл?
Я так подразумеваю, что неправильно выставлены заголовки или чего-то не хватает, помогите советом!!!
0
evge
27.09.2010, 15:50
'не надо со мной говорить как с человеком, который вчера начал учить пхп'
Великолепная фраза!
Рекомендуется использовать в качестве:
1.веского аргумента в дебатах.
2.магического заклинания над неработающей программой.
3.ежедневного аутотренинга.
Шутю... :=)
Код свой покажи, мы тоже попробуем.
0 / 0 / 1
Регистрация: 21.06.2010
Сообщений: 201
27.09.2010, 17:21
sl_play, два ответа в один -- не помещаются. Ну так принято.. статус-заголовки-црлф-тело.
Второе окно тебе никто открывать не предлагает -- где ты его закрывать собираешься?
Кстати, пхп тут совсем не при чем. Если ты делаешь что-то сложнее стандартной странички -- подучи заодно и стандарты, многие вопросы сразу же исчезнут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.09.2010, 17:21
Помогаю со студенческими работами здесь

Парсинг json с разными заголовками элементов
всем привет. имеем такой джисон: {&quot;full_count&quot;:11857,&quot;version&quot;:4, &quot;1cc75834&quot;:, &quot;1cc70e0f&quot;:, &quot;1cc75211&quot;:, &quot;1cc752a3&quot;:, ...

создание таблицы php циклом с заголовками столбцов?
&lt;? $i=1; while ($row = mysql_fetch_array($res)) { echo &quot;&lt;table border='1' width='60%'&gt;&lt;tr width='50%'&gt;&lt;td...

Манипуляции с массивом
Нужна помощь, суть такая я читаю левый xml файл на другом сервере, вот так: $xml = simplexml_load_file(ssil); В этом .xml файле...

Реализовать код для манипуляции со строкой
Написать код, который удаляет первое вхождение w в строке s, перемещая строку влево и добавляя пробел в конец строки. &lt;?php ...

Почему ajax не выдает результата, если делаю манипуляции с массивом
Идете ajax-запрос, если просто отдаю массив while($arRes = $dbRes-&gt;Fetch()) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru