Как решить ошибку отправки писем? session_start() и Cannot modify header information [дубликат]

239
11 августа 2018, 08:30

На данный вопрос уже ответили:

  • Cannot modify header information - headers already sent by 3 ответа
  • Ошибка в session_start(): Cannot send session cache limiter 5 ответов

В чем может быть проблема?

Предвидя гневные отзывы и отправка бесполезных для меня ссылок с поисковиков, отвечаю: да я плохо разбираюсь в php, да я уже перерыл все ответы в поиске и на форумах.

Письма доходят, но идет редирект на белую страницу с ошибкой:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /site.ru/request.php:1) in /site.ru/request.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /site.ru/request.php:1) in /site.ru/request.php on line 84

А именно на

session_start();

и

header('location: ' . $_SERVER['HTTP_REFERER']);

Полный код php:

<?php
session_start();
$mail_to = 'mail@yandex.ru';
if(isset($_POST['send_req']))
{
    $sub = 'Новая заявка - Запрос на услуги';
}
if(isset($sub))
{
    $error = '';
    if(isset($_POST['name']))
    {
        $name = $_POST['name'];
        $n = 'Имя: ' . $name;
        if(strlen($name) == 0)
        {
            $error = 'Введите имя';
        }
    }
    if(isset($_POST['phone']))
    {
        $phone = $_POST['phone'];
        $p = 'Телефон: ' . $phone;
        if(strlen($phone) == 0)
        {
            $error = 'Введите ваш телефон';
        }
    }
    if(isset($_POST['email']))
    {
        $email = $_POST['email'];
        $e = 'Email: ' . $email;
        if (strlen($email) == 0)
        {
            $error = 'Введите ваш email';
        }
    } else
    {
        $email = 'no-reply@gmail.com';
    }
    if(isset($_POST['message']))
    {
        $message = $_POST['message'];
        $m = 'Сообщение: ' . $message;
        if (strlen($message) == 0)
        {
            $error = 'Введите ваш вопрос';
        }
    }
    if(strlen($error) == '')
    {
        $to      = $mail_to;
        $subject = $sub;
        $message = 'Тема: ' . $sub . "\r\n" .
            $n . "\r\n" .
            $p . "\r\n" .
            $e . "\r\n" .
            $m . "\r\n" ."\r\n" .
            $headers = 'From: ' . $email . "\r\n" .
                'Reply-To: ' . $email . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
        mail($to, $subject, $message, $headers);
        $_SESSION['success'] = 1;
        header('location: ' . $_SERVER['HTTP_REFERER']);
    }
}

Выяснил, что проблема может быть в кодировке и в неверном порядке отправки header. Какой должен быть порядок? Спасибо всем ответившим!

Answer 1

РЕШЕНИЕ! Можете не спрашивать о такой ошибке, проще самому найти решение. Вас только завалят ссылками, которые породят еще кучу вопросов.

Решение довольно простое. Берете Notepad++ и каждый файл преобразуете в UTF-8 без BOM и сохраняете

READ ALSO
Не видит класс/файл в Symfony 4

Не видит класс/файл в Symfony 4

Уверена зная PHP стал изучать framework symfony 4Начал с простенькой формы

231
Как в Laravel показать в view, image из local storage?

Как в Laravel показать в view, image из local storage?

Есть jpeg в local storage файле storage/app/MyFyle/1jpg

243
DepDrop поиск по списку

DepDrop поиск по списку

Использую DepDrop от katrikВот мой код:

253
Ошибка при старте проекта используя symfony 4 Exceptions : No route found for &ldquo;GET /&rdquo;

Ошибка при старте проекта используя symfony 4 Exceptions : No route found for “GET /”

Изучая framework symfony 4 столкнулся с проблемойНа старте после настройки и запуска server:run встречаю стандартное окно запуска symfony 4

251