Toon posts:

[perl/php] php bestand openen op server

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het schijnt te kunnen om met Perl automatisch een php-bestand aan te roepen zonder dat er iemand is die op je site komt.
Ik wil het gebruiken om elke dag een script uit te laten voeren dat checkt of leden bepaalde gegevens ingevuld hebben.
Nu kan ik wel php maar nog bijna niets van perl, ben ik me nu dus op aan het storten maar ik zoek de functie om dat php bestand te openen. redirect() lijkt me daar niet geschikt voor omdat je dan een browser nodig hebt en open() is het denk ik ook niet.

welke functie is het wel?

bvd.
warner

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

[search=cron perl]
let vooral op de topics die over een cronjob of crontab gaan.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • tomato
  • Registratie: November 1999
  • Niet online
Nee, dit kan niet met perl zoals jij bedoelt (of dan kan het net zo goed met PHP als met perl).

Kijk eens naar crontab waarmee je cronjobs kunt draaien (wanneer je in een unix/linux/bsd/.. omgeving werkt, onder Windows kun je zoiets als Taakplanner gebruiken).

Verwijderd

Op dinsdag 29 januari 2002 15:52 schreef warner het volgende:
Ik wil het gebruiken om elke dag een script uit te laten voeren dat checkt of leden bepaalde gegevens ingevuld hebben.
Waarom zou je dit dmv twee verschillende scripts doen? Waarom niet gewoon met 1 PHP script of 1 perl-script? En dan inderdaad dat script vanuit een cron-job aanroepen.

Verwijderd

Topicstarter
bedankt voor de reacties. als het even kan zou ik het toch graag met Perl doen, ik mag namelijk geen cronjobs draaien op mijn server. :'(

Als het echt niet mogelijk is om een php-bestand aan te roepen zoals dat met cronjobs gebeurt dan moet het maar helemaal in perl maar liever vanuit perl dat bestand aanroepen,

is er stiekem niet toch ergens zo'n functie?

Verwijderd

Zelfs perl, wat toch een fantastisch taaltje is, kan je niet instrueren zichzelf eens in de zoveel tijd op te starten. Hier heb je toch echt iets externs zoals cron voor nodig. ;)

Helaas...

Wel kan je zelf dat script dagelijks zelf gaan aanroepen, maar dan geldt de opmerking uit mijn vorige post nog steeds.

Verwijderd

Topicstarter
daar had ik al wat op gevonden. met iets van sleep() kan je zorgen dat het om de 60*60*24 seconden een actie uitvoert. dan hoeft het niet steeds opnieuw opgestart te worden. ik neem aan dat het programma dan actief blijft zolang de server aanstaat. toch?

  • tomato
  • Registratie: November 1999
  • Niet online
Als je een drukbezochte website hebt zou je ook ergens op een pagina een stukje code kunnen plaatsen die dit doet (en bijhoudt of dat die dag al gebeurd is). Maar da's wel erg ranzig eigenlijk.

Verwijderd

Topicstarter
Op dinsdag 29 januari 2002 16:18 schreef tomato het volgende:
Als je een drukbezochte website hebt zou je ook ergens op een pagina een stukje code kunnen plaatsen die dit doet (en bijhoudt of dat die dag al gebeurd is). Maar da's wel erg ranzig eigenlijk.
en ook niet zo handig in dit geval omdat er niet elke dag iemand op die site komt (het gaat natuulijk nog wel heel erg druk zijn) maar vooral omdat het kan zijn dat de pechvogel moet gaan wachten tot er 20 mailtjes verstuurd zijn.

Verwijderd

Nee, dat klopt niet, 'sleep()' pauzeert het programma zoveel seconden, gaat dan verder met h et prog en stopt dan.

Het is sowieso heel smerig om een script altijd te laten runnen, en als het niet jouw server is kan je daar mee in de problemen komen. Maar goed, een gewaarschuwd mens telt voor 2.

Wat je kan doen is dit:
code:
1
2
3
4
5
6
7
#!/usr/bin/perl -w

while(1) {
   # doe je ding hier
   
   sleep(86400);
}

Ik heb hier de actie eerst staan, zodat als je het script de eerste keer start hij meteen de actie uitvoert en daarna elke keer 24 uur later hetzelfde. Andersom zou je 24 uur moeten wachten tot hij de actie voor het eerst uitvoert.

Nogmaals, het is natuurlijk eigenlijk geen oplossing voor in een productie-omgeving.

Verwijderd

Topicstarter
nu is mijn broertje mijn host, dus ruzie zal het niet worden maar vreet het veel tijd? als zo'n programma blijft draaien?
en die actie die uitgevoerd moet worden, is daar een functie voor? ik hoop het nog steeds en als jij zegt dat het niet zo is dan ga ik het anders proberen. (hoe weet ik nog niet)

  • tomato
  • Registratie: November 1999
  • Niet online
nonomen:
Wat je kan doen is dit:

[code]

