Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 16:53 Der er 20 kommentarer og
1 løsning

Function

Why virker det ikke når jeg har sadt mit script ind i en function? det virker fint hvis jeg ikke sætter den ind i en function!!




<?
function q2stat($server){
//#########################################\\
//##          Copyright by              ##\\
//##    Kasper Søgaard Aka. DoomStone  ##\\
//#########################################\\

//global

$qstat  = "/home/doomstone/qstats25c/qstat";
#$server = "193.163.220.187:27935";
$buffer = '/home/doomstone/qstat25c/qstat -R -P -cn -raw "|,|" -qws '.$server;
$output =  shell_exec ($buffer);
$array  = explode("|,|", $output);


//$originalarray = $array; //dit originale array med alle elementer.

//pil de første 39 elementer ud af originalarrayet
$serverstats = array_slice($array, 0, 39);
//opdel elementerne fra nr. 39 i blokke med størrelse 7
$spillerstats = array_chunk(array_slice($array, 39), 7);

// til function
// server stats
// ip:hostname:map:max players:players
$server = $serverstats[1].":".$serverstats[2].":".$serverstats[3].":".$serverstats[4].":".$serverstats[5];
//Player stats
// $player[0], $player[1] ogsv.
// Player name:frags:ping
$i="0";
$loops = count ($spillerstats); // så lopper den kun hvis der er spiller
#$loops = $serverstats[4]; // så looper den også hvis der ikke er nogle spiller
while ($i < $loops){
$player[$i] = $spillerstats[$i][0].":".$spillerstats[$i][1].":".$spillerstats[$i][5];   
$i++;
}
} // slutter function

q2stat("193.163.220.187:27935");

echo "Player [1] => ".$player[0];
?>
Avatar billede human Nybegynder
18. januar 2003 - 16:58 #1
Why virker det ikke når jeg har sadt mit script ind i en function? det virker fint hvis jeg ikke sætter den ind i en function!!

a hva?
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:03 #2
Hvis jeg gør sådan her virker det!

<?
//#########################################\\
//##          Copyright by              ##\\
//##    Kasper Søgaard Aka. DoomStone  ##\\
//#########################################\\

//global

$qstat  = "/home/doomstone/qstats25c/qstat";
#$server = "193.163.220.187:27935";
$buffer = '/home/doomstone/qstat25c/qstat -R -P -cn -raw "|,|" -qws '.$server;
$output =  shell_exec ($buffer);
$array  = explode("|,|", $output);


//$originalarray = $array; //dit originale array med alle elementer.

//pil de første 39 elementer ud af originalarrayet
$serverstats = array_slice($array, 0, 39);
//opdel elementerne fra nr. 39 i blokke med størrelse 7
$spillerstats = array_chunk(array_slice($array, 39), 7);

// til function
// server stats
// ip:hostname:map:max players:players
$server = $serverstats[1].":".$serverstats[2].":".$serverstats[3].":".$serverstats[4].":".$serverstats[5];
//Player stats
// $player[0], $player[1] ogsv.
// Player name:frags:ping
$i="0";
$loops = count ($spillerstats); // så lopper den kun hvis der er spiller
#$loops = $serverstats[4]; // så looper den også hvis der ikke er nogle spiller
while ($i < $loops){
$player[$i] = $spillerstats[$i][0].":".$spillerstats[$i][1].":".$spillerstats[$i][5];   
$i++;
}

echo "Player [1] => ".$player[0];
?>

Men hvis jeg smider det ind i en function virker det ikke!
Avatar billede jelzin101 Praktikant
18. januar 2003 - 17:05 #3
tjah du kunne jo starte med at tjekke dit variabel scope...
Avatar billede lauer Nybegynder
18. januar 2003 - 17:05 #4
Dit array returnere ikke nnoget.

Du skal have sat
return $player;
ind mellem '}' og '} //slutter function'

og så skal der står
$player = q2stat("193.163.220.187:27935");
echo "Player [1] => ".$player[0];
Avatar billede jelzin101 Praktikant
18. januar 2003 - 17:06 #5
og pas også lidt på i din medd. øverst... - www.it-retten.dk er anbefalelsesværdig at læse.
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:08 #6
hmm $player bliver et array på 14 så jeg kan ikke gøre det på den måde!!!
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:09 #7
hvad mener du jelzin101??
Avatar billede lauer Nybegynder
18. januar 2003 - 17:11 #8
doomstone-dk-, det skal du... selvom det er et array, skal du stadig retunere det.
Prøv at rette til det jeg skrev :)
Avatar billede jespernaur Nybegynder
18. januar 2003 - 17:12 #9
Prøv forrest i funktionen at skrive

  global $player;
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:13 #10
machomann jeg prøvede men virkede ikke!
Avatar billede jelzin101 Praktikant
18. januar 2003 - 17:14 #11
variabel scope, dvs. at du skal holde øje med hvorhenne dine variabler er tilgængelige - som machomann skriver er du nødt til at returnere arrayet fra funktionen - hvis ikke du gør det er variablen "player"'s scope begrænset til funktionen.

