ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php 获取命令行参数

2021-06-29 12:31:56  阅读:172  来源: 互联网

标签:bin string swoft initCalls init 参数 命令行 php


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

1.使用$argv or $argc参数接收

$argc => 参数个数
$argv => 参数 数组类型

/var/www/swoft # php bin/swoft rpc:start insw=qwewewe
接收到3个参数array(3) {
  [0]=>
  string(9) "bin/swoft"
  [1]=>
  string(9) "rpc:start"
  [2]=>
  string(12) "insw=qwewewe"
}

2.使用getopt函数

规则类似shell里的getopt
getopt('p:t:')

php代码:
$arr = getopt('p:t:');
var_dump($arr);

linux 执行:
---------------------
/var/www/swoft # php bin/swoft -p 8080 -t http rpc:start
array(2) {
  ["p"]=>
  string(4) "8080"
  ["t"]=>
  string(4) "http"
}

问题:多台机器共用一份swoft代码,配置文件怎么解决
思路

  1. 调整输入的启动swoft框架的命令 php bin/swoft rpc:start 在后追加扩展命令ext_init
  2. 在app\server\swoft\bin\bootstrap.php中获取ext_init的命令
  3. 再把获取的命令传递到init.sh中
  4. 然后在init.sh中根据命令内容把结果写入.env中

实际操作:
获取命令行的

$retCall = " ";
if ($extInitCalls = strstr($argv[$argc - 1], 'ext_init')) {
	$initCalls = (explode('=', $extInitCalls))[1];
	if ($calls = strstr($initCalls, '?')) {
		$calls = explode('?', $initCalls);
		foreach ($calls as $key => $call) {
			$retCall .= str_replace(":"," ", $call)." ";
		}
	} else {
		$retCall .= str_replace(":"," ", $initCalls)." ";
	}
}
exec("sh /www/init.sh ".$retCall, $result, $status);

标签:bin,string,swoft,initCalls,init,参数,命令行,php
来源: https://www.cnblogs.com/bogiang/p/14949463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有