2012-03-18 27 views
1

我正在创建一个IRC机器人,并且我想将一些函数存储在不同的文件中。我引用我的主要文件的文件与include()和它的作品,但是当我试图给fwrite()一个变量,像这样:PHP'fwrite'将不会采取变量

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

它抛出这个错误:

PHP Warning: feof() expects parameter 1 to be resource, null given in /home/kinz/Desktop/Eve/Eve.php on line 18

PHP Warning: fgets() expects parameter 1 to be resource, null given in /home/kinz/Desktop/Eve/Eve.php on

但是当我把:

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使用一个变量作为第二个参数。任何帮助将不胜感激

+1

参数1是'$ sock'而不是'$ data'。 – Ben 2012-03-18 01:09:49

+0

然而,当我手动设置参数2时,它修复了这个问题。 – Kinz 2012-03-18 01:11:03

+0

$ sock不是资源ID,请确保您打开服务器并在 – safarov 2012-03-18 01:11:44

回答

5

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

  1. 返回$袜子,并把它传递给任何后续功能
  2. global $sock;在每个函数
  3. 写的开始这一切都在一个对象类,并分配和使用$ this-> sock而不是$ sock

3将是“最佳”解决方案,1将是如何在功能上下文中完成此操作,而2可能是最简单的,但使用全局变量这种方式是最后的手段。

+0

谢谢,3对我有用。接受答案。 – Kinz 2012-03-18 01:22:43

1

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

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