Toon posts:

[PHP] Flat-file database idee

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van kleine scriptjes om wat PHP te leren. En ik ga deze scriptjes ook op hotscript zetten zodat ze niet waardeloos zijn, maar omdat ik ineens zin had om een flat-file database te gebruiken begon ik me af te vragen hoe ik dat zal gaan aanpakken.

Ik ken nu verschillende manieren. De eerste is met fgetcsv() ofzo. Die maakt regels als "username","password" enz. Ik vond dit niet echt fijn werken ivm met variabele hoeveelheid data.

Een andere manier was met list($user,$pass) = split("[|]",$data) en dat leek best goed, maar wanneer je in een poll unlimitid answers wilt supporten viel ook dit af.

Toen begon ik zelf wat te bedenken :) en kwam met 2 nieuwe ideeen. De eerste was met preg_replace, maar dat is denk ik een zeer trage methode. Je krijgt dan bijv. 10x deze regel:

$this->database=@preg_replace("/\\[$id\]((.|\n)*?)\|((.|\n)*?)\\[$id\]/ise", "poll_id('\\1','\\3')", $this->database, "1");

Dit leek me niet zo'n snelle methode ;)

En toen kwam ik op het idee om direct variabelen weg te schrijven. Dus dat je een php file als database gebruikt. Zoiets dus:
PHP:
1
<?$poll[1][question]=("Blaat");$poll[1][answers][1]=("ja");$poll[1][results][1]=("10");$poll[1][answers][2]=("nee");$poll[1][results][2]=("25");?>

Dit is snel met opvragen dacht ik alleen weet ik niet of het verstandig is. Wat zouden jullie doen voor een poll?

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
om Grum even voor te zijn: *D

$poll[1][answers] moet worden $poll[1]["answers"] omdat answers een string is.

Verder zou ik een 'echte' database gebruiken, of heb je dat niet?

Als je alleen perse flat wilt gebruiken is dat ondeste wat je hebt wel een idee ja...

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Verwijderd

Topicstarter
Ik heb wel een database tot mijn beschikking, maar het leek me wel een uitdaging om eens iets te maken zonder MySQL, omdat het toch een nutteloos script is.

En waarom die quotes? Zonder werkt het ook.

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Op maandag 08 april 2002 11:25 schreef [C] het volgende:
En waarom die quotes? Zonder werkt het ook.
Het werkt wel, maar het is niet netjes.
Bij error_reporting(E_ALL) krijg je dan een warning

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Verwijderd

Als je een vaste veldgrootte vaststeld, en dan je data in tekst bestanden gooit, kun je die best snel manipuleren als je het goed aanpakt. Je kunt dan snel data opzoeken en inline aanpassen zonder het hele bestand opnieuw te hoeven herschrijven.

Verwijderd

Topicstarter
Je bedoelt dus per poll een nieuw bestandje aanmaken en per regel (?) de data opslaan?

En hoe weet je dan hoeveel van die bestanden/polls er zijn? Sorry ik snap niet helemaal wat je bedoelt met veldgrootte in een file.

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Op maandag 08 april 2002 11:37 schreef [C] het volgende:

En hoe weet je dan hoeveel van die bestanden/polls er zijn?
Gewoon de bestanden in die directory optellen, dmv PHP functies :)

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Verwijderd

Op maandag 08 april 2002 11:37 schreef [C] het volgende:
Je bedoelt dus per poll een nieuw bestandje aanmaken en per regel (?) de data opslaan?
Kan, hoeft niet.
En hoe weet je dan hoeveel van die bestanden/polls er zijn? Sorry ik snap niet helemaal wat je bedoelt met veldgrootte in een file.
Stel je hebt dit bestand polls.data:
code:
1
2
Ben je man of vrouw?     5  
Dik of dun?       120

De veldgrootte van de vraag is hier 25 tekens lang, de veldgrootte van het totaal aantal votes is hier 7. Nu kun je makkelijk berekenen waar het tweede record begint etc. Iets dergelijks doe je voor elke poll (De antwoorden + het aantal votes).

Verwijderd

Topicstarter
Ok ik snap hoe je het wilt opslaan alleen hoe vraag je dit op? Met welke functies?

Verwijderd

Op maandag 08 april 2002 11:59 schreef [C] het volgende:
Ok ik snap hoe je het wilt opslaan alleen hoe vraag je dit op? Met welke functies?
fread en substr bijvoorbeeld.

Verwijderd

Topicstarter
En heeft deze manier ook een goede performance?

Verwijderd

Op maandag 08 april 2002 12:05 schreef [C] het volgende:
En heeft deze manier ook een goede performance?
Ik zou zeggen van wel (stuk beter dan met de regexes iig).

  • beany
  • Registratie: Juni 2001
  • Laatst online: 19:30

beany

Meeheheheheh

Werk met grootte's van records, maak string 0 terminated, van getallen weet je de grootte(integer is 2 of 4 bytes).

Werk met buffers, dat verhoogt de snelheid aanzienlijk.

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Kijk ook eens naar fgetcvs

Verwijderd

Topicstarter
Op maandag 08 april 2002 13:44 schreef freak007 het volgende:
Kijk ook eens naar fgetcvs
Die had ik al eens nader bekeken, maar kon geen oplossing vinden voor het probleem als het aantal antwoorden per poll verschillend is.
Pagina: 1