web-dev-qa-db-fra.com

Appel de la fonction indéfinie curl_init () même si elle est activée dans php7

Je viens d'installer php7 sur mon Ubuntu. Au début, il n'y avait pas de problème, mon site Web fonctionnait. Mais tout à coup, il a commencé à renvoyer Call à une erreur non définie de la fonction curl_init (). Maintenant, mes pages contiennent des codes curl ne fonctionnent pas.

Dans phpinfo (), il semble que Curl soit activé. Il y avait des questions similaires mais aucune d'entre elles ne l'a traitée dans php7. Je pensais que ça devrait être différent des autres.

Edit: Quand j'essaye

php -i | grep curl       

en terminal, ça retourne

/etc/php/7.0/cli/conf.d/20-curl.ini,
curl
38
Sab

J'ai eu un problème similaire avec curl après la mise à niveau vers XX (16.04). Après la réinstallation de curl avec:

Sudo apt-get install php-curl

Et redémarrage du serveur

Sudo service Apache2 restart

tout est rentré dans l'ordre :)

82
Deus777

hypothèse

Vous avez installé la version du module pour la version PHP que vous utilisez, et pourtant le problème ne disparaît pas.

Qu'est-ce qui se passe ici?

Il se peut que plusieurs versions de PHP soient installées sur votre système et qu'Apache n'utilise pas la version que vous vous attendez à utiliser.

Comment savoir quelle version de PHP Apache utilise?

Pour le savoir, l’idée principale est d’apprendre le répertoire racine des fichiers de configuration de votre Apache. Dans la ligne de commande, vous pouvez taper:

Apache2ctl -V  //sample output below

AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:34:04
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/Apache2"
 -D SUEXEC_BIN="/usr/lib/Apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/Apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/Apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="Apache2.conf"

Dans mon cas, le répertoire de configuration ROOT de mon Apache est affiché dans le

HTTPD_ROOT="/etc/Apache2"

Maintenant que je connais l'emplacement des configurations qu'Apache utilise, je peux maintenant déterminer avec précision la version de PHP qu'il utilise en examinant le "mods-enabled" répertoire situé à l'intérieur du "/etc/Apache2" répertoire.

Dans mon cas, quand un ls se trouve-t-il dans le "mods-enabled", il a montré la sortie ff:

access_compat.load  authz_user.load  filter.load       php5.load
...
authz_Host.load     env.load         php5.conf

À ce stade, je sais maintenant avec certitude qu'Apache utilise le 'php5' version de PHP installé sur mon système, quel qu’il soit.

Ensuite, j'ai essayé de reproduire l'erreur ci-dessus en utilisant cette version de PHP (c'est-à-dire, 'php5') en lançant la commande ci-dessous:

$ php5 -r "curl_init();"
PHP Fatal error:  Call to undefined function curl_init() in Command line code on line 1

Voila!

La version de PHP que je m'attendais à utiliser avec Apache est "php5.6" et l'exécution de la même commande ci-dessus avec cette version n'a pas généré l'erreur en question.

Solution

Pour résoudre ce problème, installez la version du module qui correspond à la version PHP utilisée par Apache (dans mon exemple, php5.0-curl)] ou modifiez la version de = PHP utilisé dans Apache pour la version de votre choix.

Comment dire à Apache quelle version de PHP utiliser?

Vous pouvez accomplir cela en utilisant le a2enmod/a2dismod commandes cli de Apache2.

Tout d’abord, je désactive le module PHP actuellement actif sur mon serveur (c'est-à-dire, "php5"):

a2dismod php5

Ensuite, j'ai activé le module php pour la version de PHP) que je souhaite utiliser avec Apache:

a2enmod php5.6

Puis je redémarre Apache

service Apache2 restart

Après avoir actualisé la page incriminée sur mon site Web, l'erreur est maintenant disparue.

17
ultrajohn

J'ai fait tout ce qui précède mais je n'ai pas résolu le problème.

Env: Ubuntu, php7.1, Laravel 5.6

Solution

Sudo add-apt-repository ppa:ondrej/php
Sudo apt-get install php7.1-curl
5
Sheraz Ahmed

Pour moi, la solution était de mettre à jour apt-get avec la commande suivante, puis d'installer php7.0-curl.

Sudo add-apt-repository ppa:ondrej/php
3
Kevin Hill

Votre chemin de fichier est probablement incorrect

Vérifiez le journal des erreurs Apache dans

/var/log/Apache2/error.log

si le chemin ou le nom de fichier appelé ne correspond pas à votre chemin réel, par exemple.

/usr/lib/php/20151012/php_curl.so

Dans mon cas, cela a été le même chemin, mais "le php_" manquait

/usr/lib/php/20151012/curl.so

J'ai donc changé le chemin/nom du fichier en conséquence dans

/etc/php/7.0/cli/conf.d/20-curl.ini 

de

extension=php_curl.so

dans

extension=curl.so
3
leopold

Vos pages ne sont probablement pas générées avec la CLI SAPI. Vérifiez ce que phpinfo () renvoie lorsqu'il est exécuté à partir de votre serveur Web (il essaie probablement de lire le mauvais fichier ini).

1
symcbean

Je connais sa réponse très tardive, mais je pense qu’elle est utile car j’ai fait face au même problème et j’ai essayé la solution ci-dessus, mais cela n’a pas fonctionné. Ensuite, j'ai appuyé sur la commande suivante et maintenant fonctionne parfaitement:

apt-get install php7.0-curl
1
Prabhu Nandan Kumar
  • étape 1: Téléchargez Php 7,
  • étape 2: copiez libeay32.dll et ssleay32.dll et collez-les dans C:\Windows\System32.
  • étape 3: Remplacez php_openssl.dll et php_curl.dll dans C:\php\ext par le dernier fichier DLL. redémarrer Apache

Cela a résolu mon problème, j'espère que quelqu'un en profitera aussi

0
Mark Wandatha