【发布时间】:2018-06-19 12:01:16
【问题描述】:
我想触发以下命令:
aws route53 change-resource-record-sets --hosted-zone-id XXX
--change-batch '{ "Comment": "2018-06-19-11:31", "Changes":
[ { "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com",
"Type": "TXT", "TTL": 60, "ResourceRecords":
[ { "Value": "\"something\"" } ] } } ] }'
当我在 bash 上触发它时它会起作用,但当我在 PHP 中运行它时不起作用:
$json = trim(shell_exec($cmd_aws_submit));
// or:
$json = trim(shell_exec("{$cmd_aws_submit}"));
AWS 希望引用 TXT 记录的值 ("\"something\"")。我试着这样引用它:
$value = "\\\"" . $textvalue . "\\\"";
$value = "\"" . $textvalue . "\"";
$value = "\\'" . $textvalue . "\\'";
$value = "'" . $textvalue . "'";
这些都不起作用,我总是收到以下错误:
解析参数“--change-batch”时出错:JSON 无效: 无效 \escape:第 12 行第 23 列(字符 246)收到 JSON: {“评论”:“2018-06-19-11:54”,“更改”:[{“行动”: "CREATE", "ResourceRecordSet": { "Name": "example.com", “类型”:“TXT”,“TTL”:60,“资源记录”: [ { "值": "\"某事\"" } ] } } ] }
使用其他aws UNQUOTED dns 记录值,PHP shell_exec() 可以完美运行。
如果我在 Bash 上触发它,它可以完美地使用 "\"something\"" - 为什么它不能使用 PHP shell_exec()?
【问题讨论】:
-
如何构建
$cmd_aws_submit值?有一个转义参数的函数称为escapeshellarg。您应该使用它而不是自己制作东西。
标签: php aws-cli shell-exec