mpdf7和并发使用临时目录

时间:2018-10-11 16:05:36

标签: php mpdf

我想将全局系统/ tmp目录用于mpdf的临时文件。 因此,我设置了以下选项:

  $optionsMpdf = [
    'tempDir' => '/tmp',
    ..
  ];
  $mpdf=new \Mpdf\Mpdf($optionsMpdf);

它运行了,但是我已经看到很多这样的警告:

  

PHP警告:unlink(/ tmp / ):不允许操作   在第95行的 /vendor/mpdf/mpdf/src/Cache.php中

通过查看代码,我发现它尝试删除/ tmp文件夹中的所有文件,其中大多数文件都没有权限。

现在,我想知道使用Mpdf7的正确方法并避免此问题。 我想到的第一件事是在/ tmp内创建一个文件夹并将其提供给mpdf:

  $optionsMpdf = [
    'tempDir' => '/tmp/mpdf',
    ..
  ];

我现在的问题是:还有更好的方法吗?我想念什么吗?

我还想知道如果从根目录运行php mpdf而不检查此行为是否还会有其他问题。在mpdf中管理所有这些,只删除创建的文件,不是更好吗?

我的问题的第一个版本也与可能的并发问题有关,但是我现在看到,避免了删除早于3600秒的文件。在Cache.php源文件中,我发现:

public function clearOld()
{
    $iterator = new DirectoryIterator($this->basePath);
    /** @var \DirectoryIterator $item */
    foreach ($iterator as $item) {
        if (!$item->isDot()
                && $item->isFile()
                && !$this->isDotFile($item)
                && $this->isOld($item)) {
            unlink($item->getPathname());
        }
    }
}

isOld过程检查文件的最后修改时间,如果该文件的时间早于3600秒,则继续操作。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您确实打算使用系统范围的临时文件目录,请至少使用专用的子目录:

$optionsMpdf = [
    'tempDir' => '/tmp/mpdf',
];

对于使用mPDF的每个项目,我宁愿使用靠近源代码的专用目录-这样,旧临时文件的自动清理将不会与mPDF的其他可能实例发生冲突。


侧面说明:最好使用sys_get_temp_dir函数来确定系统临时目录。