mpdf7 и одновременное использование временного каталога - PullRequest
0 голосов
/ 11 октября 2018

Я хочу использовать глобальный каталог system / tmp для временных файлов mpdf.Поэтому я установил следующие параметры:

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

Он запустился, но я видел много предупреждений, подобных этому:

Предупреждение PHP: unlink (/ tmp / ): Операция не разрешена в/vendor/mpdf/mpdf/src/Cache.php в строке 95

Глядя на код, я обнаружил, что он пытается удалить все файлы из папки / tmp, большинство из которых не имеетправа на.

Теперь мне интересно, как правильно использовать Mpdf7 и избежать этой проблемы.Первое, что я подумал, - это создать папку внутри / tmp и передать ее в mpdf:

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

Теперь у меня вопрос: есть ли лучшие способы сделать это?Я что-то упускаю?

Мне также интересно, могут ли быть другие проблемы, если запустить php mpdf из root без проверки этого поведения.Не лучше ли управлять всем этим внутри 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 голосов
/ 16 октября 2018

Если вы действительно собираетесь использовать системный каталог временных файлов, по крайней мере используйте выделенный подкаталог:

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

Я бы предпочел использовать выделенный каталог ближе к исходному коду для каждого проекта, используяmPDF - автоматическая очистка старых временных файлов не будет конфликтовать с другими возможными экземплярами mPDF.


Примечание: всегда лучше использовать функцию sys_get_temp_dir для определения временных системкаталог.

...