0

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

Предвидя гневные отзывы и отправка бесполезных для меня ссылок с поисковиков, отвечаю: да я плохо разбираюсь в 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. Какой должен быть порядок? Спасибо всем ответившим!

VanilJS
  • 347
  • 2
    у вас вторая ошибка, когда не работет header-location вызвана выводом на экран ошибки про сессию. Решите первую, уйдет и вторая само собой. – teran Jun 29 '18 at 13:53
  • из той же оперы https://ru.stackoverflow.com/a/134326/223826 – teran Jun 29 '18 at 13:58
  • Пересохраните без BOM 2) если не поможет, у вас есть auto_prepend_file?
  • – Total Pusher Jun 29 '18 at 14:01
  • strlen($error) == '' //_- – u_mulder Jun 29 '18 at 14:17
  • @teran так себе дубликат нашли. Их ещё дофига, вот это вроде более классический: https://ru.stackoverflow.com/q/284578/213987 – A K Jun 29 '18 at 14:39
  • @AK честно сказать, искал по сообщению об ошибке. но ставлю на BOM, так как все равно ошибка в приведеной файле на второй строке, ругается на вывод в том же файле в 1й строке. поскольку никакого другого вывода там нет - то дело в BOM. Ваши же ссылки более общие. – teran Jun 29 '18 at 14:42