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

76

我尝试使用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.phpindex2.php,它们在同一个目录下。当我打开页面时,在我的error.log文件中出现以下错误:

[Sat Dec 18 15:24:53 2010] [error] [client ::1] PHP致命错误:在/var/www/testing1/index.php的第5行调用未定义的函数curl_init()

我想要创建一个预订表单并发送POST请求。然后我想要处理POST值并再次将POST请求发送到PayPal。


1
似乎curl库未启用。 - Shakti Singh
是的,我在我的phpinfo中找不到curl。 - S L
同时我无法在我的php.ini文件中找到curl。 - S L
24个回答

146

你需要为PHP安装CURL支持。

在Ubuntu中,您可以通过以下方式进行安装

sudo apt-get install php5-curl

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

sudo /etc/init.d/apache2 restart
如果仍然出现问题,请尝试使用 phpinfo() 确保 CURL 被列为已安装。如果没有安装,则可能需要提出另一个问题,询问为什么你的软件包没有安装。

PHP CURL文档中有安装手册。


我觉得你是对的,但应该是php5-curl。我正在做,让我们看看。 - S L
1
php-curl,不是php_curl——使用破折号,不要使用下划线。 - cbrandolino
1
在安装和重启Apache之间,我还需要执行“sudo php5enmod curl”。这可能是由于Debian打包中的最近更改所致。 - cyberSingularity
5
在Ubuntu 16.04中,使用以下命令安装php5.6-curl:$ sudo apt-get install -y php5.6-curl。 - Enrique San Martín
1
对于一个全新的Ubuntu 18系统,我使用sudo apt install php-curl命令成功安装了php-curl。 - mork
显示剩余2条评论

26

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

;extension=php_curl.dll

重新启动Apache服务器。


1
对于XAMPP用户,这个php.ini文件位于你的/xampp/apache/php/目录下。旧版本则在/xampp/apache/bin/目录下。 - Mave
对于Ubuntu用户,php.ini文件的位置在此处列出。请注意,Apache和CLI(命令行)有2个php.ini文件。 - Robert Dundon
6
在当前版本的PHP for Windows中,现在实际上是将"extension=php_curl.dll"改为了"extension=curl"。 - Joe Irby

10

6
对于Ubuntu系统: 如有必要,可以将extension=php_curl.so添加到php.ini以启用curl。然后运行sudo service apache2 restart
通常情况下,这个过程会自动完成,但在共享开发环境等情况下,可能需要手动重新启用curl。
指纹会符合以下三个条件:
1. 在调用curl_init()时出现致命错误。 2. 在php_info中,您将看到curl模块作者的信息(表示已安装并可用)。 3. 还在php_info中,您将看不到curl配置块(表示未加载curl)。

4

我在这里找到了解决方法,针对的问题是无法在Ubuntu 18.04 PHP 7.2上启用PHP cURL: 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

1
首先,我必须安装libapache2-mod-php7.3,然后按照正确的版本执行这些有用的步骤。 - Rodney Salcedo
实际上运行8.1时,我不得不禁用8.0。 - Gavin Simpson

3

3
在我的情况下,在Xubuntu中,我需要安装libcurl3 libcurl3-dev库。使用此命令即可使一切正常:
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

2

步骤 1

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

第二步:

将以下内容添加到Apache/conf/httpd.conf中(libeay32.dllssleay32.dlllibssh2.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"

1
对我来说,只需添加“.../libssh2.dll”行即可正常工作。在Windows 10上使用PHP版本7.2.4。谢谢。 - csr-nontol

2

我在Windows平台上使用PHP7 / Apache 2.4时遇到了这个错误。 curl_init 在CLI中运行正常,但在Apache 2.4中却无法正常工作。我通过添加LoadFile指令来解决它,指定libeay32.dll和ssleay32.dll的位置:

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"

2
为解决这个错误,我进行了以下操作:
  1. php.ini 文件中取消注释此行:extension=php_curl.dll
  2. php.ini 文件中取消注释此行:extension_dir = "ext"
  3. 我重新启动了 NETBEANS,因为我使用的是内置服务器。

第二点对我有帮助,问题已解决。谢谢! - n00bAppDev

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