#php #file #variables #include
#php #файл #переменные #включить
Вопрос:
Итак, у меня есть три файла.
ФАЙЛ 1 включает ФАЙЛ 2, который включает ФАЙЛ 3
ФАЙЛУ 1 необходимо напечатать переменную 1, которая определена в ФАЙЛЕ 3
как бы мне это сделать? Для меня это не отражается
файл 1
<?php
if ($_GET["pg"]==false)
echo "<title>Socal Mods</title>";
else
echo $title_name;
?>
файл 2
<?php
if ($_GET["pg"]==false)
include("home.php");
else
include("".$_GET["pg"].".php");
?>
файл 3
<?php $title_name="<title>Socal Mods</title>" ?>
файл 3 анализируется в файл 1, который является контейнером отображения, но %title_name не соответствует
Комментарии:
1. не могли бы вы, пожалуйста, вставить сюда свой код?
2. просмотрите порядок ваших включений
Ответ №1:
Сначала одна вещь о том, как вы получаете доступ к переменным GET. Вы проверяете значение с помощью $_GET["pg"] == false
. Обратите внимание, что это выражение не будет выполнять то, что вы ожидаете, во многих ситуациях. На самом деле, значение никогда не будет указано напрямую false
. Единственный способ, которым она будет равна false
, если она пуста или не задана (в этом случае вы также получите предупреждение компилятора, которого вам следует избегать). Обычно более безопасный способ проверить, было ли установлено значение, — использовать isset( $_GET["pg"] )
.
Следующее, что я хочу затронуть, — это проблема безопасности, которую вы представляете. Вы используете получаемое значение непосредственно для включения файла с таким именем. Если бы я был пользователем со злым умыслом, я мог бы легко присвоить pg
значение чему-то, чего вы обычно не ожидаете и что каким-то образом нарушает работу вашего веб-сайта. Как правило, вам следует избегать использования данных, введенных пользователем каким-либо образом (параметры запроса — это пользовательские данные), и обязательно сначала их очистите. Хорошим способом сделать это, когда вы планируете использовать значение в качестве основы для того, на какую страницу вы хотите включить, было бы создать своего рода белый список допустимых значений. Затем вы можете проверить, есть ли введенные данные в этом белом списке, и если это так, включите правильную страницу. Другим простым способом было бы использовать switch
инструкцию, чтобы просто просмотреть все принятые случаи.
Теперь, наконец, к вашей проблеме: я не уверен, было ли это просто ошибкой при публикации кода, но в файле 1 отсутствует включение файла 2. Таким образом, вы никогда не будете включать файл 3, и, конечно, переменная никогда не будет установлена.
Другой проблемой может быть использование получаемого значения. Если значение не содержит точного имени файла (как в кавычках и без дополнительных пробелов), то файл не будет найден. Хорошей идеей будет повторить имя файла, которое вы хотите включить в файл 2, просто чтобы проверить, не допускаете ли вы каких-либо ошибок. Белый список, как объяснено выше, был бы еще одним способом убедиться, что вы пытаетесь включить правильный файл.
Наконец, вы должны включить сообщение об ошибках на вашем сервере, вы можете сделать это либо в конфигурации вашего сервера, либо добавив следующую строку в начало вашего первого файла (т. Е. файла 1):
error_reporting( E_ALL );
Таким образом, вы будете получать ошибки и предупреждения, которые сообщат вам, произошло ли что-то неожиданное во время выполнения, и вы сможете легче увидеть свою ошибку.
Старый ответ
В целом это работает следующим образом:
Файл 1:
<?php
include 'file2.php';
echo $myVariable; // prints 'Hello World!'
?>
Файл 2:
<?php
include 'file3.php';
?>
Файл 3:
<?php
$myVariable = 'Hello World!';
?>
Комментарии:
1. проблема в том, что я не могу включить файлы позже на странице, и тогда var не работает
Ответ №2:
echo $title_name = "<title>Socal Mods</title>";
Это означает, что она повторяет html, поэтому «Socal Mods» будет отображаться в строке заголовка вместо тела. Я надеюсь, вы смотрите в строку заголовка. И чтобы использовать $title_name в файле 1, который доступен в файле 3, вам нужно включить file3 в file1.
Комментарии:
1. Эта строка ничего не отображает.
2. @Arjan Да, это ничего не отразит в теле doucumnt, вместо этого оно будет отображаться в строке заголовка
3. она отображается в строке заголовка,
4. Это означает, что она успешно выполнена. Если вы хотите просто выполнить echo, то удалите тег title из $title_name. Затем вы просматриваете значение переменной.
Ответ №3:
Включен ли файл 3 в скрипт? И вы действительно проверили и подтвердили, что файл включен? Если вы измените include
инструкции в вашем скрипте на require
statements, PHP остановится с ошибкой, если файл, который вы ищете, не существует.
Существует множество причин, по которым файл может быть не найден. Если имя файла содержит прописные буквы, а запрос содержит только строчные буквы, вы столкнетесь с проблемами, если сервер использует файловую систему, чувствительную к регистру.
Также вам следует очистить пользовательский ввод, прежде чем использовать его для включения файлов. Вы не хотите, чтобы я мог включать любой файл в любое место на вашем сервере, не так ли?
Ответ №4:
Переменные должны быть созданы, установлены и им должно быть присвоено значение, прежде чем они смогут быть воспроизведены.
Скорее всего (пожалуйста, покажите нам какой-нибудь код), ваша проблема не в том, что файл включает, а в том, что вы пытаетесь повторить свою переменную до того, как ей будет присвоено значение.