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 相关文章推荐
第十三节--对象串行化
Nov 16 PHP
PHP开发入门教程之面向对象
Dec 05 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
php实现转换ubb代码的方法
Jun 18 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
php pdo连接数据库操作示例
Nov 18 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
hadoop常见错误以及处理方法详解
2013/06/19 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
jQuery实现本地存储
2020/12/22 jQuery
python判断windows隐藏文件的方法
2014/03/21 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
Python基于execjs运行js过程解析
2020/11/27 Python
后勤人员岗位职责
2013/12/17 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
企业员工集体活动方案
2014/08/17 职场文书
功夫熊猫观后感
2015/06/10 职场文书
办公室管理规章制度
2015/08/04 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
关于vue中如何监听数组变化
2021/04/28 Vue.js
详细总结Python常见的安全问题
2021/05/21 Python