2013-11-07 5 views
13

Я пытаюсь создать cronjob, который требует завитка, и я звоню непосредственно из кронтаба сУстановки завитка в PHP CLI

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

Проблема заключается в том, что выглядит как завиток модуль ISN» t для моего phpcli.

Это прекрасно работает, когда я попал в URL из браузера, но когда я бегу

php -q myfile.php 

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

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

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

Другой кикер я пытался установить завиток с 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 только кли, чтобы мой сервер мог запустить его, и мне не нужно проходить через браузер?

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

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

+0

Этот вопрос, возможно, будет дубликатом. Я нашел пару подобных вопросов, таких как этот: http://stackoverflow.com/questions/10226983/call-to-undefined-function-curl-init – JaidynReiman

ответ

1

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

Проверьте ваш файл php.ini и поиск php_curl.dll, он должен выглядеть следующим образом:

;extension=php_curl.dll

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

Аналогичный вопрос можно найти здесь, если вы заинтересованы: Call to undefined function curl_init()

+0

1) Первое предложение относится к комментарию. 2) там нет php.ini в _document root_ (god forbid!) – geomagas

+0

Итак, я запустил поиск в моем файле php.ini и не было строки для '; extension = php_curl.dll' – user2966822

+0

Файл находится/etc/php5/cli/php.ini – user2966822

38

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

sudo apt-get install php7.0-curl 

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

+0

Странно, я сделал это с начальной установкой, но, возможно, это нужно было сделать отдельно? Без разницы. – Jacksonkr

+0

Обновление, так как это все еще главный вопрос: 'sudo apt install php7.0-curl' – DannyB

+0

@ DannyB ya .. Обновлено .. – Sriraman

2

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

php -q myfile.php 

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

php5 -q myfile.php 

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

14

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

SSH к серверу и компакт-диск в/

find/-name 'curl.so' 

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

apt-get install php5-curl 

Теперь Вы хотите редактировать php.ini используется для PHP файлов запуска из командной строки (это отличается от той, которая используется Apache), и, вероятно, в/и т.д./php5/CLI/PHP .ini

nano /etc/php5/cli/php.ini 

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

php -i | grep 'php.ini' 

чтобы получить путь к файлу, просто чтобы быть уверенным.

В поиске php.ini файла для [завитка], нажав 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 

После выполнения выше, я был в состоянии использовать завиток в PHP скрипты запуска из командной строки.

+1

+1 upvote действительно хороший информативный шаг за шагом ответ, @mmoul. Вклад, который я бы сделал, является альтернативой «apt-get install php5-curl» или «sudo apt-get install php5-curl», если он запущен Ubuntu внутри виртуальной машины, то убедитесь, что curl добавлен в конфигурацию виртуальной машины, например если вы используете конфигурацию на основе puphpet.com для создания виртуальной машины через Vagrant, затем добавьте завиток через веб-конфигуратор puphpet.com или отредактируйте config.yaml, чтобы отобразить curl в полученном .zip, загруженном с puphpet. Перепрограммируйте или перестройте виртуальную машину после этого редактирования (см. Часть 1 из 2). – therobyouknow

+1

(см. Часть 2 из 2) см. Также мои заметки, показывающие, где curl идет в config.yaml здесь: https://github.com/guzzle/жрать/вопросы/1586 # issuecomment-247286744. В моем случае мне нужно было добавить завиток в конфигурацию виртуальной машины, как я описал здесь, чтобы получить curl.so Еще раз спасибо за ваш отличный ответ, надеюсь, что мой вклад еще больше укрепит его. – therobyouknow

0

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

Открыть 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.

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

3

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

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

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

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

sudo apt-get install php5-curl 

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

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

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

apt-get -y install php5.6-curl

вместо

apt-get -y install php5-curl

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

+0

Работал для меня тоже! Благодаря! –

1

сначала найти версию PHP кли по:

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 

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

sudo apt-get install php7.0-curl 
Смежные вопросы