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
这通常是自动处理的,但是在某些情况下(例如在共享的开发环境中), 可能需要手动重新启用。
指纹将匹配所有这三个条件:
- 致命错误curl_init()调用
- 在php_info中,你会看到curl模块的作者(表示curl已经安装并且可用)
- 也在php_info中,你会看到没有curlconfiguration块(指示curl未加载)
就我而言,在Xubuntu中,我必须安装libcurl3 libcurl3-dev库。 用这个命令一切工作:
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
为了解决这个错误,我做了:
- 在
php.ini
文件中,取消注释这一行:extension=php_curl.dll
- 在
php.ini
文件中,取消注释这一行:extension_dir = "ext"
- 我重新启动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服务器