traag script
Laatst heb ik een script gemaakt.
Het script hoort bij een spel (www.runescape.com),
de bedoeling is dat ik de statistieken van andere spelers te zien krijg.
het script werkt wel maar gaat zeer traag, iemand een idee hoe dit komt en hoe ik dit kan verhelpen?
(ik raad aan om de naam dragonbiker2 te gebruiken als je het formulier invult, dit is een naam die normaalgezien zou moeten werken)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
if(isset($_POST['naam'])) {
$bericht = file_get_contents("http://hiscore.runescape.com/index_lite.ws?player=".$naam);
$bericht = str_replace(",","|",$bericht);
$i = explode("|",$bericht);
$attack = $i[3];
$defence = $i[5];
$strenght = $i[7];
$hitpoints = $i[9];
$ranged = $i[11];
$prayer = $i[13];
$magic = $i[15];
$cooking = $i[17];
$woodcutting = $i[19];
$fletching = $i[21];
$fishing = $i[23];
$firemaking = $i[25];
$crafting = $i[27];
$smithing = $i[29];
$mining = $i[31];
$herblore = $i[33];
$agility = $i[35];
$thieving = $i[37];
$slayer = $i[39];
$farming = $i[41];
$runecrafting = $i[43];
$hunter = $i[45];
$construction = $i[47];
echo "<b>attack:</b>".$attack."<br>";
echo "<b>defence:</b>".$defence."<br>";
echo "<b>strenght:</b>".$strenght."<br>";
echo "<b>hitpoints:</b>".$hitpoints."<br>";
echo "<b>ranged:</b>".$attack."<br>";
echo "<b>prayer:</b>".$defence."<br>";
echo "<b>magic:</b>".$strenght."<br>";
echo "<b>cooking:</b>".$hitpoints."<br>";
echo "<b>woodcutting:</b>".$attack."<br>";
echo "<b>fletching:</b>".$defence."<br>";
echo "<b>fishing:</b>".$strenght."<br>";
echo "<b>firemaking:</b>".$hitpoints."<br>";
echo "<b>crafting:</b>".$attack."<br>";
echo "<b>smithing:</b>".$defence."<br>";
echo "<b>mining:</b>".$strenght."<br>";
echo "<b>herblore:</b>".$hitpoints."<br>";
echo "<b>agility:</b>".$attack."<br>";
echo "<b>thieving:</b>".$defence."<br>";
echo "<b>slayer:</b>".$strenght."<br>";
echo "<b>farming:</b>".$hitpoints."<br>";
echo "<b>runecrafting:</b>".$defence."<br>";
echo "<b>hunter:</b>".$strenght."<br>";
echo "<b>construction:</b>".$hitpoints."<br>";
}
else {
?>
<form action="test.php">
runescape naam:<br>
<input type=text name=naam>
<input type=submit value=bekijk stats name=verzend>
</form>
<?php
}
?>
if(isset($_POST['naam'])) {
$bericht = file_get_contents("http://hiscore.runescape.com/index_lite.ws?player=".$naam);
$bericht = str_replace(",","|",$bericht);
$i = explode("|",$bericht);
$attack = $i[3];
$defence = $i[5];
$strenght = $i[7];
$hitpoints = $i[9];
$ranged = $i[11];
$prayer = $i[13];
$magic = $i[15];
$cooking = $i[17];
$woodcutting = $i[19];
$fletching = $i[21];
$fishing = $i[23];
$firemaking = $i[25];
$crafting = $i[27];
$smithing = $i[29];
$mining = $i[31];
$herblore = $i[33];
$agility = $i[35];
$thieving = $i[37];
$slayer = $i[39];
$farming = $i[41];
$runecrafting = $i[43];
$hunter = $i[45];
$construction = $i[47];
echo "<b>attack:</b>".$attack."<br>";
echo "<b>defence:</b>".$defence."<br>";
echo "<b>strenght:</b>".$strenght."<br>";
echo "<b>hitpoints:</b>".$hitpoints."<br>";
echo "<b>ranged:</b>".$attack."<br>";
echo "<b>prayer:</b>".$defence."<br>";
echo "<b>magic:</b>".$strenght."<br>";
echo "<b>cooking:</b>".$hitpoints."<br>";
echo "<b>woodcutting:</b>".$attack."<br>";
echo "<b>fletching:</b>".$defence."<br>";
echo "<b>fishing:</b>".$strenght."<br>";
echo "<b>firemaking:</b>".$hitpoints."<br>";
echo "<b>crafting:</b>".$attack."<br>";
echo "<b>smithing:</b>".$defence."<br>";
echo "<b>mining:</b>".$strenght."<br>";
echo "<b>herblore:</b>".$hitpoints."<br>";
echo "<b>agility:</b>".$attack."<br>";
echo "<b>thieving:</b>".$defence."<br>";
echo "<b>slayer:</b>".$strenght."<br>";
echo "<b>farming:</b>".$hitpoints."<br>";
echo "<b>runecrafting:</b>".$defence."<br>";
echo "<b>hunter:</b>".$strenght."<br>";
echo "<b>construction:</b>".$hitpoints."<br>";
}
else {
?>
<form action="test.php">
runescape naam:<br>
<input type=text name=naam>
<input type=submit value=bekijk stats name=verzend>
</form>
<?php
}
?>
p.s. de statistieken zijn attack, defence, strenght, hitpoints, ranged,...
het is de bedoeling dat daar een getal achter komt.
p.s. voor een live voorbeeld:
http://bramphp.freehostia.com/test.php
(gebruik de naam dragonbiker2)
Gewijzigd op 01/01/1970 01:00:00 door Bram
ps. Je zou het iets kunnen versnellen door deze regel:
eruit te slopen en gewoon te exploden op de komma. Wat je nu doet is totaal overbodig...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Dus ergens opslaan en na een x aantal seconden verversen.
kun je mss uitleggen hoe ik dat moet doen of wat 'cachen' is.
Me doorverwijzen naar een tutorial ofzo is ook goed ;)
tik men naam maar in Osm333 ;) ex-speler
Hier in de script-lib staat er ook zo'n script misschien doe je het op dezelfde wijze en hij ook kijk eens wat het verschil is.
en waarom zoveel echo's ?
Zet een <BR> ertussen =)
Probeer het maar is uit...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
error_reporting(E_ALL);
$sCacheBestand = 'cache.txt'; # Het cache bestand
$iCacheTijd = 10; # Aantal seconden dat we iets cachen.
# Als het cache bestand bestaat en als het cache bestand nog actueel is
if( file_exists($sCacheBestand) && time() < (filemtime($sCacheBestand) + $iCacheTijd) )
{
# Haal resultaat uit cache
$sCacheData = file_get_contents($sCacheBestand);
}
else
{
# Vernieuw cache resultaat
$sCacheData = 'blaatcache data gemaakt op: ' . date('Y-m-d G:i:s');
file_put_contents($sCacheBestand, $sCacheData);
}
echo $sCacheData;
?>
error_reporting(E_ALL);
$sCacheBestand = 'cache.txt'; # Het cache bestand
$iCacheTijd = 10; # Aantal seconden dat we iets cachen.
# Als het cache bestand bestaat en als het cache bestand nog actueel is
if( file_exists($sCacheBestand) && time() < (filemtime($sCacheBestand) + $iCacheTijd) )
{
# Haal resultaat uit cache
$sCacheData = file_get_contents($sCacheBestand);
}
else
{
# Vernieuw cache resultaat
$sCacheData = 'blaatcache data gemaakt op: ' . date('Y-m-d G:i:s');
file_put_contents($sCacheBestand, $sCacheData);
}
echo $sCacheData;
?>
@Martijn: maar zoiets gaat toch niet werken als je zo'n random scriptje als de TS gebruikt? De gebruiker vult zijn gebruikersnaam in, dus de request naar de server is zo specifiek dat deze moeilijk te cachen valt...
In dat geval zou je per gebruiker een ander cache bestand kunnen maken. Maar of dat aan te raden is met dit script.
Een paar gebruikers zou geen probleem moeten zijn.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
21232f297a57a5a743894a0e4a801fc3
wat de md5 hash is van admin, dat krijg ik ook bij die user van wouter.
Edit: Niet dus, ik heb perongeluk een verkeerd bestand gebruikt, doordat de action van het form op test.php stond, die toevallig ook bij mij bestaat. Maar iid doet ie het niet, aangezien je nogal ouderwest programmeert.
Oke, hier gaat ie niet traag....
Maar hoe bedoel je eigenlijk ouderwets?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php // Kleurtjes
if(isset($_POST['naam'])) {
# kan je beter vervangen door:
if($_SERVER['REQUEST_METHOD'] == "POST") {
# Verder moet je dit nog toevoegen:
$naam = $_POST['naam'];
# Mijn php wijst de inhoud van het naam veld niet aan $naam
# Je bent method vergeten, dat vond mijn php / firefox niet fijn
# bovendien mag dat niet volgens de html regels, dus niet:
<form action="test.php">
# maar:
<form action="test.php" method="post" > // Je weet zeker dat het dit bestand is
# Ook was je html niet echt net, afgezien dat je dingen vergeet als
# <html>,<head> en <body>, doe je het volgende ook fout:
<input type=text name=naam>
<input type=submit value=bekijk stats name=verzend>
# Firefox laat bij mij ook alleen maar bekijk zien op de knop, je moet het dus
# Veranderen in hetvolgende:
<input type="text" name="naam">
<input type="submit" value="bekijk stats" name="verzend">
?>
if(isset($_POST['naam'])) {
# kan je beter vervangen door:
if($_SERVER['REQUEST_METHOD'] == "POST") {
# Verder moet je dit nog toevoegen:
$naam = $_POST['naam'];
# Mijn php wijst de inhoud van het naam veld niet aan $naam
# Je bent method vergeten, dat vond mijn php / firefox niet fijn
# bovendien mag dat niet volgens de html regels, dus niet:
<form action="test.php">
# maar:
<form action="test.php" method="post" > // Je weet zeker dat het dit bestand is
# Ook was je html niet echt net, afgezien dat je dingen vergeet als
# <html>,<head> en <body>, doe je het volgende ook fout:
<input type=text name=naam>
<input type=submit value=bekijk stats name=verzend>
# Firefox laat bij mij ook alleen maar bekijk zien op de knop, je moet het dus
# Veranderen in hetvolgende:
<input type="text" name="naam">
<input type="submit" value="bekijk stats" name="verzend">
?>
Dat was allemaal nodig voordat het hier bij mij draaide. Ook heb ik dat met die explode veranderd zoals Blanche hierboven aangeeft.
Ook wijs je strings aan als $attack, die opzich niet nodig zijn, omdat op de plek waar ze gebruikt worden, wel duidelijk is wat ze bevatten. Dus opzich kan
Code (php)
Maar als je het script uitbreiden gaat, dan word het waarschijnlijk ingewikkelder (sommetjes met die waarden doen ofzo), dan kan je beter dingen als $attack hebben.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<html>
<head>
<title>higscore lookup</title>
</head>
<body>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$naam = $_POST['naam'];
$bericht = file_get_contents("http://hiscore.runescape.com/index_lite.ws?player=".$naam);
$i = explode(",",$bericht);
echo "<b>attack:</b>".$i[3]."<br>";
echo "<b>defence:</b>".$i[5]."<br>";
echo "<b>strenght:</b>".$i[7]."<br>";
echo "<b>hitpoints:</b>".$i[9]."<br>";
echo "<b>ranged:</b>".$i[11]."<br>";
echo "<b>prayer:</b>".$i[13]."<br>";
echo "<b>magic:</b>".$i[15]."<br>";
echo "<b>cooking:</b>".$i[17]."<br>";
echo "<b>woodcutting:</b>".$i[19]."<br>";
echo "<b>fletching:</b>".$i[21]."<br>";
echo "<b>fishing:</b>".$i[23]."<br>";
echo "<b>firemaking:</b>".$i[25]."<br>";
echo "<b>crafting:</b>".$i[27]."<br>";
echo "<b>smithing:</b>".$i[29]."<br>";
echo "<b>mining:</b>".$i[31]."<br>";
echo "<b>herblore:</b>".$i[33]."<br>";
echo "<b>agility:</b>".$i[35]."<br>";
echo "<b>thieving:</b>".$i[37]."<br>";
echo "<b>slayer:</b>".$i[39]."<br>";
echo "<b>farming:</b>".$i[41]."<br>";
echo "<b>runecrafting:</b>".$i[43]."<br>";
echo "<b>hunter:</b>".$i[45]."<br>";
echo "<b>construction:</b>".$i[47]."<br>";
}
else {
?>
<form method="post" action="test.php">
runescape naam:<br>
<input type="text" name="naam">
<input type="submit" value="bekijk stats" name="verzend">
</form>
<?php
}
?>
</body>
</html>
<head>
<title>higscore lookup</title>
</head>
<body>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$naam = $_POST['naam'];
$bericht = file_get_contents("http://hiscore.runescape.com/index_lite.ws?player=".$naam);
$i = explode(",",$bericht);
echo "<b>attack:</b>".$i[3]."<br>";
echo "<b>defence:</b>".$i[5]."<br>";
echo "<b>strenght:</b>".$i[7]."<br>";
echo "<b>hitpoints:</b>".$i[9]."<br>";
echo "<b>ranged:</b>".$i[11]."<br>";
echo "<b>prayer:</b>".$i[13]."<br>";
echo "<b>magic:</b>".$i[15]."<br>";
echo "<b>cooking:</b>".$i[17]."<br>";
echo "<b>woodcutting:</b>".$i[19]."<br>";
echo "<b>fletching:</b>".$i[21]."<br>";
echo "<b>fishing:</b>".$i[23]."<br>";
echo "<b>firemaking:</b>".$i[25]."<br>";
echo "<b>crafting:</b>".$i[27]."<br>";
echo "<b>smithing:</b>".$i[29]."<br>";
echo "<b>mining:</b>".$i[31]."<br>";
echo "<b>herblore:</b>".$i[33]."<br>";
echo "<b>agility:</b>".$i[35]."<br>";
echo "<b>thieving:</b>".$i[37]."<br>";
echo "<b>slayer:</b>".$i[39]."<br>";
echo "<b>farming:</b>".$i[41]."<br>";
echo "<b>runecrafting:</b>".$i[43]."<br>";
echo "<b>hunter:</b>".$i[45]."<br>";
echo "<b>construction:</b>".$i[47]."<br>";
}
else {
?>
<form method="post" action="test.php">
runescape naam:<br>
<input type="text" name="naam">
<input type="submit" value="bekijk stats" name="verzend">
</form>
<?php
}
?>
</body>
</html>
Dit is natuurlijk de grootste onzin! Het is nutteloos kopieren van variabelen, daar heb je helemaal niets aan. Je kunt toch gewoon die $_POST['naam'] in de file_get_contents() gebruiken?
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
klopt, blance en gezien de post naam, maar 1 keer wordt gebruikt raad ik gewoon $_POST['naam'] aan en niet eerst in een variabele zetten (nuttelose code).
Quote:
Ook als de naam meerdere keren gebruikt wordt blijf je gewoon de POST variabele gebruiken. Pas als er wat aan verandert, ga je een andere variabele gebruiken.... en gezien de post naam, maar 1 keer wordt gebruikt raad ik gewoon $_POST['naam'] aan ...
Dit is bijvoorbeeld wel juist:
Van $sNaam weet je nu zeker dat de inhoud beveiligd is voor gebruik in een SQL query. Van $_POST['naam'] weet je dat dat nooit veilig is...
Blanche schreef op 29.12.2007 12:26:
Das natuurlijk waar... Daar heb ik helemaal niet aan gedacht. Ik dacht er alleen aan dat ie $_POST['naam'] moest gebruiken ipv $naam. Dat had ik ook snel in het script veranderd om te kijken of ie het deed, niet meer verder op geled.