search
Homephp教程php手册在PHP CLI下使用类似GET的方法传参

Linux下为了方便,有时候会直接使用命令行的方式来执行php程序,比如一些crontab任务之类,但通常写出来的大部分php程序,都没有考虑到命令行下的一些情况,直接使用GET进行参数传递也是常态,但这在命令行下却很无奈,尤其是传递多个GET参数时,连命令都无

Linux下为了方便,有时候会直接使用命令行的方式来执行php程序,比如一些crontab任务之类,但通常写出来的大部分php程序,都没有考虑到命令行下的一些情况,直接使用GET进行参数传递也是常态,但这在命令行下却很无奈,尤其是传递多个GET参数时,连命令都无法正确执行——GET多参数分隔符&会妨碍命令的执行。

1、PHP CLI的参数传递方式

PHP CLI下参数的传递是使用Linux命令行的方式进行,将参数值按照指定的先后顺序依次排列,一旦顺序错误,最终传送的结果也将错误,而且,如果程序要支持命令行参数,还需要专门的分析和拆开$argv数组,如果是修改现有程序,工作量将会更大。

2、捕获参数,组装伪$_GET和$_REQUEST数组

命令行下是没有$_GET等变量的,但如果使用GET进行参数传递,程序中肯定会有对诸如$_GET和$_REQUEST数组的调用。如果要降低修改的工作量,最简单的办法就是,抓获CLI传递的参数,再将参数组装成一个$_GET和$_REQUEST数组。
为了避开cli中对参数的先后顺序的要求,让命令执行使用更容易分辨更让人熟悉的URL参数传递方式,可以按如下的格式来传递参数并捕获:

<p class="line">1</p>
<p class="line">php filename.php "name=Roges&height=187.96&weight=99.79"</p>

注意,命令行中使用&符号时,必须要将其用引号括住,否则你会有意外的惊喜。

3、实现

想到了过程,实现起来就比较简单了,一个比较简单的实现如下:

<p class="line">1</p>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<p class="line">// if file was executed by php cli, cli paramertes will be convert</p><p class="line">// to $_GET and $_REQUEST array.</p><p class="line">if(isset($argv) AND count($argv) </p><p class="line">    // GET paramertes are always follow the page url with ? symtax,</p><p class="line">    // it show be removed.</p><p class="line">    $argv[1] = str_replace("?", '', $argv[1]);</p><p class="line">    $params = explode('&', $argv[1]);</p><p class="line">    $_REQUEST = array();</p><p class="line">    foreach($params as $p) {</p><p class="line">        //get the location of the '='</p><p class="line">        $eq_loc = strpos($p, '=');</p><p class="line">        $_REQUEST[substr($p, 0, $eq_loc)] = substr($p, $eq_loc + 1, strlen($p) - $eq_loc);</p><p class="line">    }</p><p class="line">    $_GET = $_REQUEST;</p><p class="line">}</p>

将这个代码存储为文件,再在需要使用的文件头部进行引用即可。当在命令行下执行脚本时,使会进行转换,否则是不会进行任何操作的。

4、执行效果

将上面的代码保存然后在最后加上如下的两句,便可查看参数传递的效果:

<p class="line">1</p>

2

3

4

<p class="line">echo '$_REQUEST: ';</p><p class="line">print_r($_REQUEST);</p><p class="line">echo '$_GET: ';</p><p class="line">print_r($_GET);</p>

将文件命令为cli_get.php,在命令行中执行,结果如下:

<p class="line">1</p>

2

3

4

5

6

7

8

9

10

11

12

13

<p class="line">Roges@US:~/www$ php cli_get.php  "name=Roges&height=187.96&weight=99.79"</p><p class="line">$_REQUEST: Array</p><p class="line">(</p><p class="line">    [name] => Roges</p><p class="line">    [height] => 187.96</p><p class="line">    [weight] => 99.79</p><p class="line">)</p><p class="line">$_GET: Array</p><p class="line">(</p><p class="line">    [name] => Roges</p><p class="line">    [height] => 187.96</p><p class="line">    [weight] => 99.79</p><p class="line">)</p>

手机选来选去,还是黑莓靠谱,大屏幕目前只是玩具而已。

Linux下为了方便,有时候会直接使用命令行的方式来执行php程序,比如一些crontab任务之类,但通常写出来的大部分php程序,都没有考虑到命令行下的一些情况,直接使用GET进行参数传递也是常态,但这在命令行下却很无奈,尤其是传递多个GET参数时,连命令都无法正确执行——GET多参数分隔符&会妨碍命令的执行。

1、PHP CLI的参数传递方式

PHP CLI下参数的传递是使用Linux命令行的方式进行,将参数值按照指定的先后顺序依次排列,一旦顺序错误,最终传送的结果也将错误,而且,如果程序要支持命令行参数,还需要专门的分析和拆开$argv数组,如果是修改现有程序,工作量将会更大。

2、捕获参数,组装伪$_GET和$_REQUEST数组

命令行下是没有$_GET等变量的,但如果使用GET进行参数传递,程序中肯定会有对诸如$_GET和$_REQUEST数组的调用。如果要降低修改的工作量,最简单的办法就是,抓获CLI传递的参数,再将参数组装成一个$_GET和$_REQUEST数组。
为了避开cli中对参数的先后顺序的要求,让命令执行使用更容易分辨更让人熟悉的URL参数传递方式,可以按如下的格式来传递参数并捕获:

<p class="line">1</p>
<p class="line">php filename.php "name=Roges&height=187.96&weight=99.79"</p>
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use