Toon posts:

Crontab execute php met redirect/post

Pagina: 1
Acties:
  • 882 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Na lang zoeken op verschillende fora ben ik nog niet tot een oplossing gekomen voor mijn probleem:

Ik wil middels crontab een php file executen die vervolgens (op een ander domein) een php script kan aanroepen.

Deel 1 werkt uitstekend: Ik execute een php file (cron.php) en ontvang een mail van de deamon (inhoud/echo van info2.php). Ik kan ook andere php files includen (zie voorbeeld).

Crontab:
2 * * * * /usr/local/bin/php -q /home/webstones/domains/webstones.memo2.nl/public_html/cronolator/cron.php

(Uiteraard op 1 regel...)


cron.php
#!/usr/local/bin/php
<?php

//bij wijze van demonstratie
include ('info2.php');

?>


Zover werkt alles dus uitstekend.

Vervolgens wil ik een php file aanroepen op een (willekeurige) server, bijvoorbeeld http://www.voorbeeld.nl/dir/aan_te_roepen_file.php

Om dit te bereiken heb ik een aantal dingen geprobeerd:
Onderstaande code in cron.php

(1) Redirect
header("Location: http://ect...");

cron.php aanroepen in browser werkt, maar niet via de crontab


(2) Aanroepen javascript / plaatje middels html
echo '
<html>
<head>
<title>Run script</title>

<script language="javascript" type="text/javascript" src="http://www.voorbeeld.nl/test1.php"></script>
</head>
<body>
<img src="http://www.voorbeeld.nl/test2.php">
</body>
</html>

';

test1.php geeft een correcte javascript header, test2.php geeft een correcte img header. Beide werken uitstekend wanneer cron.php wordt aangeroepen in een browser, maar html wordt niet 'verwerkt' via de crontab, en de deamon stuurt me een mailtje met daarin het html script.


De vorm van een oplossing waar ik naar zoek:
(1) php redirect mogelijk maken via crontab
(2) crontab instellen zodat een html ge-execute wordt.

Kan iemand me verder helpen met dit probleem?

Verwijderd

De html-code in de e-mail die je krijgt klopt dus wel?

Dan moet je de e-mail verzenden op deze manier:
PHP:
1
mail("ontvanger@domein.nl", "Onderwerp", "Bericht", "From: afzender@domein.nl\nContent-Type: text/html; charset=iso-8859-1");

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 10:56

orf

Je PHP code wordt ge-execute. De html en headers die je output worden dus niet door een browser gelezen. En dus wordt er ook geen plaatje remote opgehaald of een nieuwe location gevolgd.

Je kunt met PHP een readfile doen (of een socket, of iets met curl). Of je execute je PHP script niet, maar roept het aan met bijvoorbeeld wget.


edit: @hierboven: Is dit een reply op een ander topic?

[ Voor 8% gewijzigd door orf op 21-01-2008 16:12 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Euhm, schat, een cron-daemon is géén browser of iets dergelijks. Zulke grappen gaan dus ook helemaal niet werken? De output van PHP zal wel ergens @ cron aankomen als stdin ofzo, maar enige wat ie doet is mailen.

Wat jij wilt is CURL gebruiken in je script. Daarmee kun je een externe pagina (je info2.php ofzo) aanroepen vanuit PHP zelf.

Verwijderd

Dat kan je zo doen:

code:
1
/usr/bin/lynx -source http://example.com/cron.php


of

code:
1
/usr/bin/wget -O - -q http://example.com/cron.php


De oplossingen die je gegeven hebt werken niet omdat de php executable geen browser is, en dus niet de header volgt die je opgeeft of javascript uitvoerd. php is alleen de interpreter die de code omzet in bijvoorbeeld html output, een browser moet dit vervolgens nog verwerken.

[ Voor 45% gewijzigd door Verwijderd op 21-01-2008 16:22 ]


Verwijderd

Topicstarter
@orf & Osiris,

Met de curl methode is de klus geklaard. Dit was de oplossing waar ik naar zocht! Bedankt voor de uitleg en link.

@flupzor,

De wget methode heb ik ook geprobeerd, maar helaas zonder gewenst effect. Wget is geïnstalleerd maar lijkt de php code niet te executen? :?


Voor mensen met hetzelfde probleem; de oplossing:

<?php
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://dev.memo2.nl/cron_script_test/test2.php?u=punof");
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);
?>

Source: http://de3.php.net/manual/en/function.curl-exec.php

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op maandag 21 januari 2008 @ 16:56:
@flupzor,

De wget methode heb ik ook geprobeerd, maar helaas zonder gewenst effect. Wget is geïnstalleerd maar lijkt de php code niet te executen? :?
Ik snap dat je probleem nu opgelost is, maar vindt je bovenstaande werkelijk zo vreemd? Want ik gok dat je in je cron-testje met wget als parameters het PHP-bestand op je hdd aanriep. Misschien moet je je eerst eens inlezen hoe/wat de diverse programma's wel en niet doen en wat je wel en niet kunt combineren.
Pagina: 1