在我的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
更改为您将要发送的任何输入,只需确保在需要时正确引用/转义即可。