[php] cronjobs bestaande uit meerdere pagina's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor ons systeem wil ik gebruikmaken van een complexe cronjob.
Omdat het nogal een complex proccess is (bestaande uit veel handelingen), leek het mij handig om de php-pagina op te splitsen in meerdere pagina's.

Dus:

start.php --> header('Location: pagina2.php');
pagina2.php --> header('Location: pagina3.php'); of als proces klaar is: exit();
pagina3.php --> header('Location: pagina4.php');
pagina4.php --> header('Location: pagina2.php');

Dit is een zwaar versimpelde weergave. De controle in pagina2 is een query.
Als er wel resultaten zijn, dan moet verder worden gegaan, zoniet: stop de cronjob dan maar met exit();

Nu gaat een aantal loops prima, maar op een gegeven moment krijg ik in Firefox de melding:
"
De pagina verwijst niet op een juiste manier door

Firefox heeft vastgesteld dat de server het verzoek voor dit adres doorverwijst op een manier die nooit zal eindigen.

Dit probleem kan soms worden veroorzaakt door het uitschakelen of weigeren
van cookies.
"

Is het nu zo dat je met de functie maar een beperkt aantal x door kan sturen?
Ik heb het zo geprogrammeerd dat er met 100% zekerheid een einde aan het proces komt, dus het zo echt geen oneindige loop zijn.

Wel lijkt het fout te gaan in een pagina die ik include die een http_request doet naar het systeem van Tiara / Realworks. Voor elke klant (elke loop) moet namelijk een zip-bestand worden opgehaald van een andere server om te verwerken.

Nu heb ik deze functie wel geprobeerd met ob_start() en ob_clean() te omsluiten, maar dat hielp niet.

Ik houd een logfile bij (tekstbestand) en hierin zie ik dat na een aantal loops de logfile stockt na het te includen bestand, daarom weet ik zo zeker dat hier de fout moet zitten.

Dit doe ik met de volgende functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    $req = &new HTTP_Request(TIARA_URL);
    $req->setMethod(HTTP_REQUEST_METHOD_GET);
    $req->sendRequest();
    if($req->getResponseCode()!=200){
        $importError = true;
        /* Write error to logfile */
        saveLogFile('Tiara connectie kon niet worden gemaakt', 
                    __FILE__, 
                    __LINE__);      
    }else{
            ...................
        } 

hierna volgen nog meer functies, maar zonder output

Acties:
  • 0 Henk 'm!

Verwijderd

Je begon over een cron job. Je bent me kwijtgeraakt bij Firefox.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Wat je precies bedoelt met je cronjob is mij ook onduidelijk. Maar wat mij wel duidelijk is, is het probleem dat je hebt met Firefox. Wat je nl. hebt is een 'loop' van pagina's. Nu weet jij wel dat de loop afgebroken kan worden in pagina2.php, maar omdat je de request zonder parameters aanroept lijkt deze voor Firefox altijd hetzelfde. Waarschijnlijk probeert Firefox dit zelfs te cachen.

Wat je kunt doen is te verwijzen naar een pagina met een random parameter:
PHP:
1
2
<?php
header("Location: paginax.php?rand=".rand()*1000);


Als het goed is zal Firefox er dan niet zo gauw een loop inzien. Het kan natuurlijk wel zo zijn dat Firefox zoiezo een max 'doorstuurlimiet' heeft. (maar dat weet ik voor de rest niet)
Voutloos schreef op dinsdag 13 maart 2007 @ 15:28:
Dat snappen OneOfBorg en phsmit volgens mij wel, het gaat er meer om dat deze cronjob een beetje stinkt. :P
You're right :) (iig wat mij betreft)

[ Voor 15% gewijzigd door Pete op 13-03-2007 15:30 ]

petersmit.eu


Acties:
  • 0 Henk 'm!

Verwijderd

offtopic:
Een cronjob is een proces/commando wat automatisch uitgevoerd wordt (op een zelf gekozen tijdstip).

[ Voor 19% gewijzigd door Verwijderd op 13-03-2007 15:26 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Klinkt allemaal als een cronjob waarmee de gemiddelde sysadmin niet blij mee is. :P

Sloop dat location header gedoe er toch uit. De cronjob is geen interactieve of menselijke gebruiker. KISS: laat de cronjob 1 script aanroepen en zadel de rest van het systeem niet op met problemen of stomme workarounds puur omdat je script wat groot is. Pak het ontwerp van het script aan ipv alles meer bloated te maken. Los iig alles binnen PHP op.
Verwijderd schreef op dinsdag 13 maart 2007 @ 15:25:
offtopic:
Een cronjob is een proces/commando wat automatisch uitgevoerd wordt (op een zelf gekozen tijdstip).
Dat snappen OneOfBorg en phsmit volgens mij wel, het gaat er meer om dat deze cronjob een beetje stinkt. :P

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

offtopic:
|:( niet echt bij stil gestaan :9

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
als je het zo nodig in meerdere files wilt gebruiken, maak dan een cronjob op de file:
combi.php,
die er als volgt uitziet:

include("pagina1.php");
include("pagina2.php");
include("pagina3.php");
include("pagina4.php");

Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 20-09 15:25

mace

Sapere Aude

Dit werkt ook altijd goed:

header("Cache-Control: no-store, no-cache, must-revalidate");

Dit heb ik gebruikt bij een script waarmee ik mijn lampen aan en uitzette, met mijn PSP B)

De browser van de psp gooide ook alles in de cache, hiermee voorkom je dat.

[ Voor 48% gewijzigd door mace op 13-03-2007 15:38 ]


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Edwardvb schreef op dinsdag 13 maart 2007 @ 15:32:
als je het zo nodig in meerdere files wilt gebruiken, maak dan een cronjob op de file:
combi.php,
die er als volgt uitziet:

include("pagina1.php");
include("pagina2.php");
include("pagina3.php");
include("pagina4.php");
Zo heb ik het ook opgelost. Werkt prima. :)

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 13 maart 2007 @ 15:08:
Je begon over een cron job. Je bent me kwijtgeraakt bij Firefox.
Ik zal toch een php script dat dat aangeroepen gebruikt wordt als cronjob moeten testen ...
Ik heb het in meerdere pagina's gesplitst, omdat ik anders 1 gigantische for-loop krijg (denk ik).

