php可以调动shell脚本吗,php语言怎么执行shell脚本语言

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

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

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

echo shell_exec('ls');

?>

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

45799d3f8efc

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

/**

* state

*

* @package custom

*/

?>

uname -a
<?php echoshell_exec("uname -a"); ?>
Uptime
<?php echoltrim(shell_exec("uptime"), " "); ?>
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
 
  

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

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

?>

cat /sys/class/thermal/thermal_zone0/temp
 
  

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

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

?>

free -h
<?php echoshell_exec("free -h"); ?>
cat /proc/cpuinfo
<?php echoshell_exec("cat /proc/cpuinfo"); ?>

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

45799d3f8efc

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值