Ieri 8 gennaio ho caricato con successo le mie (del professionista) "brave" 600 fatture, nel sito del Ministero delle Finanze
Le spese riportate nelle fatture, contribuiranno alla formazione del modello "730 precompilato".
con questo post vorrei indicare i passi che ho compiuto per arrivare al risultato positivo che ho ottenuto,
mi interessa che, chi ne ha bisogno, possa arrivare al mio stesso risultato positivo
non mi interessa parlare di php, soap o "stupidate" connesse,
bensì chi avesse soluzioni "facili" e le possa proporre, è ben accolto
questi i passi necessari,
1) occorre che il "proprietario" sia registrato nell'area riservata del "sistemaTS"
ottenendo le credenziali di accesso, necessarie anche per caricare i dati in modo automatico
http://sistemats1.sanita.finanze.it...home/sistema+ts+informa/730+-+spese+sanitarie
è bene orientarsi nei contenuti della pagina, soprattutto nel contenuto del "kit"
2) è estremamente importante che i dati delle fatture di cui si dispone, siano corretti,
occorre controllare allo "sfinimento" i codici fiscali dei "cittadini"
(ho anche controllato i dati in mio possesso con i registri iva del commercialista ottenendone quadratura, con modifiche da entrambe le parti)
occorre inoltre ripartire i costi delle fatture in detraibili e non detraibili
ho speso tempo lavorando con mezzi "facili" arrivando a,
3) creare una tabella (file) csv ovvero txt che contenga le righe che rappresentano ciascuna fattura,
con le colonne dei valori necessari, nella mia tabella vi erano molteplici colonne
per cui le ho selezionate,
le colonne chiamate "ColNotRelevant" sono i valori non detraibili che devono essere scorporati dal totale della fattura
Insisto molto sui controlli "a priori" perchè rendono la vita facile dopo
4) con il primo script "FattureGeneraFilesCFdaTXT.php", ho controllato nuovamente i codici fiscali verificando la rispondenza con il carattere di controllo
lo stesso script genera tanti file txt, quanti sono i codici fiscali diversi, per sottoporli alla crittografia
devono essere generati manualmente due file (blocco note),
inserendo rispettivamente il codice fiscale del proprietario ed il "PinCode", ottenuto al punto 1
deve essere inserito solo il valore senza "invio" o altri caratteri
i file sono chiamati "x_PROVAX00X00X000Y.txt" (per ciascun codife fiscale" e "x__PinCode.txt",
ho usato "x_" per raggrupparli della directory e riconoscerli/trovarli facilmente,
5) il kit, che si trova nella pagina del punto 1, contiene il certificato "_SanitelCF.cer" necessario alla crittografia
va recuperato e messo nella stessa dir dei file cf (underscore, aggiunto, serve per averlo in testa alla lista dei file
6) si può procedere alla crittografia di tutti i file con il batch "FattureOpenSSL.bat"
questo batch legge tutti i file "x_cf.txt" e per ciascuno crea il crittografato "x_cf.enc"
ho preferito fare "base64_encode" all'interno di php senza creare il file equivalente come si può vedere nel batch
7) ora si ottiene il file xml con tutti i dati richiesti "FattureGeneraXMLdaTXT.php"
ho preferito trattare separatamente 10 fatture e le rimanenti 590 al fine di non avere problemi con il caricamento "ufficiale"
attenzione, si possono fare tutti i caricamenti che si vogliono nel sistema di test che non esegue operazioni, salvo accettare il file
mentre è bene fare "un solo" caricamento "sicuro" nel sito "ufficiale" per non complicarsi la vita
8) zippare il file xml, il sito accetta solo file ".zip"
copiare dal kit i file "InvioTelematicoSpeseSanitarie730p.wsdl" e "InvioTelematicoSpeseSanitarie730p_schema1.xsd"
verificate all'interno del file "wsdl" la voce "<soap:address location=" (in fondo),
ho creato 2 file uno per "test" e uno per "effettivo" (ma forse non serve)
9) dove inviare il file, lo si vede dallo script "credenziali.php" lasciando "test=true" si manda il file al sistema di test,
convertendolo in FALSE lo si invia al sito "ufficiale"
FARE TUTTE LE PROVE DI INVIO NEL SITO DI TEST !
l'invio avviene con lo script "FattureInviaWsdl.php" indicando al suo interno il nome del file da inviare che resterà agli atti nella "ricevutapdf"
10) entrando nell'area riservata del sito, alla voce "ricevutapdf" ed indicando il protocollo di "accettazione" del file, si scarica il certificato comprovante l'invio con i dati sommari del contenuto del file
in caso di errori nei dati, si troverà anche il file "csv" con l'indicazione degli stessi
nel caso delle mie 600 fatture, ho havuto la segnalazione di 2 fatture con "IL CF CITTADINO NON PRESENTE IN ARCHIVIO"
quindi cf formalmente giusto ma ....
inutile dire che recuperato il cf, ho corretto manualmente (nel sito) le 2 fatture
poi ho stappato la solita "gazzosa" ....
ps :
la data di pagamento coincide con la data del documento, il professionista emette fattura solo al momento del pagamento
gli errori di "ortografia" degli script sono riportati nel log di php,
i messaggi e gli errori di esecuzione degli script sono riportati nel file "__TesseraSanitaria.log" che invito a consultare dopo ogni "run"
( win 7 - IE 11 - php 5.4.9 - openssl 1.0.2e)
ciao Marino
credenziali.php
FattureGeneraFilesCFdaTXT.php
FattureOpenSSL.bat ( "MSdos, classica programmazione ad oggetti" )
FattureGeneraXMLdaTXT.php
FattureInviaWsdl.php
Le spese riportate nelle fatture, contribuiranno alla formazione del modello "730 precompilato".
con questo post vorrei indicare i passi che ho compiuto per arrivare al risultato positivo che ho ottenuto,
mi interessa che, chi ne ha bisogno, possa arrivare al mio stesso risultato positivo
non mi interessa parlare di php, soap o "stupidate" connesse,
bensì chi avesse soluzioni "facili" e le possa proporre, è ben accolto
questi i passi necessari,
1) occorre che il "proprietario" sia registrato nell'area riservata del "sistemaTS"
ottenendo le credenziali di accesso, necessarie anche per caricare i dati in modo automatico
http://sistemats1.sanita.finanze.it...home/sistema+ts+informa/730+-+spese+sanitarie
è bene orientarsi nei contenuti della pagina, soprattutto nel contenuto del "kit"
2) è estremamente importante che i dati delle fatture di cui si dispone, siano corretti,
occorre controllare allo "sfinimento" i codici fiscali dei "cittadini"
(ho anche controllato i dati in mio possesso con i registri iva del commercialista ottenendone quadratura, con modifiche da entrambe le parti)
occorre inoltre ripartire i costi delle fatture in detraibili e non detraibili
ho speso tempo lavorando con mezzi "facili" arrivando a,
3) creare una tabella (file) csv ovvero txt che contenga le righe che rappresentano ciascuna fattura,
con le colonne dei valori necessari, nella mia tabella vi erano molteplici colonne
per cui le ho selezionate,
PHP:
define ("_ColDocDate", 1);
define ("_ColDocNumber", 2);
define ("_ColFiscalCode", 8);
define ("_ColTotalEuro", 9);
define ("_ColNotRelevant1", 12);
define ("_ColNotRelevant2", 13);
define ("_ColNotRelevant3", 14);
Insisto molto sui controlli "a priori" perchè rendono la vita facile dopo
4) con il primo script "FattureGeneraFilesCFdaTXT.php", ho controllato nuovamente i codici fiscali verificando la rispondenza con il carattere di controllo
lo stesso script genera tanti file txt, quanti sono i codici fiscali diversi, per sottoporli alla crittografia
devono essere generati manualmente due file (blocco note),
inserendo rispettivamente il codice fiscale del proprietario ed il "PinCode", ottenuto al punto 1
deve essere inserito solo il valore senza "invio" o altri caratteri
i file sono chiamati "x_PROVAX00X00X000Y.txt" (per ciascun codife fiscale" e "x__PinCode.txt",
ho usato "x_" per raggrupparli della directory e riconoscerli/trovarli facilmente,
5) il kit, che si trova nella pagina del punto 1, contiene il certificato "_SanitelCF.cer" necessario alla crittografia
va recuperato e messo nella stessa dir dei file cf (underscore, aggiunto, serve per averlo in testa alla lista dei file
6) si può procedere alla crittografia di tutti i file con il batch "FattureOpenSSL.bat"
questo batch legge tutti i file "x_cf.txt" e per ciascuno crea il crittografato "x_cf.enc"
ho preferito fare "base64_encode" all'interno di php senza creare il file equivalente come si può vedere nel batch
7) ora si ottiene il file xml con tutti i dati richiesti "FattureGeneraXMLdaTXT.php"
ho preferito trattare separatamente 10 fatture e le rimanenti 590 al fine di non avere problemi con il caricamento "ufficiale"
attenzione, si possono fare tutti i caricamenti che si vogliono nel sistema di test che non esegue operazioni, salvo accettare il file
mentre è bene fare "un solo" caricamento "sicuro" nel sito "ufficiale" per non complicarsi la vita
8) zippare il file xml, il sito accetta solo file ".zip"
copiare dal kit i file "InvioTelematicoSpeseSanitarie730p.wsdl" e "InvioTelematicoSpeseSanitarie730p_schema1.xsd"
verificate all'interno del file "wsdl" la voce "<soap:address location=" (in fondo),
ho creato 2 file uno per "test" e uno per "effettivo" (ma forse non serve)
9) dove inviare il file, lo si vede dallo script "credenziali.php" lasciando "test=true" si manda il file al sistema di test,
convertendolo in FALSE lo si invia al sito "ufficiale"
FARE TUTTE LE PROVE DI INVIO NEL SITO DI TEST !
l'invio avviene con lo script "FattureInviaWsdl.php" indicando al suo interno il nome del file da inviare che resterà agli atti nella "ricevutapdf"
10) entrando nell'area riservata del sito, alla voce "ricevutapdf" ed indicando il protocollo di "accettazione" del file, si scarica il certificato comprovante l'invio con i dati sommari del contenuto del file
in caso di errori nei dati, si troverà anche il file "csv" con l'indicazione degli stessi
nel caso delle mie 600 fatture, ho havuto la segnalazione di 2 fatture con "IL CF CITTADINO NON PRESENTE IN ARCHIVIO"
quindi cf formalmente giusto ma ....
inutile dire che recuperato il cf, ho corretto manualmente (nel sito) le 2 fatture
poi ho stappato la solita "gazzosa" ....
ps :
la data di pagamento coincide con la data del documento, il professionista emette fattura solo al momento del pagamento
gli errori di "ortografia" degli script sono riportati nel log di php,
i messaggi e gli errori di esecuzione degli script sono riportati nel file "__TesseraSanitaria.log" che invito a consultare dopo ogni "run"
( win 7 - IE 11 - php 5.4.9 - openssl 1.0.2e)
ciao Marino
credenziali.php
PHP:
<?php
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', FALSE);
ini_set('log_errors', TRUE);
ini_set('error_log', '__TesseraSanitaria.log');
ini_set("soap.wsdl_cache_enabled", "0");
error_log(".", 0);
error_log("main ".$_SERVER['PHP_SELF'], 0);
//---------- dati del professionista (medico)
define ("_name", "Dr. *****");
define ("_cfProprietario", "");
define ("_cfProprietarioCifrato", "");
define ("_piProprietario", "");
define ("_user", "");
define ("_psw", "");
define ("_NetworkUser", "");
define ("_NetworkPsw", "");
define ("_pincodeInviante", "");
define ("_pincodeInvianteCifrato", "");
//---------- dati del professionista (test)
define ("_TestUser", "PROVAX00X00X000Y");
define ("_TestPsw", "Salve123");
define ("_TestPincodeInviante", "1234567890");
define ("_TestPincodeInvianteCifrato", "HmhwvMEtyHOwDm5K3YEQ9RZiNAkJ+FvRwXodiABj9HpRbdQUaLa4cyYZU8YqaBsSs4Lq6u85uDci6xowmF7ZrVgLhZ83q4nSi8bSvVDPS5pPStBlOJfvo8AisqDiKdJvEPbkIhBVnbmf28gh28G/vQLkp2RgVEYinPA0LUCz8PQ=");
//---------- struttura delle fatture
define ("_ColDocDate", 1);
define ("_ColDocNumber", 2);
define ("_ColFiscalCode", 8);
define ("_ColTotalEuro", 9);
define ("_ColNotRelevant1", 12);
define ("_ColNotRelevant2", 13);
define ("_ColNotRelevant3", 14);
//---------- dati di riconoscimento / connessione / invio
$TEST = true;
if($TEST)
{
$login = _TestUser;
$password = _TestPsw;
$pincodeInvianteCifrato = _TestPincodeInvianteCifrato;
$cfProprietario = _TestUser;
$InvioTelematico = "https://invioSS730pTest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort";
$DettaglioErrori = "https://invioSS730pTest.sanita.finanze.it/EsitoStatoInviiWEB/DettaglioErrori730Service";
$EsitoInvio = "https://invioSS730pTest.sanita.finanze.it/EsitoStatoInviiWEB/EsitoInvioDatiSpesa730Service";
$ricevutePdf = "https://invioSS730pTest.sanita.finanze.it/Ricevute730ServiceWeb/ricevutePdf";
$DocumentoSpesa = "https://invioSS730pTest.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort";
}
else
{
$login = _user;
$password = _psw;
$pincodeInvianteCifrato = _pincodeInvianteCifrato;
$cfProprietario = _cfProprietario;
$InvioTelematico = "https://invioSS730p.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort";
$DettaglioErrori = "https://invioSS730p.sanita.finanze.it/EsitoStatoInviiWEB/DettaglioErrori730Service";
$EsitoInvio = "https://invioSS730p.sanita.finanze.it/EsitoStatoInviiWEB/EsitoInvioDatiSpesa730Service";
$ricevutePdf = "https://invioSS730p.sanita.finanze.it/Ricevute730ServiceWeb/ricevutePdf";
$DocumentoSpesa = "https://invioSS730p.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort";
}
error_log("login : ".$login, 0);
error_log("password : ".$password, 0);
error_log("pincodeInvianteCifrato : ".$pincodeInvianteCifrato, 0);
error_log("cfProprietario : ".$cfProprietario, 0);
$SoapClientParam = array
(
"location" => "x",
"login" => $login,
"password" => $password,
"authentication" => SOAP_AUTHENTICATION_BASIC,
"trace" => false,
"exceptions" => false
);
?>
FattureGeneraFilesCFdaTXT.php
PHP:
<?php
require_once 'Credenziali.php';
// crea tutti i files "x_PROVAX00X00X000Y.txt" per openssl, controlla cf con check digit
define ("_Fatture730", "Fatture730_2015"); // nome del file da trattare ( .txt, .xml, .zip )
$file = fopen(_Fatture730.".txt", "r");
echo "<table border=4 cellpadding=4>";
while( !feof($file) )
{
$row = fgets($file);
$col = explode(";", $row);
if ( !empty($col[_ColFiscalCode]) )
{
$TotalEuro = $col[_ColTotalEuro] - $col[_ColNotRelevant1] - $col[_ColNotRelevant2] - $col[_ColNotRelevant3];
$myfile = fopen("x_".$col[_ColFiscalCode].".txt", "w") or die("Unable to open file : ".$col[_ColFiscalCode]);
fwrite($myfile, $col[_ColFiscalCode]);
fclose($myfile);
$cf = codicefiscale($col[_ColFiscalCode]);
echo "<tr>";
echo "<td>".$col[_ColFiscalCode]."</td>";
echo "<td>".$col[_ColDocNumber]."</td>";
echo "<td>".$col[_ColDocDate]."</td>";
echo "<td>".$TotalEuro."</td>";
echo "<td>".$cf."</td>";
echo "</tr>";
}
}
echo "</table>";
fclose($file);
error_log("done ".$_SERVER['PHP_SELF'], 0);
function codicefiscale($cf){
if( preg_match("/^[A-Z0-9]+\$/", $cf) != 1 )
return "Il codice fiscale contiene dei caratteri non validi (sono valide lettere e cifre)";
static $CFcalc = array(
'0' => 1,
'1' => 0,
'2' => 5,
'3' => 7,
'4' => 9,
'5' => 13,
'6' => 15,
'7' => 17,
'8' => 19,
'9' => 21,
'A' => 1,
'B' => 0,
'C' => 5,
'D' => 7,
'E' => 9,
'F' => 13,
'G' => 15,
'H' => 17,
'I' => 19,
'J' => 21,
'K' => 2,
'L' => 4,
'M' => 18,
'N' => 20,
'O' => 11,
'P' => 3,
'Q' => 6,
'R' => 8,
'S' => 12,
'T' => 14,
'U' => 16,
'V' => 10,
'W' => 22,
'X' => 25,
'Y' => 24,
'Z' => 23,
'end' => 'end'
);
$s = 0;
for( $i = 1; $i <= 13; $i += 2 ){
$c = $cf[$i];
if( strcmp($c, "0") >= 0 and strcmp($c, "9") <= 0 )
$s += ord($c) - ord('0');
else
$s += ord($c) - ord('A');
}
for( $i = 0; $i <= 14; $i += 2 ){
$c = $cf[$i];
$s += $CFcalc[$c];
}
if( chr($s%26 + ord('A')) != $cf[15] )
return "Il codice fiscale NON è riconosciuto ". chr($s%26 + ord('A'));
return "";
}
?>
FattureOpenSSL.bat ( "MSdos, classica programmazione ad oggetti" )
Codice:
@echo off
c:
cd C:\Program_Files_Ext\openssl-1.0.2d
set BegDir=C:\Web_Sites\__Test\PHP\TEST\XML\FC
del %BegDir%\__OpenSSL.log 2>nul
rem set MySource=%BegDir%\x_PROVAX00X00X000Y
rem openssl.exe rsautl -encrypt -in %MySource%.txt -out %MySource%.enc -inkey %BegDir%\_SanitelCF.cer -certin -pkcs
FOR /R %BegDir% %%D IN (x_*.txt) DO (call :OpenSSL %%D)
pause
exit /b
:OpenSSL
rem echo params: "%~0" "%~1" "%~n1" "%~2" "%~3" "%~nx0" "%~dpnx0%0" >>param.log
set MySource=%BegDir%\%~n1
rem echo %MySource% >>%BegDir%\__OpenSSL.log
echo %MySource%
openssl.exe rsautl -encrypt -in %MySource%.txt -out %MySource%.enc -inkey %BegDir%\_SanitelCF.cer -certin -pkcs
rem openssl enc -base64 -A -in %MySource%.enc -out %MySource%.b64
exit /b
FattureGeneraXMLdaTXT.php
PHP:
<?php
require_once 'Credenziali.php';
// crea il file .xml da inviare al Ministero delle Finanze
define ("_Fatture730", "Fatture730_2015_2"); // nome del file da trattare ( .txt, .xml, .zip )
$encFC = GetEncFC(_cfProprietario);
$file = fopen(_Fatture730.'.txt', "r");
$xml=new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><precompilata
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="730_precompilata.xsd"></precompilata>');
$opzionale1 = $xml->addChild('opzionale1', 'text');
$opzionale2 = $xml->addChild('opzionale2', 'text');
$opzionale3 = $xml->addChild('opzionale3', 'text');
$proprietario = $xml->addChild('proprietario');
$cfProprietario = $proprietario->addChild('cfProprietario', $encFC);
// </proprietario>
$TotalDocs = 0;
$TotalEuro = 0;
while( !feof($file) )
{
$row = fgets($file);
$col = explode(";", $row);
if ( !empty($col[_ColFiscalCode]) )
{
$InvEuro = $col[_ColTotalEuro] - $col[_ColNotRelevant1] - $col[_ColNotRelevant2] - $col[_ColNotRelevant3];
$InvEuro = number_format($InvEuro, 2, ".", "");
$DocDate = DateTime::createFromFormat('d/m/Y', $col[_ColDocDate]);
$DocDate = $DocDate->format('Y-m-d');
$encFC = GetEncFC($col[_ColFiscalCode]);
$TotalDocs += 1;
$TotalEuro += $InvEuro;
$documentoSpesa = $xml->addChild('documentoSpesa');
$idSpesa = $documentoSpesa->addChild('idSpesa');
$pIva = $idSpesa->addChild('pIva', _piProprietario);
$dataEmissione = $idSpesa->addChild('dataEmissione', $DocDate);
$numDocumentoFiscale = $idSpesa->addChild('numDocumentoFiscale');
$dispositivo = $numDocumentoFiscale->addChild('dispositivo', '1');
$numDocumento = $numDocumentoFiscale->addChild('numDocumento', $col[_ColDocNumber]);
// </numDocumentoFiscale>
// </idSpesa>
$dataPagamento = $documentoSpesa->addChild('dataPagamento', $DocDate);
$flagOperazione = $documentoSpesa->addChild('flagOperazione', 'I');
$cfCittadino = $documentoSpesa->addChild('cfCittadino', $encFC);
$voceSpesa = $documentoSpesa->addChild('voceSpesa');
$tipoSpesa = $voceSpesa->addChild('tipoSpesa', 'SR');
$importo = $voceSpesa->addChild('importo', $InvEuro);
// </voceSpesa>
// </documentoSpesa>
}
}
//</precompilata>
fclose($file);
Header('Content-type: text/xml');
print ($xml->asXML(_Fatture730.'.xml'));
error_log("Total Docs ".$TotalDocs, 0);
error_log("Total Euro ".$TotalEuro, 0);
error_log("done ".$_SERVER['PHP_SELF'], 0);
function GetEncFC($encFile)
{
$encFC = file_get_contents( "C:/Web_Sites/__Test/PHP/TEST/XML/FC/x_".$encFile.".enc", FILE_USE_INCLUDE_PATH );
$encFC = base64_encode($encFC);
return $encFC;
}
?>
FattureInviaWsdl.php
PHP:
<?php
require_once 'Credenziali.php';
// invia il file .zip al Ministero delle Finanze
define ("_Fatture730", "Fatture730_2015_2"); // nome del file da trattare ( .txt, .xml, .zip )
echo "<p><h4>TRASFERIMENTO DELLE FATTURE PER IL 730 PRECOMPILATO AL MINISTERO</h4></p>";
error_log("carico in memoria il file "._FileDaInviare, 0);
$zipfile = implode("", file(_FileDaInviare));
$ws = 'InvioTelematicoSpeseSanitarie730p.wsdl';
error_log("definisco il file wsdl ".$ws, 0);
echo $ws."<p> </p>";
$SoapClientParam["location"] = $InvioTelematico;
error_log("definisco the soap server location ".$SoapClientParam["location"], 0);
echo $SoapClientParam["location"]."<p> </p>";
echo "<p><h4>INIZIO LA CONNESSIONE</h4></p>";
$client = new SoapClient($ws, $SoapClientParam);
error_log("ottengo la funzione da utilizzare per l'invio", 0);
$output = $client->__getFunctions();
//var_dump($output); echo "<p> </p>";
if(!empty($output)) echo "<p><h4>CONNESSIONE POSSIBILE</h4></p>";
echo "<p><h4>INIZIO TRASFERIMENTO DEL FILE</h4></p>";
error_log("inizio trasferimento del file", 0);
$output = $client->inviaFileMtom(Array
(
"nomeFileAllegato" => _FileDaInviare,
"pincodeInvianteCifrato" => $pincodeInvianteCifrato,
"documento" => $zipfile,
"datiProprietario" => ( Array( "cfProprietario" => $cfProprietario ) )
))
;
if(empty($output))
{
error_log("trasferimento terminato con errori", 0);
echo "<p><h4>TRASFERIMENTO TERMINATO CON ERRORI</h4></p>";
var_dump($output); echo "<p> </p>";
}
else
{
error_log("trasferimento terminato", 0);
echo "<p><h4>TRASFERIMENTO TERMINATO</h4></p>";
$protocollo = $output->return->protocollo;
echo $protocollo."<p> </p>";
ReportOutput("protocollo");
ReportOutput("dataAccoglienza");
ReportOutput("nomeFileAllegato");
ReportOutput("dimensioneFileAllegato");
ReportOutput("codiceEsito");
ReportOutput("descrizioneEsito");
ReportOutput("idErrore");
}
error_log("done ".$_SERVER['PHP_SELF'], 0);
echo "<p><h4>FINE DEL LAVORO</h4></p>";
function ReportOutput($var)
{
global $output;
error_log($var." = ".$output->return->{$var}, 0);
echo $var." = ".$output->return->{$var}."<br />";
}
?>
Ultima modifica: