在命令行下运行PHP脚本[带参数]的方法


Posted in PHP onJanuary 22, 2010

创建一个简单的文本文件,其中包含有以下PHP代码,并把它保存为hello.php:

<?php 
echo "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数组里元素的

个数。

用PHP脚本编写一段读取$argv并处理它所含参数的代码是很简单的。试试列表B里的示例脚本,看看它是如何工作的:

列表B

<?php 
print_r($argv); 
?>

Run this script by passing it some arbitrary values, and check the output:

shell> php phptest.php chocolate 276 "killer tie, dude!"
Array
( [0] => test.php
[1] => chocolate
[2] => 276
[3] => killer tie, dude!
)

正如你可以从输出的结果看到的,传递给test.php的值会自动地作为数组元素出现在$argv里。要注意的是,$argvis的第一个自变量总是

脚本自己的名称。

下面是一个更加复杂的例子(列表C):

列表C

代码

<?php 
// check for all required arguments 
// first argument is always name of script! 
if ($argc != 4) { 
die("Usage: book.php <check-in-date> <num-nights> <room-type> "); 
} // remove first argument 
array_shift($argv); 
// get and use remaining arguments 
$checkin = $argv[0]; 
$nights = $argv[1]; 
$type = $argv[2]; 
echo "You have requested a $type room for $nights nights, checking in on $checkin. Thank you for your order! "; 
?>

下面是其用法的示例:

shell> php phpbook.php 21/05/2005 7 single
You have requested a single room for 7 nights, checking in on 21/05/2005. Thank you for your order!

在这里,脚本首先会检查$argc,以确保自变量的数量符合要求。它然后会从$argv里提取出每一个自变量,把它们打印输出到标准的输出

PHP 相关文章推荐
调整PHP的性能
Oct 30 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
php微信开发自定义菜单
Aug 27 PHP
如何使用php等比例缩放图片
Oct 12 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
php写入txt乱码的解决方法
Sep 17 PHP
php实现推荐功能的简单实例
Sep 29 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 #PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 #PHP
获取远程文件大小的php函数
Jan 11 #PHP
PHP 编程安全性小结
Jan 08 #PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 #PHP
PHP5.3.1 不再支持ISAPI
Jan 08 #PHP
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 #PHP
You might like
使用PHP Socket写的POP3类
2013/10/30 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
laravel自定义分页效果
2017/07/23 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
JS验证不重复验证码
2017/02/10 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python3.x实现发送邮件功能
2018/05/22 Python
pandas 选择某几列的方法
2018/07/03 Python
python日志模块logbook使用方法
2019/09/19 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
django的autoreload机制实现
2020/06/03 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
保洁公司服务承诺书
2014/05/28 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
大学生党课感想
2015/08/11 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
Linux中sftp常用命令整理
2022/06/28 Servers