4

サーバーに保存されている GCM 操作を担当する php ファイルがいくつかあります。必要なときに問題なく動作するように見えますが、次のようなエラーが返されることがよくあります。

Curl エラー: 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_setopt($ch, CURLOPT_TIMEOUT, 20);// 20 秒

  • サーバーからの無限リダイレクトでも発生する可能性があります。これを停止するには、場所の追跡を無効にしてスクリプトを実行してみてください。

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

于 2015-07-21T07:26:17.117 に答える