Toon posts:

groot phpscript laten runnen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een phpscript wat een dmv een lus een paar duizend queries uitvoert (eenmalig). Hoe kan ik deze het beste laten runnen?

Als ik het via de browser die dan kan het te lang gaan duren en zal die ermee stoppen. Via lynx ofzo? (eigen server).

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:40
php < filetje.php ?

Verwijderd

Topicstarter
en dan in de php.ini de execution time heel hoog zetten?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 13 augustus 2002 @ 18:56:
en dan in de php.ini de execution time heel hoog zetten?

Nee, in filetje.php
Overigens is die input-pijl niet eens nodig gewoon 'php filetje.php' :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:40
Verwijderd schreef op 13 augustus 2002 @ 18:56:
[...]

en dan in de php.ini de execution time heel hoog zetten?
Dat kan ook wel in je script, met set_time_limit(0).

Waarom quote dit forum zo lelijk?

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 00:01

BierPul

2 koffie graag

En dan maar wachten tot je browser een timeout geeft :P

Als ik geen console toegang heb houdt ik de browser gewoon wakker door hem bij elke loop een spatie te sturen :P

Daarna wel ff flushen anders loop je vol :)

PHP:
1
2
echo(" ");
flush();


Hield mijn browser 14 uur wakker ofzow :P

[ Voor 0% gewijzigd door BierPul op 14-08-2002 09:36 . Reden: typos ]

Ja man


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 00:01

BierPul

2 koffie graag

dubbel :P

Ja man


Verwijderd

Topicstarter
LOST_GUNT schreef op 14 augustus 2002 @ 09:34:
En dan maar wachten tot je browser een timeout geeft :P

Als ik geen console toegang heb houdt ik de browser gewoon wakker door hem bij elke loop een spatie te sturen :P

Daarna wel ff flushen anders loop je vol :)

PHP:
1
2
echo(" ");
flush();


Hield mijn browser 14 uur wakker ofzow :P
Het werkte idd nog niet. Ik voer alles uit met 'php > file.php', maar na een tijdje viel het toch 'in slaap'.

Nu heb ik dat flsuh() toegevoegd en wat laten echo'en, maar het werkt nog niet. Er wordt ook helemaal niks geecho'ed. Ik las op php.net dat het misschien iets te maken heeft met mod_gzip. Hier heb ik verder eigenlijk geen verstand van.

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 23-08 12:03

[ash]

Cookies :9

meer geheugen aan php toekennen missschien ??

Verwijderd

Topicstarter
[ash] schreef op 14 augustus 2002 @ 10:19:
meer geheugen aan php toekennen missschien ??
Denk dat het niks uitmaakt, het moet nl. gelijk een tekst echo'en dmv dat flush() en dat werkt niet.

Verwijderd

mod_gzip heeft waarschijnlijk te maken met het zippen van de files die de browser opvraagt.
Dat heef niet te maken met een flush die niet (goed) gedaan wordt!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 00:01

BierPul

2 koffie graag

Ik liet op deze mannier vanaf een bak waar ik geen console rechten had 150.000 emails versturen als volgt

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?

#query

WHILE($sjaak = mysql_fetch_array($query)) {

#doe je ding

echo(" "); 
flush();

}
?>


Nu verstuurd ie gewoon bij het einde van elke aktie een spatie naar de browser :), en dat houdt m wakker dat flush is puur om het geheugen te flushen.

Ja man


Verwijderd

Topicstarter
LOST_GUNT schreef op 14 augustus 2002 @ 10:28:
Nu verstuurd ie gewoon bij het einde van elke aktie een spatie naar de browser :), en dat houdt m wakker dat flush is puur om het geheugen te flushen.
Ja, ik snap het idee en dat moet ik dus ook hebben :)

Alleen werkt de flush() niet. Op php.net staat het volgende:
Note: flush() has no effect on the buffering scheme of your webserver or the browser on the client side.

Verwijderd

Topicstarter
na wat zoeken op GoT zag ik dit meer mensen met dit probleem zaten, maar nergens wordt volgens mij echt een oplossing gegeven. Ergens wordt genoemd om output_buffering op 0 te zetten, maar ook dat heeft geen nut.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Draai je toevallig in safe modes?

Aangezien set_time_limit(0) de oplossing moet zijn.

