我有一个场景,我们的php文件从命令行接受参数。
例如我们说,
php test.php 'hello'
现在上面的命令提示符运行。假设现在我们想从客户端调用它,但是当然我不希望系统系统调用因为这将是一个糟糕的设计,我只是想直接调用从客户端接受参数的函数和当然客户端可能是任何东西.Net或PHP所以我该怎样才能完成呢?
谢谢!
答案 0 :(得分:0)
将您的脚本放在Web服务器上,并通过HTTP GET或POST接受该参数。
它看起来像http://hostname/test.php?argument=hello
。然后,在您的test.php
脚本中,将$_GET['argument']
传递给您的函数:
myfunction($_GET['argument']);
不要忘记清理输入!
答案 1 :(得分:0)
您可以使用一个管理命令行参数的函数:
$param_1 = isset($argv[1]) ? $argv[1] : null;
if ($param_1 == 'function1')
function1()
elseif...
等等。
答案 2 :(得分:0)
您可以创建一个包装器脚本,将客户端的GET参数放入命令行参数数组中。
假设您的客户提出的请求如下:
hostname/testWrapper.php?params[]=hello¶ms[]=goodbye
您的包装脚本testWrapper.php可能看起来像
<?php
$params = $_GET['params'];
foreach ($params as $i => $param)
$_SERVER['argv'][$i + 1] = $param;
$_SERVER['argc'] = count($_GET['params'] + 1);
include ('test.php');
?>
这假设您的test.php使用$_SERVER['argv/argc']
来读取命令行参数。它可能会使用$argv
和$argc
(如果在php.ini中启用了'register_argc_argv'),在这种情况下,您只需在包装器脚本中使用它们而不是$_SERVER[...]
。
请注意,我们必须插入偏移量为1的参数(即$params[0]
变为$_SERVER['argv'][1]
。这是因为从命令行调用脚本时,第一个参数{{1}是脚本名称。
最后,除非您完全确定test.php清理参数,否则必须在包装器脚本中执行此操作。