如何将参数传递给脚本


how to pass a parameter to a script

我正在"分叉"php代码,启动脚本在后台运行,允许浏览器应用程序继续运行,而无需等待响应。

我希望能够将参数传递给这样的脚本。

假设我有一个数组,我希望可以访问有问题的脚本,我如何传递它?

$test = array(1,2,3);
//for windows i do the following which works well enough 
pclose(popen("start php /path/to/script.php ","r"));

对于某些linux发行版:

exec('php -f /path/to/script.php >/dev/null 2>&1 &');

那么,首先,有可能将我的数组传递给那个脚本吗?如果可以让脚本访问它,我如何访问该脚本中传递的变量?

(困惑地坐在这里,想着通过值/引用传递变量……)

谢谢!

尼古拉斯·布朗几乎是对的。但我认为,这将是你正在寻找的解决方案的第二部分
正如您可能已经知道的那样,您可以从控制台调用程序,并传递程序可能期望的任何参数:
>php -f /path/to/program arg1[ arg2 ... argN] >/dev/null 2>&1 &

因此,当您将字符串传递给exec()时,为什么不将数组作为参数"插入",然后执行呢

$test = array(1,2,3);
$args = implode($test, " ");
$prog = 'php -f /path/to/script.php ' . $args . ' >/dev/null 2>&1 &'
exec($prog);

以下是尼古拉斯·布朗提到的教程。在您的script.php中,您可以从$argv[] 获取参数

$myParam1 = $argv[1];
$myParam2 = $argv[2];

请注意,在argv[0]中是程序的名称。这正是为什么在教程中,他们首先执行arry_shift($argv),以去除第一个元素(程序的名称和路径)
希望它能有所帮助!

使用$argv变量

您可以在本教程中找到一个示例

+1到@Havelock寻求一个彻底的答案-只是想发布一些额外的实现建议。

实际上,我最近不得不实现这一点:)我使用的实现路径是serialize()数组,并将其作为命令行参数传递给PHP脚本。这允许您将任意参数传递到脚本,而不必在参数解析方面做那么多维护工作。

不过,我认为序列化为json可能比PHP序列化更友好一些。不过,如果您采用这种方式,并且windows/linux兼容性对您的应用程序(无论是本地开发环境还是其他环境)很重要,请确保在这两个环境中测试您的序列化负载。

Windows似乎不喜欢负载中的引号。

哦,对于可调试性,请确保在PHP脚本中进行一些良好的日志记录——这种解决方案有助于有趣的调试会话。