Maar kan je het anders niet in batches draaien? Bij houden waar je was gebleven en daarna weer verder gaan?

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
LuCarD schreef op 14 augustus 2002 @ 11:06:
Draai je toevallig in safe modes?
Safemode staat op 'Off' bij mij.

[ Voor 0% gewijzigd door Verwijderd op 14-08-2002 11:18 . Reden: ff verder gezocht ]


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Kan je instellen in je php.ini

Kan je controleren via een script

PHP:
1
phpinfo();


meer info:
http://nl2.php.net/manual/en/features.safe-mode.php

Programmer - an organism that turns coffee into software.


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 14 augustus 2002 @ 11:16:
[...]
Safemode staat op 'Off' bij mij.
Oke wat gaat er wel goed en waar gaat het niet goed.

Output eens een teller of nog beter alle queries. Ik denk dat er namelijk wat anders fout gaat.

met set_time_out(0) heb je geen timeout meer...
Manual:
Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in the configuration file. If seconds is set to zero, no time limit is imposed.
Verder hoe start je het script op?
• Via Lynx?
• Via een CGI binary
• Gewoon in je IE/NS (or lookalike) browsertje?

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
LuCarD schreef op 14 augustus 2002 @ 11:25:
[...]
Output eens een teller of nog beter alle queries. Ik denk dat er namelijk wat anders fout gaat.
Ik echo een teller, daaronder flush(), maar deze tekst komt pas in beeld als het hele script klaar is.
met set_time_out(0) heb je geen timeout meer...
Je bedoelt denk ik set_time_limit(0).
Verder hoe start je het script op?
• Via Lynx?
• Via een CGI binary
• Gewoon in je IE/NS (or lookalike) browsertje?
Ik start php gewoon op vanaf de command (met putty) met '/opt/php4/bin/php /locatie/script.php

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 14 augustus 2002 @ 11:30:

[...]
Je bedoelt denk ik set_time_limit(0).
Dat zeg ik.... :P
[...]
Ik start php gewoon op vanaf de command (met putty) met '/opt/php4/bin/php /locatie/script.php
Perfect, zo kan je geen brower timeout krijgen.
offtopic:
(start hem trouwens op met -q dan krijg je geen HTTP Headers, andere voordelen heb je niet maar is wel netter)


Kennelijk gaat er wat anders fout, het komt nu aan op een stukje debuggen. Misschien kan je het testen op een kleinere hoeveelheid data?
Ik echo een teller, daaronder flush(), maar deze tekst komt pas in beeld als het hele script klaar is.
Heb je output buffering aan staan? Aangezien dat niet normale behavior is. Dit kan je ook controleren in een phpinfo script en dit word via de php.ini geregeld.

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Output_buffering staat op 4096 (lijkt me goed)

Ik heb een simpel php-bestandje gemaakt om te testen:
PHP:
1
2
3
4
5
6
set_time_limit(0);
for ($i=0; $i<10;$i++) {
    sleep(1);
    echo $i;
    flush();
}

Maar zelfs dit werkt niet, dus heeft toch echt iets met de instellingen te maken lijkt me.

[ Voor 0% gewijzigd door Verwijderd op 14-08-2002 11:43 . Reden: was set_time_limit(0) vergeten ]


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 14 augustus 2002 @ 11:42:
Output_buffering staat op 4096 (lijkt me goed)

Ik heb een simpel php-bestandje gemaakt om te testen:
PHP:
1
2
3
4
5
6
set_time_limit(0);
for ($i=0; $i<10;$i++) {
    sleep(1);
    echo $i;
    flush();
}

Maar zelfs dit werkt niet, dus heeft toch echt iets met de instellingen te maken lijkt me.
Buffering heb je niet nodig zet het dus maar lekker uit... (in dit geval)

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Yesss! Dat was het dus. output_buffering moet op 'off' staan.
Thanx mate!

Verwijderd

Topicstarter
Iets te vroeg gejuichd geloof ik. Dat voorbeeldscriptje werkt nu, maar het eigenlijke script dus nog niet, maar dat zal wel iets met de scripting te maken hebben. Zal ff gaan doorzoeken

Verwijderd

