将Bash命令转换为php

时间:2011-02-07 07:15:35

标签: php bash

这是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==

C ++版本位于https://gist.github.com/1e096b658097c19cf309

2 个答案:

答案 0 :(得分:3)

此外,在Bash版本中,“x”未包含在xxdopenssl的管道中。如果你想要它,那么这样做:

{ 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之前做的最后一件事。