Определить, что скрипт запущен из под cron

Shasoft

Новичок
Определить, что скрипт запущен из под cron

Про крону запускается скрипт. Можно ли определить в скрипте: запущен он по крону или просто пользователь запросил страницу браузером?
 

Вурдалак

Продвинутый новичок
Зависит от того, как именно ты запускаешь скрипт. Если через wget, то, по идее, $_SERVER['REMOTE_ADDR'] должна быть "127.0.0.1", если непосредственно через интерпретатор запускаешь — $_SERVER['REMOTE_ADDR'] вообще будет неопределена.

-~{}~ 18.01.10 23:25:

Хотя это может быть эдаким костылём, подождём более знающих, самому проверять лень.
 

vovanium

Новичок
если скрипт запущен из командной строки, то смотреть $agvc и $argv
 

Shasoft

Новичок
triumvirat
Возможно, но тогда появляется возможность набрать данный адрес в браузере и запустить скрипт.
В принципе я вижу решение - это вместо cron=1 передавать не 1, а более сложный ключ и в скрипте его проверять. Если он соответствует, то значит по cron-у запущено. Если нет- то значит пользователь балуется.

Была надежда, что в случае запуска через крон какой-то заголовок хитрый устанавливается. который можно отловить. Но раз ничего такого похоже нет, пойду сложным путем.
 

Вурдалак

Продвинутый новичок
Автор оригинала: Shasoft
triumvirat
Возможно, но тогда появляется возможность набрать данный адрес в браузере и запустить скрипт.
В принципе я вижу решение - это вместо cron=1 передавать не 1, а более сложный ключ и в скрипте его проверять. Если он соответствует, то значит по cron-у запущено. Если нет- то значит пользователь балуется.

Была надежда, что в случае запуска через крон какой-то заголовок хитрый устанавливается. который можно отловить. Но раз ничего такого похоже нет, пойду сложным путем.
— моё сообщение не осилил?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
диву даешься, читая некоторых наших экспертов - ниче не знают по теме, но так серьезно рассуждают!

-~{}~ 19.01.10 01:34:

Shasoft
определи цель своей задачи:
а) запретить вызов пользователями
б) определить, что скрипт вызван через командную строку, а не браузером
в) использовать демон crond и делать что-то очень необычное

-~{}~ 19.01.10 01:37:

Вурдалак, triumvirat, vovanium, LeoKee
про ф-ю php_sapi_name() никто не слышал, да?

-~{}~ 19.01.10 01:39:

узнать о вызове из консоли и по крону можно
PHP:
if ('cli' ==  php_sapi_name()) echo 'Running from a command prompt';
 

Вурдалак

Продвинутый новичок
Автор оригинала: grigori
Вурдалак, triumvirat, vovanium, LeoKee
про ф-ю php_sapi_name() никто не слышал, да?
Нет, я не слышал. Но подозревал:
Автор оригинала: Вурдалак
Хотя это может быть эдаким костылём, подождём более знающих, самому проверять лень.
Опустил, да? :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
прости за резкость
я лишь не понял флейм из-за одной базовой ф-ции или константы из учебника

да, кстати, а многие вызывают свои скрипты по крону через wget?
 

fixxxer

К.О.
Партнер клуба
>>да, кстати, а многие вызывают свои скрипты по крону через wget?

рукожопию пределов нет ;)

и все познается в сравнении ;) вот разгребаю тут сижу всякое, и понимаю, что раньше на людей часто ругался зря, и те люди писали прекрасный код.
 

Shasoft

Новичок
Всем спасибо за ответы. До этого ни разу не работал с cron, так что сорри за тупизм. :)

Направление поисков теперь известно, буду дальше сам разбираться.
 

Alexandre

PHPПенсионер
и все познается в сравнении вот разгребаю тут сижу всякое, и понимаю, что раньше на людей часто ругался зря, и те люди писали прекрасный код
5 баллов!

теперь по теме:
если хотите, чтоб скрипт запускался только по крону, так сделайте так, чтоб из браузера не было к нему доступа.
И вообще, надо строить WEB приложение таким образом, чтоб в httpdoc директории был только один файл : index.php
 

vovanium

Новичок
grigori
Ну и чем использование $argc
PHP:
if(!empty($argc)) echo 'Running from a command prompt';
хуже от использования php_sapi_name() ?

Кроме того в php_sapi_name не всегда ожидаемые результаты выдает.
Note, that the php-cgi binary can be called from the command line, from a shell script or as a cron job as well! If so, the php_sapi_name() will always return the same value (i.e. "cgi-fcgi") instead of "cli" which you could expect.
 
Сверху