php-cli简介(不会Shell语言一样用Shell)


Posted in PHP onJune 03, 2013

1.基础知识

1.1 什么是Shell编程?
在 Unix 中,shell 可不是简单的命令解释器(典型的有 Windows 中的 DOS ),而是一个全功能的编程环境。Shell 是操作系统的一部分,用来与用户打交道,并且可以用来协调各个命令【1】。用Shell编程可以灵活地解决大量重复任务,十分方便。但是,Shell的语法十分怪异(个人意见),不容易记,如果现在熟悉的语言可以用来写shell那就好了——比如php——就可以快速开发Shell程序了(比如我的Preminder的后台程序),于是便有了这篇文章,本文以Linux为例说明php-cli的用法,其它平台的版本类似。

1.2 什么是php-cli?
刚才说到,我们可以用php来开发Shell程序。有的同学可能会问啦:“php不是用来做网页的么?-_-”。是的,php可以用来做动态网页,并且当初php就是为做动态网页而开发的语言,但是理论上php可以用来做任何的程序,甚至是桌面程序,而php-cli是php在命令行运行的支持环境,也就是我们说的可以用来写Shell的环境支持。

php-cli是php Command Line Interface的简称,如同它名字的意思,就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(php-cgi, isapi等)【2】。

也就是说,php不单可以写前台网页,它还可以用来写后台的程序。

2. 执行php-cli脚本

2.1 php-cli的语法
当然是跟php一模一样啦,因为它就是php嘛!只不过一些默认的参数与php-cgi不同,比如运行时间:php-cli默认运行时间是无穷,而网页php默认设置是30s。

2.2 执行php-cli脚本

2.2.1. 直接在终端执行php
kangzj@localhost# php -r 'print_r(get_defined_constants());'2.2.2. 运行php-cli脚本文件
kangzj@localhost# php my_script.php

kangzj@localhost# php -f my_script.php上而说的php文件就是一般的php文件没有什么不同。还有一种方式,就是在文件中指令解释器,就可以直接在终端以”./test.php执行脚本了”,test.php就像下面这样:

#!/usr/bin/php -q 
<?php 
echo "Hello world of PHP CLI!"; 
?>

补充:php的Shell程序并不一定以php为扩展名,可以以任意扩展名,甚至不要扩展名,只是为了清楚,我才用的php扩展名。

2.2.3. 用Cron执行php-cli脚本
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据,Preminder定期查询PR等等,添加的方法:打开/etc/crontab,添加:

0 13 * * * /usr/bin/php -f /home/phpscripts/phpcli.php

4. 结语
如果你会php的话,那么你也会了一种Shell编程语言!

如果你不会php,你去学php,就相当于一下子学会动态网页和Shell两种语言!并且你甚至可以用php来写具有图形界面的应用程序,Dnspod的动态域名客户端中就有一种是用php开发的。

php的易学是出名的,如果你还不会,那是在犹豫什么呢?

另外,再宣传一下我的”Preminder”——PR更新Email提醒服务~~

5. 参考文献
1.Linux Shell简介 : https://3water.com/article/37801.htm
2.PHP Command Line Interface : Mystic Unleashed :http://www.php-cli.com/
3.ch 4.2, php manual : http://www.php.net
PS:Shell命令还是要知道一些的,否则有些功能不太好实现。

PHP 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
PHP6 中可能会出现的新特性预览
Apr 04 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 #PHP
php cli模式学习(PHP命令行模式)
Jun 03 #PHP
获取PHP警告错误信息的解决方法
Jun 03 #PHP
php cli 小技巧
Jun 03 #PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 #PHP
PHP在线生成二维码代码(google api)
Jun 03 #PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
Jun 03 #PHP
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
document.write的几点使用心得
2014/05/14 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
深入理解node.js http模块
2018/01/24 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
python中zip和unzip数据的方法
2015/05/27 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python实现的rsa加密算法详解
2018/01/24 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
应届毕业生自荐信
2014/05/28 职场文书
个人简历自荐信
2014/06/26 职场文书
中国梦团日活动总结
2014/07/07 职场文书
加薪申请报告范本
2015/05/15 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书