如何将参数传递给脚本

时间:2012-08-23 14:37:23

标签: php magento

我正在“分叉”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 &');

首先,是否可以将我的数组传递给该脚本?如果它可以使脚本可以访问它,我怎么能访问该脚本中传递的变量?

(坐在这里很困惑,考虑通过值/参考传递变量....)

谢谢!

3 个答案:

答案 0 :(得分:2)

Nicolas Brown几乎是对的。但是,我认为那将是你正在寻找的解决方案的第二部分 您可能已经知道,您可以从控制台调用程序,然后传递程序可能期望的任何参数:

>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);

以下是Nicolas Brown提到的教程。在script.php中,您可以从$argv[]

获取参数
$myParam1 = $argv[1];
$myParam2 = $argv[2];

请注意,在argv [0]中是程序的名称。这正是他们在教程中首先做arry_shift($argv)的原因,以摆脱第一个元素(程序的名称和路径)。
希望它有所帮助!

答案 1 :(得分:1)

使用$ argv变量

您可以在此tutorial

中找到示例

答案 2 :(得分:1)

+1给@Havelock以获得全面的答案 - 只是想发布一些额外的实施建议。

我实际上最近必须实现这一点:)我使用的实现路径是serialize()数组并将其作为命令行参数传递给PHP脚本。这允许您将任意参数传递给脚本,而无需使用参数解析进行太多维护工作。

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

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

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