Website kan maar 1 draaiend script aan?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris -

Chris -

21/01/2011 09:50:17
Quote Anchor link
Zit met een rare kwestie. Ik heb een script dat bepaalde gegevens van een API vandaan haalt. Dit is een redelijk zwaar script, hij doet er zo'n 3 minuten over een haalt daarbij redelijk wat data op. Dat gaat allemaal goed, en het werkt perfect.

Het is alleen wel zo, dat op het moment dat dat script draait, "alles" vastloopt. Als ik een andere pagina wil laden op dezelfde pagina, dan blijft die laden totdat het eerste script klaar is.

Hoe kan dit? Is dit een instelling in PHP, Apache of in mijn script? Ik heb dit nog niet eerder meegemaakt namelijk.
 
PHP hulp

PHP hulp

08/03/2021 03:35:27
 
TJVB tvb

TJVB tvb

21/01/2011 11:11:28
Quote Anchor link
Ligt eraan wat het script doet, als het je database o.i.d. lokt kan de rest er niet bij en wacht tot dat script klaar is.
 
Chris -

Chris -

21/01/2011 11:17:24
Quote Anchor link
Het script include een configuratiebestand waarin een database verbinding tot stand wordt gemaakt. Maar hij heeft naar mijn weten geen constante verbinding met die database.

Als test probeer ik nu een bestand aan te roepen die geen verbinding maakt, hier staat alleen hoi in. Ook dit werkt niet..
 
Jos Verra

Jos Verra

21/01/2011 11:27:47
Quote Anchor link
Ik denk dat het komt omdat de standaard website script niet asynchroon script ophalen. Als dit wel zou gebeuren zou script 2 al kunnen laden terwijl script 1 dit ook nog doet.

Nu dit niet het geval is zal script 2 in de wachtrij moeten staat totdat script 1 klaar is.

Je zou kunnen overwegen op eerst script 2 te laden en indien je gebruikt maakt van de gegevens uit script 1; deze achteraf te manipuleren. Of je maakt gebruik van een tijdelijke placeholder oid.
 
Jens V

Jens V

21/01/2011 11:27:48
Quote Anchor link
Misschien niet direct wat het kan zijn, maar kan je eens kijken naar je CPU-load als je dat script draait... Misschien dat je server op dat moment overbelast is...
 
Nicoow Unknown

Nicoow Unknown

21/01/2011 11:29:55
Quote Anchor link
Waarom is dit raar of vreemd, het is de manier waarop php werkt, hij voert regel voor regel alles uit, en hij gaat pas door als het klaar is.
Dus het kan inderdaad zo zijn dat je lang moet wachten voordat hij de data binnen heeft.

Maar wat bedoel je met alles vastloopt?
Ik neem aan het laden van je site?
 
Chris -

Chris -

21/01/2011 11:34:24
Quote Anchor link
index.php
ophalen_data.php
voortgang.php

vanuit index laad ik ophalen_data via ajax. als ik vervolgens voortgang wil bekijken, dan gaat die pagina laden totdat ophalen_data klaar is. Dat is natuurlijk nutteloos.

Ook is het zo, dat op het moment iemand anders op index.php komt terwijl ik data aan het ophalen ben, diegene moet wachten totdat alle data is opgehaald. Dat is gewoon echt stierenstront, zo hoort het niet.

Nico, wat jij nu zegt is dat je maar 1 child van een proces tegelijkertijd kan draaien van PHP. Dat is onder normale omstandigheden toch niet? In dat geval, als je hier bij het opslaan van een reactie, een sleep zou zetten van 10 seconden, kan in die periode niemand meer een pagina openen. Lijkt me niet de bedoeling.
 
TJVB tvb

TJVB tvb

21/01/2011 11:39:39
Quote Anchor link
Chris, kijk eens met atop wat je proccessen op dat moment doen.
Als jou script veel met de hardeschijf doet kan het ook zijn dat je daar door de resources heen bent
 
Chris -

Chris -

21/01/2011 11:41:32
Quote Anchor link
De server is helaas niet in mijn beheer, dus proceslijst kan ik niet opvragen =(

Edit:
Lol, en om mezelf er nou in te hacken is ook niet echt netjes ;-)
Gewijzigd op 21/01/2011 11:42:09 door Chris -
 
Pim -

Pim -

21/01/2011 12:19:37
Quote Anchor link
Het iets totaal anders.
Je moet de sessie sluiten met session_write_close() voordat een andere thread erbij kan.
Ik had dit ook toen ik zo'n meter voor de scriptlib maakte.
Gewijzigd op 21/01/2011 12:23:04 door Pim -
 
Kris Peeters

Kris Peeters

21/01/2011 12:31:39
Quote Anchor link
Uhm, die progress bar ... zal ik eens bekijken.

In principe is een progress bar niet zo evident in php, aangezien (het staat hier ergens ook boven) eerst alles in 1 keer wordt afgehandeld. Je kan daar niet zomaar tussen komen.

EDIT:
Okay, I see, het gaat om verschillende requests naar de server; ik dacht wel zo-iets
Gewijzigd op 21/01/2011 12:40:39 door Kris Peeters
 
Pim -

Pim -

21/01/2011 12:37:42
Quote Anchor link
De truuk is om Ajax requests naar 2 scripts te sturen. 1 doet de handeling en slaat de voortgang op in de sessie. De andere leest slechts de sessie uit.

Belangrijk is daarbij om in het 'handelingsscript' steeds de sessie af te sluiten met session_write_close(), omdat anders het 'leesscript' er niet bij kan en blijft hangen.
 
Chris -

Chris -

21/01/2011 12:39:22
Quote Anchor link
@Pim, dat schijnt inderdaad de oplossing te zijn, bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.