电话
400 9058 355
能,但取决于打包工具是否保留$argv和$argc行为;ExeOutput需启用命令行参数传递并设为Console模式,Box+php-win组合易丢失参数,应验证$argv内容并用getopt()等健壮方式解析。
能,但取决于打包工具是否保留 $argv 和 $argc 的原始行为。主流工具如 Box(用于 PHAR)、ExeOutput for PHP、PPM(PHP Desktop)或 Zend Encoder + Zend Server 封装方案中,只有部分支持完整 CLI 参数透传。原生 PHP CLI 模式下可用的 $argv[1]、getopt() 等机制,在 EXE 封装后可能被截断、忽略,或需额外配置启用。
这是 Windows 下较成熟的 PHP EXE 封装工具,对命令行参数支持较好,但默认不自动暴露给 PHP 脚本,需手动开启入口桥接。
Enable command line arguments passing to PHP script
Console application(而非 Windows GUI 模式),否则 $argv 为空$argv、$argc,或调用 getopt('a:b:c', ['name:', 'verbose'])
app.exe "--name=John Doe" --verbose
这种组合常见但容易出问题——Box 本身不处理 Windows EXE 封装,需依赖第三方(如 php-win.exe 或自定义 stub)。此时参数传递链是:cmd → php-win.exe → PHAR → PHP runtime,中间任意一环断开都会导致 $argv 丢失。
php-win.exe 默认不转发参数(它专为无控制台 GUI 设计),必须改用 php.exe 或重编译 stub 支持 main(int argc, char *argv[])
index.php 开头加 #!/usr/bin/env php(虽 Windows 不执行 shebang,但部分封装器会识别)yourapp.exe --help,然后在脚本里 var_dump($argv);,若只看到
['yourapp.exe'],说明参数没进来不要硬依赖 $argv[1],尤其在 EXE 场景下,优先用健壮解析方式。
$argc > 1 再访问 $argv,避免未定义索引警告getopt() 处理短选项(如 -f file.txt)和长选项(如 --input=file.txt),它比手撕 array_slice($argv, 1) 更可靠putenv('CLI_ARGS=' . json_encode(array_slice($argv, 1))),再在脚本中 json_decode(getenv('CLI_ARGS')
, true)
C:\data\input.txt 可能被转义成 C:\\data\\input.txt,建议统一用 str_replace('\\', '/', $path) 或 realpath() 标准化最常被忽略的一点:EXE 封装器的“工作目录”往往不是你双击运行时所在的目录,而是系统临时目录或安装路径。即使参数传进来了,file_get_contents('config.json') 也可能因相对路径失效而报错。务必用 __DIR__ 或 dirname($_SERVER['SCRIPT_FILENAME']) 定位资源,别信当前工作目录。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...