traag script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bram

bram

28/12/2007 20:18:00
Quote Anchor link
Ik ben nog niet zo heel lang bezig met php en weet er dan ook vrij weinig van af.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
PHP hulp

PHP hulp

22/12/2024 16:04:10
 
Joren de Wit

Joren de Wit

28/12/2007 20:20:00
Quote Anchor link
Het script is waarschijnlijk zo traag door je file_get_contents(). Waarschijnlijk is de server waar je de gegevens vanaf wilt trekken gewoon traag, daar valt niets aan te doen...

ps. Je zou het iets kunnen versnellen door deze regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$bericht
= str_replace(",","|",$bericht);
?>

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
 
Martijn B

Martijn B

28/12/2007 20:21:00
Quote Anchor link
Ik denk dat het aan regel 3 ligt, misschien moet je de resultaten cachen.

Dus ergens opslaan en na een x aantal seconden verversen.
 
Bram

bram

28/12/2007 20:28:00
Quote Anchor link
zo als ik al zei weet ik nog niet zo heel erg veel van php,
kun je mss uitleggen hoe ik dat moet doen of wat 'cachen' is.
Me doorverwijzen naar een tutorial ofzo is ook goed ;)
 
Wouter K

Wouter K

28/12/2007 20:39:00
Quote Anchor link
Je scipt draait niet :)

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 =)
 
Martijn B

Martijn B

28/12/2007 20:52:00
Quote Anchor link
Hierbij een voorbeeld van een cache script.
Probeer het maar is uit...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>
 
Joren de Wit

Joren de Wit

28/12/2007 20:58:00
Quote Anchor link
@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...
 
Martijn B

Martijn B

28/12/2007 21:01:00
Quote Anchor link
Oooo, ik dacht dat er steeds hetzelfde van de server werd gehaald.

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
 

28/12/2007 21:50:00
Quote Anchor link
Ik vind dat scriptje van jou nogal vaag. Ik heb het gedraait zoals jij het heb gepost. Ik krijg dan het volgende:
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....
Gewijzigd op 01/01/1970 01:00:00 door
 
Bram

bram

28/12/2007 23:06:00
Quote Anchor link
tja, dat ouderwets komt mss doordat ik het aan het leren ben uit een boek, en dat is inmiddels al een paar jaar oud,...
Maar hoe bedoel je eigenlijk ouderwets?
 

28/12/2007 23:15:00
Quote Anchor link
Nou dingen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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">
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php // Kleurtjes
echo "<b>attack:</b>".$attack."<br>";    
# ook hetvolgende zijn:
echo "<b>attack:</b>".$i[3]."<br>";    
?>

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.
Gewijzigd op 01/01/1970 01:00:00 door
 
Bram

bram

29/12/2007 12:19:00
Quote Anchor link
ok, bedankt voor de tips. Mijn script ziet er nu zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<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>
 
Joren de Wit

Joren de Wit

29/12/2007 12:26:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
# Verder moet je dit nog toevoegen:
$naam = $_POST['naam'];
?>

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
 
CB2thephp

CB2thephp

29/12/2007 12:33:00
Quote Anchor link
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).
 
Joren de Wit

Joren de Wit

29/12/2007 12:39:00
Quote Anchor link
Quote:
... en gezien de post naam, maar 1 keer wordt gebruikt raad ik gewoon $_POST['naam'] aan ...
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.

Dit is bijvoorbeeld wel juist:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sNaam
= mysql_real_escape_string($_POST['naam']);
?>

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...
 

29/12/2007 13:22:00
Quote Anchor link
Blanche schreef op 29.12.2007 12:26:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
# Verder moet je dit nog toevoegen:
$naam = $_POST['naam'];
?>

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?

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.