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

Тема в разделе "Как сделать...", создана пользователем Alexeina66, 15 май 2014.

  1. Alexeina66

    Alexeina66

    Регистр.:
    26 авг 2013
    Сообщения:
    292
    Симпатии:
    224
    Всем привет!

    Прошу помощи разобраться. Есть форма обратной связи на 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'] == && $_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;
       }
    ?>
     
    Последнее редактирование: 15 май 2014
  2. 01K

    01K

    Регистр.:
    27 июн 2013
    Сообщения:
    271
    Симпатии:
    40
    Сессия используется?
    Код:
    <?php
    ob_start();
    session_start();
    ?>
    <!DOCTYPE....
     
  3. ev-goo

    ev-goo Создатель

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

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

    или в htaccess
    AddDefaultCharset UTF-8
     
  4. Alexeina66

    Alexeina66

    Регистр.:
    26 авг 2013
    Сообщения:
    292
    Симпатии:
    224
    Нет сессия не используется...Мои мысли все таки..сервак...тупой...

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