php中如何执行linux命令详解


Posted in PHP onNovember 06, 2018

前言

本文主要给大家介绍了关于在php中如何执行linux命令的相关内容,下面话不多说了,来一起看看详细的介绍吧

php如何执行某个命令 ,官方手册在这里

我们先从shell_exec来说

如何使用shell_exec在php里面执行shell命令

先来试一下,使用php执行某个shell命令,该命令是mkdir testdir。

<?php

$cmd = 'mkdir testdir';
shell_exec($cmd);

在这个php脚本执行之前,目录里面是这样子的:

php中如何执行linux命令详解

执行之后,目录里面是如下图所示,多了一个testdir文件夹,这是通过我们刚刚在php脚本里面执行shell命令生成的

php中如何执行linux命令详解

shell命令执行失败会如何?

假如说执行shell命令的时候出错了,后面的php代码还能运行吗?看下面这个例子,我要执行的命令是读取并运行test.sh这个文件里面的内容,但是这个文件实际是不存在的。

<?php

$cmd = 'source test.sh';

shell_exec($cmd);

print_r("---the end---\n");

它的打印结果是:

sh: line 0: source: test.sh: file not found
---the end---

可以从打印结果看到,即使运行某个shell命令的时候会出错,不会影响下面的php代码的执行。所以,如果shell命令执行失败了,我们也没办法用php的try-catch是捕获不到shell命令的错误。

就比如下面的代码,实际上catch不到shell命令的错误

<?php

$cmd = 'source test.sh';

try {

shell_exec($cmd);

print_r("---the end---\n");

} catch (Exception $e) {
echo 'error=' . $e->getMessage();
}

它的打印结果是:

sh: line 0: source: test.sh: file not found
---the end---

获取shell_exec的输出

看一下官方文档里面提过的shell_exec

php中如何执行linux命令详解

我们在第一个例子里面试一下

<?php

$cmd = 'mkdir testdir';
$ret = shell_exec($cmd);
var_dump($ret);

打印出来的结果是

NULL

所以,我想,上面这个应该是命令没有任何输出,换一个有输出的命令,如下面代码;

<?php

$cmd = 'echo $SHELL';
$ret = shell_exec($cmd);
var_dump($ret);

它的打印结果是:

string(10) "/bin/bash
"

所以,如果想要用php执行shell命令,并且知道到底执行成功还是失败,那么可以在这个shell命令的后面加上2>&1,把错误输出到标准输出。这样就可以判断是执行失败还是执行成功。示例如下:

<?php

$cmd = 'source test.sh 2>&1';

$ret = shell_exec($cmd);
if (empty(ret)) {
print_r("---success---\n");
} else {
print_r("---failed---\n");
}

print_r("---the end---\n");

当然,官方手册里面除了有shell_exec,还有其他的,比如说exec。

下面就来说说exec

exec方法的参数是这样的,$output是一个数组,$return_var是一个int型的值。$return_var是0的时候表示命令执行成功。

string exec ( string $command [, array &$output [, int &$return_var ]] )

看下面的示例代码:

<?php

$cmd = 'ls -l /home';
exec($cmd, $result, $var);
var_dump($result);
var_dump($var);

打印结果如下:

php中如何执行linux命令详解

再看一下system

这是system的函数说明,$return_var是0的时候表示命令执行成功。system函数的返回是命令的输出的最后一行的内容

string system ( string $command [, int &$return_var ] )

看下面的示例代码:

<?php

$cmd = 'mkdir testsystem';;

$lastline = system($cmd, $var);
var_dump($lastline);
var_dump($var);

打印结果为:

string(0) ""
int(0)

还有其他的,就暂时不介绍了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP中显示格式化的用户输入
Oct 09 PHP
php简单提示框alert封装函数
Aug 08 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
laravel中的一些简单实用功能
Nov 03 #PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 #PHP
yii2 上传图片的示例代码
Nov 02 #PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 #PHP
php 调用百度sms来发送短信的实现示例
Nov 02 #PHP
Linux下 php7安装redis的方法
Nov 01 #PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 #PHP
You might like
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
新闻内页-JS分页
2006/06/07 Javascript
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
初三家长会邀请函
2014/01/18 职场文书
趣味体育活动方案
2014/02/08 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
车辆委托书范本
2014/10/05 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书