curl_init()函数不工作

您好,我尝试PHP POST请求内POST请求认为它可能对我有用,我的代码如下

$sub_req_url = "http://localhost/index1.php"; $ch = curl_init($sub_req_url); $encoded = ''; // include GET as well as POST variables; your needs may vary. foreach($_GET as $name => $value) { $encoded .= urlencode($name).'='.urlencode($value).'&'; } foreach($_POST as $name => $value) { $encoded .= urlencode($name).'='.urlencode($value).'&'; } // chop off last ampersand $encoded = substr($encoded, 0, strlen($encoded)-1); curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_exec($ch); curl_close($ch); 

形成index.php文件和index2.php是在同一目录中的另一个文件,当我打开页面时,我在我的error.log文件中得到以下错误

 [Sat Dec 18 15:24:53 2010] [error] [client ::1] PHP Fatal error: Call to undefined function curl_init() in /var/www/testing1/index.php on line 5 

我想要做的是我有一个保留表格,发送后请求,​​然后我想处理后的价值观,并再次发送后请求贝宝

您需要安装PHP的CURL支持。

在Ubuntu中,你可以通过安装

 sudo apt-get install php5-curl 

如果你使用apt-get,那么你将不需要编辑任何PHPconfiguration,但是你需要重新启动Apache。

 sudo /etc/init.d/apache2 restart 

如果您仍然遇到问题,请尝试使用phpinfo()以确保CURL被列为已安装。 (如果不是,那么你可能需要打开另外一个问题,询问为什么你的软件包没有安装。)

在PHP CURL文档中有一个安装手册。

对于Windows,如果有人感兴趣,请从php.ini中取消注释以下行(通过删除;)

 ;extension=php_curl.dll 

重新启动Apache服务器。

对于Ubuntu:添加extension=php_curl.so到php.ini启用,如果有必要。 然后sudo service apache2 restart

通常是自动处理的,但是在某些情况下(例如在共享的开发环境中), 可能需要手动重新启用。

指纹将匹配所有这三个条件:

  1. 致命错误curl_init()调用
  2. 在php_info中,你会看到curl模块的作者(表示curl已经安装并且可用)
  3. 也在php_info中,你会看到没有curlconfiguration块(指示curl未加载)

就我而言,在Xubuntu中,我必须安装libcurl3 libcurl3-dev库。 用这个命令一切工作:

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

为了解决这个错误,我做了:

  1. php.ini文件中,取消注释这一行: extension=php_curl.dll
  2. php.ini文件中,取消注释这一行: extension_dir = "ext"
  3. 我重新启动NETBEANS,因为我使用的是内置服务器

我在Windows平台上使用PHP7 / Apache 2.4得到这个错误。 curl_init从CLI起作用,但不能用于Apache 2.4。 我解决它通过为libeay32.dll和ssleay32.dll添加LoadFile指令:

 LoadFile "C:/path/to/Php7/libeay32.dll" LoadFile "C:/path/to/Php7/ssleay32.dll" LoadFile "C:/path/to/Php7/php7ts.dll" LoadModule php7_module "C:/path/to/Php7/php7apache2_4.dll" 

我通过以下步骤得到它在Ubuntu 16.04工作。我的PHP版本是7.0

sudo apt-get安装php7.0-curl

sudo服务apache2重启

我从这个链接检查了解更多细节

(试图让Curl通过PHP和Apache在Windows上工作…)

我不断收到一个错误说:调用未定义的函数'curl_init()'

我确定我已经启用了在我的php.ini文件中的这一行curl:extension = php_curl.dll

我确保extension_dirvariables正确设置,如下所示:extension_dir =“ext”

我在做所有其他人在论坛上说的话,curl没有出现在我给phpinfo()的调用中,而且我一直从上面得到同样的错误。

最后我发现Apache默认在C:\ Windows文件夹中查找php.ini。 我一直在我的PHP安装文件夹中更改php.ini。 一旦我复制我的php.ini到C:\ Windows,一切正常。

我永远花了我的时间来解决这个问题,所以以为我会发布,以防万一它帮助别人。

RusAlex的回答是正确的,你必须安装并启用curl并重新启动你的apache服务:

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

在我的Ubuntu服务器与nginx和php5-fpm我然而遇到以下问题。 我不得不像这样重新启动nginx和php5-fpm:

 sudo service nginx restart sudo service php5-fpm restart 

但我有非工作的php5-fpm进程悬挂,这显然是在Ubuntu的bug https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376所以我不得不杀死所有闲置的php5- fpm进程能够重新启动php5-fpm,以便实际加载curl模块

 sudo kill <Process Id of php5-fpm Process) 

函数curl_int(); 导致服务器错误,安装sudo apt-get安装php5-curl重新启动apache2服务器..它将像魅力工作

这个答案是https请求:

Curl没有内置的根证书(就像大多数现代浏览器一样)。 你需要明确地指向一个cacert.pem文件:

  curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/file/cacert.pem'); 

没有这个,curl不能validation通过ssl发回的证书。 每次在curl中使用SSL时,都可以使用相同的根证书文件。

您可以在这里获取cacert.pem文件: http ://curl.haxx.se/docs/caextract.html

参考PHP cURL不使用HTTPS

只要在你的系统中安装了多个版本的PhP的情况下添加我的答案,并且你确定已经安装了php-curl包,而Apache仍然给你同样的错误。

curl_init()未定义,即使在PHP 7中启用了php-curl。

只需安装最后一个版本的wamp服务器