Archivi tag: php

Rendere compatibili script php5 in php7

Può essere comune trovarsi nella condizione di eseguire software od in generale script php5 in php7 non avendo possibilità di aggiornare il codice, eseguire un refactoring o comunque intervenire in qualche modo. Sebbene PHP introduca con la versione 7 nuovi operatori, razionalizzazioni e miglioramenti, le caratteristiche che più si notano sicuramente fanno riferimento a funzioni od estensioni deprecate.

Usare script php5 in php7

Punti essenziali per usare script php5 in php7

Non esistono motivi specifici secondo i quali un software php scritto diversi anni fa non debba funzionare con un interprete recente, anzi in molti casi (es. utilizzo intensivo di tabelle hash) si riscontrano solo miglioramenti su tempi ed utilizzo di cicli.
In linea generale uno script php5 in php7 non dovrebbe avere problemi ad essere eseguito: probabilmente gli unici casi che si verificano in merito ad interruzioni ed errori riguardano script che utilizzano funzioni deprecate, in particolare quelle originate dalle estensioni mysql ed ereg.
Un comune caso è quello della presenza di collegamento a database senza utilizzare PDO, quindi già alla prima chiamata mysql_connect si incontra il primo ostacolo.

Possibili soluzioni con minimo impatto

L’ideale sarebbe potersi sbarazzare in modo definitivo delle chiamate alle funzioni superate, inefficienti e deprecate: nell’esempio preso in considerazione passare dalle chiamate alle funzioni di connessione MySQL alle funzioni o meglio classi disponibili attraverso PDO.

Se tuttavia non sia possibile o conveniente revisionare il codice od installare aggiornamenti, possono tornare utili due repository disponibili su github utili per “colmare la distanza” facendo da tatto di unione tra software legacy e versioni recenti degli interpreti.

Per le funzioni derivate da ereg, Björn Brala ha pubblicato php7-ereg-shim.

Nel caso di intervento su codice che utilizza funzioni di connessione instaurate direttamente con l’estensione MySQL Davey Shafik ha reso disponibile il pacchetto php7-mysql-shim, questo ultimo disponibile anche in composer integrabile con il classico comando

composer require dshafik/php7-mysql-shim

MSMTP: usare GMail con la funzione mail() in PHP

Questo articolo può essere applicato a differenti scenari: una installazione Linux minimale, un’istanza virtuale o contenitore che non include un MTA, incompatibilità tra differenti interpreti, un desolante messaggio nella riga di comando da console tipo

sh: 1: /usr/sbin/sendmail: not found

In aggiunta, si può avere la necessità (anche dal punto di vista della comodità o per via di esigenze legate a razionalizzazione delle risorse) di voler utilizzare un servizio esterno all’host che si occupi dell’inoltro dei messaggi di posta elettronica, sfruttando un servizio SMTP con un profilo esistente (fornito anche all’esterno della sede locale, come per es. Google Apps for Work‎ od il comune Gmail), escludendo l’opzione di installare un servizio puro superfluo o inutile su una macchina non desinata a ricevere posta.

Sintesi: il software in questione deve occuparsi di smistare messaggi di posta elettronica, rappresentando il tratto di unione tra un interpretesendmail-compatibile ed un client SMTP. Esiste di già, ed è MSMTP.

MSMTP: requisiti ed installazione

Il progetto MSMTP manutenuto da Martin Lambers è rilasciato come codice libero in licenza GPLv3: i requisiti sono ristretti ad un compilatore e le funzioni per socket tipo Berkeley. Disponibile sui repository delle maggiori distribuzioni Linux, si può comunemente lanciare

apt-get install msmtp

per l’installazione in Debian od Ubuntu, mentre per le altre in base yum tipo RHEL / CentOS

yum install msmtp

Su Apple MacOS 10, MSMTP è disponibile con la formula homebrew

brew install msmtp

La configurazione si basa su file di testo semplici, con i percorsi predefiniti per sistema su /etc/msmtprc e ~/.msmtprc per le configurazione dei singoli utenti. Sul sito di riferimento è presente la documentazione completa (in inglese) ed un file di esempio. Davvero lineare.

google-gmail

Integrazione con PHP ed uso di account Gmail

Come riportato poco prima, MSMTP è sostituibile al comando sendmail, pertanto ci si può disporre a questo tipo di configurazione creando un file in /etc/msmtprc con la configurazione di un account SMTP esistente; il software supporta il TLS, quindi l’esempio Gmail è anche un buon esercizio per verificare questa opzione.

Contenuto del file /etc/msmtprc :

# Esempio msmtprc per Gmail
# 2014 Alessio Felicioni
# fonte: http://www.alessiofelicioni.it/msmtp-gmail-funzione-mail-php/

# valori predefiniti
defaults
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log

# configurazione account
account default
host smtp.gmail.com
port 587
auth on
from utente@gmail.com
user utente@gmail.com
password La(TUA)Password_va_qui

Importante garantire che il file sia leggibile dall’utente che esegue il php via processo server (es. apache, www-data o equivalente): vale a dirsi

chown www-data /etc/msmtprc
chmod 600 /etc/msmtprc

Quindi il valore di sendmail_path in php.ini potrebbe essere sostituito con la seguente sintassi

sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"

MSMTP supporta anche la configurazione di account multipli anche sullo stesso file: il parametro che controlla questa opzione è -a con il significato che se invocato con valori differenti, lo smistamento avverrà attraverso profili (ed eventualmente tratte/server SMTP) differenti.

La sezione di documentazione del progetto all’indirizzo http://msmtp.sourceforge.net/documentation.html è il punto di riferimento per utilizzare al meglio il programma e ricca di esempi.