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&amp;java(三)
Oct 09 PHP
Windows下的PHP5.0详解
Nov 18 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
php分页思路以及在ZF中的使用
May 30 PHP
处理单名多值表单的详解
Jun 08 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
php时间戳转换代码详解
Aug 04 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
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
js验证账户名是否重复
2020/05/26 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python常见的pandas用法demo示例
2019/03/16 Python
基于python生成器封装的协程类
2019/03/20 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
大学教师年终总结的自我评价
2013/10/29 职场文书
合同专员岗位职责
2013/12/18 职场文书
男方父母证婚词
2014/01/12 职场文书
小组合作学习反思
2014/02/18 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
个人租房协议书
2014/11/28 职场文书
公司租车协议书
2015/01/29 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
golang为什么要统一错误处理
2022/04/03 Golang
js作用域及作用域链工作引擎
2022/07/07 Javascript