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 相关文章推荐
改变Apache端口等配置修改方法
Jun 05 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
PyMongo安装使用笔记
2015/04/27 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
python2 对excel表格操作完整示例
2020/02/23 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
python 制作网站小说下载器
2021/02/20 Python
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
无线电通信名词解释
2022/02/18 无线电