TCPDF - 如何阻止php中的函数file_exists干扰浏览器缓存?

时间:2017-07-13 14:29:36

标签: javascript php ajax tcpdf

我有一个“打印”按钮,当它被点击时,我向我的php脚本发送AJAX请求。

请求包含: 文件名 其他数据。

我使用此脚本生成pdf使用TCPDF并将该文件的链接返回到我的ajax请求。

在我的PHP脚本中:

我首先测试发送的fileName是否存在于我保存所有pdf文件的文件夹中,如果它存在我“UNLINK”它,如果不存在我继续我的脚本。

我遇到的问题是每当我对发送到脚本的数据进行更改时,都会创建相同的pdf(第一个),所以我认为它是缓存的问题,并且我搜索了一下,我发现函数file_exits与它有关系吗?

关于这个问题的任何问题?或者可能是解决方案?

我可以提供您想要帮助解决问题的任何代码。

编辑:

我的php_exits在php脚本上:

 if (file_exists('../store_files/'.$_POST["pdf_name"].'.pdf')) {
        unlink('../store_files/'.$_POST["pdf_name"].'.pdf');
   }

在输出之前我使用标题:

header ( 'Expires: 0' );header ( 'Cache-Control: must-revalidate' );
    $pdf->Output(savepath.'/'.$name_pdf, 'F');

2 个答案:

答案 0 :(得分:1)

我认为TCPDF能够覆盖现有的PDF。你不需要使用unlink(),我想不出任何理由file_exists()会在游戏中。浏览器缓存PDF文档是可能的(不确定)。如果是这种情况,您可以尝试在创建文档时更改文件名或更改URL,例如/path/to/my.pdf?q=random

答案 1 :(得分:1)

为了确保file_exists()实际检查filesytem,并且没有返回缓存结果,请先运行clearstatcache(true)

顺便问一下,你认为你可能遇到了竞争条件吗?多个ajax请求同时处理,生成相同的文件名,php#1执行file_exist(" foo.pdf"),看到它不存在,并开始创建它 - 但与此同时,在创建foo.pdf之前,php#2也会执行file_exist,看到它不存在,并开始创建它 - 然后php#1完成,写入foo.pdf - 然后php#2完成,尝试编写foo.pdf - 但注意到它已经存在,并且不想覆盖它 - 并且出错了?