Дополнительно
Передача параметров $_GET в задание cron
Я новичок в заданиях cron и не уверен, что это сработает.
В целях безопасности я подумал о создании одностраничного скрипта, который ищет определенные значения GET (имя пользователя, пароль и код безопасности), чтобы убедиться, что только компьютер и кто-то, кто знает все три значения, может выполнить команду.
Я создал скрипт, и он работает, запуская его в браузере, но можно ли запустить задание cron с GET-значениями?
Например, я могу запустить
* 3 * * * /path_to_script/cronjob.php?username=test&password=test&code=1234
Возможно ли это?
34
8
Ассоциативные массивы
$_GET[]
и$_POST[]
инициализируются только при вызове вашего скрипта через веб-сервер. При вызове через командную строку параметры передаются в массиве$argv
, как и в C.Ваша команда будет выглядеть следующим образом:
Затем вы используете parse_str() для установки и доступа к параметрам:
Это не прямой ответ на ваш вопрос, но, на мой взгляд, лучшее решение:
Если вы хотите, чтобы никто, кроме cron, не запускал скрипт, просто поместите его вне web-root. Таким образом, не будет никакого доступа через веб-сервер вообще.
Если вам нужно запускать команду и от имени специального пользователя, не используйте
GET
, а пусть пользователь войдет в систему и проверит наличие зарегистрированной сессии (определенная переменная сессии...) и включит скрипт только в эту страницу.Ваш общедоступный скрипт будет выглядеть примерно так:
Это не будет работать
Это работает
Кроме того, нужно использовать parse_str() функцию и получить значение
Вы должны смотреть на get_opt() или $массива argv Функция.
Я понимаю, что этот пост уже несколько лет, но это помогло мне больше всего, так что позвольте мне поделиться своими находками, а также помогать другим тоже.
Я'м с помощью DirectAdmin и мои примеры хрон работают оба. Я удалил мой адрес из 'послать все выходные cron для электронной почты' я не'т получать уведомления по электронной почте моей задачи cron.
Я начинала с просьбой завиток, который ходит каждые 20 минут:
Обратите внимание, что ' ' вокруг URL-адрес, в противном случае вы можете'т добавить несколько параметров!
Я использую эту страницу как API вдохновил способ инициировать обновление некоторые статистические данные я собираю с другого сайта и что другие могут захватить в виде JSON от моего. Параметр 'обновление' запускает процесс обновления и в параметре 'ключ' будет, после проверки, инициировать дополнительные действия по обновлению я хочу только быть сделано, когда по расписанию запросов на обновление.
Поскольку выше расписанию, в основном потребляет пропускную способность в обоих направлениях я хотел поехать на PHP основан расписанию, но столкнулся с проблемой с параметрами... так вот когда я нашел этот пост, который спас мой день :)
Как вы можете видеть имя файла (index.php) теперь в путь, а затем выполните параметров (без ? и &'ы).
Таким образом, вы получите расписанию, но вы'вновь только половину пути, так как параметры выиграл'т быть передан через параметр
$_GET
... что немного раздражает, когда вы'вэ закодированный скрипт с проверками на параметр$_GET
ключи!Итак, как это работает тогда? Простой (по крайней мере, после некоторых исследований), в процентах передает параметры скрипту через переменную
$массива argv
.Так что знаний я искал способ, чтобы преобразовать
$массива argv
в параметр$_GET
так:Я нашел следующее решение, которое мы хотим выполнить, когда
$массива argv
на самом деле множество, так что я завернула его в если isset и проверить:Надеюсь, что это тоже помогает :)
Это сработает:
Я найти его полезно использовать функцию использования getopt () `когда мне нужны параметры из cron или командной консоли.
* Следующие примеры были напрямую взяты из документации к PHP.**
Результатом выполнения данного примера будет:
Дополнительные функции и различные параметры взглянуть на полную документацию.
Ресурсы
имя=тест&ампер;пароль=тест&код=1234
стал:
РНР -Р " и переменная$_GET["по имени", У]=с"тест" у; переменная $_GET["и пароль", У]=с"тест" у; переменная $_GET [фильм"код" и]=и"1234" у; включать "и РГ-хрон.РНР и";'