включайте (), Почему я не должен использовать его?

Я работаю через более старый php mysql книга, записанная в 2003. Автор использует включение () функция для построения страниц HTML включением header.inc, footer.inc, main.inc файлы, и т.д. Теперь я узнаю, что это не позволяется в значении по умолчанию ini настройки, (allow_url_include установлен на Прочь) после того, как я получил много предупреждений от сервера.

Я заметил также, что можно использовать, включают без круглой скобки. Я попробовал это, и это работает, и я не получаю сообщений об ошибках или предупреждений. Эти два отличаются? Таким образом, включают () отличающийся от, включают?

5
задан aliov 29 May 2010 в 22:06
поделиться

4 ответа

Использование include () может ввести уязвимое включение локального файла (LFI) или включение удаленного файла (RFI) . Вам следует избегать использования include, например , если вы включаете HTML , лучше написать print (file_get_contents ($ file)) , чем include ($ file) . Однако использование PHP-файлов include () необходимо в большинстве приложений PHP для уменьшения дублирования кода.

Даже если удаленное включение файлов отключено, все еще можно использовать систему с помощью расширенной атаки LFI .

Если вам нужно принять ввод пользователя в include () , убедитесь, что он находится в белом списке:

$good_includes=array("contact","home","view");
if(in_array($_GET[page],$good_includes)){
    include("inc/".$_GET[page].".php");
}
4
ответ дан 18 December 2019 в 08:27
поделиться

Это недоразумение. Вы можете отключить включение удаленных файлов (используя URL http://www.example.com/include.php вместо пути к файловой системе). Вы всегда можете включать локальные файлы.

Последнее объясняется тем, что include - это не обычная функция, а языковая конструкция. Как и die, она может использоваться как с круглыми скобками, так и без них. Источник: Руководство

Поскольку include() - это специальная языковая конструкция, круглые скобки вокруг ее аргумента не нужны. Будьте осторожны при сравнении возвращаемого значения.

16
ответ дан 18 December 2019 в 08:27
поделиться

Функция include хороша для динамического включения файлов. Если мы включаем файлы в цикле, это очень хорошо. Но если мы включаем файлы статически, то следует использовать require. Вторую функцию сделайте в начале скрипта.

0
ответ дан 18 December 2019 в 08:27
поделиться

Есть большая разница с include/require_once и require.

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

Используйте require для файлов, которые являются фундаментальными для вашего приложения и используйте include в ваших шаблонах, потому что в случае ошибки вы можете указать не показывать ошибку и таким образом пользователь не заметит разницы, если это не основной шаблон include, такой как header.php

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

если вы включаете файлы извне вашего сервера, то я бы использовал curl, если он установлен, или file_get_contents().

Надеюсь, это вам поможет.

просто заметка о require против require_once, require_once добавит логику, чтобы убедиться, что файл не будет включен более одного раза, т.е. вы не хотите объявлять подключение к базе данных более одного раза

-1
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: