0

そこで、PHP スクリプトをソケットにバインドし、受信データをテキスト ファイルに書き込むようにしました。新しい情報がストリームから流れてきます。これはうまく機能しています。私がやりたいのは、そのテキスト ファイルが更新されるたびに別の別の PHP スクリプトを実行することです。

「include」コマンドを使用してこれを実現しようとしましたが、機能していません。そのコマンドを使用して非常に単純なスクリプトをモックアップすることにより、'include' メソッドが機能することをテストしました。たぶん、コード行を間違った場所に置いているのでしょうか? do-while ループの中にあります (以下のコードを参照)。

変更を有効にするには、スクリプト/ソケットを再起動またはリセットする必要がありますか?

どんな助けでも大歓迎です。ありがとうございました!

これが私のコードの要点です:

[socket create, bind, and listen stuff goes here]

do {
$input = socket_read($spawn, 4096, 1) or die("Could not read input\n");
$trimmed = trim($input);


if ($trimmed != "") {
  echo date($dateformat) . ": Received input: $trimmed\n";
  if ($trimmed == "END") {
     socket_close($spawn);
     break;
  }
  else {
     // write content
     $fhp = fopen($textFile, 'w') or die("can't open file");
     fwrite($fhp, $trimmed);
     fclose($fhp);
     echo date($date) . ": Wrote: " . $trimmed ."\n";

    // run my other PHP script - the crux of my issue - this is not working
    include '/home/public_html/update.php';

     }
     echo date($dateformat) . ": updated \n";
    }
   }
} while (true);

socket_close($socket);
echo "Socket term\n";
4

1 に答える 1

0

あなたの質問のスクリプトのロジックは

  • ループを開始
  • ソケットの読み取り
  • ファイルハンドルを開く
  • ファイルに書き込む
  • ファイルを閉じる
  • '/home/public_html/update.php'が必要です。
  • エコー
  • ソケットを閉じる
  • エンドループ

include()行の前にファイルが書き込まれて閉じられるため、スクリプトがあなたの言うとおりに機能しない理由がわかりません。次のコード行はif/elseの外にあり、IF条件がTRUEの場合でも、更新された出力が出力されるため、混乱が生じる可能性があります。

 echo date($dateformat) . ": updated \n";

問題が解決しない場合は、update.phpスクリプトを貼り付けることができます。問題は、そこにある可能性があります。


--update.phpを含めるように編集されました。ファイルにコンテンツが含まれている場合は、ファイルを閉じた後にこのコードを適用します。

if(filesize($textFile) != 0){
 include '/home/public_html/update.php';
}

上記のコードは、update.phpファイルを含めるために、$textFileがゼロに等しくないかどうかをチェックします。

于 2012-07-19T19:22:05.187 に答える