Я использую php 7.0.14
Я разобрался:
Проблема в том, как php получает аргументы из командной строки
В vendor / symfony / console / Input / ArgvInput.php я мог понять, что php получает аргументы наподобие этого:
0 => "artisan"
1 => "down"
2 => "--message=Going"
3 => "down"
4 => "for"
5 => "maintenance"
6 => "--retry=60"
Так что даже для того, чтобы убедиться, что я сделал собственный скрипт с этим содержанием:
<?php
var_dump($argv);
И я запускаю это:
php -v;php test_argv.php "parm with space" other_parameter
Вывод был:
PHP 7.0.14 (cli) (built: Jan 30 2017 15:45:33) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
array(5) {
[0]=>
string(13) "test_argv.php"
[1]=>
string(4) "parm"
[2]=>
string(4) "with"
[3]=>
string(5) "space"
[4]=>
string(15) "other_parameter"
}
Я запускаю его на другой машине с другой версией PHP и смотрю на мои результаты:
PHP 7.1.5 (cli) (built: Sep 19 2017 10:48:01) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Xdebug v2.5.4, Copyright (c) 2002-2017, by Derick Rethans
array(3) {
[0] =>
string(13) "test_argv.php"
[1] =>
string(15) "parm with space"
[2] =>
string(15) "other_parameter"
}
Похоже, что в php 7.0 и 7.1 синтаксический анализ argv совсем другой, один игнорирует двойные кавычки как разделитель строк, а последний не