我目前正在开发一个项目,该项目在同一台服务器上对我的API进行ajax调用。几个小时前,当cURL 突然停止工作没有任何理由时,一切都很顺利,并且它给了我以下错误
Protocol https not supported or disabled in libcurl
但它没有任何意义,因为它更早发挥作用,我唯一改变的是登录界面(只有PHP)和服务器上的时区,默认为“欧洲/柏林”,
dpkg-reconfigure tzdata
[php.ini] date.timezone = "Europe/Berlin";
我已经重新启动了apache2,重新启动了服务器,检查了php.ini文件和我的phpinfo,它没有任何错误或更改都是一样的,但curl只是不起作用。我试图卷曲其他主机& localhost但没有任何作用。我还检查了/ var / mail / root,没有任何错误。
我的服务器的信息很少
这是我正在使用的cURL-Code
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, count($params));
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
session_write_close();
$result = curl_exec($ch);
curl_close($ch);
session_start();
就像我说它工作得很好而且没有任何问题超过1个月。这是我见过的最奇怪的事情。我希望有人可以帮助我。 如果没有,是否有任何好的替代卷曲? (POST-请求)
提前致谢!
答案 0 :(得分:2)
感谢所有人的帮助,但我发现了错误。 问题如下:
curl
无法使用https协议,因为库文件夹中的链接/文件已损坏。如果curl不适合您,请检查curl --version
是否收到以下错误:
curl: /usr/local/lib/libcurl.so.4: no version information available (required by curl)
如果是,请转到/usr/local/lib
并删除libcurl
个链接/文件。这解决了我的问题。之后只需重新启动apache2即可再次运行。
请注意,这只能解决我的问题,而不是全局解决问题。因此,请注意您在服务器上删除的内容。总是备份!
答案 1 :(得分:0)
可能导致问题的一件事是
build.gradle
尝试定义如下:
curl_setopt($ch, CURLOPT_POST, count($params));
以下是一个对我有用的设置:
curl_setopt($ch, CURLOPT_POST, true);
但请注意:$default = array(
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HTTPHEADER => array('Accept: application/json')
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$output=curl_exec($ch);
curl_close($ch);
在此示例设置中接受JSON。
同样CURLOPT_HTTPHEADER
可以修复帖子数据中的一些解析问题。使用并不重要,但可以提供帮助。
答案 2 :(得分:0)
我发现由于某种原因,我的服务器从PHP 7.3更新到PHP 7.4。我实际上降级到7.3,因为谁编译了7.4的那个副本就将其编译到一个错误的地步,以至于任何有主见的人都不会在不穿裤子的情况下上国家电视台而感到尴尬。无需重启服务器。
我发现了这个问题,因为在遇到绝对糟糕的PHP副本后,我通过function_exists()
对某些重要的PHP函数实施了检测。
因此,请确保如果您正在运行多个PHP版本,则服务器不会决定盲目地更新到较新的(编译的)版本。