web-dev-qa-db-fra.com

PHP impossible de charger l'extension php_curl.dll

Suivi de mon message d'hier ( Activation de cURL avec PHP )

Le problème est que PHP ne parvient pas à charger php_curl.dll. J'ai essayé plusieurs étapes, y compris décommenter extension=php_curl.dll, en vérifiant les dépendances libeay32.dll et ssleay32.dll eixst dans le chemin, en téléchargeant à nouveau php_curl.dll, en remplaçant l'ancien et en copiant le fichier dans mon dossier System32.

J'utilise Apache 2.2 et PHP 5.4.14. J'ai installé les deux en utilisant leurs paquets individuels; Je n'utilise ni XAMP ni WAMP. J'utilise Windows 7 64 bits.

Toute aide serait appréciée.

31
user2066880

libeay32.dll et ssleay32.dll doivent être accessibles par chemin pour que le chargement de php_curl.dll réussisse. 

Mais les copier dans la ServerRoot d'Apache, le \bin\ d'Apache, le \System32\ de Window, ou même pire dans le répertoire principal de Windows est une mauvaise manipulation et peut même ne pas fonctionner avec les versions PHP plus récentes.

La bonne façon de le faire est d’ajouter le chemin PHP à la variable Windows Path. Dans Control Panel -> System, cliquez sur Paramètres système avancés et utilisez le bouton Variables d'environnement . Sous Variables système vous trouverez la variable Path. Le modifier et append; C:\PHP y ajouter le C:\PHP; - ou quel que soit le chemin d'accès à votre dossier PHP. Arrêtez ensuite complètement Apache et redémarrez-le (un simple redémarrage peut ne pas suffire).

Mise à jour 2017-05:
J'ai changé les instructions ci-dessus en prepend la variable Path avec le chemin PHP au lieu de appending. Cela garantit que les DLL du chemin PHP sont utilisées et non d'autres versions (obsolètes) des autres chemins du système.

Mise à jour 2018-04:
Si vous avez déjà choisi la mauvaise manière et copié l’une des DLL PHP dans les chemins Apache ou Windows, il est vivement recommandé de les supprimer à nouveau! Sinon, vous pourriez avoir des problèmes lorsque vous tenterez plus tard de mettre à jour PHP. Si une nouvelle version PHP apporte de nouvelles versions de ces DLL, mais que vos anciennes DLL persistent toujours dans les chemins du système ou du serveur Web, ces anciennes DLL peuvent être trouvées en premier. Cela empêchera certainement l'interpréteur PHP de démarrer. De telles erreurs peuvent être très difficiles à comprendre et à résoudre. Il vaut donc mieux nettoyer maintenant et supprimer les DLL mentionnées des chemins Windows et Apache, si vous les avez copiées.
(Merci à @EdmundTam et @WasimA. Pour avoir signalé ce problème dans les commentaires!)

56
Jpsy

Dans PHP version 5.6.x, procédez comme suit:

Déplacer vers les DLL de dossier Windows\system32 à partir du dossier php:

libssh2.dll, ssleay32.dll, libeay32.dll et php_curl.dll à partir du dossier php ext

Déplacer vers le dossier Apache24\bin à partir du dossier php:

libssh2.dll

De plus, n'oubliez pas de décommenter extension=php_curl.dll dans php.ini

15
Matt

WINDOWS Apache 2.4.x + PHP 7.0.x SOLUTION ICI:

Solution: Placez les fichiers libeay32.dll, libssh2.dll, ssleay32.dll dans le répertoire spécifié dans la directive ServerRoot de httpd.conf. Ces dll peuvent être trouvées compilées sous le dossier racine php.

Les raisons:

Le problème est que php_curl.dll nécessite d’accéder aux bibliothèques suivantes lors du chargement: libeay32.dll, libssh2.dll, ssleay32.dll et cela n’a aucun sens si vous les mettez dans le répertoire ./php/ext ou si vous mettez les extensions php dans php root dir.

Bien sûr, vous pouvez les mettre dans c:\Windows ou dans un dossier global défini dans PATH, mais si vous ne voulez pas faire cela et que vous voulez que votre installation Apache + php soit portable:

Le chemin spécifié dans ServerRoot dans httpd.conf est traité en tant que chemin de base pour php. Le comportement est similaire à la situation dans laquelle vous incluez le fichier ./path/to/some.php dans ./index.php et le chemin de base du fichier some.php est toujours ./ le répertoire où réside index.php.

En bref, placez ces trois dll dans le répertoire que vous avez spécifié dans la directive httpd.conf ServerRoot et php_curl.dll ne manquera pas de se recharger.

12
BIOHAZARD

Vous chargez .dll donc votre système d'exploitation doit être Windows.

Commencez par vérifier le fichier php.ini que vous utilisez en exécutant phpinfo()

Puis vérifiez où se trouve votre dossier d'extensions en vérifiant l'attribut extension_dir dans ce fichier.

Assurez-vous ensuite que php_curl.dll est présent dans ce dossier. Si ce n'est pas le copier.

Redémarrez Apache et vérifiez si cela fonctionne.

Depuis que vous avez installé les paquets individuellement, faites aussi ceci:

Copiez le fichier dll de php_installation_folder/extensions à Apache_installation_folder/bin

6
raidenace

Assurez-vous que vos dll Apache SSH se chargent correctement. Lors d’une nouvelle installation, j’ai dû télécharger et charger dans mon répertoire Apache bin la dll suivante "libssh2.dll"

