мой код index.php
–
<?php if(!$_COOKIE['authorized'] == 1) { header("Location: login.php"); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>My Photo Website</title> <script src="js/jquery-1.2.6.pack.js" type="text/javascript"></script> <script src="js/jquery.lightbox-0.5.pack.js" type="text/javascript"></script> <script src="js/myscript.js" type="text/javascript"></script> <link rel="stylesheet" href="css/default.css" /> <link rel="stylesheet" href="css/jquery.lightbox-0.5.css" /> </head> <body> <form method="post" action="changePhotoTitle.php"> <div id="container"> <h1>My Photos <small>click on the text to change the title.</small></h1> <a href="login.php?logout=1" id="logout">logout</a> <div id="main"> <?php require 'getPhotos.php'; ?> <div id="response" class="hidden" /> </div><!-- end main--> </div><!-- end container--> </form> </body> </html>
мой код базы данных database.php –
<?php $db_name = "db"; $db_server = "localhost"; $db_user = "root"; $db_pass = ""; $mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error()); ?>
но появляется предупреждающее сообщение followong. Предупреждение: не удается изменить информацию заголовка – заголовки, уже отправленные (вывод начинается с C: \ xampp \ htdocs \ pics \ index.php: 1) в C: \ xampp \ htdocs \ pics \ index.php в строке 4
Цитата из статьи в Википедии для спецификации:
Значок порядка байтов
Многие программы Windows (включая Блокнот Windows) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраненного как UTF-8. Это кодировка UTF-8 метки порядка байтов Юникода (BOM) и обычно упоминается как спецификация UTF-8, даже если она не имеет отношения к порядку байтов. Спецификация может также отображаться, если другая кодировка с спецификацией переведена на UTF-8 без ее удаления.
Наличие спецификации UTF-8 может вызвать проблемы совместимости с существующим программным обеспечением, которое в противном случае могло бы обрабатывать UTF-8, например:
+ Старые текстовые редакторы могут отображать спецификацию как «ï» ¿»в начале документа, даже если файл UTF-8 содержит только ASCII и в противном случае будет отображаться правильно.
+ Парсеры анализатора языка часто могут обрабатывать UTF-8 в строковых константах и комментариях, но не могут разобрать спецификацию в начале файла.
Убедитесь, что нет пробелов (включая спецификацию или новые строки) до <?php
Также убедитесь, что любой код, который выполняется до этого, в отдельном файле может иметь как <?php
-opening, так и ?>
-closing.
Если скрипт запущен с пробелами после тега ?>
-closing tag (например, из-за глупых редакторов, которые помещают контуры строк), PHP начнет отправлять туда выходные.
Просто опустите любой?> В конце файла. Если PHP доходит до конца файла, и он не имеет?>, PHP закончит PHPmode. Это документированная функция PHP.
Итак, вы можете переписать database.php
следующим образом
<?php $db_name = "db"; $db_server = "localhost"; $db_user = "root"; $db_pass = ""; $mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error());
Без закрытия?>
Вы пытались удалить все пробелы в верхней части файла?
Вот так:
<?php if(!$_COOKIE['authorized'] == 1) { header("Location: login.php"); } ?>
Удачи 😉
небольшой поиск в google: http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/
1) Найдите инструкцию header (), которая вызывает проблему. Ошибка должна быть не выше этой строки.
2) Ищите любые утверждения, которые могли бы отправить вывод пользователю перед этим заголовком. Если вы найдете один или несколько, найдите способ переместить заголовок перед ними. Сложные условные утверждения могут усложнить проблему, но они также могут помочь решить проблему. Рассмотрим условное выражение в верхней части скрипта PHP, которое определяет значение заголовка как можно раньше и устанавливает его там.
3) Убедитесь, что нет белого пробела вне тегов начала и конца php. В то время как пустая строка перед
<?php
start может выглядеть невинно, когда PHP обрабатывается, она превращается в эхо-заявление, печатающее пустую строку. Это обычный преступник.
У вас может быть место в начале до
<?php
Тег
Ну, у меня есть другое приятное решение.
<?php ob_start(); if(!$_COOKIE['authorized'] == 1) { header("Location: login.php"); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- Rest of the code follows here -->
Основная проблема заключается в том, что вы не запустили OB (Output Buffering). После запуска OB больше никаких предупреждающих сообщений не возникает. Еще один важный момент, чтобы отметить, что первая строка и первый столбец вашей страницы должны быть начальным тегом PHP ( <?php
) из 5 символов. После этого без какого-либо символа пробела нажмите клавишу ввода и укажите функцию « ob_start()
» точкой с запятой. После этого, что бы вы ни пожелали, вы можете писать, не опасаясь получить это критическое предупреждающее сообщение.
Также в конце всего кода вы можете вызвать эту функцию PHP « ob_end_flush()
», чтобы очистить весь выходной буфер. Но без использования этой функции код работает, потому что по умолчанию PHP выводит все содержимое выходного буфера в конце обработки веб-страницы.
Надеюсь, поможет.