当前位置: 首页 > news >正文

PHPShell脚本与系统命令调用

PHP Shell脚本与系统命令调用

PHP可以调用系统命令执行外部程序。但要注意安全问题。今天说说PHP中执行系统命令的方法。

执行系统命令的几种方式。

```php
// exec - 返回最后一行输出
$lastLine = exec('ls -la', $output, $code);
echo "最后一行: $lastLine\n";
echo "退出码: $code\n";

// shell_exec - 返回全部输出
$output = shell_exec('ls -la');
echo $output;

// system - 直接输出结果
system('ls -la', $code);

// passthru - 输出原始结果
passthru('ls -la', $code);
?>

安全地执行命令。

```php
function safeExec(string $command, array $args = []): array
{
$escapedArgs = array_map('escapeshellarg', $args);
$fullCommand = $command . ' ' . implode(' ', $escapedArgs);

$output = [];
$code = 0;
exec($fullCommand, $output, $code);

return ['output' => $output, 'code' => $code];
}

$result = safeExec('ls', ['-la', '/tmp']);
print_r($result);

// escapeshellcmd - 转义整个命令
// escapeshellarg - 转义单个参数
?>

管道操作。

```php
$output = shell_exec('ps aux | grep php | wc -l');
echo "PHP进程数: " . trim($output) . "\n";

$output = shell_exec('cat /proc/cpuinfo | grep "processor" | wc -l');
echo "CPU核心数: " . trim($output) . "\n";
?>

命令执行的超时控制。

```php
function execWithTimeout(string $command, int $timeout = 5): array
{
$command = "timeout $timeout $command 2>&1";
$output = [];
$code = 0;
exec($command, $output, $code);

if ($code === 124) {
throw new RuntimeException("命令执行超时");
}

return ['output' => $output, 'code' => $code];
}

try {
$result = execWithTimeout('sleep 10', 2);
} catch (RuntimeException $e) {
echo "超时: {$e->getMessage()}\n";
}
?>

禁用危险函数。

```ini
; php.ini
disable_functions = exec,passthru,shell_exec,system,popen,proc_open
```

CLI模式下的实用脚本。

```php
#!/usr/bin/env php
if (php_sapi_name() !== 'cli') die("CLI only\n");

$options = getopt('', ['name:', 'help']);

if (isset($options['help'])) {
echo "用法: php script.php --name=<名称>\n";
exit(0);
}

$name = $options['name'] ?? 'World';
echo "Hello, $name!\n";
?>

PHP调用系统命令很方便,但要注意安全。escapeshellarg转义参数防止注入。超时控制防止命令挂起。生产环境建议禁用exec等危险函数。CLI模式下PHP可以编写强大的运维脚本

http://www.jsqmd.com/news/959316/

相关文章:

  • 物联终端故障智能自愈方案
  • Vivado秒表进阶玩法:如何给你的FPGA计时器增加小数点显示和时分秒格式切换?
  • 网络排障不求人:手把手教你配置中兴ZXR10-3928A的端口镜像(附完整命令)
  • 2026年美国留学中介哪家好,机构排名推荐与选机构避坑全流程指南 - 环球新视野
  • 告别打印烦恼:手把手教你用JavaScript在Web端驱动斑马打印机打印二维码(附ZD888/GT800通用代码)
  • 告别中间商!Foobar2000直通ASIO+DSD硬解保姆级教程(附插件下载)
  • 别再一张张修图了!Photoshop Camera RAW 批量同步调色,5分钟搞定一组风光照
  • 2026年6月市场优质的市场调研公司推荐,神秘顾客/门店暗访/市场调研/门店检查/广告监测,市场调研机构哪个好 - 品牌推荐师
  • 搞懂5G NAS消息的“明文”与“密文”:Registration Request里的cleartext和non-cleartext到底怎么用?
  • Qt项目实战:给你的软件加个‘优雅等待’功能,从原理到封装一网打尽
  • 2026年靠谱的豪宅设计与装修公司/工厂装修公司/高端别墅设计与装修公司/商业空间装修公司哪家环保好 - 品牌宣传支持者
  • 终端环境下 AI 图像识别与生成实战:从手绘草稿到精美插画的完整方案
  • Sobolev空间与迹定理:边界值问题的数学基础
  • 别再只会画流程图了!Flowable流程设计器里任务监听器和多实例的实战用法详解
  • 如何快速搭建虚拟显示器:Parsec VDD新手完整指南
  • 2026年驻马店青少年教育学校评测:青少年教育基地、青少年行为矫正基地、青春期休学孩子矫正学校、休学孩子疗愈基地选择指南 - 优质品牌商家
  • 从手机拍照到视频播放:一文搞懂Android相机默认的NV21格式(YUV420SP)
  • S1作用在4维流形上的拓扑分类与复旗流形应用
  • 2026年知名的人形机器人/机器人/送餐机器人/迎宾机器人高口碑品牌推荐 - 行业平台推荐
  • 从 `ffmpeg -buildconf` 输出里,我们能解读出什么?一份FFmpeg编译配置的深度解析
  • 2026年质量好的PP-WAX/PVC专用蜡/EBS/FT-WAX精选推荐公司 - 品牌宣传支持者
  • 宝塔面板下PHP8.0安装Swoole扩展,手把手教你搞定WebSocket实时通讯服务
  • 基于ViT的人脸图像质量评估(FIQA)技术解析
  • 2026年q2国内玻璃酒瓶生产厂家综合实力排行:化妆品玻璃瓶/橄榄油玻璃瓶/红酒瓶/膏霜玻璃瓶/实力盘点 - 优质品牌商家
  • 从V-REP 3.5到CoppeliaSim 4.9:机器人仿真软件版本变迁与老项目兼容性指南
  • 别再一张张修图了!Photoshop Camera RAW 批量调色保姆级教程(附同步设置技巧)
  • 告别手动解析!用精易模块的类_json轻松玩转易语言JSON处理(附完整代码示例)
  • 2026年6月煤矿安全设备厂家推荐,矿用自动洒水降尘装置用热释红外传感器,煤矿安全设备实力厂家口碑推荐 - 品牌推荐师
  • 2026年专业电能质量静止无功发生器厂家top10盘点:成都电能质量静止无功发生器/实力盘点 - 优质品牌商家
  • 别再手动传文件了!用Colab直接运行GitHub项目,5分钟搞定环境配置