Newsgroup: it.comp.www.php
Titolo: Recuperare una variabile sconosciuta con Global

Ho un sistema in php che ha un file di configurazione con variabili che 
possono cambiare nome e in numero e una funzione che dovrebbe chiamarle.
In pratica ho un primo file che richiama il file di configurazione e il 
file con la funzione:
//file main.php
require_once("../config.php");
require_once("../functions.php");
In config.php c'è qualcosa del tipo:
$a = "asdfghj";
$b = "qwertyu";
...
In functions.php ho la funzione:
function GET_CONFIG_VALUES()...
Il problema è che le variabili possono cambiare e quindi dovrei andare a 
cambiare il global sotto GET_CONFIG_VALUES() ogni volta.
Vorrei chiamare una funzione col nome della variabile che voglio, del tipo:
function GET_CONFIG_VALUE($var) {
	global $var;
	return $var;
}
e quindi:
GET_CONFIG_VALUE("A");
Non so se in PHP una cosa del genere funziona o se c'è un altro metodo.
Grazie anticipatamente per l'aiuto.
Max

file con la funzione:
Questa cosa qua la puoi fare gia' scrivendo semplicemente
	$_GLOBALS['a'];
dove ora scrivi GET_CONFIG_VALUE("a"), senza bisogno di altro o di avere
la funzione.
Ma non e' una buona pratica perche' non distingui fra variabili nate nel
file di configurazione e variabili create chissa' dove chissa' da chi.
Ti converrebbe piuttosto qualcosa del tipo:
; Questo è il file config.ini, che ha il vantaggio di essere capito
; da parecchi tool anche visuali, anche via web, anche AJAX :-)
[sezione]
a	= "asdfghi"
b	= "qwertyu"
[ui]
backgroundColor = "#c0c0c0"
<?php
	function get_config_values($value, $default = false)
	{
		GLOBAL	$_MyConfigInfo;
		if (!isset($_MyConfigInfo))
		{
			$_MyConfigInfo = parse_ini_file('config.ini',
true);
		}
		$section= 'main';
		$raw	= explode('.', $value);
		if (1 == count($raw))
			$key	= $raw[0];
		else
			list($section, $key) = $raw;
		if (isset($_MyConfigInfo[$section]))
		{
			$sec	= $_MyConfigInfo[$section];
			if (isset($sec[$key]))
				$default = $sec[$key];
		}
		return $default;
	}
?>
Con questa funzione puoi richiedere valori come:
	get_config_values('pippo');
oppure
	get_config_values('main.backgroundColor');
	get_config_values('ui.backgroundColor');
ed essere abbastanza sicuro che i dati vengano proprio da quel file ini.
Leonardo
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!

	$_GLOBALS['a'];
o più esattamente $GLOBALS['a'];
A differenza di _SESSION, _POST e _GET, GLOBALS non ha underscore.
http://php.net/manual/en/reserved.variables.globals.php


> file con la funzione:
[CUT]
Ti ringrazio per l'esempio. Forse la soluzione è proprio questa. Il file 
però è originalmente un php con le dichiarazioni di variabili.
Se volessi trasformare velocemente i dati in variabili nella funzione 
che hai scritto?
Cioé:
//config.ini
a = "xyz"; //testo
diventa:
$a = "xyz";
Thanks.

$a = "xyz";
Problema interessante. Senza impegno:
<?php
	// Funzione che viene comoda comunque
        function saveini($ini, $info = array())
        {
                $text   = '';
                foreach($info as $section => $data)
                {
                        if (empty($data))               continue;
                        if ('' == trim($section))       continue;
                        $text .= "[$section]\n\n";
                        foreach($data as $key => $values)
                        {
                                if (is_array($values)) $key.='[]';
                                else	$values = array($values);
                                foreach($values as $value)
                                        $text.=	"$key\t= \"".
 						str_replace(array('"'),
						array("'"),$value).
						"\"\n";
                        }
                        $text .= "\n";
                }
                if (false === $ini)
                        return $text;
                $bak    = $ini.'.bak';
                $new    = $ini.'.new';
                $fp     = fopen($new, 'w');
                fwrite($fp, $text);
                fclose($fp);
                @unlink($bak);
                rename($ini, $bak);
                rename($new, $ini);
        }
	// Si includono le variabili preesistenti
	require 'config.php';
	// Si recuperano alla bruttaèva
        $_xy10  = get_defined_vars();
foreach(explode(',','GLOBALS,_POST,_GET,_REQUEST,_COOKIE,_SESSION,_FILES')
		as $_xy12)
                unset($_xy10[$_xy12]);
 	// Si costruisce un array che passato a saveini() mi dia un file
	// compatibile con la funzione get_var vista nell'altro post, e
	// si salva.
        saveini('config.ini', array('main' => $_xy10));
?>
