Нужно ли мне изменять мой файл php.ini в Bluehost? Функция заголовка не работает на удаленном сервере - PullRequest
0 голосов
/ 21 ноября 2011

Этот блок кода, показанный ниже с использованием перенаправления заголовка php, работает локально, но не на моем сервере Bluehost:

if ($_POST['submit']=='No')
{
    $url ='Location: index.php?id='.$id.'&page='.$page;
    header($url);
    exit;
}

Когда сервер попадает в этот блок кода, абсолютно ничего не происходит.Нет ошибок, нет предупреждений, просто пустая страница.Страница, на которую перенаправляется моя форма, не должна ничего делать, кроме перенаправления пользователя на соответствующую страницу.

Я чертовски уверен, что это не имеет ничего общего с обычной проблемой включения HTML перед перенаправлением (поскольку он работает локально).Поэтому я подозреваю, что это как-то связано с различиями в моих файлах php.ini.Я включил PHPinfo () для обоих серверов, и на моем локальном сервере есть модуль с именем mod_headers, а на моем сервере Bluehost его нет.Я думаю, что это может быть проблемой, хотя обычно мой Bluehost не имеет проблем с использованием перенаправлений заголовков, за исключением этого одного экземпляра.

Так что я подозреваю, что проблема связана с моим INI-файлом, ноЯ не знаю точно, что.

Что делает эту проблему еще более странной, так это то, что есть другие блоки кода, которые работают просто отлично, например,

if(!empty($_POST['id']))
{
    $id = htmlentities(strip_tags($_POST['id']));
    $sql = "UPDATE entries SET title=?, entry=? WHERE id=? LIMIT 1";
    $stmt = $db->prepare($sql);
    $stmt->execute(array($title,$entry,$id));
    $stmt->closeCursor();
    $url= 'Location: ../index.php?id='.$id.'&page='.$page;
    header($url);
    exit;
}   

работает просто замечательно.

Ответы [ 4 ]

2 голосов
/ 26 ноября 2011

У меня была та же проблема, что она отлично работает на XAMPP, но не на bluehost или 1 & 1.

В документации PHP сказано, что перед вызовом функции заголовка не должно быть никакого вывода. http://php.net/manual/en/function.header.php

В моем случае до открытия было место

1 голос
/ 15 декабря 2011

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

http://en.wikipedia.org/wiki/Byte_order_mark

Я использовал notepad ++ и смог отключить эту спецификацию, используя следующие инструкции:

  1. Выберите «Настройки»> «Настройки»> «Новый документ / Каталог по умолчанию»
  2. Изменено кодирование на UTF-8 без спецификации
0 голосов
/ 17 марта 2013

Я столкнулся с той же проблемой при перемещении моего Wordpress блога на Bluehost.
Решением было изменить параметр output_buffering в php.ini
Посмотрите, что в моей конфигурации вместе с объяснением этой опции:

;Буферизация вывода позволяет отправлять строки заголовка (включая файлы cookie) даже
;после отправки основного текста за счет замедления выходного слоя PHP a
;немного.Вы можете включить буферизацию вывода во время выполнения, вызвав output
;буферные функции.Вы также можете включить буферизацию вывода для всех файлов с помощью
;установив эту директиву на Вкл.Если вы хотите ограничить размер буфера
;до определенного размера - вы можете использовать максимальное количество байтов вместо 'Вкл', как
;значение для этой директивы (например, output_buffering = 4096). output_buffering = 4096

0 голосов
/ 21 ноября 2011

Стандарт HTTP требует, чтобы URL-адрес в директиве Location: представлял собой абсолютный URL.Вы не можете просто использовать index.php для этого перенаправления.Вам нужно будет использовать:

header("Location: http://example.com/index.php");

Некоторые браузеры игнорируют стандарт и допускают относительные URL.

...