You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PHP中执行Shell命令遭遇引号问题求助

解决PHP中shell_exec执行curl的引号问题

方法一:修正shell命令的引号与变量解析问题

你的问题核心是单引号包裹的字符串里变量不会被PHP解析,同时shell命令里的JSON字符串需要正确转义引号,避免被shell截断。修正后的代码如下:

<?php
$APP_ID = 38993011;
$DESCRIPTION = "deneme";
$USER = "superuser";

// 先把JSON数据单独构造,用json_encode确保格式正确,避免手动转义出错
$postData = json_encode([
    'deployment' => [
        'revision' => 'REVISION',
        'changelog' => '',
        'description' => $DESCRIPTION,
        'user' => $USER
    ]
]);

// 用双引号包裹整个命令,这样变量能被解析;shell里的双引号要转义成\"
$CMD = "curl -X POST \"https://superwebsite/v2/{$APP_ID}/supplements.json\" \
-H \"Api-Key:SAAK-EJRV2PDLKGES0L7NTT\" \
-i \
-H \"Content-Type: specification/json\" \
-d '$postData'";

$output = shell_exec($CMD);
print($output);
?>

要点说明:

  • 用json_encode生成JSON数据,比手动写字符串更可靠,自动处理引号转义
  • 整个命令用双引号包裹,PHP会解析里面的{$APP_ID}变量
  • JSON数据用单引号包裹在shell命令里,避免和外层的双引号冲突,同时shell不会解析单引号内的内容,保证JSON格式完整

方法二:用PHP原生curl扩展(更安全推荐)

直接调用shell命令存在命令注入风险(如果变量来自用户输入的话),更安全的方式是用PHP自带的curl扩展实现:

<?php
$APP_ID = 38993011;
$DESCRIPTION = "deneme";
$USER = "superuser";

// 构造POST数据
$postData = json_encode([
    'deployment' => [
        'revision' => 'REVISION',
        'changelog' => '',
        'description' => $DESCRIPTION,
        'user' => $USER
    ]
]);

// 初始化curl
$ch = curl_init("https://superwebsite/v2/{$APP_ID}/supplements.json");

// 设置curl选项
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Api-Key:SAAK-EJRV2PDLKGES0L7NTT',
    'Content-Type: specification/json'
]);
// 如果需要输出响应头(对应原curl的-i参数),添加以下选项
curl_setopt($ch, CURLOPT_HEADER, true);

// 执行请求并获取结果
$output = curl_exec($ch);
curl_close($ch);

print($output);
?>

要点说明:

  • 完全避免了shell命令的引号问题,所有参数都通过curl扩展传递
  • 更安全,不会存在命令注入风险
  • 便于调试和错误处理(可以用curl_error获取错误信息)

内容的提问来源于stack exchange,提问作者atsntc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:55:31