2012-05-18 3 views
5

Я пытаюсь импортировать некоторые переменные из скрипта PHP. Кажется простым, но я не могу заставить его работать.Доступ к глобальным переменным в отдельном PHP-скрипте?

Сценарий содержит некоторые глобальные переменные, как, что:

$server_hostname = "localhost"; 
$server_database = "kimai"; 
$server_username = "root"; 
$server_password = ""; 
$server_conn  = "mysql"; 
$server_type  = ""; 
$server_prefix = "kimai_"; 
$language  = "en"; 
$password_salt = "7c0wFhYHHnK5hJsNI9Coo"; 

Тогда в моем сценарии, я хотел бы получить доступ к этим переменным, так что я сделал:

require_once 'includes/autoconf.php'; 
var_dump($server_hostname); 

Но это просто выводит НОЛЬ. Я также пробовал:

require_once 'includes/autoconf.php'; 

global $server_hostname;  
var_dump($server_hostname); 

но все еще не работает.

Я добавил несколько операторов echo в файл «autoconf.php», поэтому я знаю, что он загружается.

Любая идея, как я могу получить доступ к этим переменным?

+0

Если они определены в функции, то они будут закрыты для этой функции. Даже если вы используете глобальные в других местах – IEnumerable

+0

Они не функционируют. Код, который я опубликовал, - это полный код. –

+0

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

ответ

2

Оказывается файл был включен где-то в приложении, поэтому, когда я звонил require_once, файл был не включен вообще. Я изменил его на require, и теперь он работает.

2

Вы должны определить переменную как глобальная первая:

global $server_hostname; 
$server_hostname = "localhost"; 
+1

Но так или иначе, я не думаю, что это необходимо, если вы позже сделаете inlude или require, он должен работать так же, как вы пытались. – djot

+1

Я понимаю, что переменные, объявленные вне любой функции или блока, уже находятся в глобальной области (http://php.net/manual/en/language.variables.scope.php) Также я не могу изменить этот скрипт напрямую, поэтому мне нужно для доступа к переменным другим способом. –

+0

Они находятся в глобальной области действия, но в других файлах или функциях вам необходимо добавить глобальные $ varname; – IEnumerable

1

Возможно, файл не был включен должным образом.

require_once 'includes/autoconf.php'; 

проверка текущего каталога работа, где вы включаете autoconf.php

попробовать это

if (file_exists('includes/autoconf.php')) require_once 'includes/autoconf.php'; 
else echo 'File not exists'; 

, чтобы проверить его.

0

Как насчет использования константы?

define ("server_hostname", "localhost"); define ("server_hostname", "localhost");

+0

Я не могу изменить код в этом файле autoconf.php. Конечно, если бы я мог просто избегать использования какой-либо глобальной переменной. –

+0

ИСТИНА, но это не константа, а не переменная – IEnumerable

+1

, которая в любом случае является семантической. Тот факт, что переменная не загружена, означает, что константа также не будет загружена. Является проблемой загрузки. –

0

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

Перейти к вашей php.ini и положить display_errors = О и ошибки в E_ALL так вы увидите, что является правильной причиной.

0

Это зло, но оно может выполнить свою работу.

<? //PHP 5.4+ 
\call_user_func(static function(){ 
    $globals = \get_defined_vars(); 
    include 'includes/autoconf.php'; 
    $newVars = \array_diff_key($globals, \get_defined_vars()); 
    foreach($newVars as $name => $value){ 
     \define($name, $value); 
    } 
}); 
//Variables defined in file are now constants! 
?> 
Смежные вопросы