Toon posts:

[php] eigen functie(substr_advanced) httpd op tilt

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb de volgende functie
- hij werkt ongeveer het zelfde als substr.
- mogelijkheid tot scheiden, dan separator opgeven, bijvoorbeeld scheiden bij een pipeline-teken

aanroep: $inhoud = substr_advanced($row[inhoud], 0, 500);
PHP:
1
<? function substr_advanced($input,$start,$length,$separator = " ") {    $wheretostart = $start + $length;    $pre_wheretostart = $wheretostart + 30;    $input = substr($input,0,$pre_wheretostart);    while ($input[$wheretostart] != $separator) {      $wheretostart++;    };    $output = substr($input,$start,$wheretostart);    return $output;  };?>

het probleem is dat als wij deze functie aanroepen de load van httpd heel erg op loopt met als gevolg dat het laden van de pagina zeer traag gaat..

heb ik wat over het hoofd gezien?, hij heeft een hele tijd goed gelopen, kan het ook aan leestekens liggen waardoor hij overhoop gaat? iemand een idee?

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
Stel nou dat $wheretostart al voorbij je laatste $separator is als je begint..

Maw, het lijkt me slim om in die while ook te checken of je al voorbij het einde van je string bent...

Verwijderd

Topicstarter
Op zaterdag 13 juli 2002 11:09 schreef bartvb het volgende:
Stel nou dat $wheretostart al voorbij je laatste $separator is als je begint..

Maw, het lijkt me slim om in die while ook te checken of je al voorbij het einde van je string bent...
hmm dat zekers ja...stom
wat zou deze functie doen als er geen tekst meer zou zijn dat hij moet substr??? dus stel je roept met aan met 0, 500, en de tekst is in totaal maar 300 karakters? wat zou die dan doen? zou het hier aan liggen?

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
Dan blijft hij $wheretostart++; uitvoeren want $input[$wheretostart] wordt dan nooit gelijk aan $separator.


Dus heb je dan een whileloop die op volle snelheid door blijft raggen tot je max_execution_time overschreden wordt.. En tot die tijd trekt je httpd gewoon 100% CPU.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je controleert ook niet of je wheretostart wel binnen het bereik blijft.

Die while zal dus regelmatig oneindig loopen...
Zeker als je string vrij kort is.

Verwijderd

Topicstarter
Op zaterdag 13 juli 2002 11:54 schreef bartvb het volgende:
Dan blijft hij $wheretostart++; uitvoeren want $input[$wheretostart] wordt dan nooit gelijk aan $separator.


Dus heb je dan een whileloop die op volle snelheid door blijft raggen tot je max_execution_time overschreden wordt.. En tot die tijd trekt je httpd gewoon 100% CPU.
thankz, dat zal het idd zijn, ik ga het eens wijzigen...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Waarom gebruik je ipv die while niet gewoon strpos() ?

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 23-07 15:18

Tim

verder kan je ook meteen return aanroepen inplaats van die waarde opslaan in $output, dus

return substr($input,$start,$wheretostart);


Vind ik persoonlijk iets netter

Verwijderd

Sinds wanneer moet er een ; achter een } ?
Denk niet dat het veel uit maakt maar het ziet er stom uit :P

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Op zaterdag 13 juli 2002 15:28 schreef Freez0r het volgende:
Sinds wanneer moet er een ; achter een } ?
Denk niet dat het veel uit maakt maar het ziet er stom uit :P
Doen wel meer mensen hoor...
Ik niet hoor ;)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 13 juli 2002 15:28 schreef Freez0r het volgende:
Sinds wanneer moet er een ; achter een } ?
Denk niet dat het veel uit maakt maar het ziet er stom uit :P
Volgens mij is het syntactisch zelfs officieel fout, maar dat weet ik niet zeker :)

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op zaterdag 13 juli 2002 15:44 schreef eamelink het volgende:
Doen wel meer mensen hoor...
Ik niet hoor ;)
Eikel >:)
Eamelink weet wel wat ik bedoel :P

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Ik gebruik altijd een }; .....

back on topic:

