Argv and argc in php

$argv

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

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

Замечание: Эта переменная недоступна, если register_argc_argv отключён.

Примеры

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

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

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

array(4) < [0]=>string(10) "script.php" [1]=> string(4) "arg1" [2]=> string(4) "arg2" [3]=> string(4) "arg3" >

Примечания

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

User Contributed Notes 6 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.

foreach ($argv as $arg) $e=explode(» note» >

You can reinitialize the argument variables for web applications.
So if you created a command line, with some additional tweaks you can make it work on the web.

If you come from a shell scripting background, you might expect to find this topic under the heading «positional parameters».

Sometimes $argv can be null, such as when «register-argc-argv» is set to false. In some cases I’ve found the variable is populated correctly when running «php-cli» instead of just «php» from the command line (or cron).

I discovered that `register_argc_argv` is alway OFF if you use php internal webserver, even if it is set to `On` in the php.ini.

What means there seems to be no way to access argv / argc in php internal commandline server.

Источник

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

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

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

Функции argv и argc#

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

// Ожидаем что скрипт будет вызываться с такими параметрами: // php backup.php dbuser dbpassword database host  if ($argc != 5)   die(PHP_EOL . 'Use: php backup.php dbuser dbpassword database host' . PHP_EOL); >  $dbuser = $argv[1]; $dbpassword = $argv[2]; $database = $argv[3]; $host = $argv[4];  $mysql = mysql_connect($host, $dbuser, $dbpassword); mysql_select_db($database, $mysql); // . 

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

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

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

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

php backup.php dbuser database dbpassword host 

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

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

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

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

// Тут показаны две формы записи аргументов: короткая и полная // При этом, если после параметра стоит два двоеточия, значит параметр необязательный, // а если одно двоеточие - значит обязательный. // все параметры которые не указаны в конфигурации будут проигнорированы  $params = array(  '' => 'help',  'h::' => 'host::',  'u:' => 'user:',  'p::' => 'password::',  'd:' => 'database:', );  // Default values  $host = 'localhost'; $user = 'root'; $password = null; $database = ''; $errors = array();  $options = getopt( implode('', array_keys($params)), $params );  if (isset($options['host']) || isset($options['h']))   $host = isset( $options['host'] ) ? $options['host'] : $options['h']; >  if (isset($options['user']) || isset($options['u']))   $port = isset( $options['user'] ) ? $options['user'] : $options['u']; > else   $errors[] = 'user required'; >  if (isset($options['password']) || isset($options['p']))   $socket = isset( $options['password'] ) ? $options['password'] : $options['p']; >  if (isset($options['database']) || isset($options['d']))   $database = isset( $options['database'] ) ? $options['database'] : $options['d']; > else   $errors[] = 'database required'; >  if ( isset($options['help']) || count($errors) )   $help = " usage: php backup.php [--help] [-h|--host=127.0.0.1] [-u|--user=root] [-p|--password=secret] [-d|--database]  Options:  --help Show this message  -h --host Server hostname (default: localhost)  -u --user User  -p --password Password (default: no password)  -d --database Database Example:  php backup.php --user=root --password=secret --database=blog ";  if ( $errors )    $help .= 'Errors:' . PHP_EOL . implode("\n", $errors) . PHP_EOL;  >  die($help); >  $mysql = mysql_connect($host, $user, $password); mysql_select_db($database, $mysql);  // . 

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

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

Давайте ещё добавим последний штрих, который должен быть во всех наших скриптах:

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

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

./backup --user=ukko --password=password --database=db1 

Источник

$argc

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

Замечание: Имя файла скрипта всегда передаётся в качестве первого аргумента, таким образом минимальное значение $argc равно 1 .

Замечание: Эта переменная недоступна, если register_argc_argv отключён.

Примеры

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

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

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

Примечания

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

User Contributed Notes 4 notes

To find out are you in CLI or not, this is much better in my opinion:
if ( PHP_SAPI != «cli» ) exit;
>
?>

Note: when using CLI $argc (as well as $argv) are always available, regardless of register_argc_argv, as explained at http://docs.php.net/manual/en/features.commandline.php

To decide whether my script is run from CLI I simply create a PHP script that handles only CLI invocations.

// Set environment variables your application depends on
$_SERVER [ ‘HTTP_HOST’ ] = ‘domain.tld’ ;
// $_SERVER[ ‘REQUEST_URI’ ] = ‘/some/URI/if/needed’;

// Use the environment to read out required values
$task = $_SERVER [ ‘argv’ ][ 1 ];

// Instanciate the dispatcher or whatever you use
$dispatcher = new Dispatcher ();
$dispatcher -> handle ( $task );

?>

This way my application doesn’t have to know about CLI at all.

int main(int argc, char *argv[])
fprintf(stdout,»argumen count : %d\n»,argc);
fprintf(stdout,»argumen vector : %s\n»,argv);
return 0;
>

Источник

Читайте также:  Iniuria для css v34
Оцените статью