Ошибка заголовка headers ()

Alexeina66

Мой дом здесь!
Регистрация
26 Авг 2013
Сообщения
415
Реакции
436
Всем привет!

Прошу помощи разобраться. Есть форма обратной связи на php...в кодировке utf-8. Кодировка на сервере - UTF-8. Php-код формы идет до html, пробелов никаких нет.

При отправки формы должно появится информационный блок однако появляется надпись:

Warning: Cannot modify header information - headers already sent by (output started at /hosting/users/h3016030/www/alyansural.ru/viezd.php:1) in/hosting/users/h3016030/www/alyansural.ru/viezd.php on line 79

При это, если преобразую форму в кодировку в utf-8 без BOM, то крякозябры в форме, а в информационном блоке все ОК....((( :alko:
PHP:
<?php
   function ValidateEmail($EMAIL)
   {
      $PATTERN = '/^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i';
      return preg_match($PATTERN, $EMAIL);
   }
   if ($_SERVER['REQUEST_METHOD'] == 'POST')
   {
      $MAILTO = 'ms@yandex.ru';
      $MAILFROM = isset($_POST['email']) ? $_POST['email'] : $MAILTO;
      $SUBJECT = 'Письмо с Вашего сайта';
      $MESSAGE = 'Поля с формы ВЫЕЗДНОЙ РЕМОНТ:';
      $SUCCESS_URL = './prinat.php';
      $ERROR_URL = '';
      $ERROR = '';
      $EOL = "\n";
      $MAX_FILESIZE = isset($_POST['filesize']) ? $_POST['filesize'] * 1024 : 1024000;
      $BOUNDARY = md5(uniqid(time()));
      $HEADER  = 'From: '.$MAILFROM.$EOL;
      $HEADER .= 'Reply-To: '.$MAILFROM.$EOL;
      $HEADER .= 'MIME-Version: 1.0'.$EOL;
      $HEADER .= 'Content-Type: multipart/mixed; boundary="'.$BOUNDARY.'"'.$EOL;
      $HEADER .= 'X-Mailer: PHP v'.phpversion().$EOL;
      if (!ValidateEmail($MAILFROM))
      {
         $ERROR .= "The specified email address is invalid!\n<br>";
      }
      if (!empty($ERROR))
      {
         $ERRORCODE = file_get_contents($ERROR_URL);
         $REPLACE = "##error##";
         $ERRORCODE = str_replace($REPLACE, $ERROR, $ERRORCODE);
         echo $ERRORCODE;
         exit;
      }
      $INTERNALFIELDS = array ("submit", "reset", "send", "captcha_code");
      $MESSAGE .= $EOL;
      $MESSAGE .= "IP Address : ";
      $MESSAGE .= $_SERVER['REMOTE_ADDR'];
      $MESSAGE .= $EOL;
      foreach ($_POST as $KEY => $VALUE)
      {
         if (!in_array(strtolower($KEY), $INTERNALFIELDS))
         {
            if (!is_array($VALUE))
            {
               $MESSAGE .= ucwords(str_replace("_", " ", $KEY)) . " : " . $VALUE . $EOL;
            }
            else
            {
               $MESSAGE .= ucwords(str_replace("_", " ", $KEY)) . " : " . implode(",", $VALUE) . $EOL;
            }
         }
      }
      $BODY  = 'This is a multi-part message in MIME format.'.$EOL.$EOL;
      $BODY .= '--'.$BOUNDARY.$EOL;
      $BODY .= 'Content-Type: text/plain; charset=utf-8'.$EOL;
      $BODY .= 'Content-Transfer-Encoding: 8bit'.$EOL;
      $BODY .= $EOL.stripslashes($MESSAGE).$EOL;
      if (!empty($_FILES))
      {
          foreach ($_FILES as $KEY => $VALUE)
          {
             if ($_FILES[$KEY]['error'] == 0 && $_FILES[$KEY]['size'] <= $MAX_FILESIZE)
             {
                $BODY .= '--'.$BOUNDARY.$EOL;
                $BODY .= 'Content-Type: '.$_FILES[$KEY]['type'].'; name='.$_FILES[$KEY]['name'].$EOL;
                $BODY .= 'Content-Transfer-Encoding: base64'.$EOL;
                $BODY .= 'Content-Disposition: attachment; filename='.$_FILES[$KEY]['name'].$EOL;
                $BODY .= $EOL.chunk_split(base64_encode(file_get_contents($_FILES[$KEY]['tmp_name']))).$EOL;
             }
         }
      }
      $BODY .= '--'.$BOUNDARY.'--'.$EOL;
      if ($MAILTO != '')
      {
         mail($MAILTO, $SUBJECT, $BODY, $HEADER);
      }
      header('Location:'.$SUCCESS_URL);
      exit;
   }
?>
 
Последнее редактирование:
Сессия используется?
Код:
<?php
ob_start();
session_start();
?>
<!DOCTYPE....
 
Когда у вас файл в кодировки utf-8 в начала файла подставляется пару служебных символов из-за этого и получается данная ошибка при использовании session_start() и header()
Что бы не было ошибки используй utf-8 без BOM. Ну в что же касается кракозябр, то как минимум можно попробовать

header ('Content-Type: text/html; charset=utf-8');

или в htaccess
AddDefaultCharset UTF-8
 
Нет сессия не используется...Мои мысли все таки..сервак...тупой...

Когда у вас файл в кодировки utf-8 в начала файла подставляется пару служебных символов из-за этого и получается данная ошибка при использовании session_start() и header()
Что бы не было ошибки используй utf-8 без BOM. Ну в что же касается кракозябр, то как минимум можно попробовать

header ('Content-Type: text/html; charset=utf-8');

или в htaccess
AddDefaultCharset UTF-8

Я же написал что крякозябры после перевода из utf-8 в БЕЗ BOM!!!
 
Последнее редактирование модератором:
Назад
Сверху