Laravel Tinker执行带参数PHP脚本报错,如何正确传递参数?
解决Laravel Tinker执行带参数脚本的问题
问题原因
你原命令中的50000被Laravel Tinker(实际是底层的PsySH)当作要加载的PHP文件路径,而非传递给脚本的参数,因此触发了include(50000)的错误——系统找不到这个文件。当用<重定向输入时,命令行末尾的参数属于tinker命令本身,不会传递给你通过管道输入的脚本。
正确传递参数的方法
方法1:通过环境变量传递(推荐)
执行命令时先设置环境变量,脚本内读取该变量:
MY_PARAM=50000 php7.1 artisan tinker < phpscript.php
在phpscript.php中替换$argv[1]为:
$param = getenv('MY_PARAM'); // 后续逻辑使用$param即可
方法2:拼接参数到脚本内容
用echo和cat把参数注入到脚本开头,再传递给Tinker:
echo "<?php \$param = 50000; " | cat - phpscript.php | php7.1 artisan tinker
脚本里直接使用$param变量,无需依赖$argv。
方法3:手动设置$argv数组(临时应急)
在phpscript.php的最开头添加一行,手动模拟命令行参数数组:
$argv = ['phpscript.php', 50000];
然后执行去掉末尾参数的命令:
php7.1 artisan tinker < phpscript.php
这种方法适合临时测试,但参数硬编码,灵活性较差。
内容的提问来源于stack exchange,提问作者Skittles
相关产品推荐
相关产品推荐

