调用另一个php文件

时间:2012-04-02 13:07:26

标签: php iphone asihttprequest apple-push-notifications

我正在构建一个iPhone推送服务器,并试图推动工作。我有一个message.php文件,它将新消息放入数据库,然后将消息添加到数据库中的push_queue表。

要发送推送,我手动必须转到浏览器并调用推送文件(../push/push.php),这将发送推送。

有没有办法可以自动调用message.php文件中的push.php文件?

我试了require_oneincludeexecfile_get_contents而没有任何运气。

如果我使用它可以工作:

header('Location: ../push/push.php');

但是,push.php文件需要几秒钟的时间来执行和完成,因此用户在尝试发送消息时会有延迟。

我想我可以使用cron作业来调用push.php文件,但我宁愿不这样做。

这是push.php中的核心功能(基于http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2):

function start()
{
    //writeToLog('Connecting to ' . $this->server);

    if (!$this->connectToAPNS())
        exit;


    while (true)
    {
        // Do at most 20 messages at a time. Note: we send each message in
        // a separate packet to APNS. It would be more efficient if we 
        // combined several messages into one packet, but this script isn't
        // smart enough to do that. ;-)

        $stmt = $this->pdo->prepare('SELECT * FROM push_queue WHERE time_sent IS NULL LIMIT 20');
        $stmt->execute();
        $messages = $stmt->fetchAll(PDO::FETCH_OBJ);

        $deletedIds = array();

        foreach ($messages as $message)
        {
            if ($this->sendNotification($message->message_id, $message->device_token, $message->payload))
            {
                //$stmt = $this->pdo->prepare('UPDATE push_queue SET time_sent = NOW() WHERE message_id = ?');
                //$stmt->execute(array($message->message_id));

                 $deletedIds[] = $message->message_id;

                //$stmt = $this->pdo->prepare('DELETE FROM push_queue WHERE message_id = ?');
                //$stmt->execute(array($message->message_id));

            }
            else  // failed to deliver
            {
                $this->reconnectToAPNS();
            }
        }

        //Delete the chunk of messages.
        $this->pdo->query('DELETE FROM push_queue WHERE message_id IN ('.implode(',', $deletedIds).')');

        unset($messages);           
    }
}

1 个答案:

答案 0 :(得分:0)

创建一个函数或类,它执行push.php所做的一切,并在收到新消息或iPhone应用程序查询新消息时调用它。在这种情况下,您不需要在message.php中调用其他PHP。

这是MVC的概念,即将您的业务逻辑与控制器分开。在这种情况下,push是一个业务逻辑,message.php和push.php是你的控制器。