Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > PHP > include вырубает код за ним


Автор: Alexanbar 21.08.18, 10:08
Работаю на своём компьютере с использованием встроенного в php веб сервера. Запускаю с ключами -S -t.



Поскольку в нескольких файлах используется одинаковые фрагменты кода, решил вынести это в отдельный файл subs.php (находится в той же папке, что и остальные)

запускаемый файл index.php содержит тэг frameset

Как только добавляю include 'subs.php' (даже не используя функции из этого файла), браузер выдаёт пустой экран. при просмотре кода страницы убеждаюсь, что страница сформирована верно:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <script type="text/javascript">
     
     
    document.getElementsByTagName('title')[0].innerHTML=
        "Титул сайта";
     
    </script>
     
     
    <frameset framespacing=0 border=0 cols="662,*" frameborder="0">
     <frame name=contents src=TOCFrame.php?lng=ru style='mso-linked-frame:auto' target="main" scrolling="auto">
     <frame name="player" src=player.php?lng=ru style='mso-linked-frame:auto' target="_self" scrolling="auto">
     <noframes>
      <body lang=RU style='tab-interval:36.0pt'>
      <div class=Section1>
      <p class=MsoNormal>Эта страница содержит рамки, однако текущий обозреватель их
        не поддерживает.</p>
      </div>
      </body>
     </noframes>
    </frameset>


но сами фреймы не загружаются.Веб сервер ошибок не выдаёт.

файл этот ПОДКЛЮЧАЕТСЯ!!!
Из него можно вызвать тестовую функцию, и она выведет текст:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    function test() {echo 'hhh' ;}



Пробовал даже пустой файл подключать:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?php ?>


Всё равно выполнение останавливается.

На всякий случай содержимое файла subs.php:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?php
     
    function ConnectDb() {
        // Connect to database
        //----------------------------------
     
        //echo 'ggggg';
        $link = mysqli_connect($_SERVER['SERVER_NAME'], "login", "parol", "baza");
        
        if (!$link) {
            echo "<p align=center>Error on opening of database:" . PHP_EOL . "</p>";
            
            echo "<h1 align=center>Error №" . mysqli_connect_errno(). ": " .  mysqli_connect_error() . "</h1>" . PHP_EOL;
            exit;
        }
        return $link;
     
    };
     
    function test() {echo 'hhh' ;};
     
    ?>

Автор: Alexanbar 21.08.18, 11:25
P S Вставлял include в остальные два файла - там всё работает, как часы.

Похоже, что в файлах с frameset не работает include?

Автор: Serafim 21.08.18, 12:30
А пробовали для начала удалить BOM?

Автор: Alexanbar 21.08.18, 14:32
Цитата Serafim @
А пробовали для начала удалить BOM?

А что это такое?

Автор: AVA12 21.08.18, 15:25
Я бы для начала заключил все значения атрибутов HTML-тегов в кавычки. Если не поможет, значит ошибка, как обычно, в семнадцатой строке.

Автор: Alexanbar 21.08.18, 17:26
Цитата AVA12 @
Я бы для начала заключил все значения атрибутов HTML-тегов в кавычки. Если не поможет, значит ошибка, как обычно, в семнадцатой строке.

Не помогает.

Сервер выдаёт путь к index.php и всё...

если в браузере выбрать Просмотр кода, то код правильный, но фреймы не открываются.

Если убрать строку include, то выдаёт все файлы, какие там есть - рисунки, *.css, *.js и т.д.

Автор: Serafim 21.08.18, 20:51
Именно по-этому и существуют стандарты: https://www.php-fig.org/psr/psr-1/ Где сразу же вторым пунктом идёт: "Files MUST use only UTF-8 without BOM for PHP code." :angry:

Цитата Alexanbar @
А что это такое?

А никто не пробовал для начала погуглить? https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%...%82%D0%BE%D0%B2

Автор: Руслан 21.08.18, 22:59
Цитата Alexanbar @
А что это такое?

Открыть файл в notepad++, "кодировки"\"преобразовать в utf-8 без BOM".

Автор: Alexanbar 22.08.18, 05:49
Оказалось, что дело действительно в этом BOMе.

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


Вообще говоря, не дело, что одни стандарты противоречат другим.

Автор: Serafim 22.08.18, 14:48
Цитата Alexanbar @
Оказалось, что дело действительно в этом BOMе.

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

Вот видишь как замечательно =) Осталось прочитать его весь (ну, например, там чёрным по белому написано не ставить закрывающий "?>") и проблем резко станет ещё меньше ;) Попробуешь следовать заветам мудрых или продолжишь кататься на граблях?)))

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)