我在php中接收二进制数据作为证书内容,我想将其下载到浏览器。 使用证书查看器打开它时,我总是收到此消息:
hex(19).pfx Could not display 'hex(19).pfx' Reason: Unrecognized or unsupported data.
这个二进制数据是正确的,我把它立即放在服务器上的一个文件中,并且它是一个有效的证书。
我认为问题出在两个地方:
输出命令
exec('ssh root@192.168.0.137 "echo '.$bindata.' | xxd -p -r | tr -d \'\n\' "',$output);
虽然$bindata
来自使用xxd -p
bash进行转换后转换证书pfx文件,但header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=hex.pfx");
header('Content-Length: '. strlen($output[0]));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
echo $output[0];
exit();
或者它在标题中,有丢失或添加:
{{1}}
有什么不对?
答案 0 :(得分:0)
解决方案是删除xxd
输出的空格 bash中的:
res=`xxd -p $exportedkey`
echo "${res//[[:space:]]/}"
在php中:
$hex = hex2bin($result);
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=hex.pfx");
header('Content-Length: '. strlen($hex));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
echo $hex;
exit();
希望它至少对某人有帮助