安装curl到PHP cli

19

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


I'm trying to set up a cronjob which requires curl, and I'm calling it directly from crontab with
* * * * * /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 -m时,curl模块没有显示出来。然而当我在浏览器中转储php_info()时,该模块出现了,并且显示它已经正确安装。

另一个问题是,我一直试图使用apt-get将curl安装到服务器上(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服务器,但仍然无法打开页面,而是尝试下载文件。

我该如何只为cli安装php5-curl,以便我的服务器可以运行它,而不必通过浏览器进行操作?

另一种可能性是我可以通过从crontab文件中使用wget来运行cronjobs,但我听说这不是最好的选择,潜在地可能不可靠。

非常感谢任何帮助。谢谢!


这个问题可能是一个重复的问题。我找到了一些类似的问题,比如这个:https://dev59.com/j2LVa4cB1Zd3GeqP0eHr - JaidynReiman
7个回答

45

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

sudo apt-get install php7.0-curl

在安装后重新启动服务器。这个答案对于两个月前提问的用户可能没有用,但对于未来阅读此内容的用户可能有用。


奇怪,我在最初的安装中已经完成了这个操作,但也许需要单独完成?无论如何。 - Jacksonkr
更新,由于这仍然是一个热门问题:sudo apt install php7.0-curl - DannyB

15

以下是我在Ubuntu 14.04上修复Curl的方法,当在Apache中运行PHP文件时,Curl可以工作,但是从CLI(命令行界面)调用时却不能工作。

通过ssh登录到服务器并进入/目录

find / -name 'curl.so'

运行上述查找命令以定位curl二进制文件的位置。如果您找不到该文件,则可能需要安装curl并再次运行查找命令。

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。


1
非常好的逐步说明性答案,@mmoul。我想要做出的贡献是提供一种替代方法来安装apt-get install php5-curlsudo apt-get install php5-curl,如果在虚拟机中运行Ubuntu,则确保将curl添加到虚拟机的配置中,例如,如果使用puphpet.com基于配置创建VM通过Vagrant,然后通过puphpet.com Web配置器添加curl或编辑config.yaml以在从puphpet下载的.zip中列出curl。根据此编辑重新配置或重建VM(注释第1部分)。 - therobyouknow
1
(注释第2部分)请参阅我的笔记,显示curl在config.yaml中的位置,此处:https://github.com/guzzle/guzzle/issues/1586#issuecomment-247286744。在我的情况下,我需要将curl添加到VM的配置中,就像我在这里描述的那样,以获取curl.so。再次感谢您的出色答案,希望我的贡献能进一步增强它。 - therobyouknow

4

首先通过以下方式查找您的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

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)。

我找到了下一篇文章:Magento的PHP 5.6

它建议使用以下命令

apt-get -y install php5.6-curl

而不是

apt-get -y install php5-curl

对我有用!


我也试过了,谢谢! - Ben Southall

3
如果您正在使用命令行界面(“cli”)来运行php5,而不是
php -q myfile.php

请使用:

php5 -q myfile.php

php5-curl似乎启用了cli php5curl模块,而不是php,两者(可以)加载不同的配置和模块。


1

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

检查你的php.ini文件并搜索php_curl.dll,它应该像这样:

;extension=php_curl.dll

从"extension"前面移除分号(;)并保存文件即可。它应该立即开始工作。根据您的phpinfo.php,它已经安装,因此可能只需要启用它。
如果您有兴趣,可以在这里找到类似的问题:调用未定义的函数curl_init()

所以我在我的php.ini文件中进行了搜索,但没有找到;extension=php_curl.dll这一行。 - user2966822
还有一个更新,那就是php.ini文件是用于cli的,浏览器运行的ini文件位于/usr/local/zend/etc/php.ini,而且确实有;extension=php_curl.dll这一行。我删除了分号,但php -q仍然返回相同的错误。 - user2966822
请在文本中搜索"user2966822",然后将"extension=php_curl.dll"粘贴到其他扩展名的下一行。如果您已启用curl,则可以使用它。但是,您可能不应该覆盖默认的php.ini文件。如果您的文档根目录中没有php.ini文件,请将其粘贴到那里。如果您正在使用标准服务器,则应该可以工作并覆盖默认的php.ini文件。但我不知道您的服务器是什么,所以无法保证。 - JaidynReiman
好的,我尝试了上述两种方法,将该行添加到我的/cli/php.ini中并将我的/usr/local/zend/etc/php.ini复制到文档根目录中,但都没有起作用。现在我可能会尝试通过wget运行它。 - user2966822
非常感谢您的帮助@jrConway。如果我能解决它,我会让您知道的。 - user2966822
显示剩余5条评论

0

如果有人来到这里寻找运行curl的Windows版本。

打开php.ini并在第656行左右的extension=php_curl.dll前面删除分号。

我非常确定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前面删除分号。

希望对某些人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接