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的FTP学习(二)[转自奥索]
Oct 09 PHP
一个简单的PHP&amp;MYSQL留言板源码
Jul 19 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
php中文字符串截取方法实例总结
Sep 30 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
PHP环形链表实现方法示例
Sep 15 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 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的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
php工具型代码之印章抠图
2018/07/18 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
php fread函数使用方法总结
2019/05/28 PHP
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
拖动时防止选中
2017/02/03 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
Python ftp上传文件
2016/02/13 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
python 发送json数据操作实例分析
2019/10/15 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
Python面向对象编程基础实例分析
2020/01/17 Python
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
护士自我评价
2014/02/01 职场文书
开门红主持词
2014/04/02 职场文书
教师对学生的寄语
2014/04/03 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL