Toon posts:

[PHP] includes vertragen?

Pagina: 1
Acties:
  • 46 views sinds 30-01-2008

Verwijderd

Topicstarter
Ben weer met mijn site http://www.overzichten.net bezig.

nu is de volgende text 1 kolom

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    <TD VALIGN=TOP ALIGN=CENTER WIDTH=27%>   <!--Begin kolom 1-->
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Boekenwinkels&link=boekenwinkels"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Algemene%20literatuur&link=algemene_literatuur"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Bibliotheken&link=bibliotheken"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Boekbinders&link=boekbinders"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Recensies&link=recensies"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Poëzie&link=poezie"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Uittreksels&link=uittreksels"); ?>
<BR>
<?include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Reisboeken&link=reisboeken"); ?>
<BR>
</TD>  <!--Einde kolom 1-->


Hiervan staan er minimaal 3 op een pagina (op dit moment zijn er 101 pagina's), alleen lijkt het of de laadtijd een heel stuk trager is geworden.

Kan dit komen doordat blok.php nu gemiddeld 30 keer per pagina aangesproken wordt.

Dus als er 20 gebruikers online zijn wordt dit 600 keer aangesproken.

[ Voor 14% gewijzigd door Verwijderd op 07-09-2004 23:04 ]


  • Blaise
  • Registratie: Juni 2001
  • Niet online
PHP openen en sluiten kostte bij mij lokaal ook veel tijd.

zo gaat het sneller:
PHP:
1
2
3
4
5
6
7
8
9
<?php

include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Boekenwinkels&link=boekenwinkels"); 
echo "<BR>"; 
include("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=Algemene%20literatuur&link=algemene_literatuur"); 
echo "<BR>"; 

etc...
?>


En ik kan me voorstellen dat includes ook wel het een en ander aan parsetijd kost. Je moet toch een extern bestand openen.

Verwijderd

Topicstarter
We hebben het ook al op deze manier geprobeerd


PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=A&link=a");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=B&link=b");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=C&link=c");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=D&link=d");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=E&link=e");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=F&link=f");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=G&link=g");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=H&link=h");
include_once("http://www.overzichten.net/_includes/blok.php?&naam=$dbnaam&kop=I&link=i");
?>


en bij deze situatie stond dan de <BR> onderin blok.php

dit leverde echter ook geen snelheidswinst op.

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 21:50
ik neem aan dat je scripts op www.overzichten.net staan. Waarom ga je dan in hemelsnaam via http includen? Dan gaat ie allemaal via de webserver ophalen, geen wonder dat dat lang duurt.

Verwijderd

Topicstarter
Eegee schreef op 07 september 2004 @ 23:15:
ik neem aan dat je scripts op www.overzichten.net staan. Waarom ga je dan in hemelsnaam via http includen? Dan gaat ie allemaal via de webserver ophalen, geen wonder dat dat lang duurt.
Als ik
http://www.overzichten.net/_includes/blok.php

vervang voor

../includes/blok.php krijg ik de volgende foutmelding:


code:
1
2
3
Warning: main(../_includes/blok.php?&naam=asp&kop=Charts%20componenten&link=charts_componenten): failed to open stream: No such file or directory in /var/www/html/asp1/index.php on line 37

Warning: main(): Failed opening '../_includes/blok.php?&naam=asp&kop=Charts%20componenten&link=charts_componenten' for inclusion (include_path='.:/php/includes:/usr/share/php') in /var/www/html/asp1/index.php on line 37

  • Bart B
  • Registratie: Juli 2000
  • Laatst online: 06-04 17:55
waarom gebruik je een URL om te include-en? en kun je niet gewoon een include doen van een file?

als je een include van een URL doet, dan zal je huidige genereer thread stoppen, en zal er een 2e thread die te includen file moeten genereren. je hebt ook nog een 2* zoveel geheugengebruik.

