30/07/2017

php_curl.dll in PHP 7.0.21 e 7.1.7 su Windows x64

Se come me avete passato un pomeriggio della vostra vita a cercare di capire perche’ in PHP 7.0.21 su Windows x64 non funziona cURL, mentre funzionava senza problemi nelle versioni precedenti, sappiate che il problema non e’ di DLL da spostare qua o la’. Il problema e’ che con le nuove versioni del ramo 7.0.x (e su PHP 7.1.x a partire dalla 7.1.4) e’ richiesta una versione recente della libreria libeay32.dll e sicuramente nel vostro sistema ce ne sono decine di copie anche antiche.

Che fare dunque?
Se usate PHP solo per sviluppare in locale in un ambiente protetto da ogni accesso esterno e poi caricate le vostre pagine su un server gestito da altri, potete installare una versione meno recente della php_curl.dll nella cartella ext di php. Per PHP 7.0.x va bene quella della 7.0.7, per PHP 7.1.x potete usare quella della 7.1.3.

Tuttavia questa non e’ la vera soluzione e non funzionera’ quando arrivera’ PHP 7.2.

La soluzione e’ risolvere le ragioni per cui PHP non riesce a caricare la php_curl.dll: avete copie anteguerra della libeay32.dll in giro per il sistema che vengono trovate prima di quella giusta, magari perche’ le usa qualche programma caricato prima di Apache.

Ecco come risolvere:

  1. fate un backup del vostro disco di sistema con Acronis o altro software che usate.
  2. controllate nella variabile PATH che la cartella di PHP ci sia e sia prima di tutte le altre, in modo che quando viene cercata la dll venga caricata da li.
  3. fate una ricerca di libeay32.dll e guardate la versione di ogni copia che trovate. Se e’ precedente a quella nella cartella di PHP, rimuovetela.

L’operazione al punto 3 potrebbe far smettere di funzionare qualche programma, quindi fate il backup di sistema prima di iniziare! Se non sapete farlo, forse non dovreste fare le cose scritte in questo post e vi conviene installare una distribuzione WAMP preconfigurata come XAMPP.

Io ho fatto pulizia delle vecchie versioni della DLL e adesso l’estensione cURL di PHP 7.1.7 funziona. Devo ancora verificare se i programmi dalle cui cartelle ho rimosso vecchie versioni di libeay32.dll ne risentono o trovano una copia piu’ recente (32 o 64 bit, a seconda del software) fra le altre presenti. Di volta in volta gestiro’ la cosa. Ma ripeto io so cio’ che sto facendo, se avete paura di fare guai, non fate niente.

In ogni caso prima di procedere fate un backup di sistema!

Ovviamente non mi assumo responsabilita’ per eventuali guai che poteste avere anche seguendo tutto alla lettera. In questo post riporto solo la mia esperienza… e il gran sospiro di sollievo quando ho visto il modulo cURL 7.1.7 attivo in phpinfo() ;)

 

2 commenti per “php_curl.dll in PHP 7.0.21 e 7.1.7 su Windows x64”

  1. Alessandro Marinuzzi scrive:

    Ciao Gabriele, ci sono passato anche io alcuni mesi fa quando è uscito il Php 7.1 (non la versione 7.0). La soluzione che ho trovato funzionare senza dover usare librerie vecchie o obsolete è semplice e per me, devo dire, ha funzionato benissimo. Tieni conto che io ho php come subdirectory di apache24. Quindi ecco come ho fatto. Basta fare una semplice modifica al file httpd.conf:

    LoadModule php7_module “F:\Apache24\php\php7apache2_4.dll”

    LoadFile “F:\Apache24\php\libssh2.dll”

    # configure the path to php.ini
    PHPIniDir “F:\Apache24\php”

    Tutto qua! Spero ti sia di aiuto. Ciao.

  2. Gabriele scrive:

    Grazie ma non funziona, non e’ quello il problema o almeno non solo.
    Comunque ho risolto e aggiornato il post.

Inserisci un commento

Commento

In questo blog non sono graditi commenti anonimi, provocatori oppure offensivi. Esiste la libertà di opinione e critica alle tesi espresse ma la si esercita firmandosi (va bene anche un nick) e con educazione.