PHP自动杀死X分钟后

时间:2013-08-09 10:47:53

标签: php while-loop xmpp

地狱全部,我有一个jabber脚本自动将我的所有消息加载到一个mysql数据库中...但是,完成后,脚本仍然保持/坚持...如何在一次运行后退出?请帮忙,我能得到任何帮助,我会非常感激!

<?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());
}
?>

2 个答案:

答案 0 :(得分:0)

我建议你两种方式:
1-使用“set_time_limit”函数在指定的秒数后杀死脚本并抛出错误 2-在while循环之前定义变量并节省时间:

$time=time();

在while循环结束时添加以下代码:

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

这两种方法可以在几秒钟后停止脚本。 我希望它会有所帮助。

答案 1 :(得分:0)

删除条件并尝试。 我认为它会奏效。

使用任何标志变量并将其添加到while循环中。