Я пытаюсь записать скрипт для получения некоторых онлайн-данных; сценарий должен быть вызван либо заданием cron, либо php cli, и со стандартным HTTP-запросом GET . Как указано на веб-сайте PHP, $_SERVER['argv']
должен соответствовать моим потребностям:
Массив аргументов передается скрипту. Когда сценарий запускается в командной строке, это дает C-стиль доступ к параметрам командной строки. При вызове через метод GET это будет содержать строку запроса.
Однако я не могу заставить его работать со стандартным запросом HTTP GET. $_SERVER['argv']
не установлен. Что мне не хватает?
<?php // jobs/fetch.php var_dump($_SERVER['argv']); ?>
CLI-выход php jobs/fetch.php -a -bhello
:
array(3) { [0]=> string(14) "jobs/fetch.php" [1]=> string(2) "-a" [2]=> string(7) "-bhello" }
GET выходные jobs/fetch.php?a=&b=hello
:
Примечание. Неопределенный индекс: argv в jobs / fetch.php.
В руководстве это не указано, но если вы хотите $_SERVER['argc']
, $_SERVER['argv']
, $argc
, $argv
регистрироваться, когда вы не работаете в режиме CLI
, тогда Значение php.ini
register_argc_argv должно быть включено в php.ini (отключено по умолчанию [по соображениям производительности]).
Вы можете сделать следующее, чтобы получить argv
или строки запроса в зависимости от того, как работает скрипт:
if (php_sapi_name() == 'cli') { $args = $_SERVER['argv']; } else { parse_str($_SERVER['QUERY_STRING'], $args); }
Вот некоторые подробности из php.ini
:
; This directive determines whether PHP registers $argv & $argc each time it ; runs. $argv contains an array of all the arguments passed to PHP when a script ; is invoked. $argc contains an integer representing the number of arguments ; that were passed when the script was invoked. These arrays are extremely ; useful when running scripts from the command line. When this directive is ; enabled, registering these variables consumes CPU cycles and memory each time ; a script is executed. For performance reasons, this feature should be disabled ; on production servers. ; Note: This directive is hardcoded to On for the CLI SAPI ; Default Value: On ; Development Value: Off ; Production Value: Off ; http://php.net/register-argc-argv
См. Также http://www.php.net/manual/en/reserved.variables.argv.php и parse_str () .
Вам придется использовать $_GET
или $_SERVER['argv']
зависимости от того, как вызывается ваш сценарий. Ни один из них не используется для обоих.
Например:
if(!empty($_SERVER['argv'][0]) { $a = $_SERVER['argv'][1]; $b = $_SERVER['argv'][2]; } else { $a = $_GET['a']; $b = $_GET['b']; }