Autor Zpráva
luma64
Profil
Pozdravujem ! Spúšťam cronom php script s parametrom. Script , keď spustím z prehliadača samozrejme zafunguje. Viem, že spúšťanie scriptu a z crontabu má rozdielne nastavenia. Problém je, keď sa ten istý script spúšťa (raz za hodinu). Vtedy sa script nevykoná, takto vyzerá príkaz:

Could not open input file: /adr1/adr2/nejaky_kod.php/?parameter=hodnota

Ďakujem za radu !
mckay
Profil
luma64:
Uživatel pod kterým se CRON spouští nemá (nejspíš execute/x) práva na ten soubor, co chcete spouštět. A nebo ta cesta, co uvádíte neexistuje z pohledu uživatele pod kterým je crontab nastavenej.
luma64
Profil
Do nedávna sa spúšťal script pod tým istým užívateľom , pridal som iba:
/?parameter=hodnota
Script sa vykonával pravidelne, výsledok bol vždy ako sa očakávalo.
mckay
Profil
luma64:
Potom mě napadá jestli náhodou nejde o to, že se to snaží najít složku /adr1/adr2/nejaky_kod.php/, a v ní soubor index.php. Když tu volanou adresu přeformulujete na /adr1/adr2/nejaky_kod.php?parameter=hodnota nezačne Vám to náhodou fungovat?
Davex
Profil
luma64:
Podle chyby se skript spouští přímo pomocí programu PHP, kde se musí parametry používat jinak než při volání skriptu skrz webserver. Viz www.php.net/manual/en/features.commandline.usage.php
luma64
Profil
Vďaka všetkým ! Takže správne to má byť na strane cronu, bez parametra s otáznikom, teda nie ako zvyčajne v php :
/adr1/adr2/nejaky_kod.php "nejaka_hodnota"
V php načítam parameter "nejaka_hodnota" cez argument príkazom $_GET['vstup'] = $argv[1];
a potom už môžem s dodanou hodnotou pracovať.
mckay
Profil
To je jedna možnost. Pokud ale stále budete chtít mít možnost pouštět skript i přes web adresu, tak by dávalo smysl přes isset() kontrolovat přítomnost toho $_GET['vstup'] a v závislosti na tom, jestli je to nastavené buď vracet tu hodnotu, nebo argv pokud ne. Použil bych tam pro tu kontrolu asi tzv. Ternární operátor.
Keeehi
Profil
<?php
if (PHP_SAPI === 'cli') {
    // konzole (neboli cron), tudíž 
    $vstup = $argv[1];
} else {
    // browser, tudíž
    $vstup = $_GET['vstup'];
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0