Ben er ff mee bezig nu (op aandringen van Ron), en heb nu dit:
PHP:
1
<?function substr_advanced($input,$start,$length,$separator = " ") {  $wheretostart = $start + $length;  $pre_wheretostart = $wheretostart + 30;  $wheretostart = strpos($input,$separator,$wheretostart);  $output = substr($input,$start,$wheretostart);  return $output;};?>

Iemand op- of aanmerkingen?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Grum
  • Registratie: Juni 2001
  • Niet online
Jah :D (post zo wel ff iets ;))

ok na ff naar je code gekeken te hebben (niet alleen) snap ik der geen HOUT van .. er klopt werkelijk geen ene fuck van wat je wil en doet met je functie :)

Misschien als je eventjes uitlegt wat je precies wilt (met een voorbeeldje erbij) dat ik dan wel wat zinnigs voor je kan betekenen ;)

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Ik heb een tekst, van zeg maar 800 tekens.

Deze tekst wil ik op de voorpagina laten verschijnen, maar ik vind 800 tekens te lang. Daarom moet de tekst worden afgebroken op een X aantal tekens.

Als dit gebeurt midden in een woord, is dit erg lelijk. Daarom deze functie, welke zoekt naar de eerstvolgende spatie(=woordscheiding), en daar op dat punt afkapt.

Het is ook mogelijk om ipv een spatie een ander teken op te geven als scheidingsteken, dit gebeurt dmv de optionele variabele $separator.

$input is de tekst welke ik af wil kappen
$start is het teken waarop ik wil starten (vaak 0, maar kan ook anders zijn)
$length is de lengte van de string die ik terug wil krijgen
$separator is het optionele scheidingsteken. Als ik bijv. hele zinnen wil afkappen, vul ik hier een "." in

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

WordWrap

[edit] hmmz, niet helemaal helemaal niet..!

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Op maandag 15 juli 2002 14:10 schreef thomaske het volgende:
[edit] hmmz, niet helemaal..
;)

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Hij ging dus net weer (bijna) plat op de code hier vlak boven...

Wie helpt me? Ik ben er al een beetje mee aan het stoeien weer (ik heb er al wat extra checks in zitten), maar ik loop nu vast op het HTML-tags gedeelte...
PHP:
1
<?function substr_advanced($input,$start,$length,$separator = " ") {  $input_nohtml = strip_tags($input);  $wheretostart = $start + $length;  if ($wheretostart < strlen($input_nohtml)) {    $wheretostart = strpos($input_nohtml,$separator,$wheretostart);    if ($wheretostart == "") {      $output = $input;    } else {      $output_nohtml = substr($input_nohtml,$start,$wheretostart);// HIER MOET DUS IETS KOMEN WAT DE $input OP HETZELFDE WOORD AFKAPT ALS DE $output_nohtml...      $output = $output_nohtml;    };  } else {    $output = $input;  };  return $output;};?>

Iemand weer op- of aanmerkingen? (en dan graag met onderbouwing, en evt. aanpassingen aub)

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

waarom niet exploden en woorden toevoegen aan de string totdat de lengte van het woord + huidige zin de opgegeven waarde niet overschreidt?
Je zou dan trouwens strtok() + strlen() + while() kunnen gebruiken.

Klaar voor een nieuwe uitdaging.


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Op maandag 15 juli 2002 16:26 schreef chem het volgende:
waarom niet exploden en woorden toevoegen aan de string totdat de lengte van het woord + huidige zin de opgegeven waarde niet overschreidt?
Je zou dan trouwens strtok() + strlen() + while() kunnen gebruiken.
Het is wel fijn als anderen er weer compleet andere, frisse kijk op hebben. Vaak staar je jezelf helemaal blind op een bepaalde oplossingsmethode, en dan blijkt dat het anders veel simpeler kan... ;) ;) Ervaring rules...

Maarre, ff nadenkend: Ik wil dus afkappen in de string zonder tags, en dit doorvertalen naar de string met tags, zodat deze ge-output wordt... Is dit ook weer op die manier op te lossen?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."

Pagina: 1