Skip to main content

PHP – Come eliminare i caratteri non validi da un file o stringa XML in formato UTF-8

Ieri ho scritto due righe su un metodo PHP per eliminare l’header e il footer di un file XML.P7M firmato elettronicamente (a patto che sia in formato CAdES): piuttosto brutto a vedersi, poco ma sicuro, ma se non altro faceva e fa il suo lavoro.

Oggi verserò un altro tributo alle funzioni “brutte ma (almeno) funzionanti” pubblicando anche la funzione che ho sviluppato a corredo della precedente per ripulire il contenuto del suddetto file da caratteri non validi, così da poter utilizzare la stringa risultante come parametro per la creazione di di un oggetto SimpleXML:

Approfondisci

PHP – Come estrarre il contenuto XML da un file XML.P7M (CAdES, Fattura PA)

Qualche giorno fa mi è stato chiesto di preparare un paio di pagine PHP per estrarre il contenuto di una serie di file XML relativi a fatture elettroniche per la Pubblica Amministrazione, realizzati cioè seguendo il formato definito dall’Agenzia delle Entrate e noto con il nome di Fattura PA. Si trattava di un lavoro semplice, nel corso del quale mi sono trovato a dover risolvere molto rapidamente – per ragioni legate ai tempi di consegna – due problemi non banali: estrarre il contenuto XML da una serie di file .xml.p7m firmati digitalmente ed eliminare dal contenuto i caratteri non UTF8 nel contenuto XML.

Dovendo concludere lo sviluppo rapidamente ho deciso di risolvere entrambe le problematiche allineandomi a uno dei più famosi luoghi comuni che, non senza un fondo di verità, accompagnano da sempre le caratteristiche del linguaggio PHP: il fatto che si tratta di un “double clawed hammer”, ovvero di un martello a due penne (e nessuna testa). In questo articolo ci occuperemo del primo argomento, rimandando il secondo a tempi migliori (UPDATE: alla fine l’ho scritto! Se vi interessa leggerlo, fate click qui).

Immagine di un lavoro originale realizzato da Ian Baker. Altre foto di questa meravigliosa opera sono disponibili sulla sua pagina Flickr: https://www.flickr.com/photos/raindrift/sets/72157629492908038

Per quanto riguarda l’estrazione XML dal P7M ho approfittato del fatto che tutte le fatture erano state firmate digitalmente utilizzando il formato CAdES, il quale – come forse già sapete – prevede l’aggiunta al file originale di un header PKCS#7 in testa e di una signature info in coda, lasciando il contenuto in mezzo intalterato. Questo consente di rimuovere entrambi, a patto di riuscire a localizzare l’esatta posizione del contenuto che si desidera preservare. Nel caso di un file XML questo è fortunatamente piuttosto semplice. E’ importante sottolineare come procedere in questo modo non ci dà nessuna garanzia sulla bontà della firma digitale stessa, che viene scartata senza alcuna verifica. Nel caso specifico, trattandosi di documenti già verificati alla fonte e archiviati digitalmente a monte del mio visualizzatore, io ho potuto farne a meno senza problemi. Al tempo stesso, suggerisco di prestare la massima attenzione al proprio ambito di uso: se avete bisogno di verificare l’autore del file è senz’altro opportuno utilizzare un metodo diverso che tenga in considerazione la firma del mittente.

Approfondisci

Guida all’installazione di PHP Manager per IIS su Windows Server o Windows 10

Se siete degli affezionati utilizzatori di PHP su piattaforma Windows e Web Server IIS è probabile che già conosciate PHP Manager per IIS, un eccellente strumento gratuito che si integra con l’interfaccia utente dello strumento di amministrazione di IIS – ovvero IIS Manager – e che può essere utilizzato per svolgere una serie di funzioni utili, tra cui soprattutto le due seguenti:

  • Gestire le istanze/versioni/build di PHP a 32-bit e 64-bit installate sulla macchina.
  • Accedere e modificare i relativi file di configurazione PHP.INI.

Installare PHP Manager per IIS è molto semplice: basta lanciare il  Web Platform Installer dall’interfaccia di IIS Manager, quindi cercarlo tra gli strumenti gratuiti disponibili tramite la casella di ricerca.

Approfondisci

MySQL Lock Wait Timeout Exceeded Error in InnoDB Tables – Come risolvere

Alcuni giorni fa ho avuto uno strano problema durante l’installazione dell’ultima (al momento di scrivere) stable build di MediaWiki – ovvero la 1.27.1 – per conto di un cliente: l’operazione prevedeva anche tutti i principali plugin e add-in ed è avvenuta seguendo grossomodo gli stessi passaggi che ho già avuto modo di descrivere qui (installazione con IIS), qui (installare il WikiEditor) e infine qui (importazione dei template di Wikipedia). Inutile dire che tutte le operazioni sono state effettuate utilizzando l’account di amministrazione predefinito, ovvero quello che viene creato durante la procedura di installazione. Come sempre ho creato il database utilizzando le tabelle InnoDB, consigliate da MediaWiki per affidabilità e prestazioni in quanto supportano il lock sia a livello di table che di singole righe.

Una volta impostato il tutto, come già fatto innumerevoli altri volte, mi sono spostato sulla Pagina Speciale che consente di creare altri utenti… E lì, non appena ho provato a creare il primo utilizzando l’apposito form, sono stato accolto da uno strano (e apparentemente inspiegabile) errore HTTP 500.

Approfondisci

Inviare E-Mail con PHP tramite SMTP: PHPMailer, SendMail, Fake SendMail e altri metodi

Premessa

La possibilità di inviare e-mail con PHP è una funzionalità utilizzata da una grandissima quantità di software opensource scritto utilizzando il linguaggio  di scripting più famoso del web: da phpBB a WordPress, da Joomla a Drupal, da MantisBT a MediaWiki non c’è Forum, CMS, progetto o piattaforma di lavoro collaborativo che non abbia bisogno di comunicare con i propri utenti tramite l’invio di e-mail. Senza contare, ovviamente, le necessità di qualsiasi progetto realizzato in autonomia che contempli qualsiasi sorta di registrazione, newsletter o altra interazione con gli utenti.

Il modo più semplice per inviare e-mail tramite PHP è l’utilizzo della funzione mail(), disponibile fin da PHP4 e che consente di risolvere tutto con una semplice chiamata a metodo nel seguente modo:

I parametri di configurazione relativi al server SMTP a cui connettersi per l’invio, e relativa porta da utilizzare, vanno inseriti nel php.ini, il file di configurazione generale di PHP e sono i seguenti:

I valori indicati sono quelli predefiniti: per maggiori dettagli su ciascuno di essi, leggete qui.

Salta subito all’occhio una importante limitazione: non c’è infatti alcun modo per specificare un username e una password di autenticazione per il server SMTP, condizione ormai indispensabile nella quasi totalità dei server messi a disposizione dei provider italiani e internazionali, nonché assolutamente obbligatoria nel caso in cui volessimo fare uso di un server che accetti unicamente connessioni protette tramite secure layer SSL/TLS.

A conti fatti, la funzionalità nativa di PHP consente di connettersi soltanto a un server SMTP che consenta l’utilizzo senza autenticazione. La domanda, nonché il motivo per cui vi siete imbattuti in questo articolo, è dunque: come fare per risolvere questo problema? In questo articolo analizzeremo una serie di possibilità, ciascuna con i suoi pro e contro.

Approfondisci

Close