首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用浏览器和命令行以相同的方式处理php脚本

如何使用浏览器和命令行以相同的方式处理php脚本
EN

Stack Overflow用户
提问于 2015-07-29 12:47:32
回答 4查看 818关注 0票数 2

我的问题是创建一个简单的php脚本,我想通过命令行或浏览器调用这个脚本:

代码语言:javascript
运行
复制
if(!empty($_GET)) {
    $parameters = $_GET;
} else if(isset($argv)) {
    $parameters = $argv;
}
var_dump($parameters);

这就产生了不同的结果:

浏览器中:http://localhost/test/script.php?test=123

代码语言:javascript
运行
复制
array(1) { ["test"]=> string(3) "123" }

在shell中:php script.php test=123

代码语言:javascript
运行
复制
array(2) {
  [0]=>
  string(10) "script.php"
  [1]=>
    string(8) "test=123"
}

我想叫他们的名字。

EN

回答 4

Stack Overflow用户

发布于 2015-07-29 12:57:53

命令行的惯用语法是:

代码语言:javascript
运行
复制
program -o val --opt value pos_value

这样的语法可以在PHP中使用getopt解析。

$options = getopt("f:hp:");var_dump($options);

票数 2
EN

Stack Overflow用户

发布于 2015-07-29 12:54:51

argv参数的第一个元素将始终是已执行的脚本的名称。您可以简单地忽略第一个参数,从索引1开始。

摘自相关文件:

注意:第一个参数$argv[0]总是用于运行脚本的名称。

正如其他人所提到的,您还可以使用专门用于从CLI提取选项、名称和值的函数argv变量只保存传递的参数列表。因为正在执行的实际程序是PHP解释器,甚至脚本名也是一个参数。

代码语言:javascript
运行
复制
php my_script.php another_arg more_args
//  ^ argv[0].....^ argv[1]...^ argv[2]

顺便指出,argv的这种行为--包括正在执行的脚本文件--在其他平台/技术中是一致的。例如,在pythonbashawk和许多其他方面都可以看到同样的行为。

摘自此页的一般解释

什么是ARGV? 作为一个概念,ARGV是编程中的一种惯例,可以追溯到(至少)C语言。它指的是“参数向量”,它基本上是一个变量,包含通过命令行传递给程序的参数。它通常以数组的形式显示,并且可以以这种方式操作,这意味着您可以通过索引引用特定的参数,或者可以以标准的方式迭代它们。

票数 1
EN

Stack Overflow用户

发布于 2015-07-29 12:56:59

如果要以查询字符串格式(例如test=123&var=me)通过CLI传递所有参数,请查看parse_str()

代码语言:javascript
运行
复制
if(!empty($_GET)) {
    $parameters = $_GET;
} else if(!empty($argv[1])) {
    $parameters = parse_str($argv[1]);
}

如果有分离,那么deceze就有答案

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31700839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档