php中如何执行linux命令详解

 更新时间:2018年11月06日 09:34:34   作者:nemo  
开发中遇到一种问题,需要在php函数中运行Linux系统代码,所以下面这篇文章主要给大家介绍了关于php中如何执行linux命令的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

本文主要给大家介绍了关于在php中如何执行linux命令的相关内容,下面话不多说了,来一起看看详细的介绍吧

php如何执行某个命令 ,官方手册在这里

我们先从shell_exec来说

如何使用shell_exec在php里面执行shell命令

先来试一下,使用php执行某个shell命令,该命令是mkdir testdir。

<?php

$cmd = 'mkdir testdir';
shell_exec($cmd);

在这个php脚本执行之前,目录里面是这样子的:

执行之后,目录里面是如下图所示,多了一个testdir文件夹,这是通过我们刚刚在php脚本里面执行shell命令生成的


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

$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);

打印结果如下:


再看一下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)

还有其他的,就暂时不介绍了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • php7 图形用户界面GUI 开发示例

    php7 图形用户界面GUI 开发示例

    这篇文章主要介绍了php7 图形用户界面GUI 开发,结合实例形式分析了PHP7基于php_ui扩展实现的图形用户界面GUI相关操作技巧,需要的朋友可以参考下
    2020-02-02
  • php+mysql数据库查询实例

    php+mysql数据库查询实例

    这篇文章主要介绍了php+mysql数据库查询的方法,实例分析了数据库查询的原理与完整实现步骤,并进行了针对性的分析说明,需要的朋友可以参考下
    2015-01-01
  • 使用PHP实现实时数据可视化功能的示例详解

    使用PHP实现实时数据可视化功能的示例详解

    实时数据可视化功能,是指在Web应用程序开发中,将服务器发送的实时数据,本文将介绍如何使用PHP和前端框架实现实时数据可视化功能,需要的可以参考一下
    2023-07-07
  • php获取今日开始时间和结束时间的方法

    php获取今日开始时间和结束时间的方法

    本篇文章实例讲述了php获取今日开始时间和结束时间的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • PHP+Oracle本地开发环境搭建方法详解

    PHP+Oracle本地开发环境搭建方法详解

    在本篇文章中小编给大家分享了关于PHP+Oracle本地开发环境搭建的步骤和技巧,需要的朋友们学习下。
    2019-04-04
  • php获取系统变量方法小结

    php获取系统变量方法小结

    这篇文章主要介绍了php获取系统变量方法,实例总结了get_defined_vars、get_object_vars、phpinfo及phpversion等方法获取系统信息的相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • PHP数组游标实现对数组的各种操作详解

    PHP数组游标实现对数组的各种操作详解

    这篇文章主要介绍了PHP数组游标实现对数组的各种操作,结合实例形式较为详细的分析了PHP数组操作中current与next方法控制数组游标移动实现数组遍历的技巧,需要的朋友可以参考下
    2016-01-01
  • php使用pdo连接并查询sql数据库的方法

    php使用pdo连接并查询sql数据库的方法

    这篇文章主要介绍了php使用pdo连接并查询sql数据库的方法,实例分析了常用的pdo连接方法与改进方法,并针对pdo技术进行了分析说明,需要的朋友可以参考下
    2014-12-12
  • 详解php内存管理机制与垃圾回收机制

    详解php内存管理机制与垃圾回收机制

    在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP的GC垃圾处理机制。PHP的内存管理,分为俩部分, 第一部分是PHP自身的内存管理,而第二部分是zend_alloc中描写的关于PHP自身的内存管理。本文将详细介绍这两个内容。
    2021-05-05
  • PHP编程获取图片的主色调的方法【基于Imagick扩展】

    PHP编程获取图片的主色调的方法【基于Imagick扩展】

    这篇文章主要介绍了PHP编程获取图片的主色调的方法,基于PHP的Imagick扩展实现针对图片的颜色值获取功能,需要的朋友可以参考下
    2017-08-08

最新评论