通常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
)