Меню Закрыть

Php аргументы из командной строки

Содержание

(PHP 4, PHP 5, PHP 7)

$argv — Массив переданных скрипту аргументов

Описание

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

Замечание: Первый аргумент $argv[0] всегда содержит имя файла запущенного скрипта.

Замечание: Эта переменная недоступна если register_argc_argv установлен в disabled.

Примеры

Пример #1 Пример использования $argv

Запустим пример в командной строке: php script.php arg1 arg2 arg3

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

Смотрите также

  • getopt() — Извлечение параметров из списка аргументов командной строки

Вот как обычно бывает: Нам нужно написать малюсенький консольный скрипт бекапа, который, может запускаться из крона, и при этом скрипт должен принимать параметры для соединения с базой данных.

Функции argv и argc

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

Тут мы использовали системную переменную argс для получения количества всех параметров. Запомните, что нулевой параметр (имя скрипта) тут тоже учитывается.

И системную переменную argv с массивом всех параметров.

Для простейшего скрипта этого хватит, но что если мы захотим поддерживать и отдать этот скрипт другим разработчикам?

Скорее всего будет куча ругани в нашу сторону, потому что очень легко можно ошибиться и перепутать местами пароль и базу данных и заметить ошибку будет крайне сложно. Посмотрите:

Разбираем параметры с функцией getopt

Вот тут нам на помощь приходит крайне удобная функция разбора параметров: getopt

Основная мощь getopt в том, что она позволяет нам использовать флаги, обязательные и необязательные параметры в произвольном порядке.

Давайте напишем простой, но очень выразительный пример использования getopt, а потом, посмотрите как люди раньше мучались с регулярками, что бы разобрать командную строку 🙂

Читайте также:  So dimm ddr2 2gb 667mhz

Теперь запустим наш скрипт с параметром –help и порадуемся что хорошо поддерживаемую и понятную программу так легко написать

Если вкратце, то getopt принимает все аргументы из командной строки и складывает валидные параметры в массив $options. А из уже получившегося массива мы можем получить все аргументы и в зависимости от них выдать результат.

Давайте ещё добавим последний штрих, который должен быть во всех наших скриптах:
1. Можно убрать расширение php
2. В начало каждого скрипта добавим опцию для интерпритатора #!/usr/bin/env php
3. Сделаем наши скрипты исполняемыми chmod +x backup.php

После этого можно пользоваться получившимся скриптом как настоящей юникс-программой:

(PHP 4, PHP 5, PHP 7)

$argv — Массив переданных скрипту аргументов

Описание

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

Замечание: Первый аргумент $argv[0] всегда содержит имя файла запущенного скрипта.

Примеры

Пример #1 Пример использования $argv

Запустим пример в командной строке: php script.php arg1 arg2 arg3

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

Примечания

Смотрите также

User Contributed Notes 9 notes

Please note that, $argv and $argc need to be declared global, while trying to access within a class method.

class A
<
public static function b ()
<
var_dump ( $argv );
var_dump (isset( $argv ));
>
>

A :: b ();
?>

will output NULL bool(false) with a notice of "Undefined variable . "

whereas global $argv fixes that.

To use $_GET so you dont need to support both if it could be used from command line and from web browser.

How to check if one parameter is given:

An easier way to populate $_GET with $argv values.

Читайте также:  Как заморозить нерв в зубе

When you pass an option to the file that intercept the request, it will be transformed into an array item, and the option name will be lost. Only its content is captured.

( $argv );
?>

call : "php file.php —test=foo baz"

Improves on hamboy75’s note by providing better support for positional arguments:

Using this modification, arguments without an = are treated as positional (this is not web standard but generally works).

If your script is read from standard input or with the -r option, $argv[0] will be "-".

If you use the "—" option to separate PHP’s arguments from your script’s arguments, $argv[1] will be "—" if your script is read from a file. But if your script is read from standard input or with the -r option, the "—" will be removed.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.