Codice PHP:
$Nome_File="";
$num_array_item=0;
$num_array_qty=0;
$num_array_gen=0;
$elementi=0;
$errore_tag=0;
$ver_error=0;
$flussi_dir='E:/TFlussi';
$VERSIONE_SW="0.1b";
$VERSIONE_BUILD="20050804 - Beta";
$LOG_FILE="prog_load.log";
$PATH_LOG="E:/TFlussi/";
$lista_file=array();
//apertura del file di log
//------------------------
$fp1=fopen($PATH_LOG.$LOG_FILE,'a+');
$data_partenza=date("j F Y - H:i:s");
fwrite($fp1,"-------------------------------------\n");
fwrite($fp1,"Load XML - Caricamento File ordini\n");
fwrite($fp1,"-------------------------------------\n");
fwrite($fp1,"Versione : ".$VERSIONE_SW."\n");
fwrite($fp1,"Building : ".$VERSIONE_BUILD."\n");
fwrite($fp1,"-------------------------------------\n");
fwrite($fp1,$data_partenza."\n");
fwrite($fp1,"====================================\n");
//Apertura della direcotry contenente i flussi
//--------------------------------------------
if ($handle = opendir($flussi_dir)) {
while (false !== ($file = readdir($handle))) {
/*if ($file != "." && $file != ".." && substr($file,strlen($file)-3,3)!="old"
&& substr($file,strlen($file)-3,3)!="log" */
if (substr($file,strlen($file)-3,3)==="dat"
) {
$lista_file[]=$file;
}
}
closedir($handle);
}
if (count($lista_file)==0) { fwrite($fp1,"Non ci sono ordini da caricare \n\n");die();}
for ($c=0;$c<count($lista_file);$c++)
{
//Creazione del parser XML e inseriment in struttura
//--------------------------------------------------
$data = implode("", file($flussi_dir."/".$lista_file[$c]));
$p = xml_parser_create();
//xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($p, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($p, $data, $vals, $index);
xml_parser_free($p);
//Recupero del numero elementi
//----------------------------
$elementi=count($vals);
//Stampa del nome file elaborato
//------------------------------
fwrite($fp1,"Nome del file elaborato : ".$lista_file[$c]."\n");
//Controllo Tag di apertura e chiusura file
//-----------------------------------------
if ($vals[0]["tag"]=="RECORDSET" &&
$vals[$elementi-1]["tag"]=="RECORDSET" &&
$vals[0]["type"]== "open" &&
$vals[$elementi-1]["type"] == "close"
)
{
fwrite($fp1,"Parsing OK\n");
}
else
{
fwrite($fp1,"Parsing Fallito\nImpossibile effettuare l'inserimento\n");
fwrite($fp1,"tag apertura = ".$vals[0]["tag"]." valore =".$vals[0]["type"]."\n");
fwrite($fp1,"tag chiusura = ".$vals[$elementi-1]["tag"]." valore =".$vals[$elementi-1]["type"]."\n");
die();
}
if (!array_key_exists("EMISSIONDATE",$index)) { fwrite($fp1,"ERRORE: Data emissione Mancante\n"); $errore_tag=1;}
if (!array_key_exists("OWNER_ID",$index)) { fwrite($fp1,"ERRORE: Proprietario Mancante \n"); $errore_tag=1;}
if (!array_key_exists("ORD_NUM",$index)) { fwrite($fp1,"ERRORE: Numero ordine Mancante\n"); $errore_tag=1;}
if (!array_key_exists("ORD_DATE",$index)) { fwrite($fp1,"ERRORE: Data ordine Mancante\n"); $errore_tag=1;}
if ($errore_tag==0)
{
fwrite($fp1,"Controlli Tag OK\n");
}
else
{
fwrite($fp1,"IMPOSSIBILE EFFETTUARE IL CARICAMENTO\n");
die();
}
fwrite($fp1,"Informazioni file\n");
fwrite($fp1,"_________________\n\n");
fwrite($fp1,"Numero degli elementi contenuti : ".count($vals)."\n");
fwrite($fp1,"Indici Contenuti : ".count($index)."\n");
fwrite($fp1,"Data File : ".substr($vals[$index['EMISSIONDATE'][0]]['value'],0,8)."\n");
fwrite($fp1,"NUMERO DETTAGLI : ".count($index['ORD_DTL'])."\n");
fwrite($fp1,"NUMERO RIGHE : ".count($index['LINE_NUM'])."\n\n");
fwrite($fp1,"Inizio caricamento...\n");
fwrite($fp1,"Inserimento testatata ");
//Preparazione query inseriemento testata ordine
//----------------------------------------------
$SQL_TESTATA="INSERT INTO OUTORDHDR (ord_num,owner_id,carrier,ord_date,
delivery_type,sold_name,sold_phone,
sold_email,sold_street,sold_postcode,
sold_city,sold_prov,sold_country,
shp_name,shp_phone,
shp_email,shp_street,shp_postcode,
shp_city,shp_prov,shp_country) values ('";
$SQL_TESTATA.=addslashes($vals[$index['ORD_NUM'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['OWNER_ID'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CARRIER'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['ORD_DATE'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['DELIVERYTYPE'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_NAME'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_PHONE'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_EMAIL'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_STREET'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_POSTCODE'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_CITY'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_PROV'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_COUNTRY'][1]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_NAME'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_PHONE'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_EMAIL'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_STREET'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_POSTCODE'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_CITY'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_PROV'][0]]['value'])."','";
$SQL_TESTATA.=addslashes($vals[$index['CONTACT_COUNTRY'][0]]['value'])."')";
//Inserimento della testata ordine
//--------------------------------
$mysqli->query($SQL_TESTATA);
if ($mysqli->errno!=FALSE)
{
fwrite($fp1,"ATTENZIONE : \n");
fwrite($fp1,"ERRORE N. ".$mysqli->errno."\n");
fwrite($fp1,"[".$mysqli->error."]\n");
fwrite($fp1,"RollBack\n\n");
$mysqli->rollback();
}
else
{
fwrite($fp1,"FATTO\n");
fwrite($fp1,"Inserimento dettaglio :\n");
//Inserimento dei dettagli
//------------------------
$ver_error=0;
for ($i=0;$i<count($index['LINE_NUM']);$i++)
{
fwrite($fp1,"Inserimento riga N.".($i+1)." ");
$SQL_DETTAGLIO="INSERT INTO OUTORDDTL (id_ord_hdr,line_num,item_num,lot_num,qty_ord) values (0,";
$SQL_DETTAGLIO.=$vals[$index['LINE_NUM'][$i]]['value'].",'";
$SQL_DETTAGLIO.=$vals[$index['ITEM_NUM'][$i]]['value']."','";
$SQL_DETTAGLIO.=$vals[$index['LOT_NUM'][$i]]['value']."',";
$SQL_DETTAGLIO.=$vals[$index['ITM_QTY'][$i]]['value'].")";
$mysqli->query($SQL_DETTAGLIO);
if ($mysqli->errno!=FALSE)
{
fwrite($fp1,"ATTENZIONE : \n");
fwrite($fp1,"ERRORE N. ".$mysqli->errno."\n");
fwrite($fp1,"[".$mysqli->error."]\n");
fwrite($fp1,"RollBack\n\n");
$mysqli->rollback();
$ver_error=1;
}
else
{
fwrite($fp1,"FATTO\n");
}
}
}
//commit di test
//--------------
if ($ver_error==0) {$mysqli->commit();} else {$mysqli->rollback();}
rename($flussi_dir."/".$lista_file[$c], $flussi_dir."/".$lista_file[$c].".old");
}
fclose($fp1);
?>
Dopo aver effettuato il caricamento, rinomina i file da .dat a .old in modo da non elaborarli una seconda volta.