Topicstarter
Blijkt dus dat dat flush() niet werkt als het gewoon op de command wordt uitgevoerd. Het werkt nl. wel als het via IE-browser wordt aangeroepen. Zou het bestand dan toch in 'slaap
vallen'?

Verwijderd

Topicstarter
Verwijderd schreef op 14 augustus 2002 @ 11:58:
Blijkt dus dat dat flush() niet werkt als het gewoon op de command wordt uitgevoerd. Het werkt nl. wel als het via IE-browser wordt aangeroepen. Zou het bestand dan toch in 'slaap vallen'?
Om maar even antwoord op mijn eigen vraag te geven: Ja.
Oftewel, het probleem is nog niet opgelost. Opmerkelijk is dat flush() in IE dus wel werkt.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Wat gaat er nu fout?

Krijg je wel of geen output op je console?

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Ik krijg geen output o pde console tijdens het draaien van het script.

Het viel me net op dat het testbestand (teller.php) op de console niet werkt en in IE werkt het pas bij de tweede keer. De eerste keer wordt alles pas bij het eind van het script geprint, als ik daarna Refresh werkt het wel. Iets met geheugen te maken ofzo?

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Verwijderd schreef op 14 augustus 2002 @ 12:34:
[...]
Om maar even antwoord op mijn eigen vraag te geven: Ja.
Oftewel, het probleem is nog niet opgelost. Opmerkelijk is dat flush() in IE dus wel werkt.
Om je maar even te verbeteren: Nee.. Bestanden slapen niet (bij mijn weten).
Zo te horen moet je het probleem meer in je eigen code zoeken dan in de aanroep. Output-buffering, flushen e.d. hebben niet het effect wat je zoekt op de console. Er is ook helemaal geen time-out die de console zelf kan hebben. De enige time-out die wel een rol kan spelen is die van PHP en z'n script, maar het eerder genoemde set_time_limit(0) is daar de oplossing voor.

Tip:
Zorg ervoor dat je script duidelijk aangeeft waar ie mee bezig is d.m.v. echo's zodat je kunt zien of ie draait. Dat werkt nl. wel op je console.

|_____vakje______|


Verwijderd

Topicstarter
Dus volgens jou (CyberSnooP) is iets anders de reden dat het script niet blijft doordraaien?

Als het een bestand (waar de info vandaan moet komen) niet kan openen, dan neem ik aan dat het gewoon verder gaat toch?

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 00:01

BierPul

2 koffie graag

Dat gaf ik toch aan dat als ik een bestand aanroep via de browser dat ik flush gebruik :?

Via command line heb je er niets aan :P

:)

[ Voor 0% gewijzigd door BierPul op 14-08-2002 13:43 . Reden: aanvulling ]

Ja man


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 14 augustus 2002 @ 12:54:
Ik krijg geen output o pde console tijdens het draaien van het script.

Het viel me net op dat het testbestand (teller.php) op de console niet werkt en in IE werkt het pas bij de tweede keer. De eerste keer wordt alles pas bij het eind van het script geprint, als ik daarna Refresh werkt het wel. Iets met geheugen te maken ofzo?
Bij mij werkt de teller.php wel op de console

met of zonder flush het maakt nix uit!

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
LuCarD schreef op 14 augustus 2002 @ 14:19:
[...]


Bij mij werkt de teller.php wel op de console

met of zonder flush het maakt nix uit!
wat bedoel 'het maakt nix uit'? Is er geen verschil tussen met en zonder flush? Het is de bedoeling dat met flush de cijfers 1 voor 1 in beeld komen.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 14 augustus 2002 @ 14:21:
[...]
wat bedoel 'het maakt nix uit'? Is er geen verschil tussen met en zonder flush? Het is de bedoeling dat met flush de cijfers 1 voor 1 in beeld komen.
yep dat gebeurt ook op de console...

op de console is er geen verschil in de output tussen
PHP:
1
2
3
4
5
6
set_time_limit(0); 
for ($i=0; $i<10;$i++) { 
    sleep(1); 
    echo $i; 
    flush(); 
}


en
PHP:
1
2
3
4
5
6
set_time_limit(0); 
for ($i=0; $i<10;$i++) { 
    sleep(1); 
    echo $i; 
    // flush(); 
}

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Inmiddels lukt het om het script op de console uit te voeren met flush(). Alleen loopt het af en toe nog vast. Volgens mij als ik zelf ook internet, is de kans groter dat het script vastloopt.

