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
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 :)
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.
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
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
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
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).
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
Cela a résolu mon problème, j'espère que quelqu'un en profitera aussi