Compilazione moduli PHP per MacOS

MacOS_Sierra_php2Aggiornamento 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