PHP调用Shell命令可用于服务器管理与自动化,常用方法包括:1. exec()执行命令并返回最后一行输出,第二参数获取完整输出数组;2. system()直接输出结果到终端,适合实时查看;3. passthru()适用于二进制数据输出;4. shell_exec()以字符串形式返回完整输出;5. popen()实现单向管道通信,支持持续输入输出;6. proc_open()提供stdin、stdout、stderr的完全控制,适用于复杂交互。使用时需对用户输入用escapeshellarg()和escapeshellcmd()转义,避免命令注入,禁用高危函数并限制权限,确保安全。

PHP 与 Shell 的交互在服务器管理、自动化脚本、系统监控等场景中非常实用。通过 PHP 调用 Shell 命令,可以执行外部程序、读取命令输出、传递参数,甚至实现双向通信。下面介绍几种常用方式及其使用场景。
exec() 是最基础的函数之一,用于执行一个外部命令并返回最后一行输出。
示例:
$command = "ls -l /tmp";
$output = exec($command, $outputLines, $returnCode);
echo "返回码: $returnCode
";
print_r($outputLines); // 所有输出行
注意:exec() 只返回最后一行结果,但第二个参数可接收完整输出数组。适合获取结构化输出。
system() 执行命令并将输出直接打印到浏览器或终端,适合实时查看命令结果。
示例:
system("whoami", $status);
if ($status === 0) {
echo "命令执行成功";
}
passthru() 更适合处理二进制数据(如生成图片、PDF),它原样输出命令结果,不作任何解析。
shell_exec() 将命令执行后的所有输出以字符串形式返回,使用反引号 `` 或函数调用均可。
示例:
$output = shell_exec('date');
echo "当前时间: $output";
该方法简洁,适合需要捕获完整输出内容的场景。
Pinokio
Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用
232
查看详情
当需要持续输入或输出时,popen() 可打开一个指向进程的管道。
示例:向命令输入数据
$fp = popen('grep "error" ', 'w');
fwrite($fp, "info: all good\n");
fwrite($fp, "error: something wrong\n");
pclose($fp);
这里将多行文本传给 grep 命令,实现过滤。'w' 表示写入子进程,'r' 表示读取其输出。
最强大的方式是 proc_open(),支持 stdin、stdout、stderr 的完全控制,可用于复杂交互。
示例:双向通信
$descriptors = [
0 => ["pipe", "r"], // stdin
1 => ["pipe", "w"], // stdout
2 => ["pipe", "w"] // stderr
];
$process = proc_open('/bin/bash', $descriptors, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], "echo Hello from shell\n");
fwrite($pipes[0], "exit\n");
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($process);
}
这种方式适用于需要登录交互式环境、执行多个命令的场景。
调用 Shell 命令存在风险,尤其是用户输入未过滤时。
以上就是PHP命令怎么与Shell交互_PHP与Shell脚本交互执行与管道通信的详细内容,更多请关注php中文网其它相关文章!
相关文章:
Python复杂任务中断策略:通过回调函数实现优雅停止
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
微信网页版扫码登录入口 微信网页版二维码登录入口
Kafka Streams中基于消息头条件过滤消息的实现指南
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
大象笔记网页版入口 印象笔记网页版登录入口
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
铃兰之剑为这和平的世界希里技能组及加点推荐
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
汽车之家官方网站官网入口_汽车之家网页版直接进入
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
知音漫客官网漫画下载_知音漫客网页版阅读记录
利用Bokeh CustomJS动态控制DataTable列可见性
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法
Angular中单选按钮的正确使用与常见陷阱解析
基于动态规划的房屋花卉种植最小成本算法详解
SteamMachine定价或为699美元 大家想入手吗?
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
AI泡沫首次被“刺破”:GPU十年都无法存活!
抖音怎么赚钱_抖音创作者变现方法与途径指南
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
写好的html代码怎么运行出来_运行写好的html代码方法【教程】
蛙漫安全无毒 官方认证的绿色入口
Go语言中构建可靠数据存储的原子性与持久化策略
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
PHP表单隐藏域数据传递:常见问题与最佳实践
内存检查:在VS Code中调试C++时的内存视图
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
J*a里如何使用forEach遍历Map_Map遍历方法说明
AO3最新官网入口公告_2025AO3镜像站实时查询方法
126邮箱账号注册 电脑版登录入口
yy漫画网页版官方入口_yy漫画官网登录页面链接
C++如何解决segmentation fault_C++段错误调试与原因分析
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
多闪网页版在线观看免费入口_多闪官网访问入口
小米14应用无法联网原因分析_小米14网络权限修复