Добрый день всем! Возникло у меня 2 вопроса: 1. Есть скрипт, который должен выполняться по крону. Как запретить его выполнение в браузере, и оставить доступ к нему только для крона? 2. Так же запретить выполнение скрипта в браузере, но разрешить обращаться к нему боту месседжера Телеграм? Подскажите пожалуйста, как это правильно делается? А то раньше как-то не приходилось с таким сталкиваться...
@Griffter, например, в зависимости от информации, предоставленной php_sapi_name() Можно так-же где-нибудь определить какую-нибудь константу и проверять её наличие/отсутствие...
Всегда возвращает "cgi-fcgi", хоть с браузера я обращаюсь, хоть с крона, хоть телеграм присылает данные... А вот на счет идентификатора - это идея. Повесил вебхуки телеграма с get параметром, который буду проверять у себя на стороне. Всё работает. Большое спасибо за помощь! Я это первым делом пробовал сделать. Для крона это решение прокатывает, он отрабатывает нормально. А вот при обращение с Телеграма логирует "client denied by server configuration:"... Вам тоже большое спасибо за подсказку. Пусть пока работает с идентификатором, правда не знаю насколько это правильно вообще...
у тебя по крону через http:// обращение идёт? если нет, то это ненормально, что cgi-fcgi. cli и cgi это разные вещи.
Да, получаю такие параметры: Спойлер: var_dump Код (Text): object(Telegram\Bot\Objects\Update)#19 (1) { ["items":protected]=> array(2) { ["update_id"]=> int(349320791) ["message"]=> object(Telegram\Bot\Objects\Message)#23 (1) { ["items":protected]=> array(5) { ["message_id"]=> int(2265) ["from"]=> object(Telegram\Bot\Objects\User)#27 (1) { ["items":protected]=> array(5) { ["id"]=> int(507935014) ["is_bot"]=> bool(false) ["first_name"]=> string(3) "Max" ["last_name"]=> string(8) "Max" ["language_code"]=> string(5) "ru-RU" } } ["chat"]=> object(Telegram\Bot\Objects\Chat)#28 (1) { ["items":protected]=> array(4) { ["id"]=> int(507935014) ["first_name"]=> string(3) "Max" ["last_name"]=> string(8) "Max" ["type"]=> string(7) "private" } } ["date"]=> int(1510060677) ["text"]=> string(43) "Получить идентификатор" } } } } Позже проект будет перенесен на VPS и тогда уже будет настраиваться нормально, а на данный момент он находиться на обычном хостинге для тестирования. На хостинге есть свой крон, у которого выставляются параметры: Выберите способ запуска (Браузер или PHP интерпретатор) - если использовать настройку "браузер", тогда выбирается протокол передачи и путь к скрипту. В этом случае скрипт будет запускаться как http://site.ru/public_html/cron.php - если выбрать "интерпретатор PHP", тогда выбирается версия PHP и путь к скрипту. Запуск будет по /home/lunar/domains/site.ru/public_html/cron.php Но хоть как его не запускай, всё равно приходит "cgi-fcgi"... Может просто хостинг такой корявый...
ну так вот тебе и рычаг. Есть параметры - работаем, нет параметров - редирект и exit; --- Добавлено --- или так: ложишь скрипт выше доменной папки. А в доменной папке, где тебе удобно, лежит другой скрипт, который принимает параметры от бота. Если параметров нет, то редирект и exit; если есть - то инклюишь файл, который выше доменной папки. а из крона дергаешь его на прямую.
перепроверь себя. другие конечно тоже могут ошибаться, но более вероятно что ошибаешся ты с уверенностью 99% крон при обращении через файловую систему должен использовать cli. по опыту разбора 1001 косяка здесь на форуме, проблема обычно оказывается в суетливости поциента и нежелании вникать в подсказки. в случае телеграма, конечно это будет доступ через веб. так что, возможно тебе и не нужна проверка веб / не веб. только на длостаточность и достоверность параметров. может ещё и по белому списку IP стоит ограничить.
Я бы конечно хотел ошибаться, но не в этот раз. Не знаю как правильно пруфы показать... В общем запущено сейчас 2 крона: один использует браузер, другой - интерпретатор. В логах обращений показывается только один крон, который использует браузер (и это логично в принципе) Код (Text): 176.9.139.114 - - [07/Nov/2017:17:36:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0" 176.9.139.114 - - [07/Nov/2017:17:37:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0" 176.9.139.114 - - [07/Nov/2017:17:38:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0" 176.9.139.114 - - [07/Nov/2017:17:39:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0" 176.9.139.114 - - [07/Nov/2017:17:40:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0" А в логах по запуску скрипта записывается: Код (Text): 2017-11-07 17:36:01 - cgi-fcgi 2017-11-07 17:36:01 - cgi-fcgi 2017-11-07 17:37:01 - cgi-fcgi 2017-11-07 17:37:01 - cgi-fcgi 2017-11-07 17:38:01 - cgi-fcgi 2017-11-07 17:38:01 - cgi-fcgi 2017-11-07 17:39:01 - cgi-fcgi 2017-11-07 17:39:01 - cgi-fcgi 2017-11-07 17:40:01 - cgi-fcgi 2017-11-07 17:40:01 - cgi-fcgi В одно и тоже время есть по две записи, так как отработало 2 разных крона, вот только интерфейс одинаковый у них... Может конечно это смутное доказательство, но я не знаю как по другому проверить.
А вот на OpenServer`e локальном всё нормально показывает. Код (Text): 2017-11-07 18:25:58 - apache2handler 2017-11-07 18:26:19 - cli 2017-11-07 18:32:01 - cli apache2handler - при использовании браузера cli - при запуске скрипта вручную через cmd и при запуске кроном.
как всё сложно ))) а такой вариант - настоящий крон тупо не работает, поэтому нет данных о нём - ты рассматривал?
Не, ну крон в любом случае работает и один и второй. Я пробовал способы и по отдельности их запускать и на других скриптах. Вот только не понятно каким методом оно его запускает, когда выставляешь запуск с помощью "Интерпретатора PHP". Странно в общем это всё... В любом случае спасибо! В дальнейшей разработке учту все эти моменты.