http://nl2.php.net/sleepquote:Note: The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running.
Die note staat er bij mij niet bij op php.net. En ja, ik kijk deze keer op engelsquote:
Ik was namelijk al een keer op zoek geweest en kon het niet vinden op php.netquote:Note: The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running.
Ja, beetje lastig, moet ik namelijk een script bouwen welke meer dan 30 seconden duurtquote:Op dinsdag 29 november 2005 20:27 schreef Jimmy het volgende:
Je zou het ff snel kunnen testen door een testscript net iets langer dan 30 seconden te laten duren dmv sleep?
1 |
http://nl2.php.net/readfilequote:int readfile ( string filename [, bool use_include_path [, resource context]] )
...
Returns the number of bytes read from the file. If an error occurs, FALSE is returned and unless the function was called as @readfile(), an error message is printed.
quote:Op dinsdag 29 november 2005 20:48 schreef JeRa het volgende:
[..]
http://nl2.php.net/readfile
Als je iets wilt debuggen begin je gewoon je functie-aanroepen uit elkaar te werken en de returnwaardes van de eerste aanroep te controleren. Maar hier helpt zelfs de PHP manual al
1 2 3 4 5 6 7 8 9 10 | $offset=intval(file_get_contents('offset.txt')); echo $offset; $offset+=15; $fp=fopen('offset.txt','w+'); fwrite($fp,"$offset"); fclose($fp); header("location: ".$_SERVER['PHP_SELF']); ?> |
Het is niet zo'n goed idee een header('Location:') uit te voeren naar hetzelfde PHP-script; Firefox geeft er na een aantal van dit soort verwijzingen al de brui aan. Beter doe je een combinatie van Javascript en PHP, waarbij je met Javascript er voor zorgt dat het scriptje om de zoveel tijd wordt aangeroepenquote:Op dinsdag 29 november 2005 20:53 schreef Swetsenegger het volgende:
[..]
Compleet overheen gelezen.
Het vreemde is dat file() zegt dat het hetzelfde is als readfile, maar ipv een string een array terug geeft.
Echter geeft file wel degelijk de inhoud terug en niet het aantal bytes. Ik gebruikte readfile uiteraard omdat het maar 1 waarde is.
file_get_contents dus
Ander probleem
[ code verwijderd ]
Dit zou infinite moeten loopen. Maar hij stopt na 1 loop.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $result=mysql_query('SELECT COUNT(id) AS aantal FROM table WHERE datum=DATE_SUB(NOW(), INTERVAL 84 DAY)'); // aantal te versturen mails $row = mysql_fetch_assoc($result); $offset=intval(file_get_contents('offset.txt')); //offset waar ik gebleven ben if($row['aantal']-$offset <=0){ //indien true, alle mails verstuurt $offset=0; $fp=fopen('offset.txt','w'); fwrite($fp,"$offset"); fclose($fp); die(); } $query="SELECT * FROM table WHERE datum=DATE_SUB(NOW(), INTERVAL 84 DAY) LIMIT ".$offset.",15"; $result=mysql_query($query); while($row=mysql_fetch_assoc($result)){ // 15 mails versturen } $offset+=15; //offset ophogen $fp=fopen('offset.txt','w+'); fwrite($fp,"$offset"); fclose($fp); header("location: ".$_SERVER['PHP_SELF']); //hele circus opnieuw ?> |
Een cronjob!? Je doet een header() op een cronjobfile? Welke browser kan dan reageren op die header()?quote:Op dinsdag 29 november 2005 21:10 schreef Swetsenegger het volgende:
@jera, Het vreemde is dat hij het voorheen met de oplossing met het cookie wel goed deed. Javascript gaat niet, want dat is clientside, en het is een cronjob.
quote:Op dinsdag 29 november 2005 21:13 schreef JeRa het volgende:
[..]
Een cronjob!? Je doet een header() op een cronjobfile? Welke browser kan dan reageren op die header()?
maximum execution time. Ik zit aan een limiet van 30 seconden. Op een safe_mode serverquote:Waarom doe je geen for-loopje?
De hoster biedt niet eens cronjobs aan, ik maak gebruik van een online cronservicequote:Op dinsdag 29 november 2005 21:17 schreef Jimmy het volgende:
In een cronjob kun je dan niet via exec() het php-script zichlzelf nogmaals laten starten?
Wel HEEL erg goed kijken dat ie niet eeuwig zichzelf blijft aanroepen natuurlijk.
Hebben ze safe_mode aangezet voor scriptjes die op PHP-cli (commandline) draaien? Dan zit er iets niet goed in de beveiliging van hun serverquote:Op dinsdag 29 november 2005 21:18 schreef Swetsenegger het volgende:
[..]
KUT.
[..]
maximum execution time. Ik zit aan een limiet van 30 seconden. Op een safe_mode serverEn ik heb in potentie heel veel mails te versturen.
Overigens werkt lokaal de header wel. Uiteraard met een browser. Zou de hoster een bescherming hebben misschien?
Ze bieden helemaal niets aan en ze willen niets wijzigen ook. Nadeel van een goedkope hosterquote:Op dinsdag 29 november 2005 21:22 schreef JeRa het volgende:
[..]
Hebben ze safe_mode aangezet voor scriptjes die op PHP-cli (commandline) draaien? Dan zit er iets niet goed in de beveiliging van hun serverik zou ze even een mailtje sturen met de vraag of ze safe_mode voor PHP uitzetten, safe_mode is vooral bedoeld voor mod_php (of voor PHP-cgi, voor mijn part).
Cron-opdrachten worden namelijk uitgevoerd onder de user van wie de crontab is. Wat dat betreft moeten de rechten in hun systeem goed staan, dus is er geen enkele reden om safe_mode aan te laten staan.
Ze bieden geen anacron-service aan?
1 2 3 4 | safe_mode_exec_dir no value no value safe_mode_gid Off Off safe_mode_include_dir /usr/lib/php /usr/lib/php |
Nee. Wat je wel kunt doen via de meeste cronservices is zeggen dat een scriptje elke x minuten moet draaien, kun je dat niet gebruiken?quote:Op dinsdag 29 november 2005 21:27 schreef Swetsenegger het volgende:
[..]
Ze bieden helemaal niets aan en ze willen niets wijzigen ook. Nadeel van een goedkope hoster
www.tweedehandsboek.net/phpinfo.php
[ code verwijderd ]
Zover ik kan zien kan ik dus max_execution_time niet gebruiken toch?
Die service was 5 euro duurder geloof ikquote:Op dinsdag 29 november 2005 21:29 schreef JeRa het volgende:
[..]
Nee. Wat je wel kunt doen via de meeste cronservices is zeggen dat een scriptje elke x minuten moet draaien, kun je dat niet gebruiken?
Dat is meteen de reden waarom ik eigen servers draai voor gmta.nl (en de subdomeinen daarvan die ik aan mensen geef die tegen hetzelfde probleem waren opgelopen: te dure of slechte hosting)quote:Op dinsdag 29 november 2005 21:32 schreef Swetsenegger het volgende:
[..]
Die service was 5 euro duurder geloof ik
Maar er zit weinig anders op, aangezien een header niet gaat werken.
Yup, lange leve eigen hosting, of in mijn geval een vriend met eigen hostingquote:Op dinsdag 29 november 2005 21:43 schreef JeRa het volgende:
Dat is meteen de reden waarom ik eigen servers draai voor gmta.nl (en de subdomeinen daarvan die ik aan mensen geef die tegen hetzelfde probleem waren opgelopen: te dure of slechte hosting)
Maar ik heb nog steeds een probleemquote:Op dinsdag 29 november 2005 21:45 schreef Jimmy het volgende:
[..]
Yup, lange leve eigen hosting, of in mijn geval een vriend met eigen hosting
Ja.quote:Op dinsdag 29 november 2005 22:21 schreef Swetsenegger het volgende:
Maar ik heb nog steeds een probleem
een meta refresh is natuurlijk ook alleen clientside, correct?
Hoe bedoel je commandline aangeroepen?quote:Op dinsdag 29 november 2005 22:31 schreef Jimmy het volgende:
[..]
Ja.
Maar als ik het goed begrijp wordt je script command line aangeroepen?
Is dit dan geen optie?
http://nl2.php.net/manual/en/function.exec.php
En dan exec("php scriptnaam");
Nee, ik ook niet. I'm fucked.quote:Op dinsdag 29 november 2005 22:47 schreef Jimmy het volgende:
Ah, ok.
Ik wist niet eens dat dat soort services bestonden.
Ik ging er gewoon vanuit dat als het een cronjob was, het vanaf de commandline werd gestart, maar met deze service wordt er dus wel een script via het web opgestart.
Poeh, geen idee hoe je dan vanuit dat script het script opnieuw kan aanroepen.
Sodeju, dat is slim bedachtquote:Op dinsdag 29 november 2005 22:35 schreef Swetsenegger het volgende:
[..]
Hoe bedoel je commandline aangeroepen?
Ik maak gebruik van een online cronservice www.cronservice.nl waar je gewoon de url van je script kan opgeven zodat die uitgevoerd wordt
Volgens mij werkt jouw oplossing dus niet.
Ik ben het helemaal met je eens.quote:Op dinsdag 29 november 2005 22:55 schreef JeRa het volgende:
[..]
Sodeju, dat is slim bedachtdat project www.cronservice.nl dan. Het is namelijk best simpel op te zetten
en goud geld mee te verdienen natuurlijk. Wat betreft je probleem, weet ook even geen oplossing.
Ik ben ongeveer met hetzelfde bezigquote:Op dinsdag 29 november 2005 22:59 schreef Swetsenegger het volgende:
[..]
Op zich voor mij een oplossing welke goed betaalbaar is. Voor hem is het eenmalig een server inrichten. De crons stelt de klant zelf in, en je hebt er geen omkijken na.
sowieso is het misschien handig om hier naar te verwijzen: http://www.phpfreakz.nl/artikelen.php?aid=112quote:Op dinsdag 29 november 2005 23:13 schreef JeRa het volgende:
[..]
Ik ben ongeveer met hetzelfde bezigmaar dan iets uitgebreider. Op het moment heb ik AAP gemaakt, Ares Administrative Panel, wat een in PHP geschreven interactive commandline utility is waarmee ik als admin heel makkelijk users kan maken. Daarbij hoort dan optioneel quotas, webruimte, databases, e-mailadressen enzovoort.
Straks is het de bedoeling dat op controlpanel.gmta.nl de gebruikers straks zelf alles kunnen instellen, en daar hoort dan ook cronjob bij (dat kunnen ze ook door met SSH in te loggen en crontab -e uit te voeren, maar veel mensen hebben niet 1-2-3 door hoe die dingen in elkaar zitten). Misschien moet ik er ook maar geld voor gaan vragen straks, voor de nieuwe gebruikers dan
Ja dat doe ik dusquote:Op woensdag 30 november 2005 10:08 schreef morpheus_at_work het volgende:
wat je anders zou kunnen doen , ik neem aan dat je in een veld vermeld dat de mail naar iemand is verstuurd
anders pak je hier iedere keer er een x aantal uit en update je die x , dan loop je de query voor het selecteren waarbij veld ongelijk is aan verstuurd , hiervan pak je de limit die je bepaald , na het versturen laat je de pagina op nieuw in , procedure wordt opnieuw gestart en verhaal begint opnieuw. je kan uit de loop springen als je aantal records wat je selecteerd 0 is , eventueel kun je daarna het verstuur veld resetten of wat anders mee doen (wel naar andere pagina verwijzen als je klaar bent , anders begint je loop weer opnieuw en wordt iedereen suf gemailt).
afhankelijk van de server zou je het aantal per 29 seconden uit kunnen proberen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $row = mysql_fetch_assoc($result); $offset=intval(file_get_contents('offset.txt')); //offset waar ik gebleven ben if($row['aantal']-$offset <=0){ //indien true, alle mails verstuurt $offset=0; $fp=fopen('offset.txt','w'); fwrite($fp,"$offset"); fclose($fp); die(); } $query="SELECT * FROM table WHERE datum=DATE_SUB(NOW(), INTERVAL 84 DAY) LIMIT ".$offset.",15"; $result=mysql_query($query); while($row=mysql_fetch_assoc($result)){ // 15 mails versturen } $offset+=15; //offset ophogen $fp=fopen('offset.txt','w+'); fwrite($fp,"$offset"); fclose($fp); header("location: ".$_SERVER['PHP_SELF']); //hele circus opnieuw |
Die wordt client side door een browser uitgevoerd. Het script wordt aangeroepen door een cron, niet door een browser.quote:Op woensdag 30 november 2005 11:43 schreef morpheus_at_work het volgende:
javascriptje : document.redirect actie
Gewoon met commandline het php-script aanroepen.quote:Op woensdag 30 november 2005 11:51 schreef Swetsenegger het volgende:
[..]
Die wordt client side door een browser uitgevoerd. Het script wordt aangeroepen door een cron, niet door een browser.
DAT is het probleemAnders had de header ook gewoon gewerkt.
header("location: ".$_SERVER['PHP_SELF']); //hele circus opnieuw
Ik heb een serverside refresh nodig
quote:Op woensdag 30 november 2005 11:56 schreef pc-fr34k het volgende:
[..]
Gewoon met commandline het php-script aanroepen.
Oh, ik had alles gelezen maar daar heb ik dan overheen gelezen, ik las alleen dat je maxexecutiontime en safemode had.quote:Op woensdag 30 november 2005 11:59 schreef Swetsenegger het volgende:
[..]
Misschien handig wanneer de rest ook gelezen wordt.
Mijn hoster ondersteunt geen cronjobs. Ik ben uitgeweken naar een online cronservice www.cronservice.nl.
Er valt dus niets vanaf CL aan te roepen.
dan liep hij tegen het probleem aan dat zijn pagina maar een executie tijd van 30 seconden mocht hebbenquote:Op woensdag 30 november 2005 12:08 schreef pc-fr34k het volgende:
[..]
Oh, ik had alles gelezen maar daar heb ik dan overheen gelezen, ik las alleen dat je maxexecutiontime en safemode had..
Een loop in de crobjob geen idee?
Dus je hebt zeg maar 1 pagina die de cronservice een keer aanroept. En die pagina roept het echte script aan in een loop. Dus dat het script gewoon meerdere keren(met bv een waarde door geven waar je bent gebleven) aan wordt geroepen door script1.
Je begrijpt me verkeerd, 1 script wordt meerdere keren aangeroepen(dus telkens een kleine execution time)door een ander script. Een script aanroepen in een loop duurt niet zo lang als het andere script al het werk doet...quote:Op woensdag 30 november 2005 12:16 schreef morpheus_at_work het volgende:
[..]
dan liep hij tegen het probleem aan dat zijn pagina maar een executie tijd van 30 seconden mocht hebben
Dat doe ik.quote:Op woensdag 30 november 2005 12:08 schreef pc-fr34k het volgende:
[..]
Oh, ik had alles gelezen maar daar heb ik dan overheen gelezen, ik las alleen dat je maxexecutiontime en safemode had..
Een loop in de crobjob geen idee?
Dus je hebt zeg maar 1 pagina die de cronservice een keer aanroept. En die pagina roept het echte script aan in een loop. Dus dat het script gewoon meerdere keren(met bv een waarde door geven waar je bent gebleven) aan wordt geroepen door script1.
Zelfde probleem. Hoe moet page1 page 2 starten/aanroepen? Includen werkt natuurlijk niet, want dan gaat page 1 gewoon over de max_execution_time heen.quote:Op woensdag 30 november 2005 12:32 schreef pc-fr34k het volgende:
[..]
Je begrijpt me verkeerd, 1 script wordt meerdere keren aangeroepen(dus telkens een kleine execution time)door een ander script. Een script aanroepen in een loop duurt niet zo lang als het andere script al het werk doet...
Dan wordt page2 min of meer gewoon onderdeel van page 1.quote:Op woensdag 30 november 2005 12:38 schreef pc-fr34k het volgende:
fsockopen() ?
Ja, maar je hebt je probleem van je max execution time niet meer lijkt me. En de serverside refresh is er niet/zijn we nog niet achter gekomen, lijkt me toch een goede (eventueel tijdelijke) oplossing.quote:Op woensdag 30 november 2005 12:43 schreef Swetsenegger het volgende:
[..]
Dan wordt page2 min of meer gewoon onderdeel van page 1.
Als er een serverside refresh methode zou zijn, zou het opgelost zijn
Eh jawel. Page 1 gaat gewoon over de max execution time heen.quote:Op woensdag 30 november 2005 12:46 schreef pc-fr34k het volgende:
[..]
Ja, maar je hebt je probleem van je max execution time niet meer lijkt me.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 4 nieuwste berichten laden $ID = $_POST['berichtid']; $sql = "SELECT * FROM slowchat ORDER BY ID DESC LIMIT 0, 5"; $query = mysql_query($sql) or die(mysql_error()); while ($result = mysql_fetch_array($query)) { $pID = $result['ID']; $puser = $result['user']; $pbericht = $result['bericht']; $ptype = $result['type']; $pdatum = $result['datumtijd']; $viewDate = date("H:i", strtotime($pdatum)); $pip = $result['IP']; echo" <tr>"; echo" <td class='row4' align='center'><img src='http://www.pestforum.nl/forum/style_images/1/nav_m.gif' border='0' alt='Bericht' /></td>"; echo" <td class='row4'><span class='desc'><font size = 2 color = gray>[".$viewDate."] </font><font size = 2 color = dodgerblue>".$puser." </font> <font size = 2 color = blue> ".$pbericht." </font><br /></span></td>"; echo" </tr>"; } ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |