4

我有几个负责存储在我的服务器上的 GCM 操作的 php 文件,它们似乎在需要时工作得很好,但它们经常返回一个错误,指出:

卷曲错误:操作在 0 毫秒后超时,收到 0 个字节中的 0 个字节

这是服务器的问题还是我的 GCM 代码的问题?下面是我的 php 文件:

<?php

$message = urldecode($_POST['message']);
$order = urldecode($_POST['order']);
$registrationIDs = urldecode($_POST['registrationIDs']);
$apiKey = "API_KEY";
$tableID = urldecode($_POST['tableID']);

$url = 'https://android.googleapis.com/gcm/send';

$fields = array(
    'registration_ids' => array($registrationIDs),
    'data' => array(
        'message' => $message,
        'tableID' => $tableID,
        'order' => $order
    ),
);

$headers = array(
    'Authorization: key=' . $apiKey,
    'Content-Type: application/json'
);

// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));



// Execute post
$result = curl_exec($ch);
if(curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);
}

// Close connection
curl_close($ch);

echo $result;

?>
4

1 回答 1

1

我尝试使用您的代码发送推送通知,并且我已经实现了。

对于测试,我建议您设置“dry_run”参数。您将向 GCM 发送消息,它将作为“假”响应返回给您。

现在您的问题,我已经搜索了可能发生的情况,因为您似乎有卷曲限制或其他问题,但我不是这个主题的专家,所以这里有一些您可以尝试的提示:

  • 如果您通过浏览器运行脚本,则将 set_time_limit 设置为零并持续无限秒。

    set_time_limit(0);

  • 使用此选项 'CURLOPT_TIMEOUT' 增加 curl 的操作时间限制

    curl_setopt($ch, CURLOPT_TIMEOUT, 20);// 20 秒

  • 来自服务器的无限重定向也可能发生。要停止此操作,请尝试在禁用跟随位置的情况下运行脚本。

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

于 2015-07-21T07:26:17.117 回答