代码为PHP word文档只读



我有一个php下载脚本,允许用户下载一个word文档文件下载后,它是可编辑的用户..我想使文件只读用户

我的下载代码是:

//php代码
// set headers`enter code here`
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename="$asfname"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
// download
// @readfile($file_path);
$file = @fopen($file_path,"rb");
if ($file) {
  while(!feof($file)) {
    print(fread($file, 1024*8));
    flush();
    if (connection_status()!=0) {
      @fclose($file);
      die();
    }
  }
  @fclose($file);
}

提前致谢关于

你不能。文件属性不会随下载一起发送。用户下载文件并拥有该文件。

你可以用密码保护文件,但是你必须自己编辑它。这是PHP很难做到的,尽管你可以在Windows上使用PHP的COM接口。但这不是你想走的路

如果你想要一个只读文档,为什么不用pdf代替呢?

下面是使用PHPWord库创建密码保护的不可编辑word文件的方法:

https://github.com/PHPOffice/PHPWord

<?php 
require_once("vendor/autoload.php"); 
// Input file
$name = basename(__FILE__, '.php');
$name="sample";
$source = __DIR__ . "/{$name}.docx";
$phpWord = PhpOfficePhpWordIOFactory::load($source);
// Add Password Protection For editing 
$documentProtection = $phpWord->getSettings()->getDocumentProtection();
$documentProtection->setEditing(PhpOfficePhpWordSimpleTypeDocProtect::READ_ONLY);
$documentProtection->setPassword('123456');
// Write the output file
$objWriter = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');

更新::我的解决方法和新的答案…意外编辑保护。

快速:这是我发现的最简单和第一种接近的方法。从PHP脚本实现防篡改。docx文件。此时,我无法在PHP中动态地添加保护。

在我尝试创建动态。docx文件的早期,我了解到像下面这样编辑文件更容易。

请注意,当替换文档中的文本时,word的拼写检查功能会通过在拼写检查和语法标记中包装有问题的单词(my_dynamic_file_title)的部分来扭曲它认为拼写错误的纯文本。您可能还会发现,除非关闭所有拼写检查和语法功能,否则它将无法工作。我不得不。

请注意,在我完成后,我必须复制并粘贴文本(大部分是格式化)以完全删除拼写检查和语法标签。我在模板。docx中使用的占位符我必须从word外部复制并粘贴它们而不需要格式化,或者我只是重新键入它们。

现在. .如果在word中(我的是Office 2019),在你的文档模板上点击:

文件→保护文档->限制编辑

选择您想要的选项并对其进行密码保护。上传模板并按照您的意愿使用编辑脚本。它的工作原理与被保护前相同

此方法阻止word允许在没有密码的情况下编辑文件,而不是一个人(Dev)提取文件,更改document.xml文件,并通过简单地将文件扩展名从。docx重命名为。zip并返回将其转换回docx文件。

::我以前的回答::所以是的,有人可以做,但是…

在我自己研究了它并简要地比较了本地保护(或我认为是)的文档之后,我可以看到这是可能的,并且在IE之前已经完成了。Szekelygobe的回答提到了实现它的软件(或者有一个补丁),在github中可以看到。

我必须说,为我自己做这件事似乎需要太多的东西,而且由于缺乏现成的文档,它对我来说还不值得。如果您想沿着这条路走下去,请将1 .docx复制并保护其中一个。将它们重命名为.zip文件,并在您喜欢的代码编辑器中进行比较。

一目了然,最显著的区别在于名为"settings.xml"你会看到标签<w:documentProtection…>

我也看到了很多其他的变化。其他标签是不一样的,这让我相信至少有一点不仅仅是创建/生成这个标签。涉及到加密,它需要研究特定标签的属性和整个属性&

就像我说的,虽然这对我来说太难理解了,但我希望我能指出一条道路。

注意:我本来想注释的,但这对注释来说太多了。

关于这一切的最后一点::我真的很想用PHP来完成这一切,但是现在太多了。我也想让它完全防篡改,这是不可能的。你可以接近,但这需要花费时间和精力来忘记这一切。Word有数字签名和IRM(信息权限管理),我相信这也有助于显示真实性。

最新更新