ファイルを暗号化してblobとしてmysqlに保存し、解読してダウンロードできるようにする必要があります。PHPでバイナリファイルをダウンロードできません
$certificate_tmp=$_FILES['certificate']['tmp_name'];
$certificate=openssl_encrypt(file_get_contents($certificate_tmp),$ciphers,$password_tmp);
$wpdb->insert("my_table",array("certificate"=>$certificate));
注: 私はそうのようなブロブ内のファイル保存、私は関係のないコードをカットしましたが、テーブルは単に証明書ではありませんが、私は、これは混乱を取得する必要はありません。
これは、ダウンロードPHPのページです:
$password_tmp=$_SESSION['pwd']; //decrypt password
global $wpdb; //wordpress db conncetion
$results_file = $wpdb->get_row("select * from my_table where id='$id'",ARRAY_A); //i get the id from wp's curr_user
$m_file = openssl_decrypt($results_file['certificate'],"AES-128-CBC",$password_tmp);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\certificate".$id."\"");
header('Content-Transfer-Encoding: binary');
print_r($m_file);
およびBLOBにバイナリファイルががあるが、すべてがテキストファイルで完璧に動作しますが、結果はバイナリファイルで空になって、。
EDIT 私の推測では、それはバイナリファイルであることを理解し、あなたがあるため、セキュリティのそれを表示することはできませんとすぐに私が(理由print_r
の)デシベルブロブ、PHPやHTMLからファイルを復号化として、あります理由。 .exeや.binのようなWeb上でプログラムを実行することはできませんが、アップロードしたファイル(バイナリまたはテキスト)には拡張子はありません。 phpがバイナリファイルを文字列として扱いますが、file_get_contents
はバイナリセーフです。 私はブロブを使用していないと思うが、これは最善のアプローチですが、私はそれを行うことはできません、私はブロブを使用する必要があります。
EDIT 2 問題は、バイナリデータを好きなようには見えないopensslが、私はmcryptを使用して同じコードを試してみたことのようですし、それが完璧に動作します。
感謝を。 1.同じキーです。複数のopensslを実行する変数 '$ ciphers'を使用します。 2.私は自分のコードでprint_rを使っていましたが、私もprintで試しましたが、同じこと、テキストファイルは動作します、バイナリファイルはありません。 3.これも追加しましたが、バイナリファイルではまだ動作しません(テキストファイルは暗号化され、解読されても問題ありません)。 4.それを深く読んでいただき、ありがとうございます。 私の編集をチェックしてください。 – Cr1xus