PHP 致命错误:调用未定义的函数curl_init()
我尝试 POST 请求中的 PHP 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 致命错误:在第 5 行 /var/www/testing1/index.php 中调用未定义的函数curl_init()
我想要做什么是有一个发送邮寄请求的预订表格。然后我想处理邮政值并再次发送邮政请求到贝宝。
I try PHP Post Request inside a POST Request thinking it might be useful for me. My code is given below:
$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);
from the index.php
file and index2.php
is another file in the same directory and when I open the page I get the following error in my error.log
file:
[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
What I want to do is to have a reservation form that send post request. Then I want to process post values and send again the post request to paypal.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(25)
许多答案都给出了答案,但没有指出实际问题(这可能是您安装了错误的 PHP 版本!),所以我会在这里重复一遍,希望能做一个更好的工作:
如果您使用的是 Linux 系统(对于 Windows,请参阅其他答案),并且即使在重新启动 Web 服务后,安装“php-curl”的建议也不起作用,那么您的 Web 浏览器可能是不使用最新的 PHP 版本 - 在这种情况下,您需要安装旧版本的 php-curl 库。
要检查您正在运行的 PHP 版本,请访问网站上包含 或检查服务器的设置以查看它加载的 PHP 版本。
例如,如果您发现 Web 服务器使用 PHP 7.4,则使用以下命令安装匹配的库:sudo apt-get install php7.4-curl
。然后重新启动网络服务器并查看是否有效。
还有一个答案...
如果您在 2020 年 10 月登陆这里,因为命令行 (CLI) 上的 PHP 已停止工作,您猜怎么着……一些升级会悄悄地将您转移到不同/更新版本的 PHP,而无需询问!
跑步:php --version
您可能会惊讶地发现 CLI 正在运行的版本。
然后运行:ll /usr/bin/php
你可能会惊讶地发现它链接到了哪里。
直接调用 PHP 二进制文件时,最好引用您想要的 PHP 的特定版本,而不是符号链接。
示例:
/usr/bin/php7.3
将为您提供您想要的确切版本。您不能信任 /usr/bin/php 甚至只是输入 php,因为升级可能会默默地切换您的版本。
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 中的一个错误 https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376
所以我必须杀死所有空闲的 php5-fpm 进程才能重新启动 php5-fpm 以便实际加载curl模块
sudo kill <Process Id of php5-fpm Process)
我也面临这个问题。我的操作系统是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
就这样。
我希望这有帮助
我在 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"
此答案适用于 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
第 1 步:(
C:/(path to php folder)/php.ini
enable extension=php_curl.dll
删除行末尾的 ;
)
第 2 步:
将其添加到 Apache/conf/httpd.conf 中。 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"
(试图让 Curl 在 Windows 上通过 PHP 和 Apache 工作...)
我不断收到错误消息:
调用未定义的函数“curl_init()”
我确保我已在 php.ini 文件中使用此行启用了curl:
extension=php_curl.dll
我确保extension_dir变量设置正确,如下所示:
extension_dir = "ext"
我正在执行论坛上其他人所说的所有操作,但在我对 phpinfo() 的调用中没有出现curl,并且我不断收到上面的相同错误。
最后我发现Apache默认在C:\Windows文件夹中查找php.ini。我一直在更改 PHP 安装文件夹中的 php.ini 。将 php.ini 复制到 C:\Windows 后,一切正常。
我花了很长时间才弄清楚这一点,所以我想我会发帖以防它对其他人有帮助。
只需添加我对系统中安装了多个版本的 PHP 的情况的回答,并且您确定您已经安装了 php-curl
软件包,但 Apache 仍然为您提供相同的信息错误。
有这个问题,但在这里找到了答案: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
我通过以下步骤让它在 ubuntu 16.04 中工作。我的 php 版本是 7.0
sudo apt-get install php7.0-curl
sudo 服务 apache2 重新启动
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在 Ubuntu 18.04 上,这两个命令解决了我的这个问题。
On Ubuntu 18.04 these two commands solve my this problem.