вот конфиг PHP: $GLOBALS["user"] = "root"; $GLOBALS["password"] = "root"; $GLOBALS["server"] = "localhost"; $GLOBALS["database"] = "mazazin"; вот файл в котором использую PHP: include_once $_SERVER["DOCUMENT_ROOT"].("/config/config.php"); $db = ADONewConnection("mysql"); $db->Connect($server, $user, $password, $database); пивет indefined variable $server. я и глобальными пробывал делать и просто перемменными все = indefined. ошибки что файл не найден не выводит. стало быть оно его инклюдит. что это может быть. пишет что и другие переменные indefined. тоже даже если сделать так то не видит PHP: static $instance; static $server; static $user; static $password; static $database; PHP: include_once $_SERVER["DOCUMENT_ROOT"].("/config/config.php"); self :: $server = $GLOBALS["server"]; self:: $user = $GLOBALS["user"]; self :: $password = $GLOBALS["password"]; self :: $database = $GLOBALS["database"];
barnaki вы уверены что путь разрешается правильно (то что ошибок не выдается - не повод делать предположение, что все нормально)? Попробуйте во втором скрипте: PHP: var_dump($_SERVER["DOCUMENT_ROOT"].("/config/config.php")); var_dump(realpath($_SERVER["DOCUMENT_ROOT"].("/config/config.php"))); В первом - пропишите какой нибудь вывод текста
Gifts, где связь с неправильным инклудом и неопределенными переменными? вам не кажется что были бы ругательства в сторону include в случае неверного пути, или я не правильно понял суть вашего поста? Аффтар, вам советую юзать обычные переменные а не массивы глобалс. это всё от лукавого.
Чакэ при вычурных настройках error_reporting - нотайсы выводятся, а варнинги - нет. Например error_reporting(E_NOTICE); barnaki все таки сделайте вывод текста в первом скрипте. Плюс в обоих - error_reporting(E_ALL); перед инклудом и перед заданием переменных
текст если вписать в подключаемый файл выводится. error_reporting только что проверил стоит E_ALL дописал PHP: var_dump(realpath($_SERVER["DOCUMENT_ROOT"].("/config/config.php"))); error_reporting(E_ALL); $db = ADONewConnection("mysql"); $db->Connect($server, $user, $password, $database); и в подключаемом файле тоже самое. и нечего не выводит.кроме того что переменные не объявлены
я сделал var_dump($GLOBALS["user"]); на строку ниже чем объявляю ее и оно все нормально вывело string 4 "root" но там по прежнему не видит
блин я уже вообще нечего не понимаю. я делаю PHP: var_dump(realpath($_SERVER["DOCUMENT_ROOT"].("/config/config.php"))); echo "<br>"; var_dump($GLOBALS["user"]); echo "<br>"; self :: $server = $GLOBALS["server"]; echo "$server"."hello"; error_reporting(E_ALL); $db = ADONewConnection("mysql"); $db->Connect($server, $user, $password, $database); и тут оно видит глобальную переменную. но как я ни пытался но переменной public static $user; я значение глобальной переменной присвоить не смог. почему оно не присваивает ? можно конечно в функцию conecta впихнуть прямо глобальные переменные но вопрос все = остается открытым
barnaki подождите, вы случайно не пытаетесь проинклудить файл внутри функции? Если да, то не стоит использовать массив GLOBALS для установки локальных переменных внутри функции - простите за путанную фразу... 2) Вы уверены, что вы не инклудите файл с конфигом в каком либо другом месте? Т.е. попробуйте вместо include_once использовать просто include
я инклюжу этот файл внутри конструктора. а переменные вызываю внутри метода. глобальные видит но не приравнивет даже простым переменным значение этих глобальных если в connect впихнуть сразу глабольные переменные то все работает. это из за того что я это в функции делаю ?
barnaki тяжело читается ваш последний пост. Суть - при инклуде файла внутри функции, все переменные из файла импортируются в локальную область видимости этой функции. При этом массив $GLOBALS являясь суперглобальным нормально принимает в себя ваши переменные. Но вот тут то начинается ПХПшная магия - Функции в ПХП не имеют доступа к глобальным переменным, если их об этом не предупредить. Хоть вы и импортировали в глобальную область видимости свои переменные (те которые начинаются на $GLOBALS), внутри метода вы не объявляете с помощью ключевого слова global - что эти переменные следует искать в глобальной области видимости. В общем вот пример bar1.php: PHP: $GLOBALS["user"] = "root"; $user2 = 'root2'; bar2.php: PHP: error_reporting(E_ALL); class test_include { function __construct() { include "dev".("/bar1.php"); echo "\r\n_construct>User:".$user."\r\n"; // Вызовет ошибку, ПХП пытается обратиться к ЛОКАЛЬНОЙ переменной, а переменная $user после инклуда находится в глобальной области видимости echo "\r\n_construct>User2:".$user2."\r\n"; // Нормально выведется, так как $user2 - локальная переменная, т.к. инклуд произошел внутри функции echo "\r\n_construct>Globals_User:".$GLOBALS['user']."\r\n"; // Выведется нормально, так как мы обращаемся к суперглобальному массиву $GLOBALS, в который после инклуда попала наша переменная global $user, $user2; // Объявляем интерпретатору, что переменные $user, $user2 следует искать в глобально области видимости echo "\r\n_construct>keyword_User:".$user."\r\n"; // Выведет наше значение, т.к. переменная уже глобальна echo "\r\n_construct>keyword_User2:".$user2."\r\n"; // Не выведет ничего (это кстати говоря странно, должна быть ошибка) } function test() { echo "\r\n======FUNCTION======\r\n"; echo "\r\n_method>User:".$user."\r\n"; // Ошибка, по той же причине, что и в конструкторе echo "\r\n_method>User2:".$user2."\r\n"; // Ошибка, переменная была проинклужена в другой функции, здесь она уже не будет видима echo "\r\n_method>Globals_User:".$GLOBALS['user']."\r\n"; // Опять таки все выведется, мы обращаемся к глобальной переменной global $user, $user2; // уже было echo "\r\n_method>keyword_User:".$user."\r\n"; // Будет выведено наше значение из глобальной области видимости echo "\r\n_method>keyword_User2:".$user2."\r\n"; // Пусто, в глобальной области видимости такой переменной не существует } } $test_obj = new test_include(); $test_obj->test(); Какой выход из этого? 1) Не инклудить никогда файлы внутри функций, если вы не имеете абсолютной уверенности, что вам это нужно и вы знаете как это работает 2) Внутри функций объявлять переменные глобальными, с помощью ключевого слова global (естественно, вам нужно помнить, что они действительно глобальные, и действительно вам нужны) 3) Либо вы можете использовать внутри функций массив $GLOBALS для доступа к глобальным переменным 4) Вы _можете_ инклудить файл внутри конструктора, но потрудитесь "забрать" переменные из локальной области видимости и прописать их в аттрибуты класса, далее стандартно с ними работайте. (ключевые слова self и $this внутри файла, который инклудите - работать не будут. Просто не будут..) 5) Используйте наследование 6) Не используйте уличную магию З.Ы., я чуть было в чудеса из за вас не поверил. В след раз пишите ВЕСЬ код, а не огрызки из разных частей...