[PHP] не видно константы при require
вот этот конкретный пример работает как я хочу как раз
а у меня вроде то же самое
но не работает
ну так дай свое "то же самое"
А ещё - такой эффект замечается при запуске отладки с помощью Zend 5
config\constants_VR32.php:
<?
define('FOO', 'BAR');
?>
js_lite.php:
<?
$filename = $_GET['filename'];
if (empty($filename {
$filename = '';
}
require 'config/constants_' . $filename . '.php';
echo "<>";
?>
VR32.php:
<?
preg_match("/(.*\/)[^\/]*$/", $_SERVER[PHP_SELF], $match);
$incl_file = "http://$_SERVER[SERVER_NAME]$match[1]" . 'js_lite.php';
echo "<>";
require $incl_file . "?filename=VR32";
echo "<>\r\n";
echo "<>";
?>
вызывается файл VR32.php
в коде выглядит так:
<>
куча javascript
<>
<>
<>
потому что нельзя с помощью require передать GET-запрос скрипту
echo "<>";
require $incl_file . "?filename=VR32";
echo "<>\r\n";
но это противоречит тому, что выводит скрипт
require 'config/constants_' . $filename . '.php';
строку:
echo "<>";
получим:
<>
значит все передается
я щас с ума сойду
хуйня полная какая-то получается
require всего-навсего помещает код из указанного файла вместо себя. Как тут могут передаваться какие-то переменные?
сам попробуй
у тебя включены URL_fopen_wrappers, и require ты делаешь не так:
require ("../includes/a.php");
а вот так:
require ("http://myhost.com/includes/a.php?foo=bar");
поэтому скрипт http://myhost.com/includes/a.php?foo=bar выполняетя отдельно (в своей variable scope) и для него соответствующим образом вытаскиваются переменные из URL.
попробуй инклудить с помощью абсолютного пути, всё будет нормально
то есть получается нужно использовать абсолютный
но при абсолютном нельзя передавать GET запросы
блин
сплошные тонкости
заговорился
наоборот
получается, нужно использовать относительный?
З.Ы. Как раз год назад проблема была - пытался инклудить файл с другой машины, ессно, по абсолютному. В форумах меня обсмеяли и объяснили разницу между файловой системой и http
а в разнице между инклудом через wrapper (по протоколу ftp или http например, require ("http://myhost.com/a.php") и прямым инклудом с указанием абсолютного или относительного пути в файловой системе, например, require ("/var/www/includes/a.php") или require ("../includes/a.php"). А передавать переменные скрипту, который инклудишь, GET'ом - это изврат. Почитай про variable scope при require и include.
понял
а вот объясниет мне, зачем это сделано так?
чтобы программисты слишком быстро не программировали?
чтоб порнуху воровать сложнее было
Оставить комментарий
Biglem
такая конструкция:файл 1.php:
define('FOO', 'BAR');
файл 2.php:
require '1.php';
echo "FOO".FOO;
файл 3.php:
require '2.php';
echo "FOO".FOO;
открываем в браузере файл 3.php и видим:
FOOBAR
FOOFOO
а хочется:
FOOBAR
FOOBAR
почему так?
как с этим справиться?