Dankje.quote:Op dinsdag 6 september 2011 11:23 schreef Chandler het volgende:
Waarom gebruik je niet de uitleg van php.net?
http://nl.php.net/array
http://nl.php.net/while
http://nl.php.net/foreach
het zou mooier zijn om het zo te doen!
[ code verwijderd ]
http://nl.php.net/for
http://nl.php.net/mysql_num_rows
ps... als je een query opbouwt plaats je die in $sql
als je een query uitvoert noem je die in het algemeen $query (is logischer)
Fijn dat je alles direct zo mooi onderbouwtquote:
Het kan wel nuttig zijn in situaties, die ook leesbaarheid van code bevorderd. Maar das niet in deze situatie zo iig.quote:
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.quote:
Als je het OO programmeert kun je er bijna niet omheen. Je voert eerst een query uit en deze geeft een datatable op en met deze datatable ga je de output opbouwen. Dan ram je dus eerst alle query informatie in een class (mogelijk de class nog in een collectie) en dan ga je er pas mee werken.quote:Op dinsdag 6 september 2011 14:35 schreef Catbert het volgende:
[..]
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.quote:Op dinsdag 6 september 2011 14:35 schreef Catbert het volgende:
[..]
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Dan nog hoef je helemaal niet perse eerst alle classes op te bouwen en ze daarna te gebruiken, dat kun je prima per row doen. Als het kleine sets data zijn is het zeker geen issue, maar bij grote recordsets wel, dan wil je die echt niet eerst allemaal in 't geheugen opbouwen.quote:Op dinsdag 6 september 2011 14:40 schreef Pakspul het volgende:
Als je het OO programmeert kun je er bijna niet omheen. Je voert eerst een query uit en deze geeft een datatable op en met deze datatable ga je de output opbouwen. Dan ram je dus eerst alle query informatie in een class (mogelijk de class nog in een collectie) en dan ga je er pas mee werken.
Wat bedoel je? Stel elke row is een kb aan data, en je hebt 1000 rows. Het maakt nogal uit of je script 1MB aan geheugen moet alloceren of max 1kb. Vergeet niet dat je zo 100 requests tegelijkertijd af te handelen kunt hebben.quote:Op dinsdag 6 september 2011 14:43 schreef GlowMouse het volgende:
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Daar ben ik het dus niet geheel mee eens! juist door overzichtelijk te scripten (programmeren wil ik het niet noemen...) kun je juist geheugen besparen doordat je sneller je 'foutjes' ziet.quote:Op dinsdag 6 september 2011 14:43 schreef GlowMouse het volgende:
[..]
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Sowieso is het gewoon dom om je zulke verkeerde dingen aan te leren als in een keer alles in een grote array plempen. Dat schaalt voor geen meter.quote:Op dinsdag 6 september 2011 14:47 schreef Chandler het volgende:
Daar ben ik het dus niet geheel mee eens! juist door overzichtelijk te scripten (programmeren wil ik het niet noemen...) kun je juist geheugen besparen doordat je sneller je 'foutjes' ziet.
Daarom moet je eerst berg werk investeren om je code zo te krijgen dat je dataset dynamisch kunt krijgen. Zelf hoef ik geen query's meer te schrijven. Alleen even de classes aanmaken en die daar heb ik ook een script voor geschreven die dat doet voor mij, dus dat is gewoon een druk op de knopquote:Op dinsdag 6 september 2011 14:46 schreef Catbert het volgende:
[..]
Dan nog hoef je helemaal niet perse eerst alle classes op te bouwen en ze daarna te gebruiken, dat kun je prima per row doen. Als het kleine sets data zijn is het zeker geen issue, maar bij grote recordsets wel, dan wil je die echt niet eerst allemaal in 't geheugen opbouwen.
Dat ben ik met je eens, vandaar mijn voorbeeldquote:Op dinsdag 6 september 2011 14:49 schreef Catbert het volgende:
[..]
Sowieso is het gewoon dom om je zulke verkeerde dingen aan te leren als in een keer alles in een grote array plempen. Dat schaalt voor geen meter.
De tijd dat een server net 100 MB geheugen tekort komt ligt alweer een decennium achter ons. Je redenering klopt ook niet: al voordat mysql_fetch_assoc wordt aangeroepen, zit de hele resultset in het geheugen van de webserver (of in het geheugen van de dbserver bij een unbuffered query).quote:Op dinsdag 6 september 2011 14:46 schreef Catbert het volgende:
[..]
Wat bedoel je? Stel elke row is een kb aan data, en je hebt 1000 rows. Het maakt nogal uit of je script 1MB aan geheugen moet alloceren of max 1kb. Vergeet niet dat je zo 100 requests tegelijkertijd af te handelen kunt hebben.
quote:Op dinsdag 6 september 2011 14:49 schreef Tijn het volgende:
Twee loops is nergens voor nodig, lijkt mij.
Dat is voor mij inderdaad de reden om alles in 1 array te stoppen. En dan heb je ook 2 loopjes; 1 om de data op te halen en 1 in de template om het te presenteren.quote:Op dinsdag 6 september 2011 14:56 schreef GlowMouse het volgende:
Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
Het is gewoon niet waar dat die hele resultset per definitie al in 't geheugen zit. Databaseservers zijn daar veel slimmer in. Als 2 queries dezelfde table benaderen hoeft deze niet 2 keer volledig in 't geheugen te zitten.quote:Op dinsdag 6 september 2011 14:56 schreef GlowMouse het volgende:
De tijd dat een server net 100 MB geheugen tekort komt ligt alweer een decennium achter ons. Je redenering klopt ook niet: al voordat mysql_fetch_assoc wordt aangeroepen, zit de hele resultset in het geheugen van de webserver (of in het geheugen van de dbserver bij een unbuffered query).
Zal best, maar als je appserver onderuit gaat omdat je koste wat 't kost je code 'overzichtelijk' moet houden doe je echt iets fout. En met een fatsoenlijke template engine kun je prima je code en layout gescheiden houden zonder eerst volledige query results in 't geheugen te moeten laden.quote:Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
Beide zaken zijn met template engines prima te combineren. Jezelf aanleren alles eerst in 't geheugen te laden en er daarna wat mee te gaan doen is gewoon onverstandig.quote:Op dinsdag 6 september 2011 15:05 schreef GlowMouse het volgende:
Leesvoer: http://gathering.tweakers.net/forum/list_messages/1105254
Nog meer: http://www.ukuug.org/events/linux2002/papers/html/php/#section_2
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?quote:Op dinsdag 6 september 2011 15:13 schreef Catbert het volgende:
Beide zaken zijn met template engines prima te combineren.
Weg te schrijven op de HDD en deze haalt de template engine weer op en zal deze echoen?quote:Op dinsdag 6 september 2011 15:16 schreef Tijn het volgende:
[..]
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Als jij twee queries uitvoert op MySQL dan wordt er twee keer geheugen gealloceerd voor de resultset.quote:Op dinsdag 6 september 2011 15:13 schreef Catbert het volgende:
[..]
Het is gewoon niet waar dat die hele resultset per definitie al in 't geheugen zit. Databaseservers zijn daar veel slimmer in. Als 2 queries dezelfde table benaderen hoeft deze niet 2 keer volledig in 't geheugen te zitten.
Door de template gewoon iedere keer de row te voeren in plaats van de hele resultset? Zelf doe ik al tijden niks meer met PHP maar in Java met bijvoorbeeld Spring of JSF is het prima mogelijk om data en layout volledig te scheiden maar wel een pagina per row op te bouwen.quote:Op dinsdag 6 september 2011 15:16 schreef Tijn het volgende:
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Ik weet niet hoe MySQL er mee omgaat maar in MSSQL gaat 'ie met 2 parallelle queries de intersectie van de data maar 1 keer in 't geheugen houden. Je hebt uiteindelijk eigenlijk alleen de rowids van de desbetreffende tables maar nodig, de rest van de data kun je aan de hand daarvan op de cursor doorgeven.quote:Op dinsdag 6 september 2011 15:24 schreef GlowMouse het volgende:
Als jij twee queries uitvoert op MySQL dan wordt er twee keer geheugen gealloceerd voor de resultset.
Het is wel waar dat wanneer je zelf een array vult, er meer geheugen nodig is om die op te slaan omdat het opslaan minder efficiënt gebeurt.
Maar je template engine moet al die data toch gevoerd krijgen voordat 'ie kan gaan beginnen met weergeven ervan? Wanneer je 'em de tweede row voert, waar slaat 'ie de eerste dan op als dat niet in het geheugen is?quote:Op dinsdag 6 september 2011 15:33 schreef Catbert het volgende:
[..]
Door de template gewoon iedere keer de row te voeren in plaats van de hele resultset?
Hij kan prima een row renderen, net zoals je dat "met de hand" doet.quote:Op dinsdag 6 september 2011 15:37 schreef Tijn het volgende:
Maar je template engine moet al die data toch gevoerd krijgen voordat 'ie kan gaan beginnen met weergeven ervan? Wanneer je 'em de tweede row voert, waar slaat 'ie de eerste dan op als dat niet in het geheugen is?
Als een bepaalde tabel veel benaderd wordt gaat 'ie data cachen. Als beide resultsets de row behorende bij rowid X benaderen wordt die data gewoon via een lookup beschikbaar gemaakt. Als je naar een query explain kijkt zie je dat 'ie vaak joins e.d. eerst afhandelt, en pas daarna de data er bij gaat zoeken. Die data komt dan of van disk, of uit de cache. Zowel MSSQL als Oracle doen dat. Of MySQL dat ook doet weet ik niet, maar daar hoef ik gelukkig niet mee te werken.quote:Op dinsdag 6 september 2011 15:36 schreef GlowMouse het volgende:
Ik geloof er helemaal niks van, dan zou MSSQL eerst moeten bepalen of resultsets wel gelijk zijn. Dat is met het oog op MVCC vrij inefficient.
Da's een ander verhaal. Ik zei in het begin al dat dit een issue is bij grote resultsets. Nu hebben we het bovendien over randzaken. Punt is dat het m.i. verkeerd is jezelf aan te leren iedere keer eerst alles in geheugen te lezen omdat het in veel gevallen relatief inefficient is. Dat je het doet op plekken waar het niet inefficient is, of soms juist efficienter; prima. Het gaat mij puur om wat een beginner zichzelf aanleert. Of in ieder geval dat die beginner weet waar hij mee bezig is.quote:Op dinsdag 6 september 2011 15:54 schreef GlowMouse het volgende:
Raar verhaal, bij een query met een aggregated functie heb je het niet meer over rows in een tabel tenzij je de resultset als tabel beschouwt en dan de overhead wilt van het testen op gelijkheid. En heb je dan elke keer een roundtrip als je een rij ophaalt?
| 1 2 3 4 5 6 | cijfer | weging | totaal 6,5 1 6,5 7,0 3 21 totaal: 4 27,5 totaal / weging = uiteindelijk cijfer |
| 1 2 3 4 | $query = mysql_query("SELECT SUM(weging) as wtotal, SUM(cijfer * weging) as itotaal, SUM(weging / itotaal) as totaal FROM cijfers"); |
En de laatste SUM weglaten.quote:Op donderdag 8 september 2011 12:16 schreef Tegan het volgende:
Je moet ook wtotal gebruiken en niet weging.
| 1 2 3 4 5 6 7 | <?php require_once("pclzip.lib.php"); $zip = new PclZip("uploads/".$filename); if($zip->extract() == 0) die("Error : " . $zip->errorInfo(true)); ?> |
Hoever ben je zelf al gekomen met debuggen? Error_reporting(E_ALL); al keertje aangepleurd?quote:Op donderdag 8 september 2011 13:04 schreef MrNiles het volgende:
probeer een file te unzippen maar werkt niet...krijg ook geen foutmelding wat er fout zou kunnen gaan. Path is goed, daar geeft ie wel een foutmelding op als de niet komt
[ code verwijderd ]
Even mijn glazen bol zoeken om te zien hoe jij je server hebt ingesteld, BRB!quote:Op donderdag 8 september 2011 13:25 schreef MrNiles het volgende:
volgende n00b vraag dan
wat is de max size van een te uploaden zip
phpinfo();quote:Op donderdag 8 september 2011 13:25 schreef MrNiles het volgende:
volgende n00b vraag dan
wat is de max size van een te uploaden zip
30files in zip, totaal 2,01MB = geen probleem
40files in zip, totaal 2,45MB = Missing archive file 'uploads/40f245.zip'
het bestand wordt niet geupload
ligt dat aan de grootte van het bestand?
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden isquote:Op donderdag 8 september 2011 15:04 schreef KomtTijd... het volgende:
[..]
Even mijn glazen bol zoeken om te zien hoe jij je server hebt ingesteld, BRB!
Als je na de POST een print_r van $_FILES doet, staat het bestand er dan wel?quote:Op donderdag 8 september 2011 15:24 schreef MrNiles het volgende:
[..]
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is
thanx remi
het is dus
upload_max_filesize 10M
blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
idd dat laatstequote:Op donderdag 8 september 2011 15:31 schreef remi1986 het volgende:
[..]
Als je na de POST een print_r van $_FILES doet, staat het bestand er dan wel?
Zo ja:
Pak je het bestand direct vanuit de tmp map uit? Of verplaats je het bestand eerst naar een "vaste" locatie op de server? (move_uploaded_file)
Ik zou dat laatste doen, en dan het bestand uitpakken.
Ondanks dat het al opgelost is een opmerking, een verkeerd ingestelde max_post_size wil ook wel eens voor problemen zorgen. Als die bijvoorbeeld op 2M staat kun je je max filesize wel op een terabyte zetten, als je het niet naar je server toe mag posten houdt het op.quote:Op donderdag 8 september 2011 15:24 schreef MrNiles het volgende:
[..]
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is
thanx remi
het is dus
upload_max_filesize 10M
blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
lijkt mij dan een rechtenprobleem?quote:Op vrijdag 9 september 2011 09:26 schreef Chandler het volgende:
Ik heb het zelfde gezeur met een website van een klant, uploaden gaat goed (move_uploaded_file geeft geen error en zegt dat het bestand is 'gemoved') maar als ik dan op de volgende pagina kom en in de directory kijk waar het bestand zou moeten staan staat er niets!!!!
Hoster heeft wel meer vage problemen dus gaan we eerst een verhuizen en het dan nog eens proberen! (toch geen pcextreme hé)
| 1 2 3 | <?php echo '<img src=".$album."/thumbs/klein_".$files[$rand]. "title=".$afbeelding['basename'] ."alt=".$afbeelding['basename']. "class='thumbs' "> '; ?> |
quote:Op vrijdag 9 september 2011 20:21 schreef MrNiles het volgende:
bij deze
[ code verwijderd ]
krijg ik
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'
ik zie m niet..iemand anders wel?
| 1 2 3 4 5 6 7 8 9 10 | <?php printf('<img src="%s" title="%s" alt="%s" class="%s">', array( $album.'/thumbs/klein_'.$files[$rand] , $afbeelding['basename'] , $afbeelding['basename'] , 'thumbs' )); ?> |
dat heb ik dus gedaan..maar ik ben ff de draad kwijtquote:Op vrijdag 9 september 2011 20:24 schreef Tegan het volgende:
Lekker inconsequent gebruik van ' en ". Loop die allemaal maar eens na.
Hou eens op met developen in notepad.exe.quote:Op vrijdag 9 september 2011 20:21 schreef MrNiles het volgende:
bij deze
[ code verwijderd ]
krijg ik
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'
ik zie m niet..iemand anders wel?
In HTML tags altijd "" gebruiken, en strings met daarin HTML tags moeten dus tussen '' staan.quote:Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:
[..]
dat heb ik dus gedaan..maar ik ben ff de draad kwijt
sorryquote:Op vrijdag 9 september 2011 20:29 schreef KomtTijd... het volgende:
[..]
Hou eens op met developen in notepad.exe.
Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluitenquote:Op vrijdag 9 september 2011 20:33 schreef KomtTijd... het volgende:
SRSLY?
Ik dacht ik maak een grapje
Probeer geany of notepad++. Voor PHP vind ik geany relaxter.
Je kunt ook offline programmeren. Sterker nog, dat zou je moeten doen. En pas online gooien als je jezelf hebt overtuigd dat het wel gaat werken.quote:Op vrijdag 9 september 2011 20:37 schreef MrNiles het volgende:
[..]
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
NP++ laat zich heel makkelijk portable installeren. Geany is volgens mij ook een portable variant van.quote:Op vrijdag 9 september 2011 20:37 schreef MrNiles het volgende:
[..]
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
thanx voor de tipsquote:Op vrijdag 9 september 2011 20:44 schreef KomtTijd... het volgende:
[..]
NP++ laat zich heel makkelijk portable installeren. Geany is volgens mij ook een portable variant van.
en anders: http://www.cdolivet.com/editarea/
http://nl3.php.net/manual/en/function.highlight-string.phpquote:Op vrijdag 9 september 2011 20:29 schreef KomtTijd... het volgende:
[..]
Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
Voor het geval je er nog niet uit bent.quote:Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:
[..]
dat heb ik dus gedaan..maar ik ben ff de draad kwijt
| 1 2 3 | <?php echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> '; ?> |
het is min of meer geluktquote:Op zaterdag 10 september 2011 02:10 schreef boem-dikkie het volgende:
[..]
Voor het geval je er nog niet uit bent.
".$album."/thumbs/klein_".$files[$rand]. "
Kijk daar nog eens goed naar.
Je sluit je stukje php met " waardoor /thumbs/klein_ nergens meer tussen staat.
Dit moet wel werken denk ik.
[ code verwijderd ]
ik vraag er toch ook niet om, leg alleen even uit waar ik mee bezig benquote:Op zondag 11 september 2011 21:03 schreef Tegan het volgende:
Wij kunnen het wel weer voorkauwen maar wellicht kun je het hele project beter uitbesteden.
Wat voor aangepast script wat erbij stond?quote:Op zondag 11 september 2011 20:58 schreef MrNiles het volgende:
[..]
het is min of meer gelukt
alle foutmeldingen zijn verdwenen maar het script doet niet wat ik had gehoopt
http://www.phphulp.nl/php(...)h-fotoalbum-v3/1491/ is een fotoalbum die vanuit mapjes zelf "sub"albums aanmaakt
werkt prima
maar
op de voorbeeld pagina is het de overzichtspagina met linkjes EN plaatjes. In het script van phphulp heb ik alleen linkjes
Ik had gehoopt met een aangepast script wat erbij stond dit te kunnen maken..maar helaas..
ook gaat mijn php kennis lang niet vergenoeg om zoiets zelf te maken
Wat is GD? (edit: GD support = enabled)quote:Op zondag 11 september 2011 21:16 schreef KomtTijd... het volgende:
Heb je wellicht GD niet geinstalleerd staan? [/wilde suggestie]
En waarom maak je niet gewoon lekker een picasa-album ofzo?
| 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 | <?php // Nieuw Nieuw Nieuw Nieuw // $exts = 'jpg jpeg png gif'; $files = array(); $i = - 1; if ('' == $album) $album = './'; $handle = opendir($album); $exts = explode(' ', $exts); while (false !== ($file = readdir($handle))) { foreach ($exts as $ext) { if (preg_match('/\.' . $ext . '$/i', $file, $test)) { $files[] = $file; ++$i; } } } closedir($handle); mt_srand((double) microtime() * 1000000); $rand = mt_rand(0, $i); // Eind Eind Eind Eind Eind // echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> '; echo '<a href='?pagina=fotoalbum&album=' . $album . ''>' . ucfirst(basename($album)) . '</a><br><br />' . PHP_EOL; ?> |
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |