Sto uscendo pazzo.. davvero..
sono due giorni che cerco di capire dove sia l'errore che ho commesso in una pagina.. ma non riesco a trovarlo..
vi riporto qui il codice base:
Ho inserito tanti commenti per permettervi di capire a cosa serve lo script..Codice PHP:
<?php
error_reporting(E_ALL);
#dati del db
$hostname="censured";
$username="censured";
$password="censured";
$database="censured";
#connessione al db
$db_conn=@mysql_connect($hostname,$username,$password) OR die("Impossibile stabilire il collegamento!");
$db_select=@mysql_select_db($database,$db_conn) OR die("Impossibile selezionare il database!");
#query per selezionare i map.sql da importare
$sql="SELECT * FROM `server` WHERE 1";
$result=@mysql_query($sql) OR die("Impossibile selezionare i record dalla tabella [b]server[/b]");
#ciclo while
while ($row=mysql_fetch_assoc($result)) {
#importazione del map.sql
system("wget [url]http://[/url]{$row['indirizzo']}/map.sql -O maps/map.sql");
#controllo sulla riuscita dell'operazione
if (file_exists("maps/map.sql") AND filesize("maps/map.sql")) {
#apertura del map.sql in lettura e scrittura
$handle=fopen("maps/map.sql","r+");
#lettura dei contenuti del map.sql
$contents=fread($handle,filesize("maps/map.sql"));
#modifica della tabella di destinazione
$new=str_replace("INSERT INTO `x_world`","INSERT INTO `{$row['abbreviazione']}_world`",$contents);
#chiusura del file
fclose($handle);
#cancellazione del file map.sql temporaneo
unlink("maps/map.sql");
#creazione del nuovo map.sql
$handle=fopen("maps/map.sql","w+");
fwrite($handle,$new);
#chiusura del file
fclose($handle);
#svuotamento della tabella di destinazione
$sql= "TRUNCATE TABLE `{$row['abbreviazione']}_world`";
$result=@mysql_query($sql) OR die("Impossibile svuotare la tabella!");
#importazione del map.sql
system("mysql --host=$hostname --user=$username --password=$password --default-character-set=utf8 $database < maps/map.sql");
echo "Aggiornamento del [b]{$row['indirizzo']}[/b] riuscito!";
} else {
echo "Il download è fallito, oppure il file map.sql era vuoto!";
}
if (file_exists("maps/map.sql")) {
unlink("maps/map.sql");
}
}
?>
ma ve lo spiego in breve qui..
La prima parte è per la connessione al DB.
Dopodiché c'è una query (SELECT * FROM `server` WHERE 1) che seleziona tutti i dati contenuti nella tabella server.. sono 4 righe di 3 colonne che hanno la seguente struttura:
id|indirizzo|abbreviazione
e.g.:
1|s3.travian.it|it3
Dopo trasferisco i record nel'array $row, ed inizio l'importazione del file richiesto (http://{$row['indirizzo']}/map.sql) tramite wget.
Dopo aver effettuato il controllo (tramite if) sull'effettiva importazione del file procedo ad aprire lo stesso in modalità r (lettura), lo leggo tramite fread e ne trasferisco il contenuto nella variabile $contents. Effettuo uno str_replace sostituendo alla dicitura standard INSERT INTO `x_world`quella che mi serve, e cioè INSERT INTO `{$row['abbreviazione']}_world`.
Chiudo il file, e lo cancello tramite unlink.
Ora creo quel file che avevo precedentemente eliminato tramite fopen in modalità w (scrittura) e lo riempio con la variabile $new (contenente il risultato della str_replace precedente); poi chiudo il file.
Ora tocca all'importazione di quei dati nel database. Essendo un aggiornamento devo svuotare la tabella di destinazione (TRUNCATE TABLE `{$row['abbreviazione']}_world`) dopodiché tramite la funzione system importo il map.sql nel database e stampo a video la stringa "Aggiornamento del {$row['indirizzo']} riuscito!".
Finita l'importazione elimino il file, se esistente, tramite unlink.
Ecco spiegato il funzionamento.. questo procedimento dovrebbe essere svolto tante volte quante quella delle righe presenti nella tabella server.. che sono 4..
ma quando vado ad eseguire lo script mi esegue il ciclo solo una volta..
p.s.: error_reporting settato a 6135 cosa fa? non l'avevo mai sentito impostato così.. :S
Grazie mille per l'aiuto che spero mi darete..