Pillole PHP: gestire le estensioni

Spread the love
PHP: gestire le estensioni
PHP: gestire le estensioni

Per vedere dove sono installate le estensioni (i codici oggetto .so che realizzano i plugin come i connettori a database, l’uso delle funzioni cURL etc):

marcob@jsbach[12:15:08]:php$ php-config --extension-dir
/usr/lib/php/20190902

Per abilitare il modulo curl per la versione 7.4

$ phpenmod -v 7.4 curl

Ho però un problema, l’installazione della libreria curl mi ha provocato una serie di errori che vengono stapati ad ogni invocazione dell’interprete php client o ad ogni riavvio di Apache:

root@jsbach[11:26:44]:apache2$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: /usr/lib/php/20190902/curl (/usr/lib/php/20190902/curl: cannot open shared object file: No such file or directory), 
/usr/lib/php/20190902/curl.so (/usr/lib/php/20190902/curl.so: symbol curl_mime_addpart version CURL_OPENSSL_4 not defined in file libcurl.so.4 with link time reference)) in Unknown on line 0
PHP 7.4.2 (cli) (built: Feb  1 2020 17:49:29) ( NTS )

Seguo questo howto su Github

root@jsbach[11:25:47]:apache2$ sudo ldd /usr/lib/php/20190902/curl.so
/usr/lib/php/20190902/curl.so: /usr/local/lib/libcurl.so.4: no version information available (required by /usr/lib/php/20190902/curl.so)
    linux-vdso.so.1 (0x00007fffea95f000)<br>
    libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00007f5924bd3000)

Come evidenziato dal comando esiste un conflitto tra la versione di libcurl installata in passato (/usr/local/lib/libcurl.so.4) e quella nuova (/usr/lib/php/20190902/curl.so); decido di rinominare quella vecchia:

root@jsbach[11:34:45]:apache2# cd /usr/local/lib/
root@jsbach[11:35:58]:lib# ls -l | grep 'curl'
-rw-r--r-- 1 root root  1006444 mag 23  2017 libcurl.a
-rwxr-xr-x 1 root root     1042 mag 23  2017 libcurl.la
lrwxrwxrwx 1 root root       16 mag 23  2017 libcurl.so -> libcurl.so.4.4.0
lrwxrwxrwx 1 root root       16 mag 23  2017 libcurl.so.4 -> libcurl.so.4.4.0
-rwxr-xr-x 1 root root   542272 mag 23  2017 libcurl.so.4.4.0
root@jsbach[11:36:04]:lib# mv libcurl.so.4.4.0 libcurl.so.4.4.0.OLD
root@jsbach[11:38:53]:lib# ldd /usr/lib/php/20190902/curl.so
	linux-vdso.so.1 (0x00007fff9610f000)
	libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f8d92a92000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8d926a1000)

Adesso il comando ldd (List Dynamic Library, che ci dice quali sono le librerie collegate ad un executable) non mostra più l’errore

root@jsbach[11:38:53]:lib# ldd /usr/lib/php/20190902/curl.so
	linux-vdso.so.1 (0x00007fff9610f000)
	libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f8d92a92000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8d926a1000)
...

Altro problema. Eseguento il comando php -m (o qualsiasi comando che usa l’interprete php client) ho un Warning:

root@jsbach[11:55:43]:lib# php -m
PHP Warning:  Module 'curl' already loaded in Unknown on line 0
[PHP Modules]
calendar
Core
ctype
curl
date

Il problema è che carico due volte la libreria, una specificando nominalmente il modulo curl nelle extensions

root@jsbach[12:10:32]:cli# pwd
/etc/php/7.4/cli
root@jsbach[12:10:34]:cli# cat php.ini | grep curl
extension=curl
[curl]
;curl.cainfo =

e una a causa della presenza del file singolo di load nelle configurazioni:

root@jsbach[12:11:00]:cli# ll conf.d/ | grep curl
lrwxrwxrwx 1 root root   36 feb  4 16:23 20-curl.ini -> /etc/php/7.4/mods-available/curl.ini

Commento la riga extensions=curl del file /etc/php/7.4/cli/php.ini. Il comando ora da un ouput pulito:

root@jsbach[12:11:45]:cli# php -m
[PHP Modules]
calendar
Core
ctype
curl
date
...

Anche il riavvio di Apache ora è pulito:

marcob@jsbach[12:15:23]:php$ sudo service apache2 restart
marcob@jsbach[12:24:48]:php$ 

Inoltre ora phpinfo() mostra il modulo correttamente caricato:

Modulo cURL correttamente caricato

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.