Пока Ваша установка PHP работает, как она должна, это не быть менее безопасной, чем какой-либо другой метод. Я предпочел бы, чтобы названная константа (определила) по переменной. Дополнительно Вы могли бы рассмотреть хранение хеша пароля вместо простого пароля. Это предотвращает кражу Ваших паролей, даже если сайт поставлен под угрозу.
Что касается того, чтобы быть плохой практикой, это зависит. Если необходимо сохранить всего один пароль, этот подход в порядке. Хранение их вне корня документа может дать ложное чувство дополнительной безопасности; корень документа является не более абсолютным, чем какая-либо другая установка сервера.
Use output buffering instead. eval()
is notoriously slow.
main.php:
<div id="container">
<div id="title"><?php echo $title; ?></div><!-- you must use PHP tags so the buffer knows to parse it as such -->
<div id="head">
<?php if ($id > 10): ?>
<H3>Greater than 10!</H3>
<?php else: ?>
<H3>Less than 10!</H3>
<?php endif ?>
</div>
</div>
Your file:
$title = 'Lorem Ipsum';
$id = 11;
ob_start();
require_once('main.php');
$contents = ob_get_contents();
ob_end_clean();
echo $contents;
The output of this will be:
Lorem Ipsum
Greater than 10!
Do not read the file, but include it and use output bufferig to capture the outcome.
ob_start();
include 'main.php';
$content = ob_get_clean();
// process/modify/echo $content ...
Edit
Use a function to generate a new variable scope.
function render($script, array $vars = array())
{
extract($vars);
ob_start();
include $script;
return ob_get_clean();
}
$test = 'one';
echo render('foo.php', array('test' => 'two'));
echo $test; // is still 'one' ... render() has its own scope
Если вы пытаетесь сделать это со строкой смешанного HTML / PHP (например, из базы данных, Как и я), вы можете сделать это таким образом:
eval(' ?>'.$htmlandphp.'<?php ');
Подробнее: http://blog.5ubliminal.com/posts/eval-for-inline-php-inside-html/ (Примечание. Это мертвая связь с 2014-3-3)