[PHP] Globale variabele die in meerdere "sessies" bestaat

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kippetje01
  • Registratie: November 2001
  • Laatst online: 18-08 14:21
Ik zit met een probleempje, ik ben een php script aan het maken wat "oneindig" loopt (iedere seconde d.m.v. een sleep(1);) en ik wil met behulp van een ander script de executie laten eindigen door de while conditie niet meer te laten kloppen (of gewoon een break o.i.d.)

ik zou natuurlijk een database systeem (kan ook een text file zijn uiteraard) kunnen gebruiken om die variabele in op te slaan en die iedere keer tijdens de uitvoer van het script te controleren.
Nu lijkt mij dit enorm overbodig en ik zoek een oplossing die meer middels een soort global variabele werkt omdat dit toch een stuk minder cpu cycles vreet.

Is dit uberhaupt wel mogelijk? of zijn er sowiesow veel handigere methoden?

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij is dat niet mogelijk wat je nu vraagt.

[ Voor 73% gewijzigd door Verwijderd op 26-11-2004 17:01 ]


Acties:
  • 0 Henk 'm!

  • kippetje01
  • Registratie: November 2001
  • Laatst online: 18-08 14:21
Da's idd wat ik zeg met het database systeem, maar dat lijkt me dus niet de meest ideale oplossing.

[ Voor 43% gewijzigd door kippetje01 op 26-11-2004 17:01 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik las het te laat, sorry.

Acties:
  • 0 Henk 'm!

Verwijderd

Ligt er een beetje aan hoe je het wil laten eindigen. Ik bedoel is de waarde steeds het zelfde waarop hij moet stoppen of als ie een bepaald punt bereikt wat variable is ?

Dan krijg je dus een sortemet search functie die bij iedere loop een eval moet doen van de waarde die uitgevoerd wordt tegen een waarde die tot stop moet leiden.

Maar hoe er rekeing mee dat zo'n loop steeds meer geheugen gaat gebruiken net als een while loop die verkeerd wordt uitgevoerd omdat de resources pas vrij worden gegeven op het moment dat het script eindigt tenzij je je een ob_flush geeft naar iedere loop volgens mij.

Maar dat is ongeveer het idee.

Acties:
  • 0 Henk 'm!

  • kippetje01
  • Registratie: November 2001
  • Laatst online: 18-08 14:21
Het is heel simpel een 1/0 variabele dus een true/false.
Waar het me om gaat is puur dat ik vanuit een ander script een variabele kan veranderen die uitgelezen wordt door het originele script.
Zoals eerder gezegd kan dat d.m.v. een text file maar dit leek mij vrij omslachtig

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Wat je dus bedoelt is twee script het zelde geheugen adres laten lezen/schrijven als ik het goed begrijp.

Voorzover ik weet is dat niet mogelijk binnen PHP. ASP kan dat overigens wel.

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024

CRiMiNaL

Witlof ^^

Sinds PHP 5 kan dit wel. Hierin zitten OO features en die laten je ook de variabelen uit een andere class gebruiken. Als is het met een omweg.

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

Verwijderd

In PHP4 (en dat draaien de meeste servers nog steeds) is het, zoals eerder ook gezegd, niet mogelijk een stuk geheugen te delen. Wat ik zou doen is het in een bestand zetten die er zo uitziet:


PHP:
1
<?php $stoppen = false; ?>


En als hij dan moet stoppen dan maak je er met een ander script true van. Dan kan je deze gewoon includen in dat eindeloze script, dan vreet echt niet zoveel van je cpu / hd. Voor zover ik me kan bedenken is dat de snelste optie voor PHP versies lager dan versie 5. (sneller dan via een database)

[ Voor 5% gewijzigd door Verwijderd op 27-11-2004 19:52 ]


Acties:
  • 0 Henk 'm!

  • jpwaag
  • Registratie: September 2003
  • Laatst online: 16:05
Ik vraag me af waar je zo'n eindeloos script voor gebruikt, maar dat terzijde, de lus als volgt maken:
PHP:
1
2
3
4
5
6
<?php
while(file_exists("aanUit.tmp")){
  instructies;
  sleep(1);
}
?>

en dan met het andere bestand gewoon het bestand aanUit.tmp unlinken. dan hoef je er niet helemaal in te gaan kijken enzo.

Acties:
  • 0 Henk 'm!

  • rig0r
  • Registratie: Juli 2001
  • Laatst online: 11-03 16:08

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Je kunt ook nog proberen te kloten met signals...

Bedenk trouwens dat PHP4 geheugen lekt als een gek, waardoor een daemon die meer dan een uur draait vaak al vier keer zoveel geheugen gebruikt als toen 'ie startte.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • kippetje01
  • Registratie: November 2001
  • Laatst online: 18-08 14:21
Ja dat laatste daar was ik me van bewust, ik kies nu dan ook voor een andere methode.

Ik zal trouwens even uitleggen wat ik precies doe voor de nieuwsgierigen onder ons ;-) ik zet een telnet sessie op met een device en daar voer ik een paar commando's op uit, nu is dat voor dit device een redelijk zware belasting als dat 20* per seconde gaat gebeuren dus dat wil ik oplossen met zeg maar een soort cache, een centraal script dat maximaal 1 maal per seconde draait en dan een html file aanmaakt die uitgelezen wordt.

Wat ik nu ga doen is in die html file mijn php includen binnen dat stukje php check ik dan of het script mag runnen (eigenlijk doe ik dat nog voor de include, beetje kansloos om te includen als het script niet mag draaien ;-) ) als dat zo is dan gaat het script draaien, hij zet dan een text file met daar in dus een van de eerder beschreven mogelijkheden en na een sleep van een seconde en dan geeft hij het script weer vrij.

Volgens mij moet dat een redelijk sluitende oplossing zijn die en een endless loop voorkomt en tegelijkertijd zorgt dat het script max 1 maal per seconde wordt uitgevoerd.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom wil je dit op zo'n ranzige manier doen dan?

PHP:
1
2
3
4
while (true) {
  sleep(1);
  TelnetGedoeDoen();
}

Dat kan toch ook gewoon? :?

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


Acties:
  • 0 Henk 'm!

  • kippetje01
  • Registratie: November 2001
  • Laatst online: 18-08 14:21
Omdat je die file dus 100keer zou kunnen aanroepen en je dan 100 requests per seconde gaat doen, het moge duidelijk zijn dat dat niet de bedoeling is. Als het een project voor mij was zou ik het zo doen ja, maar dit gaat gebruikt worden door derden dus dan kun je maar beter zorgen dat het niet fout kan gaan.
Pagina: 1