PHP curl_setopt错误与IPRESOLVE

时间:2016-09-16 15:57:14

标签: php android mysql curl

我正在尝试使用PHP从MySQL数据库向Android用户发送信息。当我使用localhost时,我的代码工作得非常好,并且我已经通知了我的应用程序,但是当我使用在线免费托管(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但没有效果。 这是托管网站的限制,还是我的代码中缺少某些内容?卷曲版本为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);
?>

1 个答案:

答案 0 :(得分:0)

这个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);