#bugfix: Call to undefined function Ixudra\Curl\curl_init()

Spread the love
Ixudra curl - Cosa fare quando si verifica l'errore Call to undefined function Ixudra\Curl\curl_init()?
Cosa fare quando si verifica l’errore Call to undefined function Ixudra\Curl\curl_init()?

cURL è una nota libreria per trattare gli url e gestire chiamate http.

Utilizzo una libreria per Laravel che mi permette di fare delle richieste HTTP da server a sever che si chiama ixudra/curl.

La libreria funziona a meraviglia, se non che, per un problema di configurazione del mio SO, ogni volta che aggiorno la libreria, cURL smette di funzionare.

Il sintomo (undefined function Ixudra \ Curl\Curl_init())

Il sintomo del problema che Laravel esibisce è questo

Symfony\Component\Debug\Exception\FatalThrowableError
Call to undefined function Ixudra\Curl\curl_init()

In realtà il problema risiede ancora più in basso poiché nemmeno il client PHP è immune dagli effetti di questa errata configurazione; invocando semplicemente il client da riga di comando ho:

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'curl.so' (tried: /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), /usr/lib/php/20190902/curl.so.so (/usr/lib/php/20190902/curl.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.4.6 (cli) (built: May 14 2020 10:02:44) ( NTS )
...

Il problema

La radice del problema si trova nella directory /usr/local/lib

$ cd /usr/local/lib/
$ ll
totale 12924
drwxr-xr-x  8 root root     4096 mag 27 08:48 ./
drwxr-xr-x 13 root root     4096 ott 17  2018 ../
-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 21 19:12 libcurl.so.4 -> libcurl.so.4.4.0*
-rwxr-xr-x  1 root root   542272 mag 23  2017 libcurl.so.4.4.0*
...

La “sconfigurazione” è dovuta alla presenza del link simbolico libcurl.so.4, la soluzione proposta è quella di interromperlo perché prenda il sopravvento la versione di sistema. Il fatto è che ogni volta che viene eseguito un aggiornamento di cURL, viene ripristinato anche questo link simbolico reintroducendo l’errore.

Una soluzione

Nell’attesa di escogitare una soluzione più definitiva ho seguito il consiglio che si dava nel forum:

$ sudo mv libcurl.so.4.4.0 libcurl.so.4.4.0.OLD

Così facendo non ho più il problema al client:

$ php -v
PHP 7.4.6 (cli) (built: May 14 2020 10:02:44) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
    with Xdebug v2.9.5, Copyright (c) 2002-2020, by Derick Rethans

Come si vede, l’errore è scomparso. Affinche anche Apache possa beneficiare della soluzione del problema occorre riavviarlo:

$ sudo service apache2 restart

A questo punto anche l’applicazione Laravel torna a funzionare.

Altri articoli Laravel

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.