Après que ssl dll ait été chargé, cURL a pu se charger sans aucun problème. 

Vous pouvez le télécharger à partir du lien ci-dessous: 

http://windows.php.net/downloads/pecl/releases/ssh2/0.12/

2
Alan D

Solution:

Step1: Uncomment the php_curl.dll from php.ini

Step2: Copy the following three files from php installed directory.i.e "C:\\php7".

libeay32.dll,
libssh2.dll,
ssleay32.dll

Step3: Paste the files under two place

httpd.conf's ServerRoot directive. i.e "C\Apache24"
Apache bin directory. i.e "C\Apache24\bin"

Step4: Restart Apache.

C'est tout. Je résous le problème de cette façon. J'espère que cela fonctionnera pour vous.

La solution est donnée ici . https://abcofcomputing.blogspot.com/2017/06/php7-unable-to-load-phpcurldll.html

2
shafiq2410

Insérer dans le fichier httpd.conf

LoadFile "D:/DevKit/PHP7.1/libeay32.dll"
LoadFile "D:/DevKit/PHP7.1/libssh2.dll"
LoadFile "D:/DevKit/PHP7.1/ssleay32.dll"
1
Leon Lam

Il s'agit généralement d'une erreur d'incompatibilité de version OpenSSL entre Apache et PHP. Si Apache charge PHP en tant que module DSO, ses propres versions OpenSSL (dll et bibliothèques) seront utilisées. Donc, si l'extension PHP nécessite une version plus récente, il est possible que l'interface appropriée ne soit pas trouvée dans les DLL chargées avec Apache et que cela ne fonctionne pas.

Puisque vous avez besoin de l'extension PHP à charger, vous avez besoin que les fichiers DLL appropriés soient au moins la version de celle demandée par le module PHP ..... Dans le cas où vous utiliseriez Les dernières versions pour Apache et PHP et les deux ayant été créées avec la même version de MVC, vous pouvez copier les fichiers suivants:

  • libcrypto-1_1.dll
  • libcrypto-1_1-x64.dll
  • libcurl.dll
  • libsasl.dll
  • libssh2.dll
  • libssl-1_1.dll
  • libssl-1_1-x64.dll
  • nghttp2.dll
  • libeay32.dll (s'il existe dans votre distribution PHP)
  • ssleay32.dll (s'il existe dans votre distribution PHP)

depuis le dossier racine PHP vers le dossier Apache2/bin, au cas où vous seriez certain que la version PHP est plus récente que la version Apache.

Dans le cas contraire, vous pouvez copier les mêmes fichiers du BIP Apache vers la racine PHP.

Dans tous les cas, sauvegardez au préalable le contenu des dossiers Apache et PHP.

Ajouter le chemin PHP en tant que variable environnementale donnera la priorité à ce chemin pour charger les DLL appropriées et pourra résoudre le problème. Cependant, vous perdez la portabilité du serveur. En outre, si vous avez également ajouté Apache PATH en tant que variable et que les versions d'OpenSSL sont très différentes (vous pouvez charger différents fichiers liés DLL liés), de nombreuses difficultés peuvent survenir.

1
Chris Tsirkas

Après avoir tout essayé, je devais simplement mettre à niveau Apache vers une version plus récente afin de faire fonctionner l’extension curl.

J'étais en train de mettre à jour PHP de 7.0.2 à 7.1.15 après quoi curl ne fonctionnait plus. Le seul moyen de résoudre ce problème était de mettre à niveau Apache (version 2.4.18) vers la dernière version 2.4.29.

Je n'ai pas eu à copier les fichiers dll lib/ssleay dans Apache ou Windows - peut-être parce que le dossier PHP est déjà présent dans le chemin système.

Exécution de Windows 10, versions sécurisées pour les threads, 64 bits, VC14.

1
TheStoryCoder

Ajoutez votre chemin de dossier php au PATH du système et tout devrait bien fonctionner. Cela corrigera également certaines autres extensions cassées.

0
Vitor de Souza

J'ai eu cette erreur parce que, sur mon système au moins, si extension_dir dans php.ini est défini sur un chemin relatif, il est considéré comme étant relatif au répertoire racine Apache, donc pour le faire pointer vers le bon répertoire, je devais utilisez un chemin absolu: "C:\Program Files (x86)\PHP\ext". (C'était PHP 5.5.31 et Apache 2.4.23 sous Windows 10; le réglage de extension_dir sur ext fonctionnait parfaitement avec la même configuration sous Windows 7. Je l'ai d'abord fait fonctionner en mettant un répertoire ext dans le dossier Apache avec les dll nécessaires, puis compris ce qui se passait.)

Il était également nécessaire de définir correctement le PATH ou de vous assurer que les DLL mentionnées ci-dessus (libeay32.dll, libssh2.dll et ssleay32.dll) se trouvent dans le répertoire bin d'Apache (ou très probablement à l'un des endroits mentionnés par d'autres réponses). Le fait que j'ai reçu le même message d'erreur pour Apache ne pouvant pas trouver lib_curl.dll ni pour pouvoir trouver libssh2.dll n'a pas rendu les choses plus faciles à comprendre.

0

J'ai déjà rencontré le même problème auparavant. Je l'ai résolu en ajoutant un répertoire php aux variables d'environnement du système Windows --- Path. 

0
W.Monkey