2012-05-18 10 views
5

Estoy tratando de importar algunas variables de un script PHP. Parece simple, pero no puedo hacer que funcione.¿Accediendo a variables globales en un script PHP separado?

El guión contiene algunas variables globales como que:

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

Luego, en mi guión, me gustaría acceder a estas variables, por lo que he hecho:

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

Pero esto sólo da salida NULO. También lo intenté:

require_once 'includes/autoconf.php'; 

global $server_hostname;  
var_dump($server_hostname); 

pero todavía no funcionaba.

He agregado algunas declaraciones echo en el archivo "autoconf.php", así que sé que se está cargando.

¿Alguna idea de cómo podría acceder a estas variables?

+0

Si se definen en una función, será privado para esa función. Incluso si usa global en otro lugar – IEnumerable

+0

No están en una función. El código que publiqué es el código completo. –

+0

¿Tiene algún otro error, excepto que la variable no parece estar en el espacio de nombres? active la salida de error si los errores están ocultos. –

Respuesta

2

Resulta que el archivo se ha incluido en otra parte de la aplicación así que cuando me estaba llamando require_once, el archivo no estaba incluido en absoluto. Lo cambié a solo require y ahora funciona.

2

tiene que definir la variable como primer mundial:

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

Pero, de todos modos, no creo que esto sea necesario si luego haces un inluido o lo requieres, debería funcionar igual que lo has intentado. – djot

+1

Según tengo entendido, las variables declaradas fuera de cualquier función o bloque ya se encuentran en el ámbito global (http://php.net/manual/en/language.variables.scope.php) Además, no puedo modificar este script directamente, así que necesito para acceder a las variables de otra manera. –

+0

Están en el ámbito global pero en otros archivos o funciones necesita agregar global $ varname; – IEnumerable

1

Tal vez el archivo no se incluyó correctamente.

require_once 'includes/autoconf.php'; 

cheque directorio de trabajo actual en la que se incluye autoconf.php

prueba este

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

a echar un vistazo.

0

¿Qué le parece usar una constante?

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

+0

No puedo cambiar el código en este archivo autoconf.php. Por supuesto, si pudiera, simplemente evitaría usar cualquier variable global. –

+0

TRUE pero no es esto una constante, no variable – IEnumerable

+1

que es semántica de todos modos. El hecho de que una variable no esté cargada significa que la constante no se cargará también. Es un problema de carga. –

0

Si se incluye el archivo y la variable es en un texto plano, y no dentro de una función/clase funciona sin el mundial

Ir a su php.ini y poner display_errors = On y errores E_ALL por lo Verá cuál es la razón correcta

0

Esto es malo, pero puede hacer el trabajo.

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