【问题标题】:php IPC script simply quitsphp IPC 脚本简单地退出
【发布时间】:2012-07-13 09:46:36
【问题描述】:

我需要一个简单的 php IRC 机器人,它通过 POST 请求接收消息并将该消息发送到 irc 通道。为此,我改编了来自PHP - IRC Bot Not sending message Help 的机器人。然后我使用消息队列将 POST 消息从IRC related help 发送到机器人。

但是,当我通过 start.html 运行 php 脚本时,机器人甚至没有加入频道。 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>

如果我删除消息队列的代码,机器人会加入频道。

【问题讨论】:

  • 是否启用了 sysvmsg?它不是标准扩展。 php.net/manual/en/sem.installation.php
  • 删除消息队列后的代码是什么样的?
  • @rrehbein:来自 phpinfo(),似乎 sysvmsg 未启用。那么我在两个 php 脚本之间进行通信的选项是什么。具体来说,我想将表单中的 POST 消息传递给机器人,并将消息发送到 irc 频道。

标签: php message-queue irc


【解决方案1】:

根据您的评论,您错过了扩展程序。

如果你有机器的控制权,你可以安装 php-sysvmsg 扩展。

如果不是,那么您最终可能不得不使用 tcp 或 udp 作为“ipc”或命名管道。

sysvmsg 的包名:

  • RedHat/CentOS:yum install php-process
  • Debian:它已经包含在 php5-cgi 和 php5-cli 中
  • Zend 服务器/RedHat:yum install php-5.3-sysvmsg-zend-server
  • Zend 服务器/Debian:apt-get install php-5.3-sysvmsg-zend-server

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 2016-07-30
    • 2014-05-01
    • 1970-01-01
    • 2012-08-31
    • 2011-05-31
    • 1970-01-01
    • 2013-03-20
    • 2013-06-12
    相关资源
    最近更新 更多