Maar misschien is 1 pagina toch handiger om te doen.
Maar ik vraag me af of met set_time_limit(0) echt de uitvoer limiet onbeperkt is.

Nu gaat het nog om 10 makelaars, maar straks om een paar 100.

[ Voor 35% gewijzigd door Verwijderd op 13-03-2007 15:58 ]


Acties:
  • 0 Henk 'm!

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 20-09 08:54

Jimbolino

troep.com

leek het mij handig om de php-pagina op te splitsen in meerdere pagina's
Dat is juist niet handig, omdat je dan problemen krijgt (zoals je boven al noemt)

Als je een WHILE lus wilt maken, zou ik dat niet verdelen over meerdere php pagina's...

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
maak dan , wederom als je het zo nodig in meerdere files wilt splitsen, zoiets:

include('functions1.php');
include(functions2.php');
include(functions3.php');

for ($i=0; $i<count($my_array); $i++) {
if (bladibla) functionA(var1, var2);
if (blibli) functionB(var1,var2);
}

// waarbij functionA en functionB in functions1.php staan
// en functionC t/m functionQ in functions2.php staan
// en functionR in function3.php staat

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Het klinkt alsof je een cronjob uit laat voeren door in firefox met een bepaalde (lokale) PHP pagina te openen? Is dat het geval? Zoja, begin dan eens met de cronjob de command line php interpreter te laten gebruiken.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 13 maart 2007 @ 15:53:
[...]
Ik zal toch een php script dat dat aangeroepen gebruikt wordt als cronjob moeten testen ...
Ik heb het in meerdere pagina's gesplitst, omdat ik anders 1 gigantische for-loop krijg (denk ik).
Aha, nu snap ik waarom je het over Firefox hebt. Je moet je echter wel realiseren dat een script als cron job draaien totaal iets anders is dan het schrijven van een script voor een webpagina.

Om te beginnen heeft header("Location: xxx") in een cronjob natuurlijk geen zin, omdat er geen browser is om die redirect te volgen.

Wat je waarschijnlijk wilt, als je je script over meerdere files wilt verdelen, is het gebruik van includes.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee ik wil die cronjob niet in de browser uitvoeren, maar ik testte het script in Firefox.

Waarom ik het ook niet in 1 bestand wil doen is het geheugengebruik.

Maar misschien moet ik gewoon iedere loop geheugen vrijgeven?
En zou ik dan het beste een class ervoor kunnen schrijven?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Begin dan eerst eens met testen op de commandline. Heb je ook meteen geen last meer van timeouts en dat soort zaken. Daarnaast werken "trucjes" als header('Location: <>'); dan ook niet meer dus daar zul je wat anders voor moeten verzinnen (zoals bijv. een include).

Via firefox testen heeft dus vrij weinig nut.

Als je je script zo hebt gemaakt zodat je het vanaf de commandline kan uitvoeren ga dan pas eens kijken of je echt zoveel geheugen gebruikt als je zelf denkt. Waarschijnlijk valt het nogal mee. Of je nu teveel geheugen gebruikt of niet kunnen wij hier in elk geval niks zinnigs over zeggen aangezien we geen idee hebben wat je allemaal in je scripts aan het uitvoeren bent.

Of je hier dan het beste een class voor kan schrijven, geen idee.

[ Voor 41% gewijzigd door Creepy op 13-03-2007 16:31 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hoe test ik op de commandline als ik geen SSH / terminal toegang heb?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Wedervraag: hoe ga je een cronjob instellen als je geen SSH / terminal toegang hebt?

En tip: maak aub 1 script dat het geheel regelt i.p.v. dat je meerdere scripts hebt die elkaar gaan aanroepen. Nogmaals: vanaf de commandline heb je geen last van bijv. timeouts als je php script te lang runt.

[ Voor 55% gewijzigd door Creepy op 13-03-2007 16:35 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Simpelantwoord: Plesk

En om je voor te zijn: ik kan SSH toegang niet inschakelen via Plesk en de provider wil het niet inschakelen.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Ok, en als je een script maakt zonder gebruik van header('Location: <>') geintjes en dat vanuit Firefox gaat testen, wat voor problemen op timeouts na hou je dan nog over?

En offtopic maar alsnog: weet je zeker dat je provider het wel leuk vindt dat je zelf willekeurige cronjobs kan instellen terwijl je geen commandline toegang hebt? Weet je ook zeker dat PHP-CLI is geinstalleerd en dat je daar gebruik van kan maken?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is onze eigen server (tsja, waarom ze dan SSH toegang willen geven is me ook een raadsel).
Zou best eens handig zijn ... Nouja, ik ga het nu herschrijven naar 1 bestand.
Bedankt voor jullie hulp en ik ben weer wat wijzer geworden.
Pagina: 1