美文网首页
php语言怎么执行shell脚本语言

php语言怎么执行shell脚本语言

作者: 刘小白DOER | 来源:发表于2020-09-24 21:26 被阅读0次

       在php编程中,笔者想到能不能用php来执行shell脚本语言(PHP调用LINUX命令的功能),然后通过LAMP将执行结果通过网页显示或者存入数据库。在以前的文章中剖析Pi-Dashboard的机制  是将数组$D里面的数值是通过文件读取写入数组和php的函数赋值的,这是有一定局限性的。对于有些数据可能只有shell才能方便快捷的处理。

      搜索引擎找了一下,果然是有的。shell_exec函数,通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。那么这个函数就将架起php和shell之间的桥梁,十分方便,可以做到事半功倍。

      那笔者就来测试一番。新建个shelltest.php。

     <?php

      echo shell_exec('ls');

     ?>

      php shelltest.php执行脚本,脚本前面的php可不能少,不然shelltest.php找不到执行程序。

   在树莓派实验室找了个高阶版本-显示树莓派状态信息的PHP页面,可以执行shell脚本语言来查看实时的树莓派状态信息。在/var/www/html文件夹(得安装apache/nginx+php)中新建shell.php脚本,将下面的代码写入脚本中。

<?php

    /**

    * state

    *

    * @package custom

    */

?>

    <article class="content">

    <section class="post">

        <div id='server_state'>

            <h5>uname -a</h5>

            <pre><?php echoshell_exec("uname -a"); ?></pre><br/>

            <h5>Uptime</h5>

            <pre><?php echoltrim(shell_exec("uptime"), " "); ?></pre><br/>

            <h5>cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq </h5>

            <pre>

                <?php

                    $t= shell_exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");

            echosprintf("%s/1000=%sKHz", str_replace("\n", "", $t), $t/1000);

                ?>

            </pre><br/>

            <h5>cat /sys/class/thermal/thermal_zone0/temp </h5>

            <pre>

                <?php

                    $t= shell_exec("cat /sys/class/thermal/thermal_zone0/temp");

        echosprintf("%s/1000=%sC°", str_replace("\n", "", $t), $t/1000);

       ?>

      </pre><br/>

            <h5>free -h</h5>

            <pre><?php echoshell_exec("free -h"); ?></pre><br/>

            <h5>cat /proc/cpuinfo</h5>

            <pre><?php echoshell_exec("cat /proc/cpuinfo"); ?></pre>

</div>

     在浏览器http://192.168.31.82/shell.php查看信息,不要太方便了。相比pi-dashboard的实现机制,shell_exec函数就是“一个支点翘起地球”。

        在实践中笔者才知道PHP有三种方法来执行外部命令。一是提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec() ,二是反撇号`(和~在同一个键)执行系统外部命令 ,三是popen()函数打开一个进程管道来执行给定的命令。具体的区别就不一一阐述了请参考文章PHP中调用外部命令的方法 。在这片文章中,有两个问题值得考虑:安全性和超时。安全模式不能执行外部程序,只有在特定目录中的外部程序才可以被执行,这个目录可以在php.ini 文件定义。当执行命令的返回结果非常庞大时,可以需要考虑将返回结果输出重定向至其他文件,再另行读取文件,这样可以显著提高程序执行的效率。

       如果php要运行进程的话,那么shell_exec()函数可能不太实用,参考php手册说明:shell_exec()函数当进程执行过程中发生错误,或者进程不产生输出的情况下,都会返回NULL, 所以,使用本函数无法通过返回值检测进程是否成功执行。 如果需要检查进程执行的退出码,请使用exec()函数。

相关文章

网友评论

      本文标题:php语言怎么执行shell脚本语言

      本文链接:https://www.haomeiwen.com/subject/xcutuktx.html