php命令行参数
① windows下如何实现在命令行下运行php文件
window下,假设php安装目录为c:\program files\php5\,那么使用命令窗口进入到该路径下,敲入php hello.php回车,则会执行当前路径下的hello.php文件,如果要指向其他路径下php文件,可以在php 路径/hello.php ,这种形式称为CLI模式,我们平时通过浏览器看到的那种称为CGI模式,至于传递参数,php文件在cli模式下,直接通过在文件名称后面接参数,多个参数中间用空格隔开,在php文件里面是通过两个变量来获取参数的,一个是$argv,一个是$argc,前者是传递参数的数组,默认第一个为php文件的名称;后者为$argv的数组个数。
linux下,一般程序安装都会安装在/usr/bin/php下面,可以通过man php查看一下,如果有信息说明可以使用,使用方法类似于window下。如果前面这步成立,那么你可以直接 php php文件 来运行php文件,如果man php没有信息,则说明当前php执行文件没有在环境路径里面,可以修改环境路径包含php路径,也可以类似于window进入php路径,在执行 php php文件。其他类似于window下。
② 如何在命令行下运行PHP脚本[带参数]
.php:<?phpecho "Hello from the CLI";?现在,试着在命令行提示符下运行这个程序,方法是调用CLI可执行文件并提供脚本的文件名: #php phphello.php 输出Hello from the CLI ----------------- 使用标准的输入和输出 你可以在自己的PHP脚本里使用这三个常量,以接受用户的输入,或者显示处理和计算的结果。要更好地理解这一点,可以看看下面的脚本(列表A):列表A<?php// ask for input fwrite(STDOUT, "Enter your name: "); // get input $name = trim(fgets(STDIN)); // write input back fwrite(STDOUT, "Hello, $name!");?Look what happens when you run it: shell php hello.php Enter your name: Joe Hello, Joe! 在这个脚本里,fwrite()函数首先会向标准的输出设备写一条消息,询问用户的姓名。然后它会把从标准输入设备获得的用户输入信息读 取到一个PHP变量里,并它把合并成为一个字符串。然后就用fwrite()把这个字符串打印输出到标准的输出设备上。 ----------------- 使用命令行自变量 在命令行里输入程序参数来更改其运行方式是很常见的做法。你也可以对CLI程序这样做。PHP CLI带有两个特殊的变量,专门用来达到这个目的:一个是$argv变量,它通过命令行把传递给PHP脚本的参数保存为单独的数组元素;另一个是$argc变量,它用来保存$argv数组里元素的个数。 shell php phptest.php chocolate 276 "killer tie, de!"Array( [0] = test.php [1] = chocolate[2] = 276[3] = killer tie, de!)正如你可以从输出的结果看到的,传递给test.php的值会自动地作为数组元素出现在$argv里。 要注意的是,$argvis的第一个自变量总是 脚本自己的名称。 下面是一个更加复杂的例子(列表C):列表C代码 下面是其用法的示例: shell php phpbook.php 21/05/2005 7 single 在这里,脚本首先会检查$argc,以确保自变量的数量符合要求。它然后会从$argv里提取出每一个自变量,把它们打印输出到标准的输出
③ 如何获取PHP命令行参数
如何获取PHP命令行参数使用 PHP 开发的同学多少都会接触过 CLI 命令行。经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET 、 POST 一样为这些命令行脚本提供参数。比如在针对某些日期做统计的脚本,就需要传递一个日期给它,这样我们就统计指定日期的一些数据。这类需求应该非常常见,那么,我们都是如何来接收这些命令行的参数的呢?今天,就来介绍一下这方面的内容。
$argv 获得所有空格分隔的参数列表这个变量估计是大家用得比较多的一个接参变量了。它是 PHP 为我们准备好的一个固定变量,目的就是获取传递给脚本的参数数组。
print_r($argv); // php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd // Array // ( // [0] => 如何获取PHP命令行参数.php // [1] => --a=1 // [2] => -b=2 // [3] => -c=3 // [4] => -d=4 // [5] => --e=5 // [6] => ccc // [7] => ddd // )这个数组是以参数间隔的空格进行分隔的。第1个元素是当前运行的脚本文件名,也就是说,不管有没有参数,这个变量一定会有一个 $argv[0] 表示的是当前的脚本文件名。
在日常的开发需求中,其实使用这个变量就已经够用了。但是这明显不会是我们今天的主题,大家注意到上面的代码中我们有很多参数是 -x=xxx 的形式,这种形式的参数是不是和 Linux 的命令选项非常像,没错,这就是我们今天要重点介绍的:从命令行参数列表中获取选项。
getopt() 从命令行参数列表中获取选项其实就是这样一个简单的函数,我们就可以像 Linux 的命令选项一样获取指定的命令值。而且不是像 $argv 按空格进行分隔,命令选项函数会将这些命令选项封装成数组,组成以选项名为键,以等号后面的内容为值的数组,更加方便我们的使用。
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:')); // Array // ( // [b] => 2 // [c] => 3 // [d] => 4 // )是不是很神奇,而且非常直观吧,我们直接就拿到了 b 、 c 、d 的内容并且是格式非常清晰的键值数组形式。有同学要问了,a 和 e 呢?还有后面的 ccc 、 ddd 呢?
首先要说明的是,ccc 和 ddd 不是标准的选项参数,也就是说,这个函数接收的内容是以 - 开头的选项,所以 ccc 和 ddd 不会在这里输出,并且需要注意的是,非选项参数会中断选项参数的获取,在 ccc 之后如果继续添加 - 开头的选项也是无法获取到的,这个我们后面还会看到。而 -- 开头的选项参数呢?我们直接看下面的长选项功能。
长选项 // php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [e] => 5 // )没错,getopt() 函数的第二个参数就是定义这种 -- 开头的长选项的,而且需要注意的是,第一个参数是字符串类型,第二个长选项参数是数组类型的。那么我们把它们结合起来,就当然可以获取到全部的参数信息啦!
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [b] => 2 // [c] => 3 // [d] => 4 // [e] => 5 // )OK,参数选项获取没问题了吧,细心的同学肯定又发现了一个问题,这个 getopt() 函数的参数中定义的选项名称后面为啥都要加个冒号?这就涉及到我们的冒号规则了,请直接往下看。
冒号规则getopt() 的前两个参数都支持一套关于选项获取的规则:
单独的字符(不接受值) 后面跟随冒号的字符(此选项需要值) 后面跟随两个冒号的字符(此选项的值可选)我们还是直接通过代码来看一下。
// 一 // php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('abcdef')); // Array // ( // [b] => // [c] => // [d] => // ) // 二 // php 如何获取PHP命令行参数.php -f print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // ) // 三 // php 如何获取PHP命令行参数.php -f 22 print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // ) // 四 // php 如何获取PHP命令行参数.php -f=22 print_r(getopt('f::')); // Array // ( // [f] => 22 // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // )这一段比较长,我们一块一块来看。首先是不带冒号的 abcdef 写法,返回的数组中都包含键,但没有值,对应上面的规则就是不接受这些参数选项的值,你传了这些参数选项也是只有键名而内容是空的。
第二段是定义了一个参数,但是不给值,这时,双冒号 :: 会有键名,而单冒号 : 则什么都没有。
第三段是空格形式的选项值,双冒号 :: 有键名但没有值,单冒号 : 键值正常。
第四段是等号 = 形式的选项值,单双冒号都正常接收到键值。
选项参数中断上文中我们提到过参数中断的问题,就是在选项参数之后如果有一个非选项参数的参数出现,getopt() 就无法再获取到这个非选项参数后面的所有内容了。
// php 如何获取PHP命令行参数.php -f=22 aa -b=33 // 选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。 // Array // ( // [f] => 22 // )通过这个测试可以清晰的看出后面的 b 选项无法获取。这时,如果我们想知道选项参数在什么地方或者因为哪个参数而中断的话,就可以使用 getopt() 函数的第三个参数了。
// php 如何获取PHP命令行参数.php -f=22 aa -b=33 $optind = null; getopt('f:b:', [], $optind); echo $optind, PHP_EOL; // 返回中断位置的索引值,2 echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引顺序,aa注释已经写得很清晰了,第三个参数会回调一个参数选项中断位置的索引,并且这个索引是和 $argv 的索引顺序位置一致的。
总结说实话,在没看文档前真的只知道有一个 $argv 变量可以用来获取命令行脚本的参数,通过这次学习才发现原来还有一个这么强大的选项参数函数。学习的过程非常简单,如何运用到真实的项目中才是关键所在,加油学习,努力实践吧!
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php
④ 如何在命令行下运行php脚本(写出两种方式)同时向php脚本传递参数
测试可用 :
?
<?php
$options = getopt("f:");
var_mp($options);
?>
php aaa.php -f "123456"
?
array(1) {
["f"]=>
string(5) "123456"
}
⑤ 如何在linux命令下运行php脚本,同时向php脚本传递参数
好吧,这个网络一下应该很好找“php接收命令行参数”。
test.php代码:
<?php
print_r($argv);
?>
然后命令行:
phptest.php
输出是:
Array
(
[0]=>test.php
)
再用命令行:
phptest.phparg1arg2
输出是:
Array
(
[0]=>test.php
[1]=>arg1
[2]=>arg2
)
⑥ php如何获取网址中的参数
比如有一个网址为
http://域名/goods.php?u=59&id=24#pinglun
我想得到这个id值
可以用正则,也可以用php函数解析到数组中
用正则可以这样
preg_match('/id=(d+)/',$_SERVER["REQUEST_URI"],$m);//$_SERVER 这个表示当前网址url
print_r($m[1]);exit;
或者用parse_url()及parse_str()函数
$cur_q=parse_url($_SERVER["REQUEST_URI"],PHP_URL_QUERY);
parse_str($cur_q,$myArray);
print_r($myArray["id"]);exit;
拓展资料
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
PHP的特性包括:
1. PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。
2. PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比,
PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;
PHP具有非常强大的功能,所有的CGI的功能PHP都能实现。
3. PHP支持几乎所有流行的数据库以及操作系统。
4. 最重要的是PHP可以用C、C++进行程序的扩展!
参考资料:网络 PHP
⑦ php中如何输出网址参数filename=test.txt文本的内容.
Php代码
$_SERVER["SERVER_PORT"] //获取端口
$_SERVER['HTTP_HOST'] //获取域名或主机地址 如test.cn 或http://www.test.cn 或2010.test.cn
$_SERVER['SERVER_NAME'] //获取域名或主机地址 注:只是主域名 如 test.cn
$_SERVER["REQUEST_URI"] //获取域名后的详细地址 如:/index.php?id=123 ...
$_SERVER['PHP_SELF'] //获取PHP文件名
$_SERVER["QUERY_STRING"] //获取PHP后的网址参数
$_SERVER['HTTP_REFERER'] //来源网页的详细地址
输出:
Php代码
echo "rewrite: ".$_GET["rewrite"];
echo "<br>SERVER_PORT: ".$_SERVER["SERVER_PORT"];
echo "<br>HTTP_HOST: ".$_SERVER["HTTP_HOST"];
echo "<br>SERVER_NAME: ".$_SERVER["SERVER_NAME"];
echo "<br>REQUEST_URI: ".$_SERVER["REQUEST_URI"];
echo "<br>PHP_SELF: ".$_SERVER["PHP_SELF"];
echo "<br>QUERY_STRING: ".$_SERVER["QUERY_STRING"];
echo "<br>HTTP_REFERER: ".$_SERVER["HTTP_REFERER"];
注意:
PHP中的SERVER_NAME 和HTTP_HOST的区别
地址栏里输入以下网址:
1) http://www.test.cn/ 时
对应的值为:
HTTP_HOST: www.test.cn
SERVER_NAME: test.cn
2) http://blog.test.cn / 时
对应的值为:
HTTP_HOST: blog.test.cn
SERVER_NAME: test.cn
php $_SERVER 属性说明
$_SERVER[ 'PHP_SELF' ] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER[ 'argv' ] #传递给该脚本的参数。
$_SERVER[ 'argc' ] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER[ 'GATEWAY_INTERFACE' ] #服务器使用的 CGI 规范的版本。例如,“CGI/ 1.1 ”。
$_SERVER[ 'SERVER_NAME' ] #当前运行脚本所在服务器主机的名称。
$_SERVER[ 'SERVER_SOFTWARE' ] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER[ 'SERVER_PROTOCOL' ] #请求页面时通信协议的名称和版本。例如,“HTTP/ 1.0 ”。
$_SERVER[ 'REQUEST_METHOD' ] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER[ 'QUERY_STRING' ] #查询(query)的字符串。
$_SERVER[ 'DOCUMENT_ROOT' ] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER[ 'HTTP_ACCEPT' ] #当前请求的 Accept: 头部的内容。
$_SERVER[ 'HTTP_ACCEPT_CHARSET' ] #当前请求的 Accept-Charset: 头部的内容。例如:“iso- 8859 - 1 ,*,utf- 8 ”。
$_SERVER[ 'HTTP_ACCEPT_ENCODING' ] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER[ 'HTTP_ACCEPT_LANGUAGE' ]# 当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER[ 'HTTP_CONNECTION' ] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER[ 'HTTP_HOST' ] #当前请求的 Host: 头部的内容。
$_SERVER[ 'HTTP_REFERER' ] #链接到当前页面的前一页面的 URL 地址。
$_SERVER[ 'HTTP_USER_AGENT' ] #当前请求的 User_Agent: 头部的内容。
$_SERVER[ 'HTTPS' ] — 如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER[ 'REMOTE_ADDR' ] #正在浏览当前页面用户的 IP 地址。
$_SERVER[ 'REMOTE_HOST' ] #正在浏览当前页面用户的主机名。
$_SERVER[ 'REMOTE_PORT' ] #用户连接到服务器时所使用的端口。
$_SERVER[ 'SCRIPT_FILENAME' ] #当前执行脚本的绝对路径名。
$_SERVER[ 'SERVER_ADMIN' ] #管理员信息
$_SERVER[ 'SERVER_PORT' ] #服务器所使用的端口
$_SERVER[ 'SERVER_SIGNATURE' ] #包含服务器版本和虚拟主机名的字符串。
$_SERVER[ 'PATH_TRANSLATED' ] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER[ 'SCRIPT_NAME' ] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER[ 'REQUEST_URI' ] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER[ 'PHP_AUTH_USER' ] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER[ 'PHP_AUTH_PW' ] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER[ 'AUTH_TYPE' ] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
⑧ thinkphp中的commond这个方法是干什么用的,参数怎么写
thinkphp5.1中,command用于编写可在命令行执行的方法,入口是根目录的 think 这个文件
编写文件 application/common/command/Testing.php
namespaceappcommoncommand;
usethinkconsoleCommand;
usethinkconsoleInput;
usethinkconsoleinputArgument;
usethinkconsoleinputOption;
usethinkconsoleOutput;
classTestingextendsCommand
{
protectedfunctionconfigure()
{
$this->setName('testing')
->addArgument('action',Argument::REQUIRED,"testargument")
->addOption('username','u',Option::VALUE_OPTIONAL,'username,test')
->setDescription('Testingcommand');
}
/**
*命令调度
*@paramInput$input
*@paramOutput$output
*@returnmixed
*/
protectedfunctionexecute(Input$input,Output$output)
{
$action=$input->getArgument('action');
$output->writeln('receivedargumentaction:'.$action);
if($input->hasOption('username')){
$username=$input->getOption('username');
$output->writeln('receivedoptionusername:'.$username);
}
$output->writeln('exit.');
}
}
增加配置 application/command.php
<?php
return[
'testing'=>'appcommoncommandTesting',
];
命令行测试 切换到application上级目录( think文件所在的目录 )
phpthinktestingmockAction-umockUsername
即可看到执行结果
文档参考:thinkphp 命令行 自定义指令
⑨ 如何通过Linux命令行使用和运行PHP脚本
在 Linux 下执行 php 脚本时通常是可以使用以下命令:#/usr/local/php/bin/php test.php
为简化输入可把此php执行程序 到系统命令目录下:
#cp /usr/local/php/bin/php /usr/sbin/
验证:输入以下命令,如正确获取 php 版本,说明操作成功。
#php -v
这样,以后再执行PHP脚本时可直接采用以下输入方式即可。
#php a.php