web-dev-qa-db-fra.com

Installation curl à PHP cli

J'essaie de créer un cronjob qui nécessite curl, et je l’appelle directement depuis crontab avec 

* * * * * /usr/bin/php myurl/my_cron.php

Le problème, c'est que le module curl n'est pas installé pour mon phpcli. 

Cela fonctionne très bien quand je frappe l'URL de mon navigateur, mais quand je cours 

php -q myfile.php

depuis la ligne de commande, il retourne 

PHP Fatal error:  Call to undefined function curl_init() in my_cron.php on line 20

Lorsque je lance php -m, le module curl n'apparaît pas. Cependant, lorsque je vais sur le navigateur et que je vide php_info (), le module apparaît et dit qu'il est correctement installé.

L’autre kicker est que j’essaie d’installer curl avec apt-get sur le serveur (Ubuntu 12.04 php 5.4), il semble abattre mon PHP alors qu’il commence à essayer simplement de télécharger le fichier index.php où que j'essaye de le faire. parcourir pour.

Voici les tentatives d'installation de curl effectuées par PHP:

Sudo apt-get install php-curl
Sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

Après chacun de ceux-ci, j'ai redémarré le serveur Apache2 et toujours aucun dé, il a tenté de télécharger le fichier au lieu d'ouvrir la page.

Comment puis-je installer php5-curl uniquement sur le CLI, afin que mon serveur puisse l'exécuter et que je n'ai pas à passer par un navigateur?

L'autre possibilité est que je puisse exécuter les tâches cron via wget à partir du fichier crontab, mais j'ai entendu dire que ce n'était pas la meilleure option et qu'il était potentiellement peu fiable.

Toute aide est très appréciée. Merci! 

16
user2966822

J'ai eu le même problème. Mais, finalement, je l'ai résolu en exécutant la commande suivante.

Sudo apt-get install php7.0-curl

Redémarrez le serveur après l'installation. Cette réponse peut ne pas être utile pour l'utilisateur qui l'a demandé, car il l'a posée il y a deux mois. Mais cela peut être utile pour les utilisateurs qui liront ceci à l’avenir.

43
Sriraman

Voici comment j'ai corrigé ceci sur Ubuntu 14.04 lorsque Curl fonctionnait dans des fichiers php exécutés via Apache, mais pas lorsqu'il était appelé à partir de la cli.

sSH sur votre serveur et cd à /

find / -name 'curl.so'

Exécutez la commande de recherche ci-dessus pour localiser l'emplacement du programme binaire curl. Si vous ne trouvez pas le fichier, vous devrez peut-être installer curl et réexécuter la commande find.

apt-get install php5-curl

Vous voudrez maintenant éditer le fichier php.ini utilisé pour les fichiers php exécutés à partir de la cli (différent de celui utilisé par Apache), probablement à /etc/php5/cli/php.ini.

nano /etc/php5/cli/php.ini

Vous pouvez aussi courir

php -i | grep 'php.ini'

Pour obtenir le chemin du fichier, juste pour être sûr.

Dans votre fichier php.ini, recherchez [curl] en appuyant sur ctrl + w

Vous allez maintenant vouloir ajouter l'extension au fichier et il devrait ressembler à ceci, bien que votre chemin d'accès au fichier curl.so puisse être un peu différent:

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
extension=/usr/lib/php5/20131226/curl.so

Après avoir fait ce qui précède, j'ai pu utiliser curl dans des scripts php exécutés à partir de la cli.

15
rmmoul

J'utilise Ubuntu 14.04 et PHP 5.3. Après la mise à niveau vers PHP 5.6.29, j’ai également un problème avec php curl. Ma structure de répertoire après la mise à jour vers PHP 5.6.29:

/ etc/php5 - ancienne version (5.3)

/etc/php/5.6 - nouvelle version

La prochaine commande

Sudo apt-get install php5-curl

n'a pas aidé (on dirait qu'il se connecte à l'ancienne version php - 5.3).

J'ai trouvé l'article suivant: php 5.6 pour magento

Il est conseillé d'utiliser la commande 

apt-get -y install php5.6-curl

au lieu de 

apt-get -y install php5-curl

Ça marche pour moi!

3
Vaha

Si vous utilisez l'interface de ligne de commande ('cli') pour php5, au lieu de 

php -q myfile.php

veuillez utiliser:

php5 -q myfile.php

php5-curl semble activer le module curl pour le cli php5 et non pas php et les deux (peuvent) charger différentes configurations et modules.

3
Rocky Inde

La première chose que vous devriez toujours vérifier est votre fichier php.ini. Vous devriez avoir un fichier php.ini dans votre racine web. Curl est installé par défaut sur la plupart des serveurs Web. Je n'ai pas trouvé de serveur Web avec PHP sur lequel curl n'est pas déjà installé. Ce n'est pas toujours activé, cependant.

Vérifiez votre fichier php.ini et recherchez php_curl.dll, il devrait ressembler à ceci:

;extension=php_curl.dll

Supprimez simplement le point-virgule (;) avant "extension" et enregistrez le fichier. Cela devrait fonctionner tout de suite. Selon votre phpinfo.php, il est déjà installé, il doit donc probablement être activé.

Si vous êtes intéressé, vous pouvez trouver une question similaire ici: Appel de la fonction indéfinie curl_init ()

1
JaidynReiman

commencez par trouver la version de votre php cli par:

php -v

par exemple s'il s'agissait de la version 7 alors:

Sudo apt-cache search php7

cela vous donnera les noms de module appropriés pour votre version actuelle:

php7.0-curl - CURL module for PHP     <---- the name of curl module. 
php7.0-dev - Files for PHP7.0 module development
php7.0-Gd - Gd module for PHP
php7.0-gmp - GMP module for PHP
php7.0-json - JSON module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mysql - MySQL module for PHP
.
.
so on

alors ajouter boucle  support, copiez le nom du module curl de la liste ci-dessus puis procédez comme suit:

Sudo apt-get install php7.0-curl
1
Mustafa.R

Dans le cas où quelqu'un atteint ici pour trouver la version Windows de l'exécution curl.

Ouvrez php.ini et supprimez le; avant le extension=php_curl.dll autour de la ligne 656.

Je suis à peu près sûr que ce qui est chargé par Apache est C:\wamp\bin\Apache\Apache2.2.17\bin\php.ini et vous pouvez donc trouver curl fonctionner depuis votre navigateur.

Mais quand php est lancé depuis la ligne de commande, il peut afficher une fonction inconnue curl_init();

Exécutez php -r "echo php_ini_loaded_file();" dans la ligne de commande pour voir quel fichier ini est en cours de chargement.

Habituellement, son contenu dans C:\wamp\bin\php\php5.3.5\php.ini est un fichier différent de celui utilisé par Apache. Alors ouvrez-le puis retirez le; avant extension = php_curl.dll autour de la ligne 656.

J'espère que ça aide quelqu'un.

0