Привет, мастера. Пишу скрипт на локалке. И не получается переадресовать на другую страницу через header() пишет: Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\portfolio\conf\style.php:6) inC:\OpenServer\domains\portfolio\works\index.php on line 8 Я так понимаю, что уже передаётся заголовок, и его изменить нельзя, но я ума не приложу, что я делаю не так. код style.php PHP: <?php echo '<title>Портфолио</title> <link rel="stylesheet" href="../style/style.css" type="text/css" /> <link rel="stylesheet" href="../style/font-awesome.min.css" type="text/css" /"> <link rel="shortcut icon" href="favicon.ico"/>'; ?> И код, откуда я планирую переадресовать: PHP: <?php require '../conf/config.php'; require '../conf/style.php'; require '../conf/head.php'; $q = $db -> query("SELECT * FROM `works` WHERE `id` = '".$_GET['id']."' LIMIT 1"); if ($q -> num_rows == '0') { header("Location: /");exit; } $res = $q -> fetch_array(); echo $res['name']; require '../conf/foot.php'; ?> Заранее благодарю за подсказку, и помощь в решении проблемы
все верно машина пишет. при подключении четвертой строкой файла стайл его содержимое (файла стайл) завершает раздел заголовков и начинает мусорить данными в поток. после этого вдруг появляется желание послать заголовок, но этого сделать уже не получается ибо читать выше. решение? пересмотреть алгоритм чтоб шаблонная часть шла уже после всей логики работы с данными. ну или самое простое для новичка - буферизация выходного потока. создал буфер, нагадил в него. если надо редирект - редирект. если не надо редирект - показал и убил буфер.
пишет, что на шестой строке уже пошел вывод, поэтому надо смотреть, что там у тебя на шестой строке происходит. ob_start() и ob_get_clean() - лучшие друзья пхпшника, чо. Никуда от этого не уйти.
@Magnum, сначала почему так: Заголовки должны выводиться ДО любого вывода. Потому что так устроен протокол http — в сообщении идут сначала заголовки, затем тело сообщения. Когда ты делаешь echo или закрываешь ?> и что-то там пишешь, это уже тело, после него заголовки не работают: об этом говорится в тексте ошибки: "headers already sent" — "заголовки уже были посланы". Понял? Теперь как обойти: Выводи "тело" только в конце работы. Или перехватывай весь вывод функциями ob_* и выводи перехваченное в конце.