我有一个php下载脚本,允许用户在下载后下载word文档文件可编辑给用户..我想将文件只读给用户
我的下载代码是:
// php code
// 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);
}
提前 此致
答案 0 :(得分:2)
你做不到。文件属性不随下载一起发送。用户下载文件并拥有它。
您可以使用密码保护文档,但为此您必须自己编辑。尽管你可以在Windows上使用PHP的PHP COM接口,但这是PHP无法完成的事情......但这不是你想要的路径。
答案 1 :(得分:2)
如果您想要一个只读文档,为什么不使用pdf呢?
答案 2 :(得分:0)
您可以使用PHPWord生成文档并使它只读。 https://phpword.readthedocs.io/en/latest/index.html
答案 3 :(得分:0)
更新::我的解决方法和新答案...意外的编辑保护。
快速:这是我发现从PHP脚本“接近”实现防篡改.docx文件的最简单和第一种方法。我目前无法通过PHP即时添加保护。
在创建动态.docx文件的初期,我了解到编辑文件更加容易here。
请注意,替换文档中的文本时,单词的拼写检查功能通过将有问题的单词(my_dynamic_file_title)的部分包装在拼写检查和语法标签中,使纯文本文本(拼写错误的单词)失真。您可能还会发现,除非关闭here所示的所有拼写检查和语法功能,否则它将无法正常工作。我必须。
请注意,在执行完此操作后,我必须复制并粘贴文本(大部分使用格式)以完全删除拼写检查和语法标签。我在模板.docx中使用的占位符必须从word外部复制并粘贴而不进行格式化,或者我只是重新输入它们。
现在..如果换句话说(我的办公室是Office 2019),请在您的文档模板上转到:
文件->保护文档->限制编辑
选择所需的选项并用密码保护它。上载您的模板并按需使用编辑脚本。它的工作方式与受保护之前相同。
此方法阻止单词禁止在没有密码的情况下编辑文件,而不是通过简单地重命名文件扩展名来提取文件,更改document.xml文件并将其转换回docx文件的人员(Dev)从.docx到.zip,然后返回。
::我以前的回答::是的,有人可以做到,但是...
我自己研究了一下并简要比较了本机保护的(或我认为是)文档之后,我可以看到它是可能的,而且它在IE之前就已经完成了。Szekelygobe的回答提到了执行此操作的软件(或那里)。是执行此操作的补丁程序),如github here所示。
我必须说,对于我自己来说似乎需要太多的工作,而且由于缺乏可用的文档,对我来说这还不值得。如果您想走这条路,请复制1个.docx文件并保护其中一个。将它们重命名为.zip文件,然后在您喜欢的代码编辑器中进行比较。
乍一看,最显着的区别是在名为“ settings.xml”的文件中,您将看到标签 我还看到了许多其他变化。其他标签不一样,这使我相信至少有一些创建/生成该标签的功能。其中涉及加密,因此需要研究特定标签属性的属性以及每个属性的整体内容和方式。 就像我说的那样,尽管对我而言,尝试理解a.t.m太多了。但我希望我能指出一条道路。 注意::我本来可以发表评论,但这对发表评论来说太多了。 最后要注意的是:我真的很想从PHP上完成所有工作,但目前还太多了。我还希望使其完全防篡改,但这是不可能的。您可以接近,但是要花很多时间和精力才能使所有事情变得可原谅。 Word具有数字签名和IRM(信息权限管理),我相信它们也有助于显示真实性。
答案 4 :(得分:0)
这是使用PHPWord库制作受密码保护的不可编辑词文件的方法:
https://github.com/PHPOffice/PHPWord
<?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');