Avatar billede net-city Nybegynder
17. marts 2005 - 23:38 Der er 35 kommentarer og
1 løsning

Hardcore php! Help

Hvad er fejlen? - Det tager 200000 år at loade siden, og det endelige resultat: siden kan ikke vises..


-->


<?php
$_GET['besked'] = 'besked';
$host = "hhsrv.n.dk";
$fp = fsockopen($host, 202, &$err_num, &$err_msg, 30);
if(!$fp){
    die("Kunne ikke connecte til <b>..</b>");
} else {


  $response = '';
        while (!feof($fp)) {
            $response .= fgets($fp, 2);
            while (substr_count($response) != 0) {
                $offset = strpos($response);
                $data = substr($response,0,$offset);
                $response = substr($response,$offset+2);
             
         
                    $offsetA = strpos($data, ' ');
                    $dFrom = substr($data,1,$offsetA-1);
                    $offsetB = strpos($data, ' :');
                    $dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1);
                    $dText = substr($data,$offsetB+2);
                 
           
                 
                 
                if (substr($data,0,4) == 'PING') {
                 
                    fputs($fp,'PONG');
            echo "Virker";
                }
        }
}
}
?>
Avatar billede thb Nybegynder
18. marts 2005 - 00:01 #1
Prøv at debugge din kode, start med at udkommenter indefra endtil at fejlen ophør...

Thomas
Avatar billede alister_crowley Nybegynder
18. marts 2005 - 00:06 #2
dette her er i hvertfald failer

$_GET['besked'] = 'besked';

^^ du kan ikke sætte en get manuaelt.. fyy, det skal gøres via. adresselinjen.
Avatar billede alister_crowley Nybegynder
18. marts 2005 - 00:09 #3
Og hvad er ide'en i at vi skal debugge et script for dig, som sikkert skal teste om en cs-server er levende og som du sikkert ikke har lavet selv.

(Btw. hvis formålet er cs-servere så skriv det, så har jeg måske noget som er bedre)
Avatar billede net-city Nybegynder
18. marts 2005 - 00:17 #4
Nej, det er ikke til en cs server.
Det er til en 3Dchat i java. (www.towerchat), jeg vil lave en BOT dertil, hvor man feks. skriver !ping så siger botten "pong", men det vil ikke virke, det skyldes måske den er i java?

Men kom med det script alister, så kan jeg måske bygge videre
Avatar billede net-city Nybegynder
18. marts 2005 - 00:19 #5
Avatar billede bojo Nybegynder
18. marts 2005 - 00:20 #6
substr_count tager 2 parametre:

substr_count() returns the number of times the needle substring occurs in the haystack string.

print substr_count("This is a test", "is"); // prints out 2

nu returnere den altid "undefined" = NULL som opfattes som false, hvad 0 også gør altså er while (substr_count($response) != 0) aldrig opfyldt = uendelig løkke.

Nu er de flest eservere sat til timeout efter x min. 3 er vist almindeligt, netop for at undgå uendelig løkke.

Din kode læser noget tester om 0 != 0 og læser så igen indtil feof og viser derefter intet.
Avatar billede net-city Nybegynder
18. marts 2005 - 00:22 #7
kan du så give mig det rigtige system fremfor
$response = '';
        while (!feof($fp)) {
            $response .= fgets($fp, 2);
            while (substr_count($response) != 0) {
                $offset = strpos($response);
                $data = substr($response,0,$offset);
                $response = substr($response,$offset+2);
             
         
                    $offsetA = strpos($data, ' ');
                    $dFrom = substr($data,1,$offsetA-1);
                    $offsetB = strpos($data, ' :');
                    $dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1);
                    $dText = substr($data,$offsetB+2);
                 
           
                 
                 
                if (substr($data,0,4) == 'PING') {
                 
                    fputs($fp,'PONG');
            echo "Virker";
                }
        }
}
Avatar billede bojo Nybegynder
18. marts 2005 - 00:24 #8
hov - ikke uendelig løkke, men tværtimod. Den kommer aldrig ind i den inderste while løkken :-( og nu går jeg i seng inden jeg vrøvler mere
Avatar billede alister_crowley Nybegynder
18. marts 2005 - 00:25 #9
Jeg ville nok lave den bot direkte i java så :P

Det er også meget nemmere at håntere sockets i java.
Avatar billede net-city Nybegynder
18. marts 2005 - 00:25 #10
Hey, vil du ikke lige hjælpe!
Avatar billede net-city Nybegynder
18. marts 2005 - 00:36 #11
Kommentar: alister_crowley
18/03-2005 00:25:08


Mit spg er ikke om java, men vil kun have svar på det som jeg selv spørg om.
Og ja, det kan godt lade sig gøre for kender en som har lavet det.

Kan i se en fejl i min øverste kode?
Avatar billede alister_crowley Nybegynder
18. marts 2005 - 00:42 #12
Ikke nogle realle fejl.

Men hvis du kører det fra en browser så vil skal du ikke forvente det bedste resultat :)
PHP sockets er (ligesom alt andet socket relateret) ikke beregnet til at køre fra en browser.

