За последние 24 часа нас посетили 22549 программистов и 1277 роботов. Сейчас ищут 855 программистов ...

Warning: Cannot modify header information - headers already sent by

Тема в разделе "PHP для новичков", создана пользователем ДмитрийНск, 18 май 2016.

Метки:
  1. ДмитрийНск

    ДмитрийНск Новичок

    С нами с:
    17 май 2016
    Сообщения:
    16
    Симпатии:
    1
    И снова здравствуйте. По совету человека с этого форума принялся за изучение метода отправки почты через PHPMailer и столкнулся со следующей проблемой. При запуске feedback.php в браузере пишет: Warning: Cannot modify header information - headers already sent by ...
    Изучил мануал по адресу http://cannot-modify-header-information.ru, но так и не нашёл корня проблемы. Может кто подскажет?
    Используемое ПО - комплекс Denwer, PHPMailer. Локальный сервер.

    Код (Text):
    1. <?php
    2. Header("Content-Type: text/html; charset=windows-1251");
    3. ?>
    4. <html>
    5. <head>
    6. <title>Отправка писем через PHPMailer</title>
    7. </head>
    8. <body>
    9.  
    10. <?php
    11.  
    12. date_default_timezone_set('Europe/Moscow');
    13. require_once "lib/PHPMailerAutoload.php ";
    14.  
    15. $mail = new PHPMailer;
    16.  
    17. $mail->IsSMTP();
    18. $mail->Host        = "smtp.gmail.com";
    19. $mail->SMTPAuth    = true;
    20. $mail->SMTPSecure    = "ssl";
    21. $mail->Port        = 465;
    22. $mail->CharSet        = 'UTF-8';
    23.  
    24. $body = file_get_contents('feedback.html');
    25. $mail->Username    = " ";
    26. $mail->Password    = " ";
    27. $mail->SetFrom(' ', 'Дмитрий');
    28. $mail->Subject        = "Отправка письма с GMAIL";
    29. $mail->MsgHTML($body);
    30. $address = " ";
    31. $mail->AddAddress ($address, "Дмитрию");
    32.  
    33. $mail->AddAttachment("files/maket.jpg");
    34.  
    35. if($mail->Send() ) {
    36.     echo 'Ваше письмо успешно отправлено';
    37. }else{
    38.     echo "Что-то пошло не так, письмо не отправлено";
    39. }
    40. ?>
    41.  
    42. </body>
    43. </html>
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    в сообщении явно указывается место - файл и линия - в котором закончился поток заголовков и начался поток тела. для начала изучить это место.
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    ты затёр ответ на свой вопрос, там точно указываются строки, как уже тебе сообщили выше.
     
  4. ДмитрийНск

    ДмитрийНск Новичок

    С нами с:
    17 май 2016
    Сообщения:
    16
    Симпатии:
    1
    Пардон, тупанул. Вот сообщение целиком:
    Код (Text):
    1. Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\feedback.php:1) in Z:\home\test1.ru\www\feedback.php on line 2
    2. Что-то пошло не так, письмо не отправлено
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @ДмитрийНск возможно кодировка UTF-8 с BOM, можно в hex редакторе посмотреть на файл feedback.php нет ли до <?php данных.

    output started at Z:\home\test1.ru\www\feedback.php:1
    Это значит что в файле feedback.php на первой строке произошёл вывод, а после него нельзя отправлять заголовки.

    Denwer старый, бери хостинг с PHP7 и SSH, можно Denwer заменить на open-server.ru, но лучше virtualbox + turnkeylinux.
     
  6. ДмитрийНск

    ДмитрийНск Новичок

    С нами с:
    17 май 2016
    Сообщения:
    16
    Симпатии:
    1
    Денвер скачан недавно самая последняя версия с сайта производителя. PHP в нём 5.3.13. И хостинга пока никакого нет - всё делаю внутри локального сервера на собственном компе.
    Да видел такой вариант про пробел или лишнюю строку перед началом команды, но в блокноте проверял, точно нет там никаких пробелов и строк. Причём это лишь один из возможных вариантов проблемы, описанный, как уже писал выше, по ссылке: http://cannot-modify-header-information.ru
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    HEX редактор - это не блокнот

    Очень старая версия с возможными глюками, только мучат себя.
    open-server.ru там есть PHP 5.6 и 7. Они сейчас актуальные.
     
  8. ДмитрийНск

    ДмитрийНск Новичок

    С нами с:
    17 май 2016
    Сообщения:
    16
    Симпатии:
    1
    Действительно хекс-редактор обнаружил там лишние символы. Я их затёр и сохранил в файл feedback2.php. После этого вместо той ошибки началась проблема с кодировкой, как показано на скрине. Пересохраняя данный файл через блокнот в кодировку UTF-8 эффекта не последовало.

    А с этого open-server'а можно сдёрнуть лишь PHP - перекинуть её вместо Денверовского или всё-таки придётся целиком менять Денвер на Open-Server?
     

    Вложения:

    • feedback.jpg
      feedback.jpg
      Размер файла:
      153,2 КБ
      Просмотров:
      1
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Ну поставь двигатель от лады в трактор. Так что можно. Но стоит ли это столько сил? Легче установить всё по отдельности. Но эти сборки и хостиги специально сделаны для экономии времени. Хотя если ты хочешь научится делать сайты, то ты должен разбираться как всё взаимодействует. Обычно это рассказывают в книгах для начинающих по PHP.

    Нужно конвертировать. Возможно там был UTF-8 с BOM, ты с помощью header сообщаешь что у тебя кодировка windows-1251, значит нужно конвертировать из UTF-8 BOM в Windows-1251.
     
  10. ДмитрийНск

    ДмитрийНск Новичок

    С нами с:
    17 май 2016
    Сообщения:
    16
    Симпатии:
    1
    В блокноте Windows 10 есть доп. опция BOM, я её не ставил. Нашёл причину - в файле feedback.php с каких-то бананов оказалась прописана кодировка Windows-1251, хотя я точно помню, что изначально писал UTF-8. В общем сменил и проблема решена. Теперь просто при открытии http://test1.ru/feedback2.php получаю сообщение "Что-то пошло не так, письмо не отправлено".
    Причём даже практически случайно наткнулся, как в учётке GMAIL активировать функцию IMAP, активировал.
    Теперь возникает вопрос - как быть дальше - есть где-то логи, почему письмо не отправляется или ждать 2 часа, пока скачается Open-server? (где тут хохочущий во всё горло смайлик?) :))))
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    ага, читай https://github.com/PHPMailer/PHPMailer если что можно сразу смотреть A Simple Example