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如何编写易读的代码
Jul 10 PHP
phpmyadmin MySQL 加密配置方法
Jul 05 PHP
php 函数中使用static的说明
Jun 01 PHP
php读取富文本的时p标签会出现红线是怎么回事
May 13 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
php获取url参数方法总结
Nov 13 PHP
php eval函数一句话木马代码
May 21 PHP
PHP实现简单汉字验证码
Jul 28 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
php workerman定时任务的实现代码
Dec 23 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 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
星际争霸中的热键
2020/03/04 星际争霸
PHP下MAIL的另一解决方案
2006/10/09 PHP
php 设计模式之 工厂模式
2008/12/19 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
this和执行上下文实现代码
2010/07/01 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python实现的重启关机程序实例
2014/08/21 Python
python操作 hbase 数据的方法
2016/12/18 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
pycharm修改file type方式
2019/11/19 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
Python中SQLite如何使用
2020/05/27 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
测试时代收集的软件测试面试题
2013/09/25 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
教师岗位职责范本
2013/12/29 职场文书
好军嫂事迹材料
2014/01/15 职场文书
大学毕业感言50字
2014/02/07 职场文书
什么是就业协议书
2014/04/17 职场文书
政工例会汇报材料
2014/08/26 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL