I am new to php. The script succeeds if i send manually changing the start and end values each time. But, it fails when trying to send via a while loop and displays this error:
Request Entity Too Large. Error 413
GCMSendMessage:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("GCMPushMessage.php");
$new_array= array();
$i = 0; // counter 
$mysqli = mysqli_connect("localhost", "root", "xxx", "xxx");
while ($i < n) //n is the (total registration id's)/1000
{
 $new_array[]   = null;
 $start         = ($i * 1000); 
 $end           = $start + 1000; //GCM Limit of 1000 users per notification
 $queryregid    = "SELECT gcm_regid FROM `gcm_users` WHERE id >$start AND id <=$end";
 $result_select = $mysqli->query($queryregid);
 if ($result_select->num_rows > 0) {
     // output data of each row
     while ($row = $result_select->fetch_assoc()) {
         $new_array[] = $row["gcm_regid"]; // Inside while loop
     }
 }  else {
    echo "0 results";
}
$apiKey = "xxx";
$param1 = "XXX";
$param2 = "AAA";
$param3 = '0';
$gcpm = new GCMPushMessage($apiKey);
$gcpm->setDevices($new_array);
 $response = $gcpm->send($message, array(
     'param1' => $param1,
     'param2' => $param2,
     'param3' => $param3
 ));
 $i = $i + 1; // counter increment
}
print "Response=$response"; 
?>
GCMPushMessage.php:
<?php
/*
    Class to send push notifications using Google Cloud Messaging for Android
Example usage
-----------------------
$an = new GCMPushMessage($apiKey);
$an->setDevices($devices);
$response = $an->send($message);
-----------------------
$apiKey Your GCM api key
$devices An array or string of registered device tokens
$message The mesasge you want to push out
@author Matt Grundy
Adapted from the code available at:
http://stackoverflow.com/questions/11242743/gcm-with-php-google-cloud-messaging
*/
 class GCMPushMessage {
var $url = 'https://android.googleapis.com/gcm/send';
var $serverApiKey = "";
var $devices = array();
/*
    Constructor
    @param $apiKeyIn the server API key
*/
function GCMPushMessage($apiKeyIn){
    $this->serverApiKey = $apiKeyIn;
}
/*
    Set the devices to send to
    @param $deviceIds array of device tokens to send to
*/
function setDevices($deviceIds){
    if(is_array($deviceIds)){
        $this->devices = $deviceIds;
    } else {
        $this->devices = array($deviceIds);
    }
}
/*
    Send the message to the device
    @param $message The message to send
    @param $data Array of data to accompany the message
*/
function send($message, $data = false){
    if(!is_array($this->devices) || count($this->devices) == 0){
        $this->error("No devices set");
    }
    if(strlen($this->serverApiKey) < 8){
        $this->error("Server API Key not set");
    }
    $fields = array(
        'registration_ids'  => $this->devices,
        'data'              => array( "message" => $message ),
    );
    if(is_array($data)){
        foreach ($data as $key => $value) {
            $fields['data'][$key] = $value;
        }
    }
    $headers = array( 
        'Authorization: key=' . $this->serverApiKey,
        'Content-Type: application/json'
    );
    // Open connection
    $ch = curl_init();
    // Set the url, number of POST vars, POST data
    curl_setopt( $ch, CURLOPT_URL, $this->url );
    curl_setopt( $ch, CURLOPT_POST, true );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
    // Avoids problem with https certificate
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
    // Execute post
    $result = curl_exec($ch);
    // Close connection
    curl_close($ch);
    return $result;
}
function error($msg){
    echo "Android send notification failed with error:";
    echo "\t" . $msg;
    exit(1);
    }
} 
?>