Php curl_init()函数不工作

Php curl_init()函数不工作,php,lampp,Php,Lampp,嗨,我试着认为它可能对我有用,下面给出了我的代码 $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

嗨,我试着认为它可能对我有用,下面给出了我的代码

$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

我想做的是,我有一个预订表单,可以发送post请求,然后我想处理post值并再次向paypal发送post请求。您需要安装对php的CURL支持

在Ubuntu中,你可以通过

sudo apt-get install php5-curl
sudo apt-get install php5-curl
如果您使用的是apt get,则不需要编辑任何PHP配置,但需要重新启动Apache

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


适用于Windows的。

中有一本安装手册,如果有人感兴趣,请从php.ini中取消对以下行的注释(删除;)

;extension=php_curl.dll
;extension=php_curl.dll
重新启动apache服务器。

(尝试通过PHP和apache在Windows上运行Curl…)

我不断听到一个错误,说: 调用未定义的函数“curl_init()”

我确保在php.ini文件中使用以下行启用了curl: extension=php\u curl.dll

我确保正确设置了extension_dir变量,如下所示: 扩展名\u dir=“ext”

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

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


我花了很长时间才弄明白这一点,所以我想我会发布文章,以防它对其他人有帮助。

RusAlex的答案是正确的,对于Apache,您必须安装并启用curl,然后重新启动Apache服务:

sudo apt-get install php5-curl
sudo service apache2 restart
然而,在使用nginx和php5 fpm的Ubuntu服务器上,我遇到了以下问题。我必须像这样重新启动nginx和php5 fpm:

sudo service nginx restart
sudo service php5-fpm restart
但我有不工作的php5 fpm进程,这显然是ubuntu中的一个bug 因此,我必须杀死所有空闲的php5 fpm进程,才能重新启动php5 fpm,以便实际加载curl模块

sudo kill <Process Id of php5-fpm Process)

sudo kill为了修复这个bug,我做了:

  • php.ini
    文件中,取消对此行的注释:
    extension=php\u curl.dll
  • php.ini
    文件中,取消对此行的注释:
    extension\u dir=“ext”
  • 我重新启动了NETBEANS,因为我使用的是内置服务器

  • 在我的例子中,在Xubuntu中,我必须安装libcurl3 libcurl3开发库。使用此命令,一切正常:

    sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
    
    对于Ubuntu: 如有必要,将
    extension=php\u curl.so
    添加到php.ini以启用。然后
    sudo服务apache2重新启动

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

    指纹将匹配以下三个条件:

  • curl_init()调用时出现致命错误
  • 在php_info中,您将看到curl模块的作者(指示curl已安装且可用)
  • 同样在php_info中,您将看到没有curl配置块(表示没有加载curl)

  • 我在windows平台上使用PHP7/Apache2.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"
    
    函数curl_int(); 导致服务器错误,安装sudo apt获取安装php5 curl
    重新启动apache2服务器。。它将像charm一样工作

    此答案适用于https请求:

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

      curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/file/cacert.pem');
    
    否则,curl将无法验证通过ssl发回的证书。每次在curl中使用SSL时,都可以使用相同的根证书文件

    您可以在此处获取cacert.pem文件:


    参考

    刚刚添加了我的答案,说明您的系统中安装了多个版本的PHP,并且您确信您已经安装了
    PHP curl
    软件包,但是Apache仍然会给您同样的错误


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

    sudo apt get安装php7.0-curl

    sudo服务apache2重启


    对于PHP 7和Windows x64


    libeay32.dll、libssh2.dll和ssleay32.dll不应位于apache/bin中,而应仅存在于php目录中,并在系统环境变量中添加php目录。这是我的工作

    显然,在php.ini中,您还应该启用php_curl.dll

    步骤1:

    (删除行末尾的

    步骤2:

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


    对于linux,您可以通过

    sudo apt-get install php5-curl
    
    sudo apt-get install php5-curl
    
    对于Windows(从php.ini中删除;)

    ;extension=php_curl.dll
    
    ;extension=php_curl.dll
    

    重新启动apache服务器。

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

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

    有这个问题,但在这里找到了答案:

    必须:

    sudo a2dismod php7.0
    
    以及:

    然后:

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

    在此处找到解决方案:


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

    sudo apt-get install php7.2-curl
    
    然后使用以下命令重新启动apache服务

    sudo service apache2 restart
    
    yo替换7.2
    sudo apt-get install curl
    
    sudo add-apt-repository ppa:ondrej/php
    
    sudo apt update
    
    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
    
    sudo systemctl restart apache2
    
    sudo apt-get update
    
    sudo apt-get install php7.4-curl
    
    sudo apt update && sudo apt upgrade
    sudo apt install php-curl
    
    sudo systemctl restart apache2
    
    sudo systemctl restart nginx