Cron a kdo vlastně spouští skript? Démon v pozadí nebo uživatel v prohlížeči?

Triviální zamyšlení nad tím jak rozpoznat, kdo pracuje se skriptem, zda uživatel anebo je skript volán cronem?


Zase další z řady triviálních článků na jeden řádek. Potřebujete zjistit jestli skript spouští uživatel v prohlížeči nebo ho spustil nějaký démon na serveru? Např. cron?

Minulý článek se zabýval přesměrováním skriptu v případě, že spouští akci cron, v případě, že ji spouští uživatel v prohlížeči je nutné použít header, naopak u cronu použijete cURL.

Jak poznat, kdo akci inicioval? Já to dělám takhle:

  1. if ($_SERVER['SERVER_ADDR']==$_SERVER['REMOTE_ADDR'])

$_SERVER['SERVER_ADDR'] - zjistí adresu IP serveru
$_SERVER['REMOTE_ADDR'] - zjistí adresu IP uživatele

Máte lepší nápad? Hlavičky mne přišli nejednoznačné.

Dále, si ale nejsem jist touto metodou např. u XMLRPC, tam budou adresy rozlišné, ale opět je nutné použít cURL.

podobné články

27.11.2008Cron a přesměrování, aneb jak na procesy v pozadí(29%)
27.06.2008XML-RPC přes CURL, aneb jak odeslat XML soubor vzdálené službě, když nemáme allow_url_fopen(29%)
10.07.2008Jak správně nastavit cron, aneb cron every 30 minutes(14%)
27.06.2008CURL, jak načíst obsah url, když nefunguje file_get_contents(14%)
07.06.2008Jak zjistit S-Rank pomocí XML-RPC(14%)

komentáře

RSS Komentáře k článku RSS Komentáře   Add to Google
04.12.2008 01:49 | Anonym (starenka) | ip

Asi by nemela v rozumne nastaveny siti kolize ip serveru a klienta (premejslel jsem nad intranetem). Jen me napadlo, cron hazi nejakej User-Agent? (ikdyz, prohlizec ho samozrejme muze taky blokovat, ze…)

04.12.2008 01:56 | Anonym (starenka) | Re: ip

Mozna me napadlo neco elegantnejsiho. Co takhle kdyz skript poustim z CLI (cron) mu pridat parametr…

php /www/debug/test.php ‚dummy‘

v tom pripade pak muzes testnout: sizeof($_SYSTEM['ar­gv]>1)

kdyz je vetsi jedne, volas z CLI a naopak…

04.12.2008 01:57 | Anonym (starenka) | Re: Re: ip

oprava:

sizeof($_SERVER[‚ar­gv‘])>1

uz na to nevidim :))

04.12.2008 07:52 | Administrátor | Re: Re: Re: ip

máš na mysli, přidat ten parametr přímo do systému, aby ke každému cron příkazu přidával parametr?pokud tak, je to opět hodně vázané na určité nastavení, nepřenositelné, porovnání IP je stejně tak spolehlivé ne? co se týče kolize IP, myslel jsem to jinak, tady šlo o to spustit skript v pozadí v případě, že komunikuje stroj a přesun na jiný skript nelze provést pomocí hlaviček, tedy klasický případ XML-RPC, tam se IP nebudou shodovat, ale ke spuštění skriptu také nelze použít hlavičky

04.12.2008 11:10 | Anonym (starenka) | Re: Re: Re: Re: ip

Jo, pridat ten parametr do cronu. Nechapu co je na tom nespolehlivyho. Tahle situace nemuze nastat nikdy jindy nez pri spusteni z CLI. Neprenositelny? Vazany? Ale procpak?

Ty ip adresy muzou bejt za zvlastnich okolnosti stejny.

05.12.2008 09:07 | Administrátor | Re: Re: Re: Re: Re: ip
  1. Neprenositelny ve chvili, kdy celou aplikaci za rok, či dva fungování zkopíruješ na jiný server, zapomeneš na toto nastavení a budeš dlouho zjišťovat proč to nejede.
  2. Stále to neřeší problém komunikace strojů, kteří nepřistupují pomocí browseru, článek je o volání skriptu v pozadí nebo přesměrování skriptu v případě, že nelze použít header. Tedy jak identifikovat stroj a jak browser.
04.12.2008 07:48 | Administrátor | Re: ip

cron se mi hlásí jako user-agent: Wget/1.1 to asi nebude to pravé, obávám se, že na to se spolehnout nedá, resp. chtěl bych něco spolehlivějšího

28.12.2008 10:47 | Anonym (patrik) | jednoduche

lehke: cron: script.php?cron=1 web: script.php

28.12.2008 16:25 | Administrátor | Re: jednoduche

může se zdát, ale není to ono, řešení je potřeba hledat na systémové úrovni, nejedná se pouze o cron jak napovídá předchozí článek, ale o všechna volání, kde nelze použít „header“, strojová volání XML-RPC, SOAP (obecné třídy, které nemohou být závislé na subjektivních nastaveních) a defaultně přidávat parametr do url nemusí být snadno proveditelné

Jméno
Název
Text
Lze používat Texy! syntax. Příklad syntaxe: "text odkazu":odkaz, **tučně**, *kurzíva*, `code`. PHP kód uzavírejte do <?php ... ?> a JavaScript do <script> ... </script>