Aggiornamento de sistema a MacOS 10.12 Sierra
Ieri ho aggiornato il mio portatile alla versione 10.12 (MacOs Sierra) e siccome mi occupo dello sviluppo di alcuni siti web gestionali ho l’esigenza di usare Apache con PHP a cui ho attivato delle estensioni: in particolare mssql.so per la connessione ai database Microsoft SQL Server.
Dopo l’aggiornamento ho dovuto ripristinare l’ambiente Apache riabilitando gli alias e riattivando la libreria php. Fortunatamente ho potuto riutilizzare i file di configurazione funzionanti prima dell’aggiornamento del sistema operativo
Recuperare i file di configurazione
Il file di apache che si trova nella directory /etc/apache/http.conf è stato rinominato in httpd.conf.pre-update
Il file di configurazione di php che si trova nella directory /etc/php.ini è stato rinominato in php.ini-previous
Riavviare il server apache
Il riavvio del server Apache va fatto con il comando
# sudo apachectl restart
Verifica
Cercando di aprire il sito locale che frutta la libreria per accedere al database Microsoft SQL server attendo un errore di connessione.
Nel file di log /var/log/apache/error_log trovo riportato questo messaggio
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php/extensions/no-debug-non-zts-20121212/mssql.so
Come risolvere
Occorre ricompilare la libreria usando i sorgenti di PHP della versione 5.6.24 (che corrisponde a quella installata in Sierra)
Questo è l’indirizzo per il download: php-5.6.24.tar.gz
Per comodità ho scompagnato tutto e ho spostato la directory sul desktop
Ho avuto questo problema che mi ha assillato per tutta la giornata… nonostante ripetessi la procedura correttamente la libreria si compilava con la versione API sbagliata generando l’errore nel file di log.
Tutto nasce perché è stato utilizzato il file php-config sbagliato.
I comandi per effettuare le modifiche richiedono che la “System Protection Integrity” sia disabilitata
Disabilitare la System Protection Integrity
Spegnere il Mac. Avviarlo tenendo premuto i tasti cmd + R finché non termina tutto il caricamento. Questo carica il sistema di ripristino.
Dal menù in alto cliccare Utility OSX e scegliere terminale
nella finestra del terminale digitare in sequenza i 2 comandi
crsutil disable reboot
Attendere il riavvio e aprire una finestra del terminale e provate a lanciare
php-config | grep version
se trovate scritto
--version [5.6.24]
potete continuare con il capitolo successivo
se trovate scritto
--version [5.5.14]
Occorre sostituire il php-config con quello corretto: facciamo una ricerca
find /usr -name "php-config" -print
Lanciamo ogni voce restituita dalla ricerca finché non troviamo la versione 5.6.24
Una volta identificata cerchiamo la directory dove è installato il php-config con il comando
which php-config
(nel mio caso l’ho trovato un /usr/local/bin) entriamo nella directory con
cd [nome directory] sudo mv php-config php-config.old ln -s [percorso e nome del file php-config funzionante] php-config
Compilazione delle estensioni
Dal terminare ci spostiamo sulla directory delle estensioni PHP che abbiamo salvato precedentemente sul desktop e nel mio caso acceso alla directory mssql
cd cd Desktop/php-5.6.24/ext/mssql
Lancio in sequenza i comandi e controllo che non abbiano restituito errori
phpize ./configure make sudo make install
L’ultimo comando dovrebbe restituire
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20131226/
A questo punto editare il file
sudo vi /etc/php.ini
e aggiungere l’estensione appena compilata aggiungendo tra le altre extensions la seguente riga:
extension=/usr/lib/php/extensions/no-debug-non-zts-20131226/mssql.so
Salvare e riavviare apache
sudo apachectl restart
Per controllare che l’estensione sia attiva create un file info.php nella directory del server web con il seguente contenuto:
<?php phpinfo(); ?>
aprite Safari e digitate l’indirizzo http://localhost/info.php potrete trovare l’estensione.
Se qualcosa fosse andato storto iniziate a controllare il log di Apache.
Configurazione estensione mssql
Per un corretto funzionamento dell’estensione occorre aggiungere al file php.ini il seguente parametro
mssql.datetimeconvert = Off