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 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
php下实现农历日历的代码
Mar 07 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
PHP实现的进度条效果详解
May 03 PHP
PHP实现唤起微信支付功能
Feb 18 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 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归并排序的实现
2016/10/18 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
领导欢迎词范文
2015/01/26 职场文书
运动会广播稿50字
2015/08/19 职场文书
入党心得体会
2019/06/20 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python