Nogmaals, het is natuurlijk eigenlijk geen oplossing voor in een productie-omgeving.
Nee, dat is zeker >:) ;)

Ik zou je dit dan ook eigenlijk niet aanraden. Misschien is het voor jou dan een oplossing om te doen wat ik in mijn vorige reactie voorstelde, maar dan in je pagina een script command line te runnen zodat er niet gewacht hoeft te worden (maar dan heb je nog steeds een probleem als er een dag niemand de site bezoekt).

  • tomato
  • Registratie: November 1999
  • Niet online
warner: ik mag namelijk geen cronjobs draaien op mijn server.
nu is mijn broertje mijn host
Misschien wil je broertje zelf wel een cronjob draaien waarin hij een script van jou uitvoert (onder jouw user), dan heeft hij er toch controle over...

Verwijderd

je kan in perl wel een extern programma aanroepen, als je dat bedoelt. Dus kan je (iig op linux, waarschijnlijk ook wel op Win) wel een php-script runnen op de command-line. Je kan zelfs de output ervan in je perl-script terugkrijgen.
code:
1
2
3
4
5
#!/usr/bin/perl -w
while(1) {
   `php phpscriptnaam.php`;   
   sleep(86400);
}

En let op, die ` is geen ' :P

Verwijderd

Topicstarter
Misschien is het voor jou dan een oplossing om te doen wat ik in mijn vorige reactie voorstelde, maar dan in je pagina een script command line te runnen zodat er niet gewacht hoeft te worden (maar dan heb je nog steeds een probleem als er een dag niemand de site bezoekt).
misschien is dat het wel. dan moet ik er genoegen meenemen dat ik wacht tot er iemand op de site. zal heus wel regelmatig gebeuren maar dat wachten vind ik vervelend. dan maak ik een script (zal dan wel helemaal perl worden als ik geen php-bestand aan kan roepen(toevallig nog iemand die denkt dat het wel kan? :9~ )) dat pas aan de gang gaat op een moment dat er niemand meer online is ofzo.

Verwijderd

Topicstarter
code:
1
2
3
4
5
#!/usr/bin/perl -w
while(1) {
   `php phpscriptnaam.php`;   
   sleep(86400);
}

En let op, die ` is geen ' :P
ik heb dit gedaan
code:
1
2
#!/usr/bin/perl -w
`php index.php`;

en die staan beide in de zelfde map in mijn htdocs. het script moet het genoemde bestand aanroepen maar hij vindt dat de opdracht of bestandsnaam verkeerd is. heb ik iets verkeerd gedaan.

ps. gaat toch niet lukken met de cronjobs.

Verwijderd

draai je op windows of linux?

windows: check of je PHP hebt geinstalleerd en of het commando om de PHP-interpreter te starten in de PATH staat.
Anders moet je dat commando (waarschijnlijk 'php') runnen met het volledige pad ervoor.
code:
1
`c:\padnaarphp\php script.php`;

linux: langer verhaal, laat me eerst maar even weten waar je op draait.

Verwijderd

Topicstarter
draai windows, apache, php

volgens phpinfo geen path naar php. ideetje hoe ik ga zorgen dat 'php' naar c:\php gaat verwijzen?

(php is als het goed is al geopend door apache. rest van de code in andere bestanden draait wel goed)

Verwijderd

Topicstarter
hij geeft inmiddels geen melding meer dat de bestandsnaam of opdracht verkeerd is, maar voert het doelbestand ook niet uit. (had anders een actie naar de database moeten versturen.

heb nu dit:
code:
1
2
#!/usr/bin/perl -w
`c:/php/ c:/apache/htdocs/cgi_try/index.php`;

  • tomato
  • Registratie: November 1999
  • Niet online
Zet er een php.exe achter: `c:/php/php.exe c:/apache/htdocs/cgi_try/index.php`;

Verwijderd

Topicstarter
ik heb nu dit:
code:
1
2
#!/usr/bin/perl -w
`C:/Php/php.exe C:/Apache/htdocs/cgi_try/index.php`;

ook alle hoofdletters aangepast enzo. het doelbestand werkt maar niet als het door mijn perlbestandje aangeroepen wordt.

ff bij de weg:
ik neem aan dat dit wel moet kunnen werken, dus hier kan ik ook op verder zoeken?

Verwijderd

Ik weet nu ook even niet precies wat er mis gaat, maar probeer dit eens:
code:
1
2
3
4
5
6
7
#!/usr/bin/perl -w

use strict;

my $msg = `C:/Php/php.exe C:/Apache/htdocs/cgi_try/index.php`;
print 'PHP returned: '
$msg ? print $msg : print 'Nothing';

dan kun je iig zien wat er al dan niet mis gaat.

Verwijderd

Topicstarter
dat laatste onthoud ik. hij geeft fouten. ik ga er gewoon lekker verder mee maar moet weer offline. hartstikke bedankt voor de hulp!! :)
Pagina: 1