скрипту PHP-аргументы командной строки в Windows



php командная строка передача параметров (9)

Я пытаюсь запустить PHP из командной строки под Windows XP.

Это работает, за исключением того факта, что я не могу предоставить параметры для своего PHP-скрипта.

Мой тестовый пример:

echo "param = ".$param."\n";  
var_dump($argv);  

Я хочу называть это следующим:

php.exe -f test.php -- param=test

Но я никогда не получаю сценарий, чтобы принять мой параметр.

Результат, полученный из приведенного выше сценария

`PHP Примечание: неопределенная переменная: param в C: \ test.php в строке 2

param = ''
array(2) {
  [0]=> string(8) "test.php"
  [1]=> string(10) "param=test"
}

Я использую PHP 5.2.6. Это ошибка в PHP5?

Передача параметров обрабатывается в интерактивной справке. Note: If you need to pass arguments to your scripts you need to pass -- as the first argument when using the -f switch. Казалось, что это работает под PHP4, но не под PHP5. В PHP4 я мог бы использовать тот же скрипт, который мог запускаться на сервере без изменения в командной строке. Это удобно для локальной отладки, например, для сохранения вывода в файле, который нужно изучить.


Answer #1

PHP не параметризует параметры вашей командной строки для вас. См. Вывод, где ваша вторая запись в ARGV - «param = test».

Скорее всего, вы хотите использовать пакет PEAR http://pear.php.net/package/Console_CommandLine : «Полнофункциональные параметры командной строки и парсер аргументов».

Или вы можете быть мазохистом и добавлять код, чтобы пройти через ваш ARGV и сами установить параметры. Вот очень упрощенный фрагмент, чтобы вы начали (это не сработает, если первая часть не является допустимым именем переменной или в части ARGV больше 1 '=':

foreach($argv as $v) {
    if(false !== strpos($v, '=')) {
        $parts = explode('=', $v);
        ${$parts[0]} = $parts[1];
    }
}


Answer #3

Если вам нравится жить на переднем крае, PHP 5.3 имеет команду getOpt (), которая позаботится обо всем этом грязном бизнесе для вас. В некотором роде.


Answer #4

вы можете использовать массив $ argv. как это:

<?php
 echo  $argv[1];
?>

помните, что первым членом массива $ argv (который является $ argv [0]) является имя самого скрипта, поэтому для использования параметров для приложения вы должны начать использовать члены $ argv [] из 1-й индекс. при вызове приложения используйте этот синтаксис:

php myscript.php -- myValue

нет необходимости указывать имя для параметра. как вы видели, то, что вы назвали var_dump () на $ argv [], вторым элементом (который является первым параметром) является строка PARAM = TEST. правильно? поэтому нет необходимости указывать имя для параметра. просто введите значение параметра.


Answer #5

$ argv - это массив, содержащий все параметры вашей командной строки ... Вам нужно проанализировать этот массив и установить $ param самостоятельно.

$tmp = $argv[1];             // $tmp="param=test"
$tmp = explode("=", $tmp);   // $tmp=Array( 0 => param, 1 => test)

$param = $tmp[1];            // $param = "test";

Answer #6

Почему у вас есть ожидание, что параметр будет установлен в значение? Вы отвечаете за синтаксический анализ командной строки по вашему желанию из массива $ argv.


Answer #7

Вы можете использовать что-то вроде

if (isset($argv[1]) {
 $arg1 = $argv[1];             
 $arg1 = explode("=", $arg1);   
 $param = $arg1[1];            
}

(как справиться с отсутствием параметра / s зависит от вас), или если вам нужен более сложный сценарий, загляните в библиотеку синтаксического анализа командной строки, например, из Pear .

используя ${$parts[0]} = $parts[1]; размещенное в другом решении, позволяет вам переопределить любую переменную в коде, что действительно не безопасно .


Answer #8

Передача параметров обрабатывается в интерактивной справке. Примечание. Если вам нужно передать аргументы в свои скрипты, вам необходимо передать - как первый аргумент при использовании ключа -f. Казалось, что это работает под PHP4, но не под PHP5.

Но PHP все еще не анализирует эти аргументы. Он просто передает их скрипту в массив $ argv.

Единственная причина для этого - так, чтобы PHP мог определить, какие аргументы предназначены для исполняемого файла PHP и какие аргументы предназначены для вашего скрипта.

Это позволяет вам делать такие вещи:

php -e -n -f myScript.php -- -f -n -e

(-f, -n, & -e после - передаются в myScript.php. Те, которые раньше передаются самому PHP).


Answer #9

Вы можете сделать что-то вроде:

if($argc > 1){
    if($argv[1] == 'param=test'){
        $param = 'test';
    }
}

Конечно, вы можете намного сложнее, чем это необходимо.





parameters