Получение предупреждения session_start() для моего недавно зарегистрированного домена

Я недавно зарегистрировал свой домен, и все работает нормально, но когда я использую session_start() на своих php-страницах, я получаю это предупреждение

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\inetpub\vhosts\mywebsite.com\httpdocs\sample\new.php:1) in D:\inetpub\vhosts\mywebsite.com\httpdocs\sample\new.php on line 3

 `Warning: session_start() [function.session-start]: Cannot send session 
  cache limiter - 
  headers already sent (output started at        
  D:\inetpub\vhosts\mywebsite.com\httpdocs\sample\new.php:1) in 
  D:\inetpub\vhosts\mywebsite.com\httpdocs\sample\new.php on line 3`

Что мне нужно сделать, чтобы избавиться от этого предупреждения? Я не могу использовать session_start() на своих php-страницах. Пожалуйста, помогите мне исправить это. Любая помощь очень ценится. Спасибо.

Обновить Это мои страницы index и profile.php

моя страница index.php

     <?php
          session_start();
       ?>
               <!doctype HTML> some html coding goes on

моя страница profile.php

 <?php
            session_start();
    $con = mysql_connect('some', 'some', 'some');       
    $email = $_POST["nemail"];
    $password = $_POST["npassword"];
    $month = $_POST["nmonth"];
    $dayy = $_POST["ndate"];
    $yearr = $_POST["nyear"];
    $gender = $_POST["ngender"];
    $sname = $_POST["sname"];
    $status = $_POST["nrelation"];
    $rannum = 1;
    $birthday = $month . " " . $dayy . " " . $yearr;
    mysql_select_db("users_names");
            $_SESSION['unique']= $rannum;
  ?>

Я получаю эту ошибку, когда перехожу к profile.php из index.php

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\inetpub\vhosts\website.com\httpdocs\sample\profile.php:1) in D:\inetpub\vhosts\website.com\httpdocs\sample\profile.php on line 3

Я хочу начать сеанс на индексной странице, но я хочу присвоить значения переменным сеанса на странице profile.php, что я и сделал в profile.php в последней строке.


person niko    schedule 25.01.2012    source источник
comment
В моем коде ничего нет, я просто использовал session_start() на своей странице, вот и все, я не вижу этой ошибки больше ничего в моем коде, и когда я удаляю session_start(), я не получаю это предупреждение   -  person niko    schedule 25.01.2012
comment
Так что с вашим кодом все в порядке, но когда вы его изменяете, ошибка не появляется ... странно ... может быть, что-то с вашим кодом ... вы можете опубликовать это?   -  person BlackCharly    schedule 25.01.2012


Ответы (4)


С вашим опубликованным кодом это будет проще.

Куки-файлы (сессионный старт использует куки-файлы) могут быть отправлены только с заголовками HTTP. Если вы уже выполнили echo или вызвали функцию headers() перед функцией session_start(), вы больше не можете отправлять файлы cookie, поэтому вы не можете начать сеанс, потому что заголовки уже отправлены.

person BlackCharly    schedule 25.01.2012
comment
Я думаю, вы правы, я использовал заголовки на своей странице, я не уверен, где я использовал, позвольте мне проверить это, и спасибо - person niko; 25.01.2012
comment
@niko Я же говорил тебе - проверяй пробелы, символы новой строки перед ‹?php в new.php. Если вы ничего не видите (и первый вывод находится в первой строке этого файла), то запись BOM есть. - person Cheery; 25.01.2012
comment
@niko У вас определенно есть спецификация - удалите ее из всех файлов. Чтобы проверить, есть он у вас или нет - скачайте файл по ftp и откройте в любом обычном текстовом редакторе (типа Notepad++ или чем вы пользуетесь для редактирования скриптов) - person Cheery; 25.01.2012
comment
Session_start() — это первая функция, которую вы вызываете, проверьте, что ничего нет перед разметкой <?php. Ваша ошибка говорит о том, что вывод начался на вашей странице profile.php в строке 1. Начните проверять эту страницу. - person BlackCharly; 25.01.2012
comment
@BlackCharly Твои потрясающие пробелы были до ‹?php о боже! большое спасибо! теперь работает, я удалил эти пробелы - person niko; 25.01.2012
comment
@niko Я тоже писал тебе про пробелы и думал, что ты уже это проверил. - person Cheery; 25.01.2012

Ваши php-скрипты в UTF (я имею в виду, что содержимое php-файлов находится в кодировке Unicode)? Вы удалили запись спецификации в этом случае? Или, возможно, у вас есть пустое место (я) перед открытием тега php

Вики

Например, в PHP наличие спецификации приведет к тому, что страница начнет вывод до того, как будет интерпретирован исходный код, что вызовет проблемы, если страница пытается отправить пользовательские заголовки HTTP (которые должны быть установлены до начала вывода).

person Cheery    schedule 25.01.2012
comment
Да, это UTF 8 и что такое спецификация. - person niko; 25.01.2012
comment
@niko Я также дал ссылку на Wiki en.wikipedia.org/wiki/Byte_order_mark, это набор байтов в начале файла. Это будет первый вывод в браузер. Цитата из Wiki: например, в PHP наличие спецификации приведет к тому, что страница начнет вывод до того, как будет интерпретирован исходный код, что вызовет проблемы, если страница пытается отправить пользовательские заголовки HTTP (которые должны быть установлены до начала вывода). - person Cheery; 25.01.2012
comment
хорошо, может быть, я не знаю, но как мне удалить бомбу, можете ли вы объяснить в своем ответе, пожалуйста - person niko; 25.01.2012
comment
@niko Вы должны либо загрузить все на свой компьютер и удалить спецификацию вручную в любом обычном текстовом редакторе, либо использовать любую утилиту на своем компьютере или ту, которую вы можете запустить на своем сервере, для исправления файлов. И посмотрите здесь stackoverflow.com/questions/3255993/ - person Cheery; 25.01.2012
comment
@niko попробуйте только на одном файле и проверьте результат. Notepad++ легко удаляет спецификацию (Кодировка в меню). Удалите его, залейте обратно на сервер, вызовите через браузер и посмотрите на результат. Если предупреждение исчезло - вы нашли причину. - person Cheery; 25.01.2012
comment
Спасибо, но все, что я могу сделать, это дать вам +1, но это был его ответ, открой мне глаза - person niko; 25.01.2012
comment
@нико решать тебе. Я написал Или, возможно, у вас есть пустое место (я) перед открытием тега php при первом моем сообщении. Мне плевать на баллы - мне просто нравится помогать ) - person Cheery; 25.01.2012
comment
хорошо, я ценю вашу помощь, и я очень благодарен вам спасибо веселый - person niko; 25.01.2012

Убедитесь, что перед вызовом session_start() не выводится абсолютно ничего, даже пробелов.

person marramgrass    schedule 25.01.2012

Вам нужно включить функцию вывода, чтобы иметь возможность использовать сеанс. Используйте функцию ob_start() где-нибудь в начале вашего php-кода

person heximal    schedule 25.01.2012
comment
@nikc.org: если ob_start() включен в начале сценария, заголовки не отправляются напрямую, и сеанс может быть запущен в любой точке сценария, поэтому это связано с ошибкой. - person BlackCharly; 25.01.2012
comment
@BlackCharly, если в начале файла нет спецификации. Тогда вся буферизация вывода в мире не будет иметь никакого эффекта. Использование буферизации вывода может быть решением, но не объяснением источника проблемы. - person nikc.org; 25.01.2012