Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i potoki
Forum PHP.pl > Forum > PHP
P4z
Czesc, jestem tu pierwszy (i mam nadzieje nie ostatni) raz wiec witam wszystkich goraco. Uprzedzam, ze jestem nowy w temacie PHP.

Zadanie jakie chce wykonac wyglada nastepujaco.
Na ircu na pewnym kanale stoi bot, ktory wysyla zapytanie: http://www.example.net/?nick=ksywka&msg=wiadomosc na trigger !powiedz wiadomosc. Na serwerze dziala skrypt o takiej tresc:
  1. <?php
  2.  
  3. $msg = substr(rtrim($_GET['msg']),0,128);
  4. # $msg = sprintf("%d.60",$_GET['msg']);
  5. # $msg = htmlspecialchars($_GET['msg']);
  6. $nick = $_GET['nick'];
  7. $file = "./var/edlog.txt";
  8.  
  9. $nl = "n";
  10.  
  11. if(isset($msg) AND isset($nick)) {
  12. $wiadomosc = "IRC_MSG ".$nick." ".$msg.$nl;
  13. echo "=> ".$nick." says: ".$msg." <= sent to the server";
  14. # echo $wiadomosc;
  15.  
  16. $plik = fopen($file, "a");
  17. fwrite($plik, $wiadomosc);
  18. fclose($plik);
  19.  
  20. }else {
  21. echo "Input missing.";
  22. }
  23.  
  24. ?>

plik ten jak widac przekazuje sformatowane polecenie do pliku ./var/edlog.txt.

uzywam dodatkowo pliku parser.php ktory wchodzi w sklad polecenia w skrypcie basha:
tail -n0 -f $edlog | $parser | $tron --vardir $var | tee -a $log

parser wyglada tak:
  1. #!/usr/bin/php
  2. <?php
  3. while (1) {
  4. $line = rtrim(fgets(STDIN, 1024));
  5. //print($line . "n");
  6.  
  7. if (preg_match("/^PLAYER_ENTERED/", $line)) {
  8. $keywords = preg_split("/ /", $line);
  9. print("CONSOLE_MESSAGE welcome " . mysql_escape_string($keywords[1]) . " to TYSKIE:WARZONE.n");
  10. print("CENTER_MESSAGE New player: " . mysql_escape_string($keywords[1]) . "n");
  11. usleep(500000);
  12. print("PLAYER_MESSAGE Look out for SHOTS and ZOMBIES. Respawn is ONn");
  13. }
  14.  
  15. if (preg_match("/^IRC_MSG/", $line)){
  16. $keywords = preg_split("/ /", $line);
  17. print("CONSOLE_MESSAGE 0x00ff00IRC message ==> 0xff0000" . mysql_escape_string($keywords[1]) . " says:0x00ff00 ");
  18. for ($i=2; i <= count($keywords); $i++) print(mysql_escape_string($keywords[$i]));
  19. print("n");
  20. }
  21. }
  22. ?>


i moje pytanie: jak moge wyslac do potoku dane z parsera? (tak zeby dane z $parser przekazac konsoli $tron) Obecne roziwazanie nie dziala. Prosze o kazda pomoc.
Jezeli watek juz sie przewinal prosze o wskazowke.
btw. Czy kolorowanie skladni dziala prawidlowo?
DeyV
Jakiś czas temu Seth - od dawna w ekipie Php.pl napisał
http://sourceforge.net/projects/xbs/
czyli bot ircowy, który siedział w tle i coś sobie tam robił smile.gif

Może analiza tego rozwiązania pomoże Ci przeskoczyć swój problem.

Ad 2. - niestety - kolorowanie od czasu do czasu nawala.
P4z
Chetnie przeanalizowalbym zrodla gdyby byly dostepne.
http://sourceforge.net/projects/xbs/ odpowiada No File Packages Defined, CVS tez jest pusty.
ActivePlayer
moge sie mylic ale chyba normalnie fopen i operacje jak na plikach.
dr_bonzo
Potoli to polaczenie stdin ze stdout "|"em. Czyli czytasz ze stdin, a piszesz do stdout. W manualu masz rozdzial o "Commandline php"
P4z
O! Dziekuje. Widze, ze musze poswiecic wiecej czasu na manual.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.