#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. Должно быть, это была проблема с моим браузером. Я ценю, что вы проверили код.