致命错误:调用未定义的函数curl_init()


71
<?php
$filename = "xx.gif";
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));

// $data is file data
$pvars   = array('image' => base64_encode($data), 'key' => IMGUR_API_KEY);
$timeout = 30;
$curl    = curl_init();

curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml');
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars);

$xml = curl_exec($curl);

curl_close ($curl);

var_dump($xml);
?>

我正在使用Imgur API,但似乎无法正常工作。PHP.net说的curl_init()是PHP5中的内容,但我的主人说不是。我该如何工作?

Answers:


42

curl是需要安装的扩展,与PHP版本无关。

http://www.php.net/manual/zh/curl.setup.php


+1并且如果您无法安装curl扩展,则可以尝试通过curl命令使用shell_exec(或类似的命令)。或者,您可以使用fsockopen对其进行“伪造”。
bogeymin 2010年

7
该页面只字未提如何安装扩展程序。还有更好的资源吗?
matteo 2014年

安装curl软件包后,请查看php.ini文件(在/ etc中)。搜索卷曲。在我的(OpenBSD)中,我必须删除对extension = curl
Mark

124

在Debian和Ubuntu的旧版本上,您可以通过安装PHP的Curl扩展名并重新启动Web服务器来解决此问题。假设Web服务器是Apache 2:

sudo apt-get install php5-curl
sudo service apache2 restart

在较新的版本上,软件包名称已更改:

sudo apt install php-curl

您可能需要安装更多:

sudo apt-get install curl libcurl3 libcurl3-dev;

1
我必须在ubuntu中安装更多工具:“ sudo apt-get install curl libcurl3 libcurl3-dev php5-curl;您会知道它是否可行,因为phpinfo()将获得一个包含Curl信息的新部分。”
Kzqai 2012年

我希望它sudo service apache2 restart也能正常工作吗?
tshepang

假设restart = stop + start是合乎逻辑的,但是凭借多年使用Apache的经验,情况并非总是如此。我学会了使用一个明确的停止,然后开始安全。抱歉,我不记得具体的潜在问题,但是欢迎您使用restart它,看看它是否对您有用。
马克·斯托斯伯格

1
只是用sudo apt-get install php5-curl为我做了把戏..谢谢!
mboy 2014年

sudo service apache2 restart只是重新启动Apache。为了使Aache / PHP能够选择添加的CURL软件包,必须运行[CURL安装之后],以便它们在下次运行CURL注入的PHP脚本时起作用。但是,我还发现我需要包括在内php5-curl才能获得满意;)
ReverseEMF 2015年

14

没有足够的声誉来发表评论。使用Ubuntu和一个简单的方法:

sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart

没有为我工作。

由于某种原因curl.so,将其安装在默认情况下未拾取的位置。我extension_dir在php.ini中检查了并将其复制curl.soextension_dir

cp /usr/lib/php5/20090626/curl.so  /usr/local/lib/php/extensions/no-debug-non-zts-20090626

希望这可以帮助某人,相应地调整您的路径位置。


14

对于Ubuntu

安装PHP的Curl扩展名并重新启动apache服务器。

sudo apt-get install php5-curl
sudo service apache2 restart

对于Windows

由于未将PHP的lib_curl.dll包括在内,因此出现了问题。如果不起作用,还会加载以下扩展名,因此,php.ini如果php.ini文件中已存在这些扩展名或删除注释,则删除注释。

extension=php_bz2.dll
extension=php_curl.dll
extension=php_dba.dll

现在重新启动apache服务器。如果出现错误“无法加载php_curl.dll”,请将SSLEAY32.PHP,libEAY32.dll(OpenSSL)库复制到System32文件夹中。


1
这个问题被标记为关于Ubuntu和Debian Linux。您的答案不适用于那些环境。
Mark Stosberg'1

1
@MarkStosberg同意。更新的答案。
Vinay,2016年

根本不工作。我不知道此命令出了什么问题,但无法正常工作。我正在使用Ubuntu 16.04
Banty Roy

是的,工作了!这应该是公认的答案!至少对于Linux而言。
Zuks

4

在ubuntu上使用php 7.0

sudo apt-get install php7.0-curl

最后,

sudo service apache2 restart 

要么

sudo service nginx restart

1
找到您的版本:$ php --version version = 7.X然后安装:$ sudo apt-get install php7.X-curl
Nelles

3

在运行PHP 7.1.14的ubuntu 16.04上体验到了这一点。要解决此问题,请首先将其放入脚本中并执行。如果已安装并启用curl,它将返回true,否则将返回false。

<?php
    var_dump(extension_loaded('curl'));
?>

如果返回false,请运行

sudo apt-get install php7.1-curl

最后,

sudo service apache2 restart

重新启动后,脚本将返回true,希望可以解决您的错误。


2

对于Windows 7 x64,具有所有必要详细信息的解决方案:

http://www.youtube.com/watch?v=7qNTi1sEfE8

它是法语,但您可以理解所有内容!我解决了同样的问题,甚至不说法语。:-)

许多答案都忘了提到您需要从以下位置添加新版本的php_curl.dll文件:http ://www.anindya.com/php-5-4-3-and-php-5-3-13-x64 -64位用于Windows /

我从档案php_curl-5.4.3-VC9-x64.zip向文件夹中添加了新版本的php_curl.dll:C:\ wamp \ bin \ php \ php5.4.3 \ ext和C:\ Windows \ System32,一切都很好!


2

做这个

sudo apt-get install php-curl

然后重启服务器

sudo service apache2 restart

谢谢男人..正在竞争中,我不舒服的PHP,卷曲。您的回答帮助我克服了一个问题,这花了我半天的时间。
jegadeesh

-2

这是来自官方网站。php.net

安装PHP之后。

视窗

移至Windows \ system32文件夹:libssh2.dll,php_curl.dll,ssleay32.dll,libeay32.dll

的Linux

移至Apache24 \ bin文件夹libssh2.dll

然后在php.ini中取消注释extension = php_curl.dll


-3
$ch = curl_init('http://api.imgur.com/2/upload.xml'); //initialising our url

curl_setopt($ch, CURLOPT_MUTE, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  //used for https headers 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  //used for https headers

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode($pvars));  
//the value we post

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //waiting for reponse, default value in php is zero ie, curls normally do not wait for a response

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0'); 

$output = curl_exec($ch); //the real execution 
curl_close($ch);

echo $output;

试试这个代码。我不确定。但是我用它来将xml数据发送到远程URL。


这不是问题的答案。
Mark Stosberg'1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.