ПРОБЛЕМА :
Мне нужно, чтобы файлы на моем сервере были зашифрованы, и он отлично работает для .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: я нашел обходной путь, который состоит в том, чтобы файл расшифровывался на сервере во время модификации, но я бы очень хотел этого не делать.