[PHP] не видно константы при require
блин
вот этот конкретный пример работает как я хочу как раз
а у меня вроде то же самое
но не работает
вот этот конкретный пример работает как я хочу как раз
а у меня вроде то же самое
но не работает
ну так дай свое "то же самое"
проверь, может есть файлы, которые имеют такие же имена только находятся в другом каталоге (уровнем выше, например и ты случайно не тот файл инклудишь?
А ещё - такой эффект замечается при запуске отладки с помощью Zend 5
А ещё - такой эффект замечается при запуске отладки с помощью 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
<>
<>
<>
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 'config/constants_' . $filename . '.php';
строку:
echo "<>";
получим:
<>
значит все передается
я щас с ума сойду
хуйня полная какая-то получается

какой-то бред.
require всего-навсего помещает код из указанного файла вместо себя. Как тут могут передаваться какие-то переменные?
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.
попробуй инклудить с помощью абсолютного пути, всё будет нормально
у тебя включены 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 запросы
блин
сплошные тонкости
то есть получается нужно использовать абсолютный
но при абсолютном нельзя передавать GET запросы
блин
сплошные тонкости
тьфу ты
заговорился
наоборот
получается, нужно использовать относительный?
заговорился
наоборот
получается, нужно использовать относительный?
именно
З.Ы. Как раз год назад проблема была - пытался инклудить файл с другой машины, ессно, по абсолютному. В форумах меня обсмеяли и объяснили разницу между файловой системой и http
З.Ы. Как раз год назад проблема была - пытался инклудить файл с другой машины, ессно, по абсолютному. В форумах меня обсмеяли и объяснили разницу между файловой системой и 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.
а в разнице между инклудом через 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
почему так?
как с этим справиться?