curl_init()函数不起作用

时间:2010-12-18 09:45:12

标签: php lampp

嗨我尝试PHP Post Request inside a POST Request认为它可能对我有用,我的代码在下面给出

$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

我想要做的是我有一个发送帖子请求的预订表格然后我想处理帖子值并再次发送请求到paypal

24 个答案:

答案 0 :(得分:125)

您需要为php安装CURL支持。

在Ubuntu中,您可以通过

安装它
sudo apt-get install php5-curl

如果您正在使用apt-get,那么您将不需要编辑任何PHP配置,但您需要重新启动Apache。

sudo /etc/init.d/apache2 restart

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

PHP CURL documentation中有一个安装手册。

答案 1 :(得分:23)

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

;extension=php_curl.dll

重启apache服务器。

答案 2 :(得分:6)

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

这通常是自动处理,但有些情况 - 例如,在共享开发环境中 - 需要 才能手动重新启用。

指纹将符合所有这三个条件:

  1. curl_init()调用致命错误
  2. 在php_info中,您将看到curl模块作者(表示curl已安装且可用)
  3. 同样在php_info中,您将看到没有curl配置块(表示未加载curl)

答案 3 :(得分:5)

我通过以下步骤在ubuntu 16.04中工作。我的php版本是7.0

  

sudo apt-get install php7.0-curl

     

sudo service apache2 restart

i got it from this link check here for more details

答案 4 :(得分:3)

就我而言,在Xubuntu中,我必须安装libcurl3 libcurl3-dev库。使用此命令一切正常:

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

答案 5 :(得分:3)

第1步

C:/(path to php folder)/php.ini
enable extension=php_curl.dll

(删除该行末尾的;

第2步

将此添加到Apache/conf/httpd.conf(libeay32.dll,ssleay32.dll,libssh2.dll直接在php7文件夹中找到)

# load curl and open ssl libraries
 LoadFile "C:/(path to php folder)/libeay32.dll"
 LoadFile "C:/(path to php folder)/ssleay32.dll"
 LoadFile "C:/(path to php folder)/libssh2.dll"

答案 6 :(得分:2)

我在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"

答案 7 :(得分:2)

只是在系统中安装了多个PHP版本的情况下添加我的答案,并且您确定已经安装了php-curl软件包,但Apache仍然会给您相同的错误。

curl_init() undefined even if php-curl is enabled in Php 7.

答案 8 :(得分:2)

要修复此错误,我做了:

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

答案 9 :(得分:1)

此答案适用于https请求:

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

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

如果没有这个,curl无法验证通过ssl发回的证书。每次在curl中使用SSL时,都可以使用相同的根证书文件。

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

参考PHP cURL Not Working with HTTPS

答案 10 :(得分:1)

似乎您尚未在服务器上安装Curl。
检查服务器的PHP版本并运行以下命令以安装curl。

sudo apt-get install php7.2-curl

然后使用以下命令重新启动apache服务。

sudo service apache2 restart

您的PHP版本 替换 7.2

答案 11 :(得分:0)

对于Linux,您可以通过以下方式安装

sudo apt-get install php5-curl

对于Windows(从php.ini中删除;)

;extension=php_curl.dll

重新启动apache服务器。

答案 12 :(得分:0)

这对我有用 raspian:

sudo apt update && sudo apt upgrade
sudo apt install php-curl

最后:

sudo systemctl restart apache2

或:

sudo systemctl restart nginx

答案 13 :(得分:0)

我已经在 Ubuntu 20.04.1 LTS 和 PHP 版本 7.4.3 中解决了这个问题

更新包索引:

sudo apt-get update

安装 php7.4-curl deb 包:

sudo apt-get install php7.4-curl

答案 14 :(得分:0)

另一个答案... 如果您在2020年10月到达此地,是因为命令行(CLI)上的PHP已停止工作,请猜测是什么...某些升级将无提示地将您带到其他版本的PHP,而无需询问!

运行: php --version,您可能会惊讶地看到CLI正在运行哪个版本。

然后运行: ll /usr/bin/php,您可能会惊讶地发现它链接到的位置。

当直接调用PHP二进制文件而不是符号链接时,最好引用所需的SPECIFIC版本的PHP。

示例:

/usr/bin/php7.3将为您提供所需的确切版本。您不能信任/ usr / bin / php甚至不能输入php,因为升级可能会悄悄地切换您的版本。

答案 15 :(得分:0)

在Windows上的更新版本的PHP(如PHP 7.x)上,此处先前答案中建议的相应配置行已更改。您需要取消注释(删除;在行的开头)以下行:

extension_dir = "ext"
extension=curl

答案 16 :(得分:0)

我也遇到了这个问题。我的操作系统是 Ubuntu 18.04 ,我的PHP版本是 PHP 7.2

这是我的解决方法:

在Ubuntu服务器上安装CURL:

sudo apt-get install curl

将下面的PHP CURL存储库添加到您的源列表中:

sudo add-apt-repository ppa:ondrej/php

刷新您的包裹数据库

sudo apt update

安装PHP-curl 7.2

sudo apt install php7.2-fpm php7.2-gd php7.2-curl php7.2-mysql php7.2-dev php7.2-cli php7.2-common php7.2-mbstring php7.2-intl php7.2-zip php7.2-bcmath

重新启动Apache服务器

sudo systemctl restart apache2

仅此而已。

我希望这会有所帮助

答案 17 :(得分:0)

遇到此问题,但在这里找到了答案:https://askubuntu.com/questions/1116448/cannot-enable-php-curl-on-ubuntu-18-04-php-7-2

必须:

sudo a2dismod php7.0

并且:

sudo a2enmod php7.2

然后:

sudo service apache2 restart

这是在系统升级到下一版本的Ubuntu之后。我发现的所有其他答案都是过时的,因为大多数人指出了PPA上的不良证书,但无论如何可能还是行不通的。真正的问题显然是禁用了旧版本的php。

在这里找到解决方案:

https://askubuntu.com/questions/1116448/cannot-enable-php-curl-on-ubuntu-18-04-php-7-2

答案 18 :(得分:0)

在Ubuntu 18.04上,这两个命令解决了我的问题。

sudo apt-get install php5.6-curl //install curl for php 5.6
sudo service apache2 restart //restart apache

答案 19 :(得分:0)

RusAlex的答案是正确的,对于 Apache ,你必须安装并启用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 https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376中的一个错误 所以我不得不杀死所有空闲的php5-fpm进程才能重启php5-fpm以便实际加载curl模块

sudo kill <Process Id of php5-fpm Process)

答案 20 :(得分:0)

对于 PHP 7和Windows x64

libeay32.dll,libssh2.dll和ssleay32.dll不应该在apache / bin中,并且应该只存在于php目录中并在系统环境变量中添加php目录。这项工作适合我。

显然在php.ini中你也应该启用php_curl.dll。

答案 21 :(得分:0)

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

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

我确保在php.ini文件中使用此行启用了curl: 延长= php_curl.dll

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

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

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

让我永远记住这一点,所以以为我会发帖,以防它帮助其他人。

答案 22 :(得分:0)

function curl_int(); 导致服务器错误,安装sudo apt-get install php5-curl 重启apache2服务器..它会像魅力一样工作

答案 23 :(得分:-2)

只需安装wamp server的最新版本。