【问题标题】:PHP curl_setopt error with IPRESOLVE带有 IPRESOLVE 的 PHP curl_setopt 错误
【发布时间】:2016-09-16 15:57:13
【问题描述】:

我正在尝试使用 PHP 将信息从 MySQL 数据库发送给 Android 用户。当我使用本地主机并且我的应用程序收到通知时,我的代码运行良好,但是当我使用在线免费托管 (000webhost) 时,我收到以下错误:

警告:curl_setopt() [function.curl-setopt]:第 24 行 /home/a2275966/public_html/send_notification.php 中的 curl 配置选项无效 第 24 行包含以下代码:

curl_setopt($curl_session,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4);

我尝试使用CURL_IPRESOLVE_V6CURL_IPRESOLVE_WHATEVER,但没有成功。 这是托管网站的限制,还是我的代码中缺少某些内容?免费主机上的 curl 版本为7.15.5,PHP 版本为5.2.17

这是我的代码:

<?php
require "init.php";
$message = $_POST['message'];
$title = $_POST['title'];
$path_to_fcm='https://fcm.googleapis.com/fcm/send';
$server_key="AIzaSyBIUnk81EnIIrrlM1FfSxVCHPGqptuf3FQ";
$sql="select fcm_token from fcm_info";
$result=mysqli_query($con,$sql);
$row=mysqli_fetch_row($result);
$key=$row[0];
$headers= array(
'Authorization:key=' .$server_key,
'Content-Type:application/json'
);
$fields = array('to'=>$key,
'notification'=>array('title'=>$title,'body'=>$message));
$payload=json_encode($fields);
$curl_session=curl_init();
curl_setopt($curl_session,CURLOPT_URL,$path_to_fcm);
curl_setopt($curl_session,CURLOPT_POST,true);
curl_setopt($curl_session,CURLOPT_HTTPHEADER,$headers);
curl_setopt($curl_session,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl_session,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl_session,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4);
curl_setopt($curl_session,CURLOPT_POSTFIELDS,$payload);

$results=curl_exec($curl_session);
if($results)
    echo "donne";
else
    echo "nnnooo";
mysqli_close($con);
?>

【问题讨论】:

  • 你的 php 使用什么 curl 库? ipresolve 添加到 curl 7.10.8
  • 除了@MarcB提到的,你还需要PHP 5.3+
  • @MarcB curl 7.15.5
  • 当前 PHP 为 PHP 版本:5.2.17 @apokryfos

标签: php android mysql curl


【解决方案1】:

这个 cURL 选项是在 PHP 5.3+ 和 cURL 7.10.8 版本中添加的, 由于您使用的是支持它的 cURL 版本,因此您可以:

1) 升级您的 PHP 版本(建议从 5.2 开始存在一些问题,使您的网站容易受到攻击)

2) 使用这些常量的实际数值。这些可以在https://github.com/curl/curl/blob/master/include/curl/curl.h 的 cURL 源中找到,理想情况下,您应该找到与您的 cURL 版本等效的文件,但我怀疑每个版本的常量会得到不同的数字。

IPRESOLVE 似乎是值 113 而 IPRESOLVE_V4 是 1 所以你会做这样的事情:

curl_setopt($curl_session,113,1); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2011-04-22
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多