在我的PHP脚本中,我有一个变量$pkcs7_bin,我想通过openssl进行转换。

假设我在文件中输入了内容,则可以使用bash进行此操作:

cat in.pkcs7 | openssl pkcs7 -inform DER > out.pkcs7

我想在PHP中执行相同的操作,例如:
$exit_status execute('openssl pkc7 -inform DER', $pkcs7_bin, $pkcs7_out);

当然,我不想使用中间文件。

这是简单的方法吗?

目前我已经写了这个:
function execute($process, $stdin, &$stdout)
{
    ob_start();
    $handle = popen($process, 'w');
    $write = fwrite($handle, $stdin)
    &$stdout = ob_get_clean();
    pclose($handle);
}

但是我意识到ob_start不能捕获在屏幕上刷新的输出:(

最佳答案

对于控制台命令的一般使用,您需要的是shell_exec()-通过shell执行命令并以字符串形式返回完整的输出

请注意,对于您的用例,PHP提供的OpenSSL函数可以“本机”完成您需要做的事情,而不必担心生成 shell 程序(出于安全原因通常被禁用)

无论如何,回到shell_exec():
cat in.pkcs7 | openssl pkcs7 -inform DER > out.pkcs7
可以做到
//以某种方式获取输入数据。你可以
// shell_exec使用正确的原始命令
//文件路径,然后使用file_get_contents()读出.pkcs7
$ infile = file_get_contents(“/ path / to / in.pcks7”);
$ result = shell_exec(“echo”。$ infile。“| openssl pcks7-通知DER”);

可能/将会/确实需要使用"'进行周处理,以处理$infile内容中的特殊字符。将$infile更改为您将要发送的任何输入,只需确保在需要时正确引用/转义即可。

10-06 03:25