php word文档只读代码

php word文档只读代码,php,phpmyadmin,Php,Phpmyadmin,我有一个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"); hea

我有一个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的Word的COM接口。。。但这不是你想要走的路。

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

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

很快:这是我发现的第一种最简单的方法,可以“接近”从PHP脚本中获得防篡改的.docx文件。此时,我无法使用PHP动态添加保护

所以在我创建dynamic.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”的文件。您将看到标签,下面是使用PHPWord库创建密码保护的不可编辑word文件的方法:


好吧,那就不行了。但是那些Word文档是在某处创建的。创建它们的人可以设置密码,甚至可以将它们存储为pdf格式,这在最新版本的Office中是可能的。编辑word文档更容易。对我来说,我替换某些条目,生成一个动态单词docx。现在我想让它成为只读的。你的回答更像是一个评论。
<?php 
require_once("vendor/autoload.php"); 

// Input file
$name = basename(__FILE__, '.php');
$name="sample";
$source = __DIR__ . "/{$name}.docx";

$phpWord = \PhpOffice\PhpWord\IOFactory::load($source);

// Add Password Protection For editing 
$documentProtection = $phpWord->getSettings()->getDocumentProtection();
$documentProtection->setEditing(PhpOffice\PhpWord\SimpleType\DocProtect::READ_ONLY);
$documentProtection->setPassword('123456');

// Write the output file

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');