Ben bir sunucuda depolanan şifrelenmiş dosyaları açmak için bir yol arıyorum. Ben dosyaları şifrelemek için mcrypt kullanıyorum.
Ben başlangıçta bu açın, dosyayı açacak bir sınıf oluşturmak şifresini, yeni bir konuma yazacaktım. Ama ben daha iyi bir şekilde (ben sadece ne olduğunu bilmiyorum) orada kendimi ikna ettim. Akışa için bir yol olması gerektiği gibi görünüyor (?) Tarayıcıya deşifre bir kez.
İlk kurulum sadece dosya konumuna bağlantı olur ve tarayıcı (örneğin. Pdf dosyalarını dosyayı açmak veya kaydetmek için sunan bir diyalog getirecek) üzerine alacaktı. Eğer mümkünse, bunu çözme sonra aynı yapmak istiyorum.
Göstericiler? Önerileri? Bueller'a?
Teşekkürler!
edit:
Bu şimdi çalışıyor budur:
function decryptFile($path){
$folder=BASE_PATH.$path.'/'.$this->uri->segment(4);
if(!file_exists($folder.'/tmp')){
mkdir($folder.'/tmp', 0700);
chmod($folder.'/tmp', 0700);
}
$tmpfn=BASE_PATH.$path.'/'.$this->uri->segment(4).'/tmp/'.$this->uri->segment(5);
$p=BASE_PATH.$path.'/'.$this->uri->segment(4).'/'.$this->uri->segment(5);
$pc=file_get_contents($p) or die ('no gfc');
$pcue=$this->encrypt->decode($pc,$this->e_key) or die ('no decode');
$pp=fopen($tmpfn,"w") or die ('no fopen'.$tmpfn);
fwrite($pp,$pcue) or die ('no write');
fclose($pp);
if (file_exists($tmpfn)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($tmpfn));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($tmpfn));
ob_clean();
flush();
readfile($tmpfn);
unlink($tmpfn);
exit;
}
}
Ama (sanırım) bu şekilde yapmanın bir başka yan etkisi yerine açık veya kaydetmek diyalog alma artık tek seçenek dosyayı kaydetmek için olmasıdır. Ben oldukça mümkünse seçeneği olurdu.
edit - son kodu:
function decryptFile(){
extract($_POST);
$folder = $this->uri->segment(3);
$clientFolder = $this->uri->segment(4);
$fileName = $this->uri->segment(5);
$filePath=BASE_PATH.$folder.'/'.$clientFolder.'/'.$fileName;
$fileContents=file_get_contents($filePath) or die ('Could not get file contents.');
$ue_fileContents=$this->encrypt->decode($pc,$this->e_key) or die ('Could not decode.');
header('Content-Description: File Transfer');
header('Content-Type: '.$type);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($ue_fileContents));
echo $ue_fileContents;
exit;
}