问题 :
我需要对服务器上的文件进行加密,它适用于 .txt、.doc、.xls、.ppt,但不适用于 .docx、.xlsx 和 .pptx。
当我尝试编辑 docx(或 xlsx、pptx)时的问题是文件被我加密/解密的方式损坏,因为它不是编辑 docx 的正确方法。因此,当 Microsoft Word 尝试打开它时,它说它已损坏,它以“Document1.docx”而不是“MyFileName.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:我确实找到了一种解决方法,其中包括在修改期间在服务器上解密文件,但我真的不想这样做。