PHP — браузер не отображает значения echo’ed после команды «require_once», почему?

#php

#php

Вопрос:

Я новичок в PHP, и я следил за одним учебным пособием, в котором я создаю систему регистрации пользователей с использованием ООП на PHP. Я довольно хорошо переваривал код и быстро учился, но столкнулся с одной незначительной (но неприятной) проблемой.

Мой веб-браузер не хочет отображать значения echo’ed, если команда echo следует require_once за командой, если я не добавлю дополнительное echo '<br'> значение перед значениями, которые я хочу повторить. Вот как это выглядит:

 <?php
require_once 'core/init.php';
echo Config::get('mysql/host');
 

Приведенный выше код НЕ БУДЕТ отображать последнюю строку в браузере.

 <?php
require_once 'core/init.php';
echo '<br>';
echo Config::get('mysql/host');
 

Приведенный выше код отобразит последнюю строку в браузере.

Зачем мне нужно добавлять echo '<br>' для отображения?

Я буду очень благодарен за ваш совет.

С наилучшими пожеланиями, Лукас

Код в core/init.php выглядит примерно так:

 <?php
session_start();

$GLOBALS['config'] = array(
    'mysql' => array(
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '',
        'db' => 'lr'    
),
    'remember' => array(
        'cookie_name' => 'hash',
        'cookie_expiry' => 604800   
),
    'session' => array(
        'session_name' => 'user'    
)
);



spl_autoload_register(function ($class) {
require_once 'classes/' .$class . '.php';
});

require_once '/../functions/sanitize.php';


echo $config['mysql']['host'];
 

Комментарии:

1. Используете ли вы буферизацию вывода? В каком коде у вас есть core/init.php ?

2. Марчин, я добавил init.php код в сообщении.

3. Советы: 1) Убедитесь, что вы настроили PHP для отображения всех возможных сообщений об ошибках 2) Используйте меню «Просмотр исходного кода» вашего браузера, чтобы проверить необработанный вывод вашего скрипта.

4. Есть ли в вашем коде что-то еще, кроме этого? например, это действительно включено на страницу с HTML-разметкой? Я предполагаю, что здесь есть, и, возможно, это действительно есть, но «скрыто» из-за остальной части вашей разметки html / css и br тега уровня блока is, который перемещает его туда, где вы можете его увидеть. Вы вообще видите echo $config['mysql']['host'] из своего core/init.php файла?

5. include и require_once — это функции, верно? так что не должны ли их значения быть в круглых скобках, например, include (‘test.php ‘); ?или я что-то упускаю?

Ответ №1:

Я протестировал код, и все работает нормально. Кстати, вам следует подумать о том, чтобы не использовать $GLOBALS в своем коде.

Ниже приведен полный рабочий код:

index.php

 <?php
require_once 'core/init.php';
echo Config::get('mysql/host');
 

core/init.php

 <?php
session_start();

$GLOBALS['config'] = array(
    'mysql' => array(
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '',
        'db' => 'lr'    
),
    'remember' => array(
        'cookie_name' => 'hash',
        'cookie_expiry' => 604800   
),
    'session' => array(
        'session_name' => 'user'    
)
);



spl_autoload_register(function ($class) {
require_once 'classes/' .$class . '.php';
});

require_once '/../functions/sanitize.php';


echo $config['mysql']['host'];
 

functions/sanitize.php

 <?php 

function escape ($string) 
{ 
    return htmlentities($string, END_QUOTES, 'UTF-8'); 
}
 

classes/Config.php

 <?php

class Config {

    static function get($what) {
        $what  = explode ('/', $what);
        echo $GLOBALS['config'][$what[0]][$what[1]];           
    }
}
 

Результат запуска index.php файла в браузере:

127.0.0.1127.0.0.1

как и ожидалось (127.0.0.1 отображается 2 раза без пробелов между ними)

Комментарии:

1. Должно быть, это была проблема с моим браузером. Я ценю, что вы проверили код.