Una classe PHP per recuperare regioni province e citta da file


class CRegione
{
var $id;
var $ripartizioneGeografica;
var $codice;
var $nome;

function CRegione($id, $ripartizioneGeografica, $codice, $nome)
{
$this->id = trim($id);
$this->ripartizioneGeografica = trim($ripartizioneGeografica);
$this->codice = trim($codice);
$this->nome = trim($nome);
}

function CreaTabellaSQL()
{
return "CREATE TABLE regioni(id int not null auto_increment primary key, ripartizione_geografica tinytext, codice int, nome tinytext);\n";
}

function GeneraSQL()
{
$arrValori = array(
'"'.$this->ripartizioneGeografica.'"',
'"'.$this->codice.'"',
'"'.$this->nome.'"'
);
$strValori = implode(',', $arrValori);
$sql="INSERT INTO regioni(ripartizione_geografica, codice, nome) VALUES (".$strValori.");\n";
return $sql;
}
}

class CProvincia
{
var $id;
var $codiceRegione;
var $codice;
var $nome;
var $sigla;

function CProvincia($id, $codiceRegione, $codice, $nome, $sigla)
{
$this->id = trim($id);
$this->codiceRegione = trim($codiceRegione);
$this->codice = trim($codice);
$this->nome = trim($nome);
$this->sigla = trim($sigla);
}
function CreaTabellaSQL()
{
return "CREATE TABLE province(id int not null auto_increment primary key, codice_regione int, codice int, nome tinytext, sigla tinytext);\n";
}

function GeneraSQL()
{
$arrValori = array(
'"'.$this->codiceRegione.'"',
'"'.$this->codice.'"',
'"'.$this->nome.'"',
'"'.$this->sigla.'"'
);
$strValori = implode(',', $arrValori);
$sql="INSERT INTO province(codice_regione, codice, nome, sigla) VALUES (".$strValori.");\n";
return $sql;
}

}

class CComune
{
var $id;
var $codiceProvincia;
var $codice;
var $nome;

function CComune($id, $codiceProvincia, $codice, $nome)
{
$this->id = trim($id);
$this->codiceProvincia = trim($codiceProvincia);
$this->codice = trim($codice);
$this->nome = trim($nome);
}
function CreaTabellaSQL()
{
return "CREATE TABLE comuni(id int not null auto_inc
rement primary key, codice_provincia int, codice int, nome tinytext);\n";
}

function GeneraSQL()
{
$arrValori = array(
'"'.$this->codiceProvincia.'"',
'"'.$this->codice.'"',
'"'.$this->nome.'"'
);
$strValori = implode(',', $arrValori);
$sql="INSERT INTO comuni(codice_provincia, codice, nome) VALUES (".$strValori.");\n";
return $sql;
}
}

// Inizializza gli array
$arrRegioni = array();
$arrProvince = array();
$arrComuni = array();

// LEGGE IL FILE DELLE REGIONI E PROVINCE
$fh = fopen('regioni_province.csv', 'r');
fgets($fh, 4096); // Salta la prima riga
while (!feof($fh)) {
$buffer = fgets($fh, 4096);
$arrTemp = split(';',$buffer);

list($ripartizioneGeografica, $codiceRegione, $nomeRegione, $codiceProvincia, $nomeProvincia, $siglaProvincia) = $arrTemp;

// Aggiunge la regione in archivio
$regione = new CRegione($codiceRegione, $ripartizioneGeografica, $codiceRegione, $nomeRegione);
if ($nomeRegione != '') $arrRegioni[$codiceRegione] = $regione;
$provincia = new CProvincia($codiceProvincia, $codiceRegione, $codiceProvincia, $nomeProvincia, $siglaProvincia);
if ($nomeProvincia != '') $arrProvince[$codiceProvincia] = $provincia;
}
fclose($fh);

// LEGGE IL FILE DEI COMUNI
$fh = fopen('comuni.csv', 'r');
fgets($fh, 4096); // Salta la prima riga
while (!feof($fh)) {
$buffer = fgets($fh, 4096);
$arrTemp = split(';',$buffer);

list($codiceProvincia, $codiceComune, $nomeComune) = $arrTemp;

// Aggiunge la regione in archivio
$comune = new CComune($codiceComune, 
$codiceProvincia, $codiceComune, $nomeComune);
if ($nomeComune != '') $arrComuni[$codiceComune] = $comune;
}
fclose($fh);

$sql = CRegione::CreaTabellaSQL();
foreach($arrRegioni as $temp)
{
$sql.=$temp->GeneraSQL();
}

$sql .= CProvincia::CreaTabellaSQL();
foreach($arrProvince as $temp)
{
$sql.=$temp->GeneraSQL();
}

$sql .= CComune::CreaTabellaSQL();
foreach($arrComuni as $temp)
{
$sql.=$temp->GeneraSQL();
}

// INVIA IL FILE SQL DELLE REGIONI
$nomeFile = 'regioni_province_comuni.gzip';
$content = gzencode($sql);
header("Content-type: Application/octet-stream");
header("Content-Disposition: attachment; filename=$nomeFile");
header("Content-Description: Download PHP");
header("Content-Length: ".strlen($content));
echo $content;
?>