Ik weet nu precies waar het vastloopt (heb op elke regel een cijfer gezet).
PHP:
1
2
3
4
5
6
    $fd = @fopen($filename,"rb");
    while(!feof($fd))
    {
        $contents.= fread($fd,1024);
        // hier blijft het soms hangen
    }

Komt dat doordat het bestand (webpagina) niet te benaderen is?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 15 augustus 2002 @ 09:32:
Inmiddels lukt het om het script op de console uit te voeren met flush(). Alleen loopt het af en toe nog vast. Volgens mij als ik zelf ook internet, is de kans groter dat het script vastloopt.

Ik weet nu precies waar het vastloopt (heb op elke regel een cijfer gezet).
PHP:
1
2
3
4
5
6
    $fd = @fopen($filename,"rb");
    while(!feof($fd))
    {
        $contents.= fread($fd,1024);
        // hier blijft het soms hangen
    }

Komt dat doordat het bestand (webpagina) niet te benaderen is?
fopen heeft geen timeout mogelijkheid en aangezien je de time_limit op 0 hebt staan, zou dat wel eens voor problemen kunnen zorgen.

Misschien kan je gebruik maken van fsockopen, die heeft een time_limit parameter.
of je kan gebruik maken van exec en lynx --dump <URL> > Filename .

Over de dump parameter ben ik niet helemaal zeker, controleer dat in de manual van lynx!

offtopic:
"rb" gebruiken op een *nix machine is niet nodig, alleen "r" is voldoende.
[quote]
The mode may contain the letter 'b'. This is useful only on systems which differentiate between binary and text files (i.e. Windows. It's useless on Unix). If not needed, this will be ignored.
[/quote]

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Ik heb met fsockopen geprobeerd, maar dat werkt niet.

PHP:
1
2
3
4
5
6
7
    $fd = @fopen($filename,"rb"); 
    while(!feof($fd)) 
    { 
        echo "1";
        $contents.= fread($fd,1024); 
        echo "2";
    }

Het blijft dus altijd hangen nadat 1 is 'ge-echoed'. Oftewel, bij het lezen van de volgende karakters van de file. Kan ik niet iets doen met time, zodat gechecked wordt hoelang het geleden is dat het door die loop is gekomen, en als dat langer is dan (bijv.) 20 seconden, het script verlaat en opnieuw opstart?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik zie daar fopen staan... das wat anders dan fsockopen....

Verwijderd

Topicstarter
ACM schreef op 15 augustus 2002 @ 12:35:
Ik zie daar fopen staan... das wat anders dan fsockopen....
Zie post hieronder....

[ Voor 0% gewijzigd door Verwijderd op 15-08-2002 12:48 . Reden: xtra post ]


Verwijderd

Topicstarter
Ik begrijp fsockopen niet helemaal. Ik heb het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
                $filename = "pagina.php?id=1";
    $fd = fsockopen("www.website.nl/", 80, $errno,$errstr, 30);
    if (!$fd) {
        echo "$errstr ($errno)";
    } else {
        fputs($fd, "$filename\r\n");
        while (!feof($fd)) {
            $contents.= fread($fd,128);
        }
        fclose ($fd);
    }

Hieruit komt dat $errstr is een spatie en $errno is 0. Op PHP.net staat dat als $errno 0 is de connectie niet tot stand is gebracht.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

je moet dan wel een volledige HTTP-request doen he...
Niet alleen maar de filenaam opsturen.

Staat hier een prima voorbeeld:
http://www.php.net/manual/en/function.fsockopen.php

Verwijderd

Topicstarter
ACM schreef op 15 augustus 2002 @ 12:54:
je moet dan wel een volledige HTTP-request doen he...
Niet alleen maar de filenaam opsturen.
Als ik $filename verander in http://www.website.nl/pagina.php?id=1 krijg ik nog steeds error 0.
Ja, daar gebruiken ze het domein www.example.com, maar wat als ik een specifieke file wil oproepen? Moet ik dan de beide example.com's vervangen door de specifieke file?

Verwijderd

Topicstarter
Wat ik eigenlijk niet snap, is waarom het script opeens stopt? Waarom gaat het niet gewoon door?

Is het moe ofzo... :)
Pagina: 1