PHP 'fwrite' 不会使用变量

Posted

技术标签:

【中文标题】PHP \'fwrite\' 不会使用变量【英文标题】:PHP 'fwrite' Will Not Take VariablePHP 'fwrite' 不会使用变量 【发布时间】:2012-03-18 01:06:17 【问题描述】:

我正在创建一个 IRC 机器人,我想将一些功能存储在不同的文件中。我用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 上给出 null

但是当我把:

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是$sock不是$data 然而,当我手动设置参数 2 时,它解决了问题.. $sock 不是资源ID,请确保你打开服务器并分配给$sock ($sock = fsockopen...) 之前 试试 var_dump($sock)。仅仅因为设置第二个参数消除了警告并不意味着它有效。 【参考方案1】:

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

    返回 $sock 并将其传递给任何后续函数 在每个函数的开头都有global $sock; 将这一切写在一个对象类中,并分配和使用 $this->sock 而不是 $sock

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于PHP 'fwrite' 不会使用变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP - fwrite() 不写入套接字

PHP fwrite() 用于将大字符串写入文件

Php fopen或fwrite使用unicode创建文本

PHP中,fwrite写入文件的时候,怎么换行?

php fwrite换行

linux下php fwrite无法写入文件怎么回事呀