Cakephp: mpdf хранит сгенерированный pdf в запрещенном каталоге - PullRequest
0 голосов
/ 18 октября 2019

В моем приложении Cakephp 3.6 я использую mpdf для создания PDF-файлов. В то время как на локальном хосте работает без каких-либо проблем, когда я пытаюсь сделать это на сервере, я получаю эту ошибку:

SplFileInfo :: isFile () [https://secure.php.net/splfileinfo.isfile'>splfileinfo.isfile]: действует ограничение open_basedir. Файл (/tmp/mysql.sock) находится вне допустимых путей:

Это связано с тем, что он пытается сохранить файл PDF в папке src, а не в папке webroot.

Вот код: (генератор Excel работает нормально)

$inv = TableRegistry::get('invoices')->get($invoice->id);   
$inv->file_id = $newFile->id;
TableRegistry::get('invoices')->save($inv);
$writer = new Xlsx($spreadsheet);
$writer->save($folder->path.'/timologio'.$inv->invoice_no.'.xlsx');



//Save as Pdf, even though $folder->path is pointing under webroot, its trying to save it under src
$PdfWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
$PdfWriter->save($folder->path.'/timologio'.$inv->invoice_no.'.pdf');

Если я изменю open_basedir с {WEBSPACEROOT}{/}{:}{TMP}{/} на none, то это работает, но безопасно ли это сделатьтак?

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Установите временный каталог для программы записи PDF PHPSpreadsheet в папку, к которой у вас есть доступ:

$PdfWriter->setTempDir('path/to/your/temp/directory');
$PdfWriter->save($folder->path.'/timologio'.$inv->invoice_no.'.pdf');

Как указано на https://github.com/PHPOffice/PhpSpreadsheet/issues/1123#issuecomment-523361110

0 голосов
/ 18 октября 2019

Установка open_basedir на none не очень хорошая идея. Лучшим вариантом является добавление вашей конкретной директории хранения в open_basedir. Вы можете сделать это глобально в INI-файле или для каждого каталога в конфигурации Apache (при условии, что вы используете Apache):

<Directory /var/www/example.domain> php_admin_value open_basedir /your/dir/here/:/another/dir/here </Directory>

Кроме того, папка src предназначена для исходных файлов вашего приложения. и я бы не рекомендовал хранить сгенерированные pdf там. Вместо этого я бы сделал дополнительный каталог, например, назовем его storage прямо в каталоге вашего приложения. Таким образом, ваш src приложения будет отделен от сгенерированных файлов.

...