Как объявить переменную в php при включении файлов? - PullRequest
0 голосов
/ 21 мая 2011

Итак, у меня есть три файла.

ФАЙЛ 1 включает ФАЙЛ 2, который включает ФАЙЛ 3

ФАЙЛ 1 должен распечатать VAR 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 не отображается

Ответы [ 4 ]

2 голосов
/ 21 мая 2011

Включен ли файл 3 в скрипт?И вы действительно подтвердили и подтвердили, что файл включен?Если вы измените операторы include в вашем скрипте на операторы require, PHP остановится с ошибкой, если искомый файл не существует.

Существует много причин, по которым файл может не бытьнайденный.Если имя файла содержит заглавные буквы, а запрос содержит только строчные буквы, у вас возникнут проблемы, если сервер использует чувствительную к регистру файловую систему.

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

2 голосов
/ 21 мая 2011
echo    $title_name = "<title>Socal Mods</title>";

Это означает его повторяющийся html, так что "Socal Mods" будет отображаться в строке заголовка, а не в теле.Я надеюсь, что вы смотрите в заголовке.И чтобы использовать $ title_name в файле 1, который доступен в файле 3, необходимо включить файл 3 в файл1.

2 голосов
/ 21 мая 2011

Сначала о том, как получить доступ к переменным GET Вы проверяете значение, используя $_GET["pg"] == false. Обратите внимание, что это выражение не будет делать то, что вы ожидаете во многих ситуациях. На самом деле значение никогда не будет напрямую false. Единственный способ, которым он будет равен false, если он пустой или не установлен (в этом случае вы также получите предупреждение компилятора, которого следует избегать). Обычно более безопасный способ проверить, было ли установлено значение, использовать isset( $_GET["pg"] ).

Следующее, что я хочу решить, - это проблема безопасности, которую вы представляете. Вы используете значение GET напрямую, чтобы включить файл с этим именем. Если бы я был пользователем со злым умыслом, я мог бы легко установить значение pg на что-то, чего вы обычно не ожидаете и которое каким-то образом нарушает ваш сайт. Как правило, следует избегать использования данных, введенных пользователем каким-либо образом (параметры запроса - это пользовательские данные), и сначала обязательно их очистить. Хороший способ сделать это, когда вы планируете использовать значение в качестве основы для страницы, которую вы хотите включить, - это иметь некоторый белый список допустимых / разрешенных значений. Затем вы можете проверить, находятся ли введенные данные в этом белом списке, и если это так, добавьте правильную страницу. Другой простой способ - использовать оператор switch, чтобы просто пройти через все принятые случаи.

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

Другая проблема может заключаться в использовании значения GET. Если значение не содержит точное имя файла (как в регистре и без лишних пробелов), файл не будет найден. Хорошей идеей является вывод имени файла, который вы хотите включить в файл 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!';
 ?>
0 голосов
/ 21 мая 2011

Переменные должны быть созданы, установлены и присвоены значения, прежде чем они могут быть отображены.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...