kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Dfranc3373
Dfranc3373
Вопрос

Передача параметров $_GET в задание cron

Я новичок в заданиях cron и не уверен, что это сработает.

В целях безопасности я подумал о создании одностраничного скрипта, который ищет определенные значения GET (имя пользователя, пароль и код безопасности), чтобы убедиться, что только компьютер и кто-то, кто знает все три значения, может выполнить команду.

Я создал скрипт, и он работает, запуская его в браузере, но можно ли запустить задание cron с GET-значениями?

Например, я могу запустить

* 3 * * * /path_to_script/cronjob.php?username=test&password=test&code=1234

Возможно ли это?

34 2012-07-02T16:53:34+00:00 8
 Cœur
Cœur
Редактировал вопрос 31-го декабря 2016 в 6:15
Программирование
cron
linux
php
get
Решение / Ответ
 RobB
RobB
2-го июля 2012 в 4:57
2012-07-02T16:57:55+00:00
Дополнительно
Источник
Редактировать
#16584356

Ассоциативные массивы $_GET[] и $_POST[] инициализируются только при вызове вашего скрипта через веб-сервер. При вызове через командную строку параметры передаются в массиве $argv, как и в C.

Содержит массив всех аргументов, переданных скрипту при запуске из командной строки.

Ваша команда будет выглядеть следующим образом:

* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234 

Затем вы используете parse_str() для установки и доступа к параметрам:

<?php

var_dump($argv);

/*
array(4) {
  [0]=>
  string(27) "/path_to_script/cronjob.php"
  [1]=>
  string(13) "username=test"
  [2]=>
  string(13) "password=test"
  [3]=>
  string(9) "code=1234"
}
*/

parse_str($argv[3], $params);

echo $params['code']; // 1234
Timo Tijhof
Timo Tijhof
Редактировал ответ 23-го мая 2016 в 10:35
84
0
 jeroen
jeroen
2-го июля 2012 в 4:55
2012-07-02T16:55:52+00:00
Дополнительно
Источник
Редактировать
#16584354

Это не прямой ответ на ваш вопрос, но, на мой взгляд, лучшее решение:

Если вы хотите, чтобы никто, кроме cron, не запускал скрипт, просто поместите его вне web-root. Таким образом, не будет никакого доступа через веб-сервер вообще.

Если вам нужно запускать команду и от имени специального пользователя, не используйте GET, а пусть пользователь войдет в систему и проверит наличие зарегистрированной сессии (определенная переменная сессии...) и включит скрипт только в эту страницу.

Ваш общедоступный скрипт будет выглядеть примерно так:

session_start();

if (isset($_SESSION['user']))
{
  include '/path/to/script/outside/of/web-root';
}
else
{
  die('No access.');
}
 jeroen
jeroen
Редактировал ответ 2-го июля 2012 в 5:04
10
0
 Ambarish
Ambarish
15-го июня 2015 в 7:56
2015-06-15T07:56:17+00:00
Дополнительно
Источник
Редактировать
#16584358
* 3 * * * /path_to_script/cronjob.php?username=test&password=test&code=1234

Это не будет работать

* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234

Это работает

Кроме того, нужно использовать parse_str() функцию и получить значение

$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
 Goose
Goose
Редактировал ответ 10-го ноября 2015 в 9:58
5
0
Mike Mackintosh
Mike Mackintosh
2-го июля 2012 в 5:00
2012-07-02T17:00:55+00:00
Дополнительно
Источник
Редактировать
#16584357

Вы должны смотреть на get_opt() или $массива argv Функция.

1
0
 golabs
golabs
3-го января 2017 в 5:01
2017-01-03T17:01:40+00:00
Дополнительно
Источник
Редактировать
#16584359

Я понимаю, что этот пост уже несколько лет, но это помогло мне больше всего, так что позвольте мне поделиться своими находками, а также помогать другим тоже.

Я'м с помощью DirectAdmin и мои примеры хрон работают оба. Я удалил мой адрес из 'послать все выходные cron для электронной почты' я не'т получать уведомления по электронной почте моей задачи cron.

Я начинала с просьбой завиток, который ходит каждые 20 минут:

*/20 * * * * /usr/local/bin/curl --silent 'https://demo.tld/app/stats/?update&key=1234'

Обратите внимание, что ' ' вокруг URL-адрес, в противном случае вы можете'т добавить несколько параметров!

Я использую эту страницу как API вдохновил способ инициировать обновление некоторые статистические данные я собираю с другого сайта и что другие могут захватить в виде JSON от моего. Параметр 'обновление' запускает процесс обновления и в параметре 'ключ' будет, после проверки, инициировать дополнительные действия по обновлению я хочу только быть сделано, когда по расписанию запросов на обновление.

Поскольку выше расписанию, в основном потребляет пропускную способность в обоих направлениях я хотел поехать на PHP основан расписанию, но столкнулся с проблемой с параметрами... так вот когда я нашел этот пост, который спас мой день :)

