在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,则所有参数似乎都可用.
有点像,在某些 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) 将为您提供所有传递的参数。