我想将全局系统/ 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秒,则继续操作。
谢谢
答案 0 :(得分:0)
如果您确实打算使用系统范围的临时文件目录,请至少使用专用的子目录:
$optionsMpdf = [
'tempDir' => '/tmp/mpdf',
];
对于使用mPDF的每个项目,我宁愿使用靠近源代码的专用目录-这样,旧临时文件的自动清理将不会与mPDF的其他可能实例发生冲突。
侧面说明:最好使用sys_get_temp_dir
函数来确定系统临时目录。