PHP'fwrite'不会变量

时间:2012-03-18 01:06:18

标签: php fwrite

我正在创建一个IRC bot,我想将一些函数存储在不同的文件中。我使用include()在我的主文件中引用该文件并且它可以正常工作,但是当我尝试给fwrite()这样的变量时:

$data ="THIS IS DATA\r\n";
fwrite($sock, $data);

它抛出了这个错误:

  

PHP警告:feof()期望参数1为资源,在第18行的/home/kinz/Desktop/Eve/Eve.php中给出为null

     

PHP警告:fgets()期望参数1为资源,在/home/kinz/Desktop/Eve/Eve.php中给出

但是当我把:

fwrite($sock, "THIS IS DATA\r\n");

它完美无缺。这是我的完整代码:

function connect_s ($serv, $port, $nick) { $sock = fsockopen($serv, $port); fwrite($sock, "USER $nick $nick $nick :$nick\r\n"); fwrite($socket, "NICK $nick\r\n"); }
function write_d ($data) { fwrite($sock, $data); }
function join_c ($chan) { write_d("JOIN $chan\r\n"); }
function get_in ($in) { for ($i = 3; $i <= count($in); $i++) { $out .= " $in[$i]"; } return trim("$out\r\n"); }
function change_n ($nick) { write_d("NICK $nick\r\n"); } ?>

我想知道为什么我不能将变量用作 fwrite 中的第二个参数。非常感谢任何帮助

2 个答案:

答案 0 :(得分:5)

每个新函数都有自己的变量范围。你已经在一个函数中定义了$ sock,但是在其他函数中没有定义它。你需要做三件事之一:

  1. 返回$ sock并将其传递给任何后续函数
  2. 在每个功能的开头都有global $sock;
  3. 将此全部写入对象类,并分配并使用$ this-&gt; sock而不是$ sock
  4. 3将是“最佳”解决方案,1将是如何在功能上下文中完成此操作,2可能是最简单的,但以这种方式使用全局变量是最后的手段。

答案 1 :(得分:1)

$sock未在名为write_d的函数中定义。

你需要让$ sock成为一个全局变量,或者将所有这些函数放入一个类中,并使$ sock成为该类的属性。