[PHP] resource id opnieuw gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Eindewege
  • Registratie: Oktober 2001
  • Laatst online: 15-05-2023

Eindewege

Het beste dorp van nederland

Topicstarter
Ik ben een script aan het schrijven wat nogal lang uitgevoerd wordt. In dit script wordt elke keer een stream geopend. Wanneer deze stream gesloten wordt zou je zeggen dat 't geheugen weer vrijgemaakt wordt, maar er wordt wel elke keer een nieuwe resource id gebruikt.

Nu is mijn vraag of het kwaad kan dat de resource id # oploopt tot duizenden, of hoe ik dat kan voorkomen.

Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
while(1)
{
$sock = fopen("test.txt","r");

echo $sock."\n";

fclose($sock);
unset($sock);
}


uitvoer is:
Resource id #5
Resource id #6
Resource id #..1000

(Kan ie niet gewoon elke keer nr 5 hergebruiken?)

Van Zeeland dan misschien ??


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

ID's zijn per definitie uniek. ;)

Verder kun je heel eenvoudig kijken of het kwaad kan: maak 10000 van die resources aan, en kijk naar je geheugengebruik. :)

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

  • Eindewege
  • Registratie: Oktober 2001
  • Laatst online: 15-05-2023

Eindewege

Het beste dorp van nederland

Topicstarter
Gedaan, scheelt iets van 1mb op 100000 id's (niet dat t gauw zover zal komen).

Ik wilde maar weten of er geen vage errors bij 65000 zouden komen ofzo, blijkbaar niet

Overigens is er ook zoiets dergelijks bij arrays, haal nr 2 weg, en zet er een waarde bij, komt ie op 3.
code:
1
2
3
4
arraynaam("text1","text2");
unset(arraynaam[1]);
array_push(arraynaam, "text");
print_r(arraynaam);


geeft
[0]->"text1"
[2]->"text"


Over 't aantal resource id's:
ik ben een emailservertje in php aan het schrijven. Als dit scriptje lang blijft draaien, en je krijgt veel mailtjes, maak je veel connecties.

[ Voor 69% gewijzigd door Eindewege op 27-03-2006 20:17 ]

Van Zeeland dan misschien ??


Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Mag ik vragen waar jij 65000 resource ID's voor nodig denkt te hebben? Ik zou toch optimalisatie van je code gaan overwegen, eventueel door iemand anders, dan doe je iets fout namelijk.

Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
hmm, 65535 is het maximum van een unsigned 16-bit integer.
Op een 32-bit machine mag je geen problemen hebben ;)
Dan kan je tot zo'n 2147483647 ID's gaan ;)

Maar ik ben het volledig eens met .Peter, probeer een andere methode te vinden. :)

[ Voor 3% gewijzigd door Gonadan op 28-03-2006 08:18 . Reden: UBB-tags zijn moeilijk 8)7 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik denk dat als je bij maxint komt dat ie gewoon weer bij 1 begint te tellen hoor.

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


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Grijze Vos schreef op dinsdag 28 maart 2006 @ 08:22:
Ik denk dat als je bij maxint komt dat ie gewoon weer bij 1 begint te tellen hoor.
Ook dat nog waarschijnlijk |:(

Het zal dus inderdaad wel werken, maar erg efficiënt lijkt het met niet :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Gurbe de n00b
  • Registratie: Juni 2003
  • Laatst online: 08-02-2024
PHP is volgens mij toch al niet de efficientste taal...

Als je serieus echt iets wilt schrijven dan zou ik al asp.net gaan gebruiken...

Portfolio


Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13:44

Eijkb

Zo.

Je hebt al die resources toch niet op één moment open? Zelfs in een loop oid waarbij je steeds een nieuw bestand opent, beschrijft en weer sluit heb je op dat moment maar 1 resource ID actief.

Ik denk dat het niet eens mogelijk is om met bv. een linux apache server 65.000 bestanden tegelijkertijd te openen (dat heeft te maken met een intern maximum van Apache wat standaard geloof ik op 1024 filepointers staat).

^^ Als je iets serieus wilt gaan schrijven? De TS heeft het over een mailserver, pak dan een C++ taal of iets dergelijks, niet iets wat geinterpreteerd wordt. Dat is ten alle tijde overhead. Nog handiger is natuurlijk een bestaand pakket te pakken: Die zijn er niet voor niets. Maar goed, dat is waarschijnlijk niet de uitdaging. Dus kan het prima in PHP.

[ Voor 31% gewijzigd door Eijkb op 28-03-2006 08:41 ]

.


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Gurbe de n00b schreef op dinsdag 28 maart 2006 @ 08:38:
PHP is volgens mij toch al niet de efficientste taal...

Als je serieus echt iets wilt schrijven dan zou ik al asp.net gaan gebruiken...
:D

Gelukkig doe jij je nickname wel eer aan.

De shared-nothing architectuur van PHP staat juist bekend als relatief efficiënt.

Rustacean


Acties:
  • 0 Henk 'm!

  • Eindewege
  • Registratie: Oktober 2001
  • Laatst online: 15-05-2023

Eindewege

Het beste dorp van nederland

Topicstarter
Bedankt voor jullie reacties.

Aangezien er nooit veel connecties tegelijk open zijn, zal het waarschijnlijk niet zo'n probleem zijn. Ik was alleen bang dat er op ten duur een error zou komen vanwege het te hoge getal. Overigens geeft een testje aan dat je rustig tot honderdduizenden kan doorgaan zonder problemen.

Een mailserver schijven in PHP lijkt misschien niet het meest logische, maar ik wilde eens wat meer doen met PHP als form-pjes ontvangen of een forum maken. Het gaat meer om de weg dan om het resultaat ;)
Zoals Eijkb zegt, als ik zo nodig een mailserver wilde, download ik die wel, t gaat meer om de mogelijkheden van PHP ns wat verder te bekijken (en dat zijn er veel).


PHP is trouwens niet zo'n verkeerde taal hiervoor hoor, ik heb zoiets al eens gedaan in C++ (een pop3&smtp server), en ik moet zeggen dat het voor de programmeur een stuk makkelijker is in PHP :P
Ik had het server gedeelte al werkend in PHP, met Inetd om de verbinding te regelen, nu wilde ik t helemaal in PHP doen, gaat best aardig.

[ Voor 26% gewijzigd door Eindewege op 28-03-2006 17:27 ]

Van Zeeland dan misschien ??

Pagina: 1