Установка curl в PHP cli

Я пытаюсь создать cronjob, который требует завитки, и я вызываю его непосредственно из crontab с помощью

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

Проблема заключается в том, что, похоже, модуль curl не установлен для моего phpcli.

Он отлично работает, когда я ударяю URL из моего браузера, но когда я запускаю

php -q myfile.php

из командной строки, он возвращает

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

Когда я запускаю php -m, модуль curl не появляется. Однако, когда я иду в браузер и выгружаю php_info(), модуль появляется и говорит, что он правильно установлен.

Другим кикером я пытаюсь установить curl с apt-get на сервер (Ubuntu 12.04 php 5.4), он, кажется, снимает мой PHP, поскольку он начинает просто пытаться загрузить файл index.php где угодно Я пытаюсь перейти к.

Вот попытки, которые я сделал, чтобы установить завиток, которые удалили PHP:

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

После каждого из них я перезапустил сервер apache2 и все еще не купил, он попытался загрузить файл, а не открывать страницу.

Как установить php5-curl только в cli, чтобы мой сервер мог запустить его, и мне не нужно проходить через браузер?

Другая возможность - я могу запустить cronjobs через wget из файла crontab, но я слышал, что это не самый лучший вариант и потенциально ненадежный.

Любая помощь очень ценится. Благодарю!

Ответ 1

У меня была такая же проблема. Но, наконец, я решил это, выполнив следующую команду.

sudo apt-get install php7.0-curl

Перезагрузите сервер после установки. Этот ответ может быть не очень полезен для пользователя, который спросил, потому что он спросил его два месяца назад. Но это может быть полезно для пользователей, которые читают это в будущем.

Ответ 2

Вот как я исправил это на ubuntu 14.04, когда curl работал в php файлах, запускаемых через apache, но не при вызове из cli.

ssh на ваш сервер и cd в /

find / -name 'curl.so'

Запустите приведенную выше команду find, чтобы найти место, где висит бинарный файл. Если вы не можете найти файл, вам может потребоваться установить завиток и снова запустить команду find.

apt-get install php5-curl

Теперь вы хотите отредактировать php.ini, который используется для файлов php, запущенных из cli (он отличается от того, который используется apache), и, скорее всего, находится в /etc/php 5/cli/php.ini

nano /etc/php5/cli/php.ini

Вы также можете запустить

php -i | grep 'php.ini'

Чтобы получить путь к файлу, просто убедитесь.

В вашем файле php.ini найдите [curl], нажав ctrl + w

Теперь вы захотите добавить расширение к файлу, и оно должно выглядеть примерно так: хотя ваш путь к файлу curl.so и может быть немного другим:

[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

После выполнения вышеизложенного я смог использовать curl в php-скриптах, запущенных из cli.

Ответ 3

Я использую ubuntu 14.04 и php 5.3. После обновления до php 5.6.29 у меня также возникла проблема с php curl. Моя структура каталогов после обновления до php 5.6.29:

/etc/php5 - старая версия (5.3)

/etc/php/5.6 - новая версия

Следующая команда

sudo apt-get install php5-curl

не помогло (похоже, он подключается к старой версии php - 5.3).

Я нашел следующую статью: php 5.6 для magento

Советуем использовать команду

apt-get -y install php5.6-curl

вместо

apt-get -y install php5-curl

Это работает для меня!

Ответ 4

Если вы используете интерфейс командной строки ('cli') для php5 вместо

php -q myfile.php

используйте:

php5 -q myfile.php

php5-curl, похоже, включает модуль curl для cli php5, а не php, и оба (могут) загружают разные конфигурации и модули.

Ответ 5

Первое, что вы всегда должны проверить, это ваш файл php.ini. У вас должен быть файл php.ini в вашем веб-корне. Curl устанавливается по умолчанию на большинстве веб-серверов; Я не нашел веб-сервер с PHP, который еще не установил завиток. Однако он не всегда включен.

Проверьте свой файл php.ini и найдите файл php_curl.dll, он должен выглядеть так:

;extension=php_curl.dll

Просто удалите точку с запятой (;) из "расширения" и сохраните файл. Он должен работать сразу. Согласно вашему phpinfo.php, он уже установлен, поэтому, скорее всего, он должен быть включен.

Аналогичный вопрос можно найти здесь, если вам интересно: Вызов функции undefined curl_init()

Ответ 6

сначала найдите версию своего php cli:

php -v

например, если это была версия 7, то:

sudo apt-cache search php7

это даст вам правильные имена модулей для вашей текущей версии:

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

чтобы добавить поддержку curl, скопируйте имя модуля curl из списка выше, сделайте следующее:

sudo apt-get install php7.0-curl

Ответ 7

В случае, если кто-то достигнет здесь, чтобы найти версию оконного зависания.

Откройте php.ini и удалите; перед extension=php_curl.dll вокруг строки 656.

Я почти уверен, что загружает Apache C:\wamp\bin\apache\Apache2.2.17\bin\php.ini, поэтому вы можете найти завиток, работающий в браузере.

Но когда php запускается из командной строки, он может показывать неизвестную функцию curl_init();

Запустите php -r "echo php_ini_loaded_file();" в командной строке, чтобы посмотреть, какой файл INI загружается.

Обычно он обнаруживает внутри C:\wamp\bin\php\php5.3.5\php.ini свой другой файл от того, что использует Apache. Откройте его, а затем удалите; перед расширением = php_curl.dll по строке 656.

Надеюсь, что это поможет кому-то.