mht. copyright -så læs det afsnit der omhandler dette i det link jeg gav dig :O) -jeg tvivler på jeg kan forklare det bedre end det bliver gjort der.
Avatar billede lauer Nybegynder
18. januar 2003 - 17:14 #12
jespernaur, det er ikke den korrekte måde at gøre det på.
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:14 #13
}
global $player;
global $server;
} // slutter function

q2stat("193.163.220.187:27935");

<-- sådan? det virker iværtig fald ikke!
Avatar billede lauer Nybegynder
18. januar 2003 - 17:15 #14
Doomstone-dk-, jo det gør.
Prøv at vise os den kode som du ændre det til, efter mit indlæg. du må have lavet en anden lille fejl.
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:17 #15
hmm mit problem er at jeg har jo $server og $player[0-13] som jeg skal have ud!
Avatar billede lauer Nybegynder
18. januar 2003 - 17:21 #16
Prøv dette
<?php
function q2stat($server, &player){
//#########################################\\
//##          Copyright by              ##\\
//##    Kasper Søgaard Aka. DoomStone  ##\\
//#########################################\\

//global

$qstat  = "/home/doomstone/qstats25c/qstat";
#$server = "193.163.220.187:27935";
$buffer = '/home/doomstone/qstat25c/qstat -R -P -cn -raw "|,|" -qws '.$server;
$output =  shell_exec ($buffer);
$array  = explode("|,|", $output);


//$originalarray = $array; //dit originale array med alle elementer.

//pil de første 39 elementer ud af originalarrayet
$serverstats = array_slice($array, 0, 39);
//opdel elementerne fra nr. 39 i blokke med størrelse 7
$spillerstats = array_chunk(array_slice($array, 39), 7);

// til function
// server stats
// ip:hostname:map:max players:players
$server = $serverstats[1].":".$serverstats[2].":".$serverstats[3].":".$serverstats[4].":".$serverstats[5];
//Player stats
// $player[0], $player[1] ogsv.
// Player name:frags:ping
$i="0";
$loops = count ($spillerstats); // så lopper den kun hvis der er spiller
#$loops = $serverstats[4]; // så looper den også hvis der ikke er nogle spiller
while ($i < $loops){
$player[$i] = $spillerstats[$i][0].":".$spillerstats[$i][1].":".$spillerstats[$i][5];   
$i++;
}
return $server;
} // slutter function

$server = q2stat("193.163.220.187:27935", $player);

echo "Player [1] => ".$player[0];
?>
Avatar billede lauer Nybegynder
18. januar 2003 - 17:22 #17
argh, det skulle være:
function q2stat($server, &$player){
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:22 #18
hmm machomann skriv et svar!
Avatar billede doomstone-dk- Nybegynder
18. januar 2003 - 17:23 #19
Lavedet det sådan her


//#########################################\\
//##          Copyright by              ##\\
//##    Kasper Søgaard Aka. DoomStone  ##\\
//#########################################\\

//global

$qstat  = "/home/doomstone/qstats25c/qstat";
#$server = "193.163.220.187:27935";
$buffer = '/home/doomstone/qstat25c/qstat -R -P -cn -raw "|,|" -qws '.$server;
$output =  shell_exec ($buffer);
$array  = explode("|,|", $output);


//$originalarray = $array; //dit originale array med alle elementer.

//pil de første 39 elementer ud af originalarrayet
$serverstats = array_slice($array, 0, 39);
//opdel elementerne fra nr. 39 i blokke med størrelse 7
$spillerstats = array_chunk(array_slice($array, 39), 7);

// til function
// server stats
// ip:hostname:map:max players:players
$server = $serverstats[1].":".$serverstats[2].":".$serverstats[3].":".$serverstats[4].":".$serverstats[5];
//Player stats
// $player[0], $player[1] ogsv.
// Player name:frags:ping
$i="0";
$loops = count ($spillerstats); // så lopper den kun hvis der er spiller
#$loops = $serverstats[4]; // så looper den også hvis der ikke er nogle spiller
while ($i < $loops){
$player[$i] = $spillerstats[$i][0].":".$spillerstats[$i][1].":".$spillerstats[$i][5];   
$i++;
}
if($what == "player") return $player;
if($what == "server") return $server;
} // slutter function
Avatar billede lauer Nybegynder
18. januar 2003 - 17:25 #20
Okay... men det nye jeg skrev  vil virke efter  hensigten,  og så kan det endda bruges selvom du vil connecte til flere servere på samme side.
Avatar billede lauer Nybegynder
18. januar 2003 - 17:25 #21
ups, Et svar :)
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