2012-07-13 122 views
-1

我需要一個簡單的php IRC bot,它通過POST請求獲取消息並將該消息發送到irc通道。爲此,我改編了來自PHP - IRC Bot Not sending message Help的機器人。然後,我使用消息隊列將POST消息從IRC related help發送到機器人。php IPC腳本簡單地退出

但是,當我通過start.html運行php腳本時,bot甚至不加入該通道。 irc.php - >

<?php 
    $ircServer = "irc.freenode.net"; 
    $ircPort = "6667"; 
    $ircChannel = "##my-channel"; 

set_time_limit(0); 

$ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS); 
$msg = $_POST['msg']; 

if ($ircSocket) 
{ 

fwrite($ircSocket, "USER EDI Normandy-SR2 Alliance Dr-Eva\n"); 
fwrite($ircSocket, "NICK Hit-Hi-Fit-Hai\n"); 
fwrite($ircSocket, "JOIN " . $ircChannel . "\n"); 
fwrite($ircSocket, "PRIVMSG $ircChannel :$msg\n"); 

$queueKey = 123321; 
$queue = false; 

// Join the IPC queue 
$queue = msg_get_queue($queueKey); 
if(!$queue) echo "ERROR: Could not join IPC queue. Form data will not be received"; 

while(1) 
{ 
while($data = fgets($ircSocket, 128)) 
{ 
echo nl2br($data); 
flush(); 

$ex = explode(' ', $data); 

if($ex[0] == "PING") fputs($socket, "PONG ".$ex[1]."\n"); 

if (msg_receive($queue, 0, $msgType, 1024, $msgData, true, MSG_IPC_NOWAIT)) { 
//fwrite($ircSocket, "PRIVMSG $ircChannel :$msgData\n"); 
echo "callback working"; 
} 

} 

} 
} 
?> 

赫斯是我如何調用這個腳本。 的start.html - >

<html><body> 
    <h4>Start Bot</h4> 
    <form action="irc.php" method="post"> 
     Command: <input type="text" name="msg" /> 
     <input type="submit" /> 
    </form> 
</body></html> 

如果刪除了消息隊列的代碼,機器人也不加入的頻道。

+0

有什麼問題嗎? – Florent 2012-07-13 14:15:52

+0

是否啓用sysvmsg?這不是標準的擴展。 http://php.net/manual/en/sem.installation.php – rrehbein 2012-07-13 15:39:43

+0

當你刪除消息隊列時,代碼是什麼樣的? – 2012-07-13 17:39:49

回答

2

根據您的評論,您錯過了擴展名。

如果你有機器的控制權,你可以安裝php-sysvmsg擴展。

如果不是,那麼您可能最終不得不使用tcp或udp作爲「ipc」或命名管道。

爲sysvmsg包名:

  • 紅帽/ CentOS的:百勝安裝PHP-過程
  • Debian的:它已經包含在PHP5 CGI和PHP5-CLI
  • Zend服務器/ RedHat的:百勝安裝PHP-5.3-sysvmsg-的Zend服務器
  • Zend服務器/ Debian的:apt-get的安裝PHP-5.3-sysvmsg-的Zend服務器