*/20 * * * * /usr/local/bin/php /home/path/to/public_html/app/stats/index.php update key=1234

Как вы можете видеть имя файла (index.php) теперь в путь, а затем выполните параметров (без ? и &'ы).

Таким образом, вы получите расписанию, но вы'вновь только половину пути, так как параметры выиграл'т быть передан через параметр $_GET... что немного раздражает, когда вы'вэ закодированный скрипт с проверками на параметр $_GET ключи!

Итак, как это работает тогда? Простой (по крайней мере, после некоторых исследований), в процентах передает параметры скрипту через переменную $массива argv.

Так что знаний я искал способ, чтобы преобразовать $массива argv в параметр $_GET так:

  1. Я могу вызвать обновление вручную или по расписанию.
  2. Я не'т пришлось переписать весь мой сценарий.

Я нашел следующее решение, которое мы хотим выполнить, когда $массива argv на самом деле множество, так что я завернула его в если isset и проверить:

if( isset( $argv ) )
{
    foreach( $argv as $arg ) {
        $e = explode( '=', $arg );
        if( count($e) == 2 )
            $_GET[$e[0]] = $e[1];
        else    
            $_GET[$e[0]] = 0;
    }
}

Надеюсь, что это тоже помогает :)

 golabs
golabs
Редактировал ответ 5-го января 2017 в 12:32
1
0
 ZnArK
ZnArK
2-го июля 2012 в 4:56
2012-07-02T16:56:00+00:00
Дополнительно
Источник
Редактировать
#16584355

Это сработает:

* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
0
0
 Peter
Peter
4-го января 2017 в 7:58
2017-01-04T07:58:23+00:00
Дополнительно
Источник
Редактировать
#16584360

Я найти его полезно использовать функцию использования getopt () `когда мне нужны параметры из cron или командной консоли.

эта функция возвращает массив пар параметр / аргумент, или false в случае возникновения ошибки.

* Следующие примеры были напрямую взяты из документации к PHP.**

$options = getopt("f:hp:");
var_dump($options);

shell> php example.php -fvalue -h

Результатом выполнения данного примера будет:

array(2) {
    ["f"]=>
    string(5) "value"
    ["h"]=>
    bool(false)
}

Дополнительные функции и различные параметры взглянуть на полную документацию.

Ресурсы

  • использования getopt() - PHP документации
0
0
Marco Marsala
Marco Marsala
28-го марта 2017 в 8:36
2017-03-28T08:36:00+00:00
Дополнительно
Источник
Редактировать
#16584361

имя=тест&ампер;пароль=тест&код=1234

стал:

РНР -Р " и переменная$_GET["по имени", У]=с"тест" у; переменная $_GET["и пароль", У]=с"тест" у; переменная $_GET [фильм"код" и]=и"1234" у; включать "и РГ-хрон.РНР и";&#39;

0
0
Похожие сообщества 42
DevOps — русскоговорящее сообщество
DevOps — русскоговорящее сообщество
14 844 пользователей
Общаемся на темы DevOps, мониторинга, метрикам и облакам. Новости. См. также: @kubernetes_ru, @docker_ru, @ceph_ru, @openstack_ru FAQ и правила: https://git.io/JtnWb Вакансии и поиск работы: @devops_jobs
Открыть telegram
DevOps Jobs - работа и аналитика
DevOps Jobs - работа и аналитика
12 601 пользователей
Публикуем вакансии и запросы на поиск работы по направлению DevOps & SRE. Обмен инсайдами и аналитикой на рынке труда DevOps & SRE. Вакансии в @devops_jobs_feed FAQ и правила: https://git.io/JtnWb Старт бота "/man" См.также: @devops_ru, @kubernetes_ru
Открыть telegram
phpGeeks
phpGeeks
4 757 пользователей
Best PHP chat @phpGeeksJunior - новичкам @golangGeeks - гошка @jobGeeks - вакансии(250000 р/мес) @dbGeeks - базы данных @ebanoePhp - канал о PHP @laravel_pro - Laravel @jsChat - JS @moscowProgers - Москва Реклама: https://vk.cc/cbJtVV ДР - 28.03.2016
Открыть telegram
GNU/Linux Help
GNU/Linux Help
4 517 пользователей
Правила: https://t.me/grouplinux/1619470 #FAQ: https://t.me/grouplinux/1619472 Linux Flood: https://t.me/+mKsgPMYA_BIzODZi Linux: VFIO PCI Passthrough: @vfiolinux
Открыть telegram
PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
4 157 пользователей
Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii etc. Full/par-time, remote и т.д. ПРАВИЛА: https://t.me/php_jobs/45345 Флудильня: @phpimhorus More: @javascript_jobs, @nodejs_jobs, @devops_jobs, @sql_jobs
Открыть telegram
Альт Линукс
Альт Линукс
4 051 пользователей
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 17 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией