Ciao a tutti,
per la creazione di un nostro modulo, abbiamo bisogno di andare a modificare da codice una riga del file Settings.php.
Nello specifico, dobbiamo inserire (se non esiste) o modificare (se esiste) la riga che contiene i dati per l'accesso ad un db esterno(moodle nel nostro caso).
Questo è quello che abbiamo scritto:
$found = false;
$name=$form['values']['db_name'];
$user=$form['values']['user'];
$pass=$form['values']['password'];
$address=$form['values']['server_address'];
$f = fopen('///opt/lampp/htdocs/drupal/sites/default/settings.php', 'r+');
while($line = fgets($f)) {
if(preg_match("/(\['moodle'\])+/", $line)) {
$found = true;
fputs($f, preg_replace($line, "\$db_url['moodle'] = 'mysqli://".$user.":".$pass."@".$address."/".$name."';", $line));
break;
}
}
if(!$found) {
fputs($f, "\$db_url['moodle'] = 'mysqli://".$user.":".$pass."@".$address."/".$name."';");
}
fclose($f);
Il risultato però è:
1- Se la stringa non esiste viene inserita la stringa corretta alla fine del file
2- Se la stringa esiste, viene copiata la stessa nella riga successiva.
Qualcuno ha idea di dove si trovi l'errore?
Grazie mille in anticipo per l'attenzione!
Una curiosità: ti serve lo script per ogni installazione o quando? Che link utilizzi? Sai mi sembra solo una parte di codice perchè $name=$form['values']['db_name']; significa che c'è un form da qualche parte.
Se mi dai delucidazioni posso capire meglio.
Ps: $f = fopen('///opt/lampp/htdocs/drupal/sites/default/settings.php', 'r+'); r+ significa: apre un file esistente per operazioni di lettura e scrittura. I contenuti del file, nel caso esista già, rimangono inalterati ma la file position è settata a 0 cosicchè si possa procedere alla sovrascrittura.
Il comportamento è quanto indicato nel codice, tu stai dicendo:
Apri il file
Scorri ogni linea del file
Controlla se la riga contiene
['moodle']
:Se la contiene setta la variabile trovato a true..
Inserisci in fondo al file che hai aperto prima, la riga di connessione precedentemente trovata, sostituita con quella precedente
Termina il loop
Se non trovi nulla aggiungi una nuova riga
Chiudi il file
Mentre credo tu debba andare a fare la sostituzione della riga nel fil, ad esempio (tanto per farti capire, NON è un codice fatto bene), farei:
Ciao
Marco
--
My blog
Working at @agavee
Intanto grazie a tutti per le risposte.
Girovagando su internet per qualche giorno alla fine siamo giunti a questa conclusione. non so se è quella migliore, in ogni caso fa al caso nostro =)
@danzisiweb:
Questa è la funzione submit di un form che imposta i settings del nostro modulo, quindi non deve essere eseguita solo all'installazione, ma potenzialmente anche altre volte.
@mavimo:
Se ho capito bene la soluzione che hai proposto, pare che tu crei un nuovo file e poi vai ad inserire la riga necessaria su quello. Noi dobbiamo in ogni caso andare a modificare l'originale =)
Ancora una domanda (scusate se abusiamo della vostra pazienza),
attualmente noi passiamo il path assoluto del file Settings.php, però questo è valido solo nel caso in cui si utilizzi lampp.
Attualmente la cartella di lavoro è opt/lampp/htdocs/drupal/module/moodledata, mentre il file settings.php si trova in opt/lampp/htdocs/drupal/sites/defalut.
Come possiamo andare indietro di due cartelle (ripartendo da drupal per intendersi) così da poter passare ad fopen un path che sia valido per tutti?
@buribasi: si era solo per farti capire il motivo dell'"errato funzionamento" di quello che stavi facendo (in realtà stava facendo quello che gli chiedevi :) )
Potresti fare anche solo uno spostamento dei file alla fine ;)
settings.php -> settings-old.php
settings-new.php -> settings.php
Ciao
Marco
--
My blog
Working at @agavee