Og specielt ikke med while (!feof($fp)) { da du så kører løbende, browseren vil først vise dig et resultat når der sker en fejl, eller lign.
Avatar billede net-city Nybegynder
18. marts 2005 - 00:43 #13
Har fundet et script fra exp til mIRC, og har redigerede lidt i det, men den vil heller ikke loades, hvorfor? her kommer koden-


<?
     
        set_time_limit(0);
     
        define ('CRLF', "\r\n");
   
        $nick = 'RonnieTEST';
        $username = 'RonnieTEST';
        $localhost = '';
        $remotehost = 'hhsrv.n.dk';
        $realname = 'RonnieTEST';
        $channel = '#amici';
        // Open the socket
        $fp = fsockopen($remotehost,202, &$err_num, &$err_msg, 30);
        if(!$fp) {
            print "Sorry, the server is not currently available!";
            exit;
        }
     
        $response = '';
        while (!feof($fp)) {
            $response .= fgets($fp, 1024);
            while (substr_count($response,CRLF) != 0) {
                $offset = strpos($response, CRLF);
                $data = substr($response,0,$offset);
                $response = substr($response,$offset+2);
                if ( substr($data,0,1) == ':' ) {
                 
                    $offsetA = strpos($data, ' ');
                    $dFrom = substr($data,1,$offsetA-1);
                    $offsetB = strpos($data, ' :');
                    $dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1);
                    $dText = substr($data,$offsetB+2); // set $dText as the text.
                    if ( substr($dCommand,0,3) == '004' ) {
                     
                    print("jaja");
                    }
                    elseif ( substr($dCommand,0,7) == 'PRIVMSG' ) {
                   
                        if ( Ord(substr($dText,0,1)) == 1 ) {
                       
                            if ( substr($dText,1,4) == 'PING' ) {
                               
                                fputs($fp,':' . $nick . ' NOTICE ' . $dFrom . ' :' . chr(1) . 'PING ' . substr($dText,6) . chr(1) . CRLF);
                            }
                            elseif ( substr($dText,1,7) == 'VERSION' ) {
                           
                                fputs($fp,':' . $nick . ' NOTICE ' . $dFrom . ' :' . chr(1) . 'VERSION PHPirc' . chr(1) . CRLF);
                            }
                        }
                        else {
                         
                            fputs($fp,$dText . CRLF);
                        }
                    }
                   
                }
                elseif ( substr($data,0,4) == 'PING' ) {
                 
                    fputs($fp,'PONG ' . substr($data,5) . CRLF);
                }
            }
        }
       
        fclose ($fp);   
    ?>
Avatar billede alister_crowley Nybegynder
18. marts 2005 - 08:50 #14
jeg går ud fra du mener IRC, mIRC er en client, og det scriptsprog som kan benyttes direkte i mIRC ser meget anderledes ud.

Hvis du vil arbejde med IRC anbefaler jeg at du (for engang skyld) læser den skide dokumentation, både på php.net og IRC RFC'en (1 hit på google er fin)

Og jeg gentager mig selv, et socket script som overstående skal køres fra kommandopromt.

Istedet for at finde nogle scripts på nettet, har du så overvejet at kode et selv ?
PHP er forresten extremt skod til IRC bots :P

Men du kan set et script jeg lavede (som virkede !) i denne her tråd:

http://eksperten.dk/spm/583454
Avatar billede jammerlab Nybegynder
18. marts 2005 - 12:26 #15
net-city> Hvor fanden har du fundet min kode henne? :/
Avatar billede net-city Nybegynder
18. marts 2005 - 14:08 #16
problemet..

<?
$server = "hhsrv.n.dk";
$port = 202;

set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, $port);

if (!$fp)
{
  echo "$errstr ($errno)\n";
}
else
{
  fwrite($fp,"OK\r\n");

  while (!feof($fp))
  {
    $input = fgets($fp,128);
    $strinput = explode(" ", $input);
    if ($strinput[0] == "PING")
    {
      fwrite($fp,'PONG '.str_replace(':','',$strinput[1])."\n");
    echo fgets($fp,128);
    }
  }

  fclose($fp);
}


?>

den gider ikke loade siden.
Avatar billede jammerlab Nybegynder
18. marts 2005 - 14:23 #17
Mester hvis du lige svare på mit spørgsmål så skal jeg nok hjælpe dig ;)

Du skal ikke kører koden via web browseren... du skal kører den via et command vindue.
Avatar billede net-city Nybegynder
18. marts 2005 - 14:26 #18
En command vindue :S, hvor finder jeg sådan ét? - Er meget ny inde i dette, kan du give mig link, evt. guide?
Avatar billede jammerlab Nybegynder
18. marts 2005 - 14:36 #19
Rettelse kommandopromt

gå ned i start>kør> og skriv "cmd" så skulle den gerne åbne et vindue... så går du ind i dit php mappe cd.. / cd.. / cd php

så skriver du php c:\stien til din fil

