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 相关文章推荐
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
php分页函数示例代码分享
Feb 24 PHP
PHP函数http_build_query使用详解
Aug 20 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
php快速排序原理与实现方法分析
May 26 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 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验证码函数的使用示例
2013/05/03 PHP
smarty中post用法实例
2014/11/28 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
小程序实现多列选择器
2019/02/15 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
python中pycurl库的用法实例
2014/09/30 Python
Python新手实现2048小游戏
2015/03/31 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
装修协议书范本
2014/04/21 职场文书
爬山的活动方案
2014/08/16 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python