Вызов другого php файла - PullRequest
       27

Вызов другого php файла

1 голос
/ 02 апреля 2012

Я собираю пуш-сервер для iPhone и пытаюсь заставить пуш работать. У меня есть файл message.php, который помещает новое сообщение в базу данных, а затем добавляет сообщение в таблицу push_queue в базе данных.

Чтобы отправить push-сообщение, мне нужно вручную перейти в браузер и вызвать push-файл (../push/push.php), который отправит push-уведомление.

Можно ли как-нибудь автоматически вызвать файл push.php из файла message.php?

Я безуспешно пытался require_one, include, exec и file_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 голосов
/ 02 апреля 2012

Создайте функцию или класс, который делает все, что делает ваш push.php, и вызывайте его при получении нового сообщения или когда приложение iPhone запрашивает новые сообщения.В этом случае вам не нужно будет вызывать другой PHP в message.php.

Это концепция MVC , т. Е. Отделение вашей бизнес-логики от ваших контроллеров.В этом случае push - это бизнес-логика, а message.php и push.php - ваши контроллеры.

...