2021-03-11

PHP命令行脚本接收传入参数的三种方式

通常PHP都做http方式请求了,可以使用GET or POST方式接收参数,有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务。这就涉及到在shell命令下如何给php传参的问题,通常有三种方式传参。
一、提示用户输入

<?php
/**
 * 提示用户输入,类似Python
 */
$fs = true;
do{
if($fs){
fwrite(STDOUT,'请输入您的博客名:');
$fs = false;
}else{
fwrite(STDOUT,'抱歉,博客名不能为空,请重新输入您的博客名:');
}
$name = trim(fgets(STDIN));
}while(!$name);
echo '您输入的信息是:'.$name."\r\n";
<?php
/**
 * 无限循环版
 */
$fs = 1;
$cookie = 'xxxxx';
$opts = array('http' => array('header'=> 'Cookie:'.@$cookie.''));
$context = stream_context_create($opts);
$has_done = [];
do{
	if($fs === 1){
		fwrite(STDOUT,'请输入您的页数:');
	} elseif($fs === 2){
		fwrite(STDOUT,"请输入正整数[输入q可退出]:");
	} elseif($fs === 3) {
		fwrite(STDOUT,"该页已存在, 请重新输入[输入q可退出]:");
	} else {
		fwrite(STDOUT,"继续请输入[输入q可退出]:");
	}
	$page = trim(fgets(STDIN));
	
	if(intval($page) < 1) {
		$fs = 2;
	} else {
		fwrite(STDOUT,"\n当前查询的是第 {$page} 页\n\n");
		if(in_array($page, $has_done)){
			$fs = 3;
			fwrite(STDOUT,"本次已经执行过的页码\n\n");
			print_r($has_done);
		} else {
			$fs = 4;
			$has_done[] = $page;
			$url = 'xxxxxxxx'.$page.'xxxxx';

			$str = @file_get_contents($url, false, $context);
			$arrs = json_decode($str, true);
			if($arrs) {
				foreach($arrs['data']['ScanResultList'] as $val){
					if(empty($val['Object'])) continue;
					file_put_contents("aliyun_html.txt", $val['Object']. "\n", FILE_APPEND);
				}
			} else {
				fwrite(STDOUT,"什么都没有请检查请求的url和cookie\n\n");
			}
		}
	}
}while($page !== 'q');

二、使用$argv or $argc参数接收

<?php
/**
 * 使用 $argc $argv 接受参数
 */
 
echo "接收到{$argc}个参数";
print_r($argv);

执行,结果如下

vagrant@ubuntu-xenial:/code/test$ php test.php
接收到1个参数Array
(
    [0] => test.php
)
vagrant@ubuntu-xenial:/code/test$ php test.php a b c d
接收到5个参数Array
(
    [0] => test.php
    [1] => a
    [2] => b
    [3] => c
    [4] => d
)

三、使用getopt函数

<?php
/**
 * 使用 getopt函数
 */

$param_arr = getopt('a:b:');
print_r($param_arr);

执行,结果如下

vagrant@ubuntu-xenial:/code/test$ php test.php
Array
(
)
vagrant@ubuntu-xenial:/code/test$ php test.php -a arr -b str
Array
(
    [a] => arr
    [b] => str
)
vagrant@ubuntu-xenial:/code/test$ php test.php -a arr -b str -c ccc
Array
(
    [a] => arr
    [b] => str
)

发表回复

Your email address will not be published. Required fields are marked *