【问题标题】:fsockopen not working?fsockopen 不工作?
【发布时间】:2011-03-14 02:41:10
【问题描述】:

我正在尝试使用 Windows 7 在命令行上通过 PHP 连接到 IRC 服务器。

每次运行时:

$socket = fsockopen($irc_server, 6667, $errno, $errstr, 5);

$errno = 0、$errstr = "" 和 $socket = '资源 ID #4'(使用 die($socket);

这是什么原因,我该如何调试更多。

以下代码:

$s = fsockopen("google.com", 80, $errno, $errstr, 5);
die($errno.", ".$errstr.", ".$s);

...返回以下内容:

0, , Resource id #4

我不能使用$socket。当我尝试使用它时,它显示“无效资源”。此外,PHP 文档指出 errno 0 表示错误打开的套接字。

感谢您的帮助。

【问题讨论】:

  • Aa 而问题正是...?资源 ID 只是套接字的 ID。继续使用它。
  • 我无法使用它。当我尝试使用它时,它显示“无效资源”。此外,PHP 文档指出 errno 0 表示错误打开的套接字。
  • 抱歉,没有看到“无效”部分。好吧,去看看errno 0是什么意思。 “$irc_server”包含什么?
  • 你可能也没有看到 errno 0 部分。
  • 警告:fwrite():提供的参数不是第 7 行 C:\ircBot\irc.php 中的有效流资源,即:fwrite($socket,$cmd,strlen($cmd) );

标签: php sockets fsockopen


【解决方案1】:

我修好了。

function irCmd 不知道 $socket,所以我把它放在前面:

global $socket;

它奏效了。非常感谢!

【讨论】:

  • 这就是全局变量不好的原因。
  • 为什么不干脆把它作为irCmd的参数呢?这是目前的解决方案,但请考虑如果您想连接到更多服务器会发生什么。您必须重写它,因此最好一开始就正确编写它。
  • 我不明白为什么,但这实际上解决了我的问题。什么是 irCmd 顺便说一句?
【解决方案2】:

文档说(强调我的):

如果errno中返回的值为0函数返回FALSE,则表明错误发生在connect()调用之前。这很可能是由于初始化套接字的问题。

由于函数没有返回 false,所以套接字是有效的。如果您还有其他问题,请告诉我们它们是什么; fsockopen这里已经正常返回了。

【讨论】:

  • fwrite($socket,$cmd,strlen($cmd));告诉我我通过了“无效资源”。
【解决方案3】:

您能否向我们展示更多您的代码?

这段代码会发生什么:

$s = fsockopen($irc_server, 6667, $errno, $errstr, 5);
if ($s === false) {
  die($errno.", ".$errstr.", ".$s);
} else {
  // your code with socket
  die("Valid socket resource");
}

?

【讨论】:

  • irCmd 不知道 $socket 变量。这是我认为的问题。
  • 阅读我对这个问题的回答,我已经解决了。
  • 我先建议了 :-) 现在我走了。
猜你喜欢
  • 2014-05-26
  • 2013-03-14
  • 2011-07-14
  • 2010-12-17
  • 1970-01-01
  • 2011-12-24
  • 2015-12-07
  • 2012-09-30
  • 2011-03-23
相关资源
最近更新 更多