0

なんてこった、すべてのメッセージを mysql データベースに自動的にロードする jabber スクリプトを持っています...しかし、それが完了した後も、スクリプトはまだ残っています/固執しています... 1回の実行後に終了するにはどうすればよいですか? 助けてください、そして私がこれについて得ることができるあらゆる種類の助け、私は非常に感謝しています!

<?php

// activate full error reporting
//error_reporting(E_ALL & E_STRICT);

include 'XMPPHP/XMPP.php';


$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO);


// $conn->autoSubscribe();

$vcard_request = array();

try {
    $conn->connect();
    while(!$conn->isDisconnected()) {
        $payloads = $conn->processUntil(array('message', 'presence', 'end_stream', 'session_start'));
        foreach($payloads as $event) {
            $pl = $event[1];
            switch($event[0]) {
                case 'message': 
                    print "---------------------------------------------------------------------------------\n";
                    print "Message from: {$pl['from']}\n";
                    if($pl['subject']) print "Subject: {$pl['subject']}\n";
                    print $pl['body'] . "\n";
                    print "---------------------------------------------------------------------------------\n";
                    // $conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']);

                    $cmd = explode(' ', $pl['body']);
                    if($cmd[0] == 'quit') $conn->disconnect();
                    if($cmd[0] == 'break') $conn->send("</end>");
                    if($cmd[0] == 'vcard') {
                        if(!($cmd[1])) $cmd[1] = $conn->user . '@' . $conn->server;
                        // take a note which user requested which vcard
                        $vcard_request[$pl['from']] = $cmd[1];
                        // request the vcard
                        $conn->getVCard($cmd[1]);
                    }

                break;
                case 'presence':
                    print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n";
                break;
                case 'session_start':
                    print "Session Start\n";
                    $conn->getRoster();
                    $conn->presence($status="Cheese!");
                break;
                case 'vcard':
                    // check to see who requested this vcard
                    $deliver = array_keys($vcard_request, $pl['from']);
                    // work through the array to generate a message
                    print_r($pl);
                    $msg = '';
                    foreach($pl as $key => $item) {
                        $msg .= "$key: ";
                        if(is_array($item)) {
                            $msg .= "\n";
                            foreach($item as $subkey => $subitem) {
                                $msg .= "  $subkey: $subitem\n";
                            }
                        } else {
                            $msg .= "$item\n";
                        }
                    }
                    // deliver the vcard msg to everyone that requested that vcard
                    foreach($deliver as $sendjid) {
                        // remove the note on requests as we send out the message
                        unset($vcard_request[$sendjid]);
                        $conn->message($sendjid, $msg, 'chat');
                    }
                break;
            }
        }
    }
} catch(XMPPHP_Exception $e) {
    die($e->getMessage());
}
?>
4

2 に答える 2

0

2 つの方法をお勧めします

2- while ループの前に変数を定義し、その時間を節約します。

$time=time();

while ループの最後に、次のコードを追加します。

if($time+TimeInSeconds<time()) exit();

これら 2 つの方法で、数秒後にスクリプトを停止できます。それが役立つことを願っています。

于 2013-08-09T11:02:47.287 に答える
0

while 条件を削除して試してください。うまくいくと思います。

任意のフラグ変数を使用して、while ループに追加します。

于 2013-08-09T11:09:40.787 に答える