2012-03-18 8 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"); 

正常に動作します。私はfwriteので2番目のパラメータとして変数を使用できない理由を知りたい

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"); } ?> 

:ここに私の完全なコードです。どんな助けも大いにありがたいです

+1

パラメータ1は '$ sock'ではありません。 – Ben

+0

また、パラメータ2を手動で設定すると、問題が解決されます。 – Kinz

+0

$ sockはリソースIDではありません。 – safarov

答えて

5

それぞれの新しい関数には、変数のための独自のスコープがあります。ある関数で$ sockを定義しましたが、他の関数では定義されていません。あなたは3つのいずれかを実行する必要があります。

  1. リターン$の靴下をして
  2. は、すべてのオブジェクトクラスにglobal $sock;この書き込み
  3. あなたの機能のそれぞれの先頭にを持って後続の関数に渡して、 $ sockとは対照的に$ this-> sockを割り当てて使用する

3は "ベスト"解決策、1は機能コンテキストでこれを達成する方法、2はおそらく最も簡単ですがグローバルを使用しますこの方法は最後の手段です。

+0

ありがとう、3は私のために働く。回答が受け入れられました。 – Kinz

1

$sockは、write_dという名前の関数では定義されていません。

$ sockをグローバル変数にするか、これらの関数をすべてクラスに入れ、$ sockをクラスのプロパティにする必要があります。

関連する問題