2016-04-22 6 views
1

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

Я развиваюсь на Mac OS X El Capitan. Я использую PHP версию 5.5.31. error message

У меня есть буферизация вывода, включенная в моем файле php.ini. Я навязчиво проверял, что перед отправкой заголовка нет пробела. Вот строки кода имеет в виду:

(edit_subject.php: 6)

<?php require_once("../includes/session.php");?> 
<?php require_once("../includes/db_connection.php");?> 
<?php require_once("../includes/functions.php");?> 
<?php require_once("../includes/validation_functions.php");?> 
<?php find_selected_page();?> 
<?php 
if(!$current_subject){ 
**redirect_to("manage_content.php")**; 
} 
?> 

(edit_subject.php: 38)

$result = mysqli_query($connection, $query); 
if ($result && mysqli_affected_rows($connection) >= 0) { 
// Success 
$_SESSION["message"] = "Subject edited succesfully."; 
**redirect_to("Location: manage_content.php");** 
} else { 
// Failure 
$message = "Subject update failed."; 
} 

(functions.php: 3)

<?php 
function redirect_to($new_location) { 
redirect_to("Location: . $new_location"); 
exit; 
?> 

Я вытягиваю волосы за последние 48 часов. Я был бы признателен за некоторые рекомендации здесь.
Спасибо, Chris

+0

перенаправление из функции - плохой подход. – urfusion

+0

'functions.php' не имеет смысла и должен создавать бесконечный цикл, но он даже не написан с правильным синтаксисом, поэтому ваш код должен быть взломан. Попробуйте добавить 'error_reporting (E_ALL);' в начале ваших PHP-скриптов. По моему мнению, «уже отправленные заголовки» не должны быть единственной ошибкой, которую вы получаете. Кроме того, что с двойными звездочками в случайных местах. Если это не в вашем коде, не добавляйте его в код в свой вопрос; вместо этого напишите комментарии, которые обращают внимание на проблемные пятна. – MonkeyZeus

ответ

0

следующая строка запуска предупреждение (functions.php линия 3):

redirect_to("Location: . $new_location"); 

Он пытается отправить заголовки, после того, как что-то уже выход (возможно, другая ошибка/предупреждение о том, что ваш синтаксис нарушен). Проверьте свои журналы ошибок.

0

попробуйте сбросить буфер перед перенаправлением. проблема возникает, если уже что-то выдается, и вы пытаетесь изменить заголовок в этом случае путем перенаправления.

Вы можете использовать ob_start() сверху, а ob_end_flush() - очистить перед изменением заголовка.

Примечание: промывка буфера только скрывает проблему, а не решение. Есть некоторая часть плохой практики кодирования, попробуйте понять это.

Смежные вопросы