PHP $ argv仅限于Windows上的9个参数吗?

and*_*dig 5 php windows argv

在Win7 32位上的PHP 5.5.4 CLI中运行以下脚本

php -r "print_r($argv);" 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Run Code Online (Sandbox Code Playgroud)

我可以看到实际上只解析了8个参数:

Array
(
    [0] => -
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
)
Run Code Online (Sandbox Code Playgroud)

Windows或PHP是否将命令行参数的数量限制为8 /总计9?

更新:

在PHP 5.5.7的同一台PC上按预期工作 - >至少在Win7上这是一个特定于PHP的问题.

行为的变化取决于脚本是从php文件夹运行还是通过路径找到php.一个procmon跟踪似乎表明,这个问题是与Windows原样连PHP.EXE图像正被装载时不同数量的参数通过之前:

php.exe Process Start       SUCCESS Parent PID: 9088, Command line: "\Program Files\php\php"  -r "print_r($argv);" 1 2 3 4 5 6 7, Current directory: C:\
php.exe Process Start       SUCCESS Parent PID: 9088, Command line: "\program files\php\php"  -r "print_r($argv);" 1 2 3 4 5 6 7 8 9 10 11 12 13 14, Current directory: C:\
php.exe Process Start       SUCCESS Parent PID: 9088, Command line: php  -r "print_r($argv);" 1 2 3 4 5 6 7 8 9 10 11 12 13 14, Current directory: C:\Program Files\php\
Run Code Online (Sandbox Code Playgroud)

如果不从路径中获取PHP,则所有参数似乎都可用.

Rob*_*lie 3

有点像,在某些 Windows 环境中。要在 Windows XP 上获取 9 个以上的参数,您需要“移动”批处理文件中的参数。

我在 XP 以上版本中找不到任何对此命令的引用,因此这个问题可能会在更高版本的 Windows 中消失。

PHP.NET 上的评论在这里涵盖了它:http ://www.php.net/manual/en/features.commandline.php#56846

要在 Windows 上将 9 个以上的参数传递给 php 脚本,您可以在批处理文件中使用“shift”命令。使用“shift”后,%1 变为 %0,%2 变为 %1 等等 - 因此您可以获取参数 10 等。

这是一个示例 - 希望可以立即使用 - 批处理文件:

foo.bat:

@echo off

:init_arg
set args=

:get_arg
shift
if "%0"=="" goto :finish_arg
set args=%args% %0 goto :get_arg

:finish_arg

set php=C:\path\to\php.exe
set ini=C:\path\to\php.ini
%php% -c %ini%
foo.php %args%
Run Code Online (Sandbox Code Playgroud)

命令行用法: foo -1 -2 -3 -4 -5 -6 -7 -8 -9 -foo -bar

print_r($argv) 将为您提供所有传递的参数。

  • 请注意,该评论是 8 年前的,因此很可能有些过时了。我想这种行为取决于用户环境/PHP 版本,如运行 `C:\>php -r "print_r($argv);" 我在 Win7 上安装的 PHP 5.4.12 上的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15` 为我提供了所有 15 个参数作为直接来自解析器的返回值。 (2认同)