Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ошибка при вызове функции header

Сообщения:  [1-10]   [11-13] 

 
 автор: tihonko   (06.04.2010 в 15:45)   письмо автору
 
   для: Trianon   (06.04.2010 в 13:19)
 

Перечитал мануал:
http://www.php.net/manual/en/function.ob-start.php

Но там в описании функции сказано лишь то, что у нее есть второй необязательный параметр $chunk_size и если он принимает значение по умолчанию(0), то вывод будет отправлен только в конце работы скрипта. Отдельной директивы chunk_size в php.ini тоже не нашел.

Скажите пожалуйста, какой величиной ограничен размер буфера и как ее регулировать?

  Ответить  
 
 автор: Trianon   (06.04.2010 в 13:19)   письмо автору
 
   для: tihonko   (06.04.2010 в 08:57)
 

>Нужно вывод перед отправкой сложить в буфер.
>Тогда будет неважно в какой последовательности у вас в коде фигурируют заголовки и вывод - PHP все равно ничего не отправит до того момента, пока не исполнит весь скрипт.

Это, мягко говоря, несовсем так.
Размер буфера ограничен.

  Ответить  
 
 автор: alexey_tihonenko   (06.04.2010 в 09:23)   письмо автору
 
   для: gvidon   (06.04.2010 в 09:04)
 

Пожалуйста!

  Ответить  
 
 автор: gvidon   (06.04.2010 в 09:04)   письмо автору
 
   для: tihonko   (06.04.2010 в 08:57)
 

Огромное СПАСИБО tihonko !!!! .
Я включил буферизацию и все заработало :)
Временно буду использовать буфферизацию но немного позже подумаю о переделке скрипта .

  Ответить  
 
 автор: tihonko   (06.04.2010 в 08:57)   письмо автору
 
   для: gvidon   (06.04.2010 в 07:18)
 

В php.ini есть специальная директика - output_buffering. Ее значение по умолчанию - 0. Это говорит о том, что весь вывод сразу направляется клиенту, как только он прочитывается в скрипте. В этом случаи вы не можете отправить HTTP-заголовки после того как уже началась передача тела HTTP-документа.

Если не хотите переписывать код, то можно выйти из этой ситуации следующий способом:
Нужно вывод перед отправкой сложить в буфер. Тогда будет неважно в какой последовательности у вас в коде фигурируют заголовки и вывод - PHP все равно ничего не отправит до того момента, пока не исполнит весь скрипт.

Активировать буферизацию вывода можно следующими путями:
1. Изменить значение директивы output_buffering на on
2. Активировать буферизацию вывода в самом php - скрипте с помощью функции ob_start()

Первый вариант вам подойдет только в том случаи, если вы можете изменять файл php.ini.
Если такой возможности нет и вы решите использовать второй вариант, то в самом начале скрипта разместите следующий код:
<?php 
  ob_start
();
?>
<html>
<head>
<title></title>
</head>
<body>
..................
..................


P.S. пока печатал ответ, тоже самое уже сказали))

  Ответить  
 
 автор: sim5   (06.04.2010 в 08:56)   письмо автору
 
   для: gvidon   (06.04.2010 в 08:48)
 

Если вы решили писать на РНР, то читайте мануал, учебники. Не изучите вы его никогда, задавая лишь вопросы.
Решить вашу проблему можно двумя способами - первый буферизация вывода (читайте в мануале, что это такое, в первую очередь, а уж потом вопросы), и второй, это переписать свой скрипт так, чтобы отправление заголовка было до любого вывода в браузер. Это сделать не трудно в вашем коде, вот тут можно не заглядывать в мануал, а лишь немного подумать. Попробуйте сперва сами это сделать, а если не получится, тогда с вопросом...

  Ответить  
 
 автор: gvidon   (06.04.2010 в 08:48)   письмо автору
 
   для: sim5   (06.04.2010 в 08:29)
 

а каким образом можно перенаправить на другую страницу тогда ?

  Ответить  
 
 автор: sim5   (06.04.2010 в 08:29)   письмо автору
 
   для: gvidon   (06.04.2010 в 07:59)
 

Зачем мне жать на вашу кнопку? Такого быть не может.
<?
<?
//не реагируем на ошибки
error_reporting(~E_ALL);
//и отключаем их вывод
ini_set("display_errors""off");
?>
<form action=""><input type="submit" name="sender" value="GO"></form>
<?
//а перехода все равно не будет
if(isset($_GET['sender'])) header('location: test.php');
?>

А теперь две первыых строки кода пропишите так:
error_reporting(E_ALL);
ini_set("display_errors", "on");
Запустите, что получите?

Читайте мануал и пишите не так как вам хочется, а как требуется.

  Ответить  
 
 автор: gvidon   (06.04.2010 в 07:59)   письмо автору
 
   для: sim5   (06.04.2010 в 07:55)
 

А если вывод ошибки подавлен то почему все таки директива сработала и у меня открылась следующая страница ??? если не тяжело нажмите на кнопку ок .

  Ответить  
 
 автор: sim5   (06.04.2010 в 07:55)   письмо автору
 
   для: gvidon   (06.04.2010 в 07:50)
 

Вот только не надо о том, что заработало. У вас не заработало (перехода не произойдет), а просто подавлен вывод ошибок на другом сервере. Читайте мануал и исправляйте свой скрипт.

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования