// Instanciate a new ApnsPHP_Push object
$server = new ApnsPHP_Push_Server(ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, '/path/to/apns.pem');
// Set the Root Certificate Autority to verify the Apple remote peer
$server->setRootCertificationAuthority('/path/to/entrust_root_certification_authority.pem');
// Set the number of concurrent processes
$server->setProcesses(4);
// Starts the server forking the new processes
$server->start();
_pushLog(array(date('Y-m-d H:i:s'), 'STARTING SERVER'));
/*
 * Main server run loop
 */
while ($server->run()) {
    $date = date('Y-m-d H:i:s');
    // Check the error queue
    $aErrorQueue = $server->getErrors();
    if (!empty($aErrorQueue)) {
        var_dump($aErrorQueue);
    }
    // get latest queue
    list($deviceToken, $badgeNum, $text) = popQueue();
    // push message if it has correct values
    if ($deviceToken && $badgeNum && $text) {
        // Instantiate a new Message with a single recipient
        $message = new ApnsPHP_Message($deviceToken);
        $message->setBadge((int) $badgeNum);
        $message->setSound();
        $message->setText(urldecode($text));
        // Add the message to the message queue
        $server->add($message);
        _pushLog(array(date('Y-m-d H:i:s'), $deviceToken, $badgeNum));