这是bash命令echo -n x && (echo 618cf954-6576-491d-8ac6-a1b888c4705d |xxd -r -p |openssl base64|tr '/+' '_-')
这是我的php
<?
$uuid = "618cf954-6576-491d-8ac6-a1b888c4705d";
$voiceid = "x" . $uuid;
$voiceid = base64_encode($voiceid);
$voiceid = str_replace("+", "-", $voiceid);
$voiceid = str_replace("/", "_", $voiceid);
echo $voiceid;
?>
bash给出正确的输出,php不是。我不确定我需要在php中做什么。
输出应为xYYz5VGV2SR2KxqG4iMRwXQ==
答案 0 :(得分:3)
此外,在Bash版本中,“x”未包含在xxd
和openssl
的管道中。如果你想要它,那么这样做:
{ echo -n x; echo -n 618cf954-6576-491d-8ac6-a1b888c4705d; } | xxd -r -p | openssl base64 | tr '/+' '_-')
另一方面,如果您希望PHP与现有的Bash匹配:
<?
$uuid = "618cf954-6576-491d-8ac6-a1b888c4
$voiceid = str_replace("-", "", $uuid);
$voiceid = pack("H*", $voiceid);
$voiceid = base64_encode($voiceid);
$voiceid = str_replace("+", "-", $voiceid);
$voiceid = str_replace("/", "_", $voiceid);
$voiceid = "x" . $voiceid;
echo $voiceid;
?>
您需要使用pack
将十六进制字符串转换为二进制。
编辑:修正了我的一些错误。
答案 1 :(得分:3)
我认为以下行是错误的:
$voiceid = "x" . $uuid;
在字符串上添加“x”应该是你在PHP echo
之前做的最后一件事。