Direttamente da Freephp un articolo di cui non avevamo parlato sul forum:
http://freephp.html.it/articoli/view_articolo.asp?id=61
Direttamente da Freephp un articolo di cui non avevamo parlato sul forum:
http://freephp.html.it/articoli/view_articolo.asp?id=61
w la topa
L'articolo è praticamente la pillola riveduta e corretta dopo un anno di prove pratiche.
Metto qui i ringraziamenti che ho dimenticato di inserire nella seconda versione
Skidx per aver letto l'articolo e avermi incoraggiato prima che fosse pubblicato.
E poi tutti quelli che lo hanno provato e in modo particolare
EdoardoP, Tuningvideo, MinistryofSound, Milo di NextItalia s.r.l
per favore NIENTE PVT TECNICI da sconosciuti
Script alternativo a quello presentato nell'articolo (usa un'espressione regolare, è più " fine" ma ora l'ho scartato perchè meno rapido)
<?php
/*
Compatibilità con vecchie versioni di php (se necessario)
Vedere pillola sulle "nuove variabili" del forumista Chris
nel forum php
if(!isset($_SERVER) OR !$_SERVER OR !is_array($_SERVER) OR count(array_diff($_SERVER, $HTTP_SERVER_VARS))){
$_GET=&$HTTP_GET_VARS;
$_POST=&$HTTP_POST_VARS;
$_SERVER=&$HTTP_SERVER_VARS;
$_ENV=&$HTTP_ENV_VARS;
$_COOKIE=&$HTTP_COOKIE_VARS;
$_FILES=&$HTTP_POST_FILES;
$_SESSION=&$HTTP_SESSION_VARS;
}
Fine compatibilità
*/
/*
Inizio script vero e proprio
*/
if(isset($_SERVER["PATH_INFO"])){
$separator1="/" ;
$separator2="=" ;
$collection=$_SERVER["PATH_INFO"] ;
/*
Sicurezza: controlla valori inseriti dall'utente
*/
$collection=strip_tags($collection) ;
$collection=escapeshellcmd($collection) ;
//Fine sicurezza
/*
Estrazione dei dati in array con espressione regolare PERL
*/
preg_match_all("|([^$separator1]+)$separator2([^$separator1]*)|",$collection,$matches) ;
$_MYVAR=array() ;
for($i=0;$i<count($matches[1]);$i++){
$_MYVAR[$matches[1][$i]]=$matches[2][$i] ;
}
/*
decommentare la riga qui sotto se si desidera
mantenere la compatibilità con script che "raccolgono" le variabili
da QUERY_STRING
*/
//$_GET=&$_MYVAR ;
/*
Solo dimostrativo non inserire nelle pagine
*/
print_r($_MYVAR);
}//end if isset(PATH_INFO)
?>
per favore NIENTE PVT TECNICI da sconosciuti
Marò, Fabio mi ringrazia pubblicamente, quale onore (e mi paga pure i caffè...)
Come al solito complimenti e grazie per il tempo che dedichi costantemente a questa comunita'
ma siccome sono un maledetto rompic*gli*ni e spesso troppo puntiglioso, tengo a precisare che ci sono imperfezioni nella pagina 2 dell' articolo.
Certo che chi copia e incolla lo script definitivo non ha niente da perdere, ma ki come me cerca di capire e magari rifare il tutto per i fatti suoi ed e' un po distratto, potrebbe incocciare in questo banale errore di scrittura:
Secondo il codice presentato precedentemente il foreach risulta sbagliato perche' $var in realta' non esiste. Va sostituito quindi con l' ultimo explode fatto precedentemente:Codice PHP:
<?php
/*
in questo punto va inserito il codice presentato fino ad ora
*/
$_PINFO=array() ;
foreach ($var as $key=>$value){
if(!($key%2)){
$_PINFO["$value"]=$var[$key+1] ;
}
}//END FOREACH
?>
Ancora complimenti! :metallicaCodice PHP:
// .... etc. etc ...
$collection = str_replace($separators[1], $separators[0], $collection);
/*
Ecco l'explode
*/
$new_array=explode($separators[0],$collection) ;
// a questo punto si dovra' aggiungere il seguente codice
$_PINFO=array() ;
foreach ($new_array as $key=>$value){
if(!($key%2)){
$_PINFO["$value"]=$var[$key+1] ;
}
}//END FOREACH
Ciao,
grazie a te di avermi sengalato la cosa!
Evidentemente facendo copia e incolla dalla precedente versione dell'articolo ho di menticato di modificare il nome della variabile.
Comunque lo script definitivo e anche la mini-classe funzionano perchè le ho fatte ex-novo.
Eventualmente se qualcos'altro che non va fammelo sapere....
per favore NIENTE PVT TECNICI da sconosciuti
scusate, sono incorso in un piccolo problema: abituato ad utilizzare i percorsi relativi per le immagini, quando c'è un indirizzo del tipo script.php/var_valore le immagini vengono cercate, appunto, in root/script.php/var_valore/images/immagine.gif.
Per ovviare ho modificato i link immagine mettendoli assoluti, utilizzando una costante da me definita che contiene i parametri HTTP_HOST e SCRIPT_NAME:
define("URL",$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']));
questo per mantenere la portabilità del sito su domini diversi (devo testarlo sul server di casa, ma poi pubblicarlo sul SUO dominio) ma vorrei sapere se non c'è un altra soluzione...
Ciao,
non so se ho capito
non sei obbligato ad utilizzare percorsi assoluti con http:// puoi ottenere comunque la portabilità utilizzando un percorso assoluto di questo tipo
/dir1/dir2/file.ext
anzichè
http://www.dom.it/dir1/dir2/file.ext
Il primo "/" rappresenta la root in qualsiasi sito tu sposti i tuoi file
nell'articolo ci sono i dettagli su come costruire automaticamente questo percorso
per favore NIENTE PVT TECNICI da sconosciuti
mi è venuta una curiosità...
non c'è un modo di ottenere direttamete le variabili senza l'array $_PINFO ???
cioè se c'ho un indirizzo cosi index.php/id=1 dovrebbe risultare nella pagina index.php una variabile (o costante) $id con valore 1...
in pratica si dovrebbe modificare l'ultimo ciclo FOREACH per creare ogni variabile... ma come?
io l'ho impostato in modo tale da poter usare $_GET come ho sempre fatto, cmq dovrebbe essere facile, una cosa del genere dovrebbe andar bene:La semplice modifica sta nel doppio segno dollaro, che dovrebbe creare una variabile che abbia come nome il valore di $value...Codice PHP:
if (isset($_SERVER["PATH_INFO"])) {
$separatori = array("/","_");
$vars = $_SERVER["PATH_INFO"];
$vars = substr($vars,1);
if (substr($vars,-1) == $separatori[0]) {$vars = substr($vars,0,-1);}
$vars = strip_tags($vars) ;
$vars = escapeshellcmd($vars);
$vars = str_replace($separatori[1], $separatori[0], $vars);
$vars = explode($separatori[0],$vars);
foreach ($vars as $key => $value) {
if (!($key%2)) {$$value = $vars[$key+1];}
}
}