19

我正在尝试设置一个需要 curl 的 cronjob,我直接从 crontab 调用它

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

问题是,我的 phpcli 似乎没有安装 curl 模块。

当我从浏览器点击 url 时它工作得很好,但是当我运行时

php -q myfile.php

从命令行,它返回

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

当我运行php -mcurl 模块时没有出现。但是,当我转到浏览器并转储 php_info() 时,该模块出现并显示其已正确安装。

另一个问题是我一直在尝试将 curl 安装apt-get到服务器上(Ubuntu 12.04 php 5.4),它似乎关闭了我的 PHP,因为它开始尝试index.php在我尝试浏览的任何地方下载文件。

以下是我为安装 curl 所做的尝试,这些尝试已经取消了 PHP:

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

在每一个之后,我重新启动了 apache2 服务器,但仍然没有骰子,它试图下载文件而不是打开页面。

如何php5-curl仅安装到 cli,以便我的服务器可以运行它而不必通过浏览器?

另一种可能性是我可以通过 crontab 文件中的 wget 运行 cronjobs,但我听说这不是最佳选择并且可能不可靠。

任何帮助深表感谢。谢谢!

4

7 回答 7

45

我遇到过同样的问题。但是,最后我通过运行以下命令解决了它。

sudo apt-get install php7.0-curl

安装后重启服务器。这个答案可能对两个月前问过的用户没有用。但是,这可能对将来阅读本文的用户有用。

于 2014-02-04T14:59:17.573 回答
15

当 curl 在通过 apache 运行的 php 文件中工作时,我在 ubuntu 14.04 上解决了这个问题,但从 cli 调用时却没有。

ssh 到你的服务器和 cd 到 /

find / -name 'curl.so'

运行上面的 find 命令来定位 curl 二进制文件所在的位置。如果找不到该文件,您可能需要安装 curl 并再次运行 find 命令。

apt-get install php5-curl

您现在需要编辑用于从 cli 运行的 php 文件的 php.ini(它与 apache 使用的不同),并且可能位于 /etc/php5/cli/php.ini

nano /etc/php5/cli/php.ini

你也可以运行

php -i | grep 'php.ini'

要获得文件路径,只是为了确定。

在您的 php.ini 文件中按 ctrl + w 搜索 [curl]

您现在需要将扩展​​名添加到文件中,它应该如下所示,尽管您的 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

完成上述操作后,我可以在从 cli 运行的 php 脚本中使用 curl。

于 2015-04-15T16:45:52.037 回答
3

If you are using the command-line interface ('cli') for php5, instead of

php -q myfile.php

please use:

php5 -q myfile.php

php5-curl seems to enable the curl module for the cli php5 and not php and both (can) load different configurations and modules.

于 2015-01-17T20:56:27.960 回答
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 for magento

它建议使用命令

apt-get -y install php5.6-curl

代替

apt-get -y install php5-curl

这个对我有用!

于 2017-01-12T08:39:47.227 回答
3

首先通过以下方式找到您的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
于 2017-05-06T13:16:26.790 回答
1

您应该始终检查的第一件事是您的 php.ini 文件。您的 Web 根目录中应该有一个 php.ini 文件。大多数 Web 服务器上默认安装 Curl;我还没有找到一个尚未安装 curl 的带有 PHP 的 Web 服务器。但是,它并不总是启用。

检查您的 php.ini 文件并搜索 php_curl.dll,它应该如下所示:

;extension=php_curl.dll

只需从“扩展名”之前删除分号 (;) 并保存文件。它应该立即工作。根据您的 phpinfo.php 它已经安装,所以它可能只需要启用。

如果您有兴趣,可以在这里找到类似的问题:Call to undefined function curl_init()

于 2013-11-07T22:42:50.327 回答
0

万一有人到这里找到运行 curl 的 Windows 版本。

打开php.ini并删除 ; extension=php_curl.dll在第 656 行之前。

我非常确定 Apache 加载的是什么,C:\wamp\bin\apache\Apache2.2.17\bin\php.ini因此您可能会发现 curl 在浏览器中工作。

但是当从命令行运行 php 时,它可能会显示未知功能curl_init();

在命令行中运行php -r "echo php_ini_loaded_file();"以查看正在加载的 ini 文件。

通常它在C:\wamp\bin\php\php5.3.5\php.ini与 Apache 使用的文件不同的文件中找到。所以打开它然后删除 ; 在第 656 行附近的 extension=php_curl.dll 之前。

希望它可以帮助某人。

于 2016-10-13T08:01:01.460 回答