6 votes

Impossible d'activer php-curl sur Ubuntu 18.04 & PHP 7.2

En ce moment, j'essaie d'activer php-curl dans mon serveur apache2 sur Ubuntu 18.04 pour permettre à une iframe d'afficher une page de site externe. J'ai utilisé des méthodes pour essayer de le faire que j'ai trouvées documentées à plusieurs endroits :

StackOverflow : Comment installer l'extension ext-curl avec PHP 7 ?

StackOverflow : installer cURL dans php 7 (ubuntu14.04)

LinuxConfig.org : Comment activer et désactiver le module PHP curl avec Apache sur Ubuntu Linux

Quoi que je fasse, je n'arrive pas à faire fonctionner les commandes curl dans php, ce qui est très frustrant. Je me suis assuré que j'avais utilisé sudo apt-get install curl php7.2-curl qui s'est installé sans problème, et j'ai ensuite redémarré le service apache en utilisant sudo service apache2 restart . J'ai essayé d'activer l'extension dans le php.ini en utilisant extension=php_curl.dll et aussi extension=curl , sans succès. Si j'essaie le code donné sur linuxconfig.org pour vérifier l'état du module curl, il indique qu'il est désactivé.

Si j'essaie d'exécuter mon code php, je trouve dans mes logs :

PHP Erreur fatale : Erreur non prise : Call to undefined function curl_init() in /var/www/html/inc.redirect.php:4 \nStack trace : \n #0 {main} \n dans /var/www/html/inc.redirect.php à la ligne 4

Le code dans mon fichier 'inc.redirect.php' est le suivant :

<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ch = curl_init();
    $timeout = 10;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}
?>

Qu'est-ce que je fais mal ou que j'oublie ?

UPDATE : En regardant dans le fichier error.log d'Apache2 lorsque je redémarre le service, je vois ce qui suit :

PHP Warning : PHP Startup : Impossible de charger la bibliothèque dynamique '/usr/lib/php/20160303/curl.so' - /usr/lib/php/20160303/curl.so : impossible d'ouvrir un fichier objet partagé : No such file or directory in Unknown on line 0

J'essaie toujours d'approfondir la question, et il semble que le fichier curl.so qu'il recherche se trouve dans '/usr/lib/php/20170718'. Je ne sais pas si je peux le faire, mais je ne sais pas non plus si je peux le faire.

6voto

MathewH Points 131

J'ai trouvé le problème.

Ce qui se passait, c'est que j'avais activé à la fois php7.1 et php7.2 au sein d'Apache2. sudo a2dismod php7.1 J'ai ensuite redémarré apache, et j'ai pu charger ma page inc.redirect.php sans erreur.

2voto

Radheshyam Kori Points 41

Merci MathewH, j'ai lutté pendant les 2 derniers jours mais je n'ai pas pu localiser l'erreur, comme le module curl a été installé, l'extension php-curl a également été installée, j'ai pu exécuter le curl pour une url dans le terminal, mais quand j'exécute la commande curl_init() dans un code PHP, il affichera toujours une erreur de serveur interne 500,

J'ai installé le module curl en suivant les commandes suivantes :

sudo apt-get install php7.0-curl
sudo /etc/init.d/apache2 restart

car j'ai installé php 7.4.6 dans mon système

J'ai ensuite vérifié les journaux d'erreurs d'Apache2 dans /var/log/apache2/error_log et j'ai constaté que curl_init() indique une erreur

Call to undefined function curl_init()

Puis, en cherchant sur Google, j'ai trouvé le lien : PHP : Vérifier si cURL est activé. qui mentionne ces 3 codes pour vérifier si curl est chargé ou non :

  1. if(function_exists('curl_init') === false) {

     //curl_init is not defined
        //cURL not enabled
    
    }
  2. //Check if "curl" can be found in the array of loaded extensions.

    if(in_array('curl', get_loaded_extensions()))
    {
        //cURL module has been loaded
    } 
    else
    {
        //It has not been loaded. Use a fallback.
    }
  3. if(extension_loaded('curl')) { //the extension has been loaded }

J'ai ajouté ces 3 codes dans index.php et j'ai nommé le dossier du projet curl-load-check. Après exécution, j'ai constaté et obtenu la confirmation que l'extension curl n'est pas chargée.

Finalement, j'ai trouvé ce lien : Impossible d'activer php-curl sur Ubuntu 18.04 & PHP 7.2 et de la réponse de MathewH, J'ai constaté que php 7.2 et php 7.4 étaient tous deux activés dans apache2. J'ai donc désactivé php 7.2 par les commandes suivantes :

sudo a2dismod php7.2
sudo systemctl restart apache2 

et enfin j'ai vérifié le code php pour vérifier si l'extension curl est chargée comme mentionné ci-dessus dans les codes php, il a montré que l'extension curl est chargée avec succès. J'ai vérifié maintenant le code curl_init() utilisée dans le code php fonctionne maintenant sans aucune erreur. Merci MathewH, après une longue lutte, vous m'avez finalement sauvé la mise.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X