php-用于命令行或带有参数的web的相同源代码

php-用于命令行或带有参数的web的相同源代码,php,arguments,Php,Arguments,如果您是从web调用php页面,您可以给出 ../../somepage.php?myid=1&trackno=2&anotherparam=3 然后可以使用$\u REQUEST或$\u GET检索信息 在命令行中,可以使用 $options=getopta:b:c:;获取通过参数传递的选项的步骤 如何确保在web或命令行中使用相同的源代码?假设您的请求如下 网站:http://domain.com/somepage.php?myid=1&trackno=2&anotherparam=3 CL

如果您是从web调用php页面,您可以给出 ../../somepage.php?myid=1&trackno=2&anotherparam=3 然后可以使用$\u REQUEST或$\u GET检索信息

在命令行中,可以使用 $options=getopta:b:c:;获取通过参数传递的选项的步骤


如何确保在web或命令行中使用相同的源代码?

假设您的请求如下

网站:http://domain.com/somepage.php?myid=1&trackno=2&anotherparam=3

CLI:php/path/to/this/php/file/somepage.php 1 2 3

您可以使用以下php代码

<?php

if (!empty($_REQUEST)) {
    $myid = $_REQUEST["myid"];
    $trackno = $_REQUEST["trackno"];
    $anotherparam = $_REQUEST["anotherparam"];  
} else if (!empty($argv)) {
    $myid = $argv[1]; 
    $trackno = $argv[2]; 
    $anotherparam = $argv[3];   
} else {
    die("Invalid request!");
}
您可以使用以下方法来处理此问题:

foreach ($argv as $k => $v) {
    if ($k == 0) continue;
    $temp = explode("_", $v);
    ${$temp[0]} = $temp[1];
}
简单地说

myid_3变成$myid=3


变量名隐藏在值中,因此您无需了解序列

CLI参数和HTTP参数只是不同而已。因此,您需要自己处理这个问题,包括一个参数解析器,该解析器首先决定它在什么环境下运行,然后进行相应的解析,最后以相同的方式使参数可用。这样,您就不必在主脚本中费心了。有没有一种方法可以像处理web界面一样处理命令行参数?要确保参数已命名。。因为我可能会更改序列或有时丢失一些。@Joel您可以在参数传递时使用命名约定。查看我的最新答案
foreach ($argv as $k => $v) {
    if ($k == 0) continue;
    $temp = explode("_", $v);
    ${$temp[0]} = $temp[1];
}