Skip to main content

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.

(altro…)

 

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.

(altro…)

 

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.

(altro…)

 

hMailServer – Mail Server open-source per Windows con gestione POP3, SMTP, IMAP, AntiVirus/AntiSpam e altro

Una delle necessità più frequenti quando si acquista un server dedicato è quella di gestire in proprio gli indirizzi e-mail relativi ai propri domini web. I principali software di gestione MHS (acronimo per message-handling services, ovvero servizi per la gestione di messaggi) sono:

Salta subito all’occhio che questi software, che messi assieme coprono oltre l’80% dei server web su scala mondiale, possono essere raggruppati in due categorie principali: per sistemi Unix oppure a pagamento.

Cosa possiamo fare se il nostro server dedicato è sotto Windows? La risposta è molto semplice: ci prepariamo ad acquistare una licenza di Microsoft Exchange oppure rivolgiamo le nostre attenzioni a hSendMail, un interessantissimo Mail Server gratuito per Windows sviluppato da Martin Knafve e recentemente reso disponibile su licenza AGPL.

Nel caso in cui siate interessati ad approfondire la seconda ipotesi, vi invitiamo a proseguire la lettura.

(altro…)

 

PHP lock e semafori con WinCache e/o APC

Alzi la mano chi, lavorando con PHP, non ha mai avuto la necessità di limitare l’accesso simultaneo a una funzione o a un metodo di una classe. Si tratta di un’esigenza tipica delle cosiddette maintenance task, ovvero di quelle procedure eseguite a intervalli regolari senza l’ausilio di un cron job vero e proprio ma al primo accesso di un qualsiasi utente a partire da una determinata ora. E’ probabile che, se vi siete imbattuti in questo articolo, siate alla ricerca di un modo per impedire che l’accesso simultaneo di più utenti possa provocare l’esecuzione simultanea della medesima task prima del completamento della stessa.

In altri linguaggi di programmazione (ASP.NET/C#, Phyton et. al.) questa esigenza si risolve facilmente utilizzando procedure di thread synchronization come i ben noti semafori o lock, in modo simile al seguente esempio (C#):

In PHP, contraddistinto sotto Windows da una implementazione thread-unsafe e, sotto Linux, da una esecuzione isolata per ciascun processo, non esiste una funzionalità nativa per ottenere un lock di questo tipo. Un tipico workaround utilizzato dagli sviluppatori è quello di ricorrere al flock(), una tecnica di lock basata sulla creazione di semafori creati direttamente sul filesystem: in poche parole, un lock ottenuto sfruttando la creazione/presenza/eliminazione di un file che fa le funzioni di semaforo e ha il compito di tenere sincronizzati i thread/processi. Pur trattandosi di un approccio assolutamente percorribile, questa tecnica ha almeno due difetti: le performance non eccezionali – dovute alla necessità di effettuare frequenti operazioni IO – e la scomodità di dover gestire i file/semafori con tutto quello che ne consegue – path, permessi e via dicendo. Fortunatamente esiste un metodo decisamente più pratico, a patto che l’installazione PHP preveda l’utilizzo di una delle numerose librerie di caching disponibili. Le più note e utilizzate sono:

  •  WinCache, di cui abbiamo già avuto modo di parlare in un paio di occasioni, realizzata da Microsoft e disponibile in tutte le distribuzioni PHP per Windows.
  • APC, scaricabile dall’apposita pagina PECL.

Trattandosi di librerie dedicate alla gestione di un’area di cache condivisa tra i vari processi/thread di esecuzione PHP, ciascuna di esse prevede una funzione specifica per acquisire il lock: vediamo quali sono e come implementarli all’interno del nostro codice.

Nella lista non è presente OPCache, l’ottima libreria sviluppata da Zend e disponibile in tutte le distribuzioni di PHP recenti per Windows e Linux, perché – almeno allo stato attuale – non mette a disposizione dello sviluppatore una user cache su cui poter intervenire in modo arbitrario.

(altro…)