問題 :
サーバー上のファイルを暗号化する必要があり、.txt、.doc、.xls、.ppt では問題なく機能しますが、.docx、.xlsx、および .pptx では機能しません。
docx (または xlsx、pptx) を編集しようとしたときの問題は、docx を編集する適切な方法ではないため、暗号化/復号化の方法によってファイルが破損することです。そのため、Microsoft Word がそれを開こうとすると、破損していると表示され、「MyFileName.docx」ではなく「Document1.docx」として開かれ、保存するときに名前をもう一度指定する必要があり、pptx ではドキュメントがある webdav フォルダーへのパス。
質問 :
パスを入力せずに適切な場所に保存する方法はありますか?
コード :
ファイルの暗号化に使用するコードは次のとおりです。
$ext = explode( '.', basename($path));
if (in_array("doc", $ext) || in_array("docx", $ext)) {
$handle = fopen("$davPath/$path", "rb");
$data_file = fread($handle, filesize("$davPath/$path"));
fclose($handle);
} else {
$data_file = file_get_contents("$davPath/$path");
}
$encrypt_data_file = $encryption->encrypt($data_file);
if (file_put_contents("$davPath/encrypt_" . basename($path),$encrypt_data_file)) {
unlink("$davPath/" . basename($path));
rename("$davPath/encrypt_" . basename($path),"$davPath/" . basename($path));
return true;
} else {
return false;
}
そして、これが私がそれらを解読するために使用するコードです:
$ext = explode( '.', basename($uri));
if(is_file($davPath."/".$uri)) {
if (in_array("doc", $ext) || in_array("docx", $ext)) {
$handle = fopen("$davPath/$uri", "rb");
$data_file = fread($handle, filesize("$davPath/$uri"));
fclose($handle);
} else {
$data_file = file_get_contents("$davPath/$uri");
}
}
if ($data_file != false) {
$decrypt_data_file = $encryption->decrypt($data_file);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($uri));
header('Content-Location: '.$_SERVER['SCRIPT_URI']);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();
echo $decrypt_data_file;
return false;
}
PS:変更中にサーバー上でファイルを復号化するという回避策を見つけましたが、それを行う必要はありません。