:P
Avatar billede net-city Nybegynder
18. marts 2005 - 14:56 #20
Hvad mener du med så går du ind i dit php mappe cd.. / cd.. / cd php
Avatar billede net-city Nybegynder
18. marts 2005 - 14:57 #21
Altså. har installert php med apache, cli, osv.
Og har en fil med sockets i, den hedder test.php og ligger her:
C:\Programmer\Apache Group\Apache\htdocs\test.php

Hvordan køre jeg den?
Avatar billede plazm Nybegynder
18. marts 2005 - 15:02 #22
alister_crowley
Skod og skod :)
PHP bots til IRC er nu ganske fine efter min mening.
Avatar billede net-city Nybegynder
18. marts 2005 - 15:04 #23
Har fundet løsning.
I CMD siger den:
Status: 404
Content-type: text/html
X-Powered-By: PHP/4.3.10

No input file specified
Avatar billede net-city Nybegynder
18. marts 2005 - 15:06 #24
skrev.
cd C:\php
også
C:\php> php stitilfilen.php
Avatar billede net-city Nybegynder
18. marts 2005 - 15:15 #25
.. og min kode (test.php)

<?
$server = "hhsrv.n.dk";
$port = 202;

set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, $port);

if (!$fp)
{
  echo "$errstr ($errno)\n";
}
else
{
  fwrite($fp,"OK\r\n");

  while (!feof($fp))
  {
    $input = fgets($fp,128);
    $strinput = explode(" ", $input);
    if ($strinput[0] == "PING")
    {
      fwrite($fp,'PONG '.str_replace(':','',$strinput[1])."\n");
    echo fgets($fp,128);
    }
  }

  fclose($fp);
}


?>
Avatar billede net-city Nybegynder
18. marts 2005 - 15:16 #26
altså, start->kør->CMD kommer der en popup, der skriver jeg cd C:\php og trykker enter, så skriver jeg php C:\Programmer\Apache Group\Apache\htdocs\test.php men siger:

Status: 404
Content-type: text/html
X-Powered-By: PHP/4.3.10

No input file specified

koden (test.php)

<?
$server = "hhsrv.n.dk";
$port = 202;

set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, $port);

if (!$fp)
{
  echo "$errstr ($errno)\n";
}
else
{
  fwrite($fp,"OK\r\n");

  while (!feof($fp))
  {
    $input = fgets($fp,128);
    $strinput = explode(" ", $input);
    if ($strinput[0] == "PING")
    {
      fwrite($fp,'PONG '.str_replace(':','',$strinput[1])."\n");
    echo fgets($fp,128);
    }
  }

  fclose($fp);
}


?>
Avatar billede jammerlab Nybegynder
18. marts 2005 - 15:28 #27
No input file specified

betyder den ikke kan finde filen ... eventuelt smid din php fil ind under php mappen
Avatar billede jesperkm Nybegynder
18. marts 2005 - 15:30 #28
Ja tak! Så åbner den bare filen? :S
Avatar billede jesperkm Nybegynder
18. marts 2005 - 15:31 #29
ah, derfor. php C:\php\test.php, men hvis jeg så skriver PING på clienten siger den ikke PONG bagefter
Avatar billede net-city Nybegynder
18. marts 2005 - 15:34 #30
gå nu væk  jesperkm lav dine egne spørgsmål.. du skal ikke tage mine scripts..

men ja jeg får samme fejl
Avatar billede jammerlab Nybegynder
18. marts 2005 - 15:36 #31
Det er jo ikke en fejl...
Avatar billede net-city Nybegynder
18. marts 2005 - 15:37 #32
hva er det så?
Avatar billede jammerlab Nybegynder
18. marts 2005 - 15:40 #33
Serveren pinger botten for at se om den er i live... den svarer så serveren med et pong (Hvis vi snakker IRC som jeg lavede scriptet til i tidernes morgen)
Avatar billede net-city Nybegynder
18. marts 2005 - 15:43 #34
Hehe, tror vi er på vej fra hinanden.
Jeg vil gerne have det sådan hvis man skriver /ping på irc clienten, så udskriver den bagefter PONG på irc clienten.

byg det i dette script:

<?
$server = "hhsrv.n.dk";
$port = 202;

set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, $port);

if (!$fp)
{
  echo "$errstr ($errno)\n";
}
else
{
  fwrite($fp,"OK\r\n");

  while (!feof($fp))
  {
    $input = fgets($fp,128);
    $strinput = explode(" ", $input);
    if ($strinput[0] == "PING")
    {
      fwrite($fp,'PONG '.str_replace(':','',$strinput[1])."\n");
    echo fgets($fp,128);
    }
  }

  fclose($fp);
}


?>
Avatar billede jammerlab Nybegynder
18. marts 2005 - 15:52 #35
Ligger der meget arbejde i og den tid har jeg ikke.

Du må du læse dig frem til på de links som allerede er blevet skrevet her i dit indlæg.


http://dk2.php.net/manual/en/ref.sockets.php
Avatar billede net-city Nybegynder
18. marts 2005 - 21:15 #36
lukker, følg med i det andet-..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester