2012-05-18 12 views
5

Sto cercando di importare alcune variabili da uno script PHP. Sembra semplice ma non riesco a farlo funzionare.Accesso a variabili globali in uno script PHP separato?

Lo script contiene alcune variabili globali del genere:

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

Poi, nel mio script, vorrei accedere a queste variabili, così ho fatto:

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

Ma questo solo uscite NULLO. Ho anche provato:

require_once 'includes/autoconf.php'; 

global $server_hostname;  
var_dump($server_hostname); 

ma ancora non funziona.

Ho aggiunto alcune istruzioni echo nel file "autoconf.php", quindi so che è in fase di caricamento.

Qualche idea su come accedere a queste variabili?

+0

Se sono definiti in una funzione, saranno privati ​​di quella funzione. Anche se si utilizza l'ambiente globale altrove – IEnumerable

+0

Non sono in una funzione. Il codice che ho postato è il codice completo. –

+0

hai altri errori tranne che la variabile non sembra essere nello spazio dei nomi? attivare l'output dell'errore se gli errori sono nascosti. –

risposta

2

Si scopre che il file è stato incluso da qualche altra parte l'applicazione in modo che quando stavo chiamando require_once, il file non veniva escluso del tutto. L'ho cambiato in solo require e ora funziona.

2

è necessario definire la variabile come prima mondiale:

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

Ma in ogni caso, non penso che ciò sia necessario se in seguito lo si fa o lo richiede, dovrebbe funzionare proprio come hai provato. – djot

+1

La mia comprensione è che le variabili dichiarate al di fuori di qualsiasi funzione o blocco sono già nello scope globale (http://php.net/manual/en/language.variables.scope.php) Inoltre non posso modificare direttamente questo script quindi ho bisogno per accedere alle variabili in un altro modo. –

+0

Sono nello scope globale ma in altri file o funzioni è necessario aggiungere global $ varname; – IEnumerable

1

Forse il file non è stato incluso in modo corretto.

require_once 'includes/autoconf.php'; 

controllo directory di lavoro corrente in cui si include autoconf.php

provare questo

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

di check it out.

0

Come utilizzare una costante?

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

+0

Non riesco a cambiare il codice in questo file autoconf.php. Certo, se potessi, eviterei semplicemente di usare qualsiasi variabile globale. –

+0

TRUE ma non è una costante, non variabile – IEnumerable

+1

che è comunque semantica. Il fatto che una variabile non sia caricata, significa che anche la costante non verrà caricata. È un problema di caricamento. –

0

Se si include il file e la variabile è in un testo semplice, e non all'interno di una funzione/classe funziona senza l'globale

Vai al tuo php.ini e mettere display_errors = On e gli errori a E_ALL così vedrai quale è la ragione corretta

0

Questo è male, ma potrebbe portare a termine il lavoro.

<? //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! 
?>