Verder is het include-en via HTTP GEVAARLIJK/VEILIGHEIDSRISICO als je bij anderen gaat zitten includen. Je zorgt er voor dat andere mensen op jou computer code kunnen uitvoeren zonder dat je dat wilt! Gaat het je er alleen om dat je de inhoud van andere pagina's wil opnemen in je eigen pagina, gebruik dan GEEN include maar fopen (scheelt ook tijd omdat het niet geparsed hoeft te worden).


als je een file include, dan zal de huidige thread direct die file includen zonder dat daar een extra thread voor nodig is.

als je include d.m.v. files is het natuurlijk niet mogelijk om gebruik te maken van $_REQUEST parameters via ?a=b&c=d. Dit kun je oplossen door functies te gebruiken die je variabelen meegeeft. Ook zou je gebruik kunnen maken van classes

[ Voor 47% gewijzigd door Bart B op 07-09-2004 23:28 ]


  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 21:50
Verwijderd schreef op 07 september 2004 @ 23:18:
[...]
code:
1
2
3
4
5
6
7
8
9
Warning: main(../_includes/blok.php?&naam=asp&kop=Charts%20componenten&
link=charts_componenten): failed to open
stream: No such file or directory in
/var/www/html/asp1/index.php on line 37

Warning: main(): Failed opening '../_includes/blok.php?&naam=asp&kop=
Charts%20componenten&link=charts_componenten'
for inclusion (include_path='.:/php/includes:/usr/share/php') in
 /var/www/html/asp1/index.php on line 37
Ja, je moet wel effe weten wat het echte pad van de _includes directory is natuurlijk, maar dat is logisch.

En bovendien moet je dan niet meer met GET parameters gaan werken, maar met variabelen om zaken door te geven.

edit: /var/www/html/asp1/_includes ?
../ etc zou opzich ook wel moeten kunnen, 't zal wel aan de parameters liggen dat ie zegt dat ie 't niet kan vinden.

edit2: BartB en djluc zeggen hetzelfde.

[ Voor 32% gewijzigd door Eegee op 07-09-2004 23:31 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 23-05 14:53
lokale include!=GET request

Je opzet is dus niet helemaal handig. Je had eigenlijk met classes of functies moeten werken. Die roep je dan aan met de argumenten.

  • Insano
  • Registratie: Juni 2001
  • Laatst online: 17-02 21:33
Heey,

waarom laat je er niet gewoon een static page van genereren? die je gewoon cached (als html) op de server? en dan eens per uur opnieuw laat aanmaken.

dat lijkt mij veel makkelijker omdat een site als dit toch niet echt 'realtime' en dynamisch hoef te zijn ;)

Verwijderd

Topicstarter
ik ben niet zo thuis in functions, kunnen jullie hier iets mee, of kunnen jullie vertellen waar ik moet beginnen?

code:
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
<TABLE WIDTH=95% CELLPADDING=0 CELLSPACING=0 BORDER=1 BORDERCOLOR=0372AC>
  <TR>
     <TD>
       <TABLE CELLPADDING=0 CELLSPACING=0 border=0 WIDTH=100%>
          <TR>
            <TD class="index_kop"><b><? echo "$kop"; ?></b></TD>
            <TD class="index_kop2">&nbsp;</TD>
           </TR>
       </TABLE>
     </TD>
  </TR>
  <TR>
         <TD class="index_links">
<?
$dbnaam = $naam;
mysql_connect('localhost', 'gebruikernaam', 'wachtwoord');
mysql_select_db("overzichten_net_-_$naam");
$query = "SELECT * FROM $link ORDER BY titel ASC";
$resultaat = mysql_query($query);

while ($obj = mysql_fetch_object($resultaat)) {

$titel=stripslashes($obj->titel);
$id = $obj->id;
$url = $obj->url;
$extra = $obj->extra;
?>
<strong><big>&middot;</big></strong>&nbsp;<a href=http://www.overzichten.net/_includes/get_link.php?&databasenaam=<? echo "$naam"; ?>&id=<? echo "$id"; ?>&categorie=<? echo "$link"; ?> target=_blank><? echo "$titel"; ?></a>&nbsp;&nbsp;<font color=DE1234><b><? echo "$extra"; ?></b></font><BR>
 <? } mysql_close();?>
         </TD>
  </TR>
