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的ASP防火墙
Oct 09 PHP
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
Zend Studio使用技巧两则
Apr 01 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 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创建sprite
2014/02/11 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
学习ExtJS border布局
2009/10/08 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
windows系统下Python环境搭建教程
2017/03/28 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
python从子线程中获得返回值的方法
2019/01/30 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
animation和transition的区别
2020/10/12 HTML / CSS
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
机关门卫制度
2014/02/01 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
赔偿协议书
2015/01/27 职场文书
皇城相府导游词
2015/02/06 职场文书
教师教育教学随笔
2015/08/15 职场文书
学校就业保障协议书
2019/06/24 职场文书