За последние 24 часа нас посетили 22374 программиста и 1027 роботов. Сейчас ищут 617 программистов ...

header не работает

Тема в разделе "Подворотня", создана пользователем xShiftx, 14 июн 2018.

  1. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    В общем такая вот проблема для знатоков PHP. Через неделю уже на третьем хостинге перестает работать модуль header и все функции типа setckookie().

    Дано:

    файл index.php содержит функцию авторизации:

    PHP:
    1. function auth($token) {
    2.     setcookie('authorization', 1, time() + 10600, '/');
    3.     setcookie('usertoken', $token, time() + 10600, '/');
    4. }
    Если вызвать ее из index.php она работает:

    PHP:
    1. auth( 'token' );
    И Кука устанавливается.

    Если к index.php подключить через require_once файл который вызывает auth, то куки не устанавливаются!

    Аналогично не работает код класса подключенный через require_once, require и include! Не работает
    PHP:
    1. header('Location: '. site_host . '/');
    .

    То есть редиректы не работают!

    На localhost с MAMP и PHP 7.2.1 все прекрасно крутится!

    Подскажите как вылечить. Хостигни отрицают свой косяк.

    Подопытная система моего производства RevolveR CMS.

    Браузер роли не играет.
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Детский сад какой-то. «Не работает» – ни о чем! При беглом взгляде по нескольким вашим файлам увидел много нелогичных вещей, читай косяков. Даже приведенный тут код вызывает опред. вопросы. Нафига вам кука authorization? Есть ли в site_host помимо хоста также и схема? И что это вообще такое, константа что ли, тогда почему записанная маленькими буквами?
    --- Добавлено ---
    При подключении файлов используйте абс. пути, а не эту хрень: './...', например:
    PHP:
    1. require(PATH.'include/auth.php');
     
  3. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Я пишу один на все ваши хотелки типа пути так не пиши и регистр у тебя не верный - мне нет дела. Потому что язык позволяет так сделать и это так делаю. Иже с ним - вопрос был про модуль header, который не работает. Мне сейчас важно исправить это. Дальше буду код причесывать.

    Все файлы подключены корректно. Все работает кроме самой setcookie и header инструкций. Хрень это когда там __DIR__./server/path/i/zalupa с кракозябрами. Не отвлекайтесь пожалуйста.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    блин... сдается это неуважение к местному сообществу ( мне надо то, се....не учите меня жить)
    вопрос задаете в разделе профи - а ведете себя хуже новичка
    Я не Ванга, но подозреваю, что у вас где-то идет вывод в бразуер ДО отправки заголовков
    что может быть обусловлено наличием пробелов в начале подключаемых файлов, или метки BOM, или вообще вывода какого-то типа echo/print
    включите отображение ошибок - чтоб увидеть - где и что
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @xShiftx, все мои хотелки – это приложение к «Не работает» – ни о чем! Потому что с вами больше не о чем разговаривать.
     
  6. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Прошу прощения за тон, но меня просто затрахали выпади типа "ты плохо делаешь" как только я захожу хоть к одному сообществу. Конструктива сами не соблюдают, а носом в какашку тыкнуть сходу - это в поряде. Все будет в лучшем виде со временем. Я эту CMS настругал вместе со своим front-end на ES7 за 2 месяца примерно и совсем недавно перешел с PHP 3 на PHP 7.2.1.. Не судите строго и не судимы будете. Все будет в лучшем виде со временем.

    Я не Ванга, но подозреваю, что у вас где-то идет вывод в бразуер ДО отправки заголовков
    что может быть обусловлено наличием пробелов в начале подключаемых файлов, или метки BOM, или вообще вывода какого-то типа echo/print


    Исключено. Пишу без BOM под Mac OS. Еще варианты, пожалуйста.

    --- Добавлено ---
    @miketomlin, до свидания.
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
     
    artoodetoo нравится это.
  8. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Нет ошибок!

    Вот что нашел:

    PHP:
    1.     $comments = $base::getData('comments', ['limit' => 5]);
    2.  
    3.     foreach ($comments as $c => $val) {
    4.  
    5.         $comment = substr(strip_tags( html_entity_decode(htmlspecialchars_decode( $val['field_content'] ) ) ), 0, 50);
    6.         $comment = rtrim($comment, "!,.-");
    7.  
    8.  
    9.  
    10.         if( (bool)$val['field_published'] ) {
    11.  
    12.             $class = 'published';
    13.      
    14.         }
    15.         else {
    16.      
    17.             $class = 'unpublished';
    18.      
    19.         }
    20.  
    21.         $render .= '<li class="'. $class .'">#'. $val['field_id'] .' :: '. $comment .'<br /><span>by '. $val['field_user_name'] .'</span></li>';
    22.  
    23.     }

    PHP:
    1. $render .= '<li class="'. $class .'">#'. $val['field_id'] .' :: '. $comment .'<br /><span>by '. $val['field_user_name'] .'</span></li>';
    после это строки header не работает. проверял построчно :D есть идеи?

    Меняю на limit 10 - опять не работает. Значит проблема в выхлопе из БД. Как туда пакость попала не ясно и как это на PHP повлияло тоже не ясно!

    Данные из БД чистые - что не так?
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    header не работает после любого вывода, будь то echo, текст между ?> и <?php, или сообщение об ошибке.
    это проистекает из самой сути HTTP сообщений :) сначала должны идти заголовки (headers), потом тело сообщения, а никак не вперемешку и то и другое.

    например если твоя строка вызывает вывод предупреждения "Unknown index" то после неё header не работает.

    вообще, не лишне читать что тебе сам PHP пишет по этому поводу.
    http://phpfaq.ru/debug/
     
  10. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    А щас как работает? Не в этом дело!
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    ну досвидания тогда. ты слишком умный, я ретируюсь.
     
  12. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Всем спасибо!

    Есть подозрение что виноват text mate от которого в прошлый раз также сходили с ума - там были какие-то не отображаемые на windows и linux символы после установки редактора. долго не понимали почему глючит EFI. после форматирования винта и прочистки BIOS все работало как надо. В этот раз решилось удалением скомпрометированного комментария. Не злитесь на меня ;) Удачи!
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    значит твой сраный текстовый редактор оставляет BOM. это не бог весть какая сложная задачка. тебе об этом сказали почти сразу. надо только прислушиваться и задавать уточняющие вопросы, если чего непонятно.
    --- Добавлено ---
    а то постоянно будешь винты форматировать
     
  14. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Ты не понял. Из редактора на сайте не написать. Были виноваты данные в БД. Я тебе говорю в редакторе символьный червь находили. Но я им не пользуюсь. Я просто заходил на сайт с этого компьютера и писал. Обратил внимание, что у Safari кэш заглючил и не придал этому знпчения. Вы почему такие все самоуверенные? Если вам создать ветку с названием 'для жопашников' - вы станете высокомерными жопашниками? Ну да ладно, проблема решилась сама. Просто невидимый символ в бд который повлиял на исполнение памяти php. При чем тут редактор?
    --- Добавлено ---
    p.s.: я даже знаю, что какой то доморощенный с первого сообщения орал 'забанить' потому что я таких в попу долблю, а от того что меня везде банят мне пипец не приходит. Счастья всем, не злитесь на прослушек. Работаем экстремально... :D
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    С такой харой здец тебя в реале достанет. Мы тут не для этого собрались.
     
  16. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Я вот могу достать, а меня не достает :) давайте обо всем забудем и удалились топик. Ушел пить кофе. Теперь ведь все знают, что может случиться из символьных уязвимостей... Еще раз спасибо.
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    понравилось. занёс в анналы
    --- Добавлено ---
    @xShiftx рискну повторить ещё раз: если header или setcookie не сработал, проблема в том, что что-то вывелось раньше чем был вызван header|setcookie. инфа 100%!

    теперь вопрос - что именно вывелось. если фиговый символ из базы провоцирует высер предупреждения (загляни лять уже в код страницы! Ctrl+U ), это
    н е н о р м а л ь н о
    [​IMG]

    и такую реакцию можно исправить. надо только отдебажить приложение, увидеть это самое сообщение и принять меры.
     
  18. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    йобана рот. Я 10 лет сайты делаю, а какойто хер моржовый будет мне в эхо и принт тыкать. Твой ебаный убунту не только изза вывода падает потому что у негров руки из жопы. Покеда мальчики. У меня и после вывода все работает. Правда я не на убунту чтобы такую хуету ошибкой программирования называть, а не косяком сборки. Я тебе щас этим текстмейтом эту уязвимость в жопу засуну и посмотрю как ты винты форматируешь в ужасе...
     
  19. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    эпично :)
    дурак сам себя наказывает, если ему не мешать. я забаню этого человечка не ради наказания, а чтобы он свои перлы не удалил.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    та ниможет он ничего редактировать после ответа другого человека. можно было подождать, пока он бушует
     
  22. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Кароче выяснено, что тема так и остается под вопросом халатности PHP. Инструкция

    # Output buffering
    php_value output_buffering 4092

    лечит 90% проблем при этом кажется никто про это не высказался. просто взяли и забанили.

    Кроме того, не имеет значения был до этого header() вывод или не было.

    В чем мем-то? В PHP чтоли?
     
  23. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Здец. ЧЁ люди только не придумывают, чтобы не делать норм. За 10 лет уже можно было выучить основы HTTP-протокола.
    --- Добавлено ---
    Что за маг. число 4092? 4 кб – это 4096, если чЁ.
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    каких проблем?
    --- Добавлено ---
    Таким костылем в древности лечили "проблему медленного клиента" на голом апаче. Чтобы не зажевывало пакет, так сказать. Костыль сугубо эмпирический. Из разряда шаманизмов.

    За 10 лет разработок можно было узнать, что проблема медленного клиента сегодня лечится выставлением реверс-прокси на входе.
     
  25. xShiftx

    xShiftx Новичок

    С нами с:
    27 май 2018
    Сообщения:
    25
    Симпатии:
    0
    Двойная польза.