</TABLE>


Dit is dus de blok.php

[ Voor 23% gewijzigd door Verwijderd op 07-09-2004 23:46 ]


  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 21:50
Kunnen we eigenlijk niks mee, want dat is gewoon een stukje tabel-print code. Dat zal op zich wel werken. Ik zie de relatie met het includen niet.

Ik denk dat je beter eerst de PHP manual over functies kunt naslaan en dat includen even vergeten.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Dat hele stuk in een functie zetten, die als parameters dezelfde waarden heeft die je normaal via de URL meegeeft. Overigens is dat ook meteen een heel stuk veiliger dan wat je nu doet.
* NMe mompelt iets over SQL Injection attacks.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

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
<TD VALIGN=TOP ALIGN=CENTER WIDTH=27%>  <!--Begin kolom 1-->

<?php
    
    // deze array zou je ook uit en database kunnen bouwen
    $items = array(
            array('kop' => 'Boekenwinkels',     'link' => 'boekenwinkels'),
            array('kop' => 'Algemene%20literatuur', 'link' => 'algemene_literatuur'),
            array('kop' => 'Bibliotheken',      'link' => 'bibliotheken'),
            array('kop' => 'Boekbinders',       'link' => 'boekbinders'),
            array('kop' => 'Recensies',     'link' => 'recensies'),
            array('kop' => 'Poëzie',        'link' => 'poezie'),
            array('kop' => 'Uittreksels',       'link' => 'uittreksels'),
            array('kop' => 'Reisboeken',        'link' => 'reisboeken')
    )

    // loop array
    foreach($items as $item) {

        // set vars
        $naam = $dbnaam;
        $kop  = $item['kop'];
        $link = $item['link'];
        echo "<br />\n";

        // include blok
        require_once('_includes/blok.php');

    }
?>

</TD>                   <!--Einde kolom 1-->


(niet getetst op typefouten, maar zou moeten werken ;) )

Ben alleen bang dat de complete opzet van je site niet handig is...
In elk blok maak je een sql connectie (kost ook een hoop) misschien moet je eens kijken naar mysql_pconnect()

offtopic:
en kijk eens naar CSS

[ Voor 25% gewijzigd door Verwijderd op 08-09-2004 00:48 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 23-05 14:53
misschien moet je eens kijken naar mysql_pconnect()
Als je het maar laat hè. Vrijwel nooit is die functie bruikbaar. Verder zijn zaken als CSS in dit geval niet relevant. Waar ik wel op doel is een hele basic opzet:
core.php:
PHP:
1
2
3
$_GET['blok']=X
include(blokX.php)
echo start_blokX(wat argumenten);

blokX.php:
PHP:
1
2
3
4
5
6
7
function start_blokx(argumenten){
  return blokX_zoekgegevens();
}

function blokX_zoekgegevens(){
  return true;
}

[ Voor 6% gewijzigd door djluc op 08-09-2004 14:52 ]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Verwijderd schreef op 07 september 2004 @ 23:35:
ik ben niet zo thuis in functions, kunnen jullie hier iets mee, of kunnen jullie vertellen waar ik moet beginnen?
Ik wil niet vreselijk lullig overkomen, maar als je niet zo thuis bent in functies is het misschien handig eens de PHP.net guide door te lezen en wat tutorials erover te doen. functions zijn toch wel de spil van elke high-level programmeertaal/scripttaal (OOP en component based programming terzijde), en zonder kennis daarvan is het voor ons uiteraard zinloos om jou dingen uit te gaan leggen.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

En daarmee komt deze topic aan het eind. Feitelijk is GoT een forum voor de wat gevorderde computergebruiker. Nou hoef je niet alles te weten om hier te mogen posten, dat zou onzin zijn, maar het gebruik van functies is toch wel de basis van elke imperatieve programmeertaal. Lees de php manual eens door en probeer dat onder de knie te krijgen, want zo kunnen we je natuurlijk op geen enkele wijze helpen (en nee we gaan je niet leren programmeren, daar zijn weer hele andere sites voor :))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.