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 相关文章推荐
DedeCms模板安装/制作概述
Mar 11 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
一周让你学会PHP 不错的学习资料
Feb 06 PHP
用php实现选择排序的解决方法
May 04 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
PHP之短标签开启设置
Jun 17 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
PHP数据库处理封装类实例
Dec 24 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 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获取网络上文件
2006/10/09 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
jquery文字上下滚动的实现方法
2013/03/22 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
Python对列表中的各项进行关联详解
2017/08/15 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python 绘制正态曲线的示例
2020/09/24 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
过滤器的用法
2013/10/08 面试题
教师党员岗位承诺书
2014/05/29 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
质量主管工作职责
2014/09/26 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
教学督导岗位职责
2015/04/10 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
vue的项目如何打包上线
2022/04/13 Vue.js