我尝试打印PDF格式的证书,但当我将代码推送到暂存时,它显示
Temporary files directory "/var/www/protected/vendor/mpdf/mpdf/src/Config/../../tmp" is not writable
我不知道如何更改权限和如何更改自定义目录。
下面是我的代码的一个按钮,点击以获得证书:
<a class="btn btn-sd btn-sd-ghost btn-sd-ghost-black margin-right-lg" href="<?php echo $this->createUrl('//idea/frontend/pdf', array('id'=>$model->id))?>" target="_blank">Get Your Certificate<i class="icon-right-small"></i></a>
<?php endif; ?>
这是控制器:
public function actionPdf($id){
$model = HUB::getOrganization($id);
$orgtitle = $model->title;
$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4-L']);
$mpdf->WriteHTML("<html><body style='background-image:url(\"/images/cert-idea.jpg\"); background-image-resize: 5; background-position: top center;'></body></html>");
$mpdf->WriteHTML("<div style='text-align:center; display:table; height:100%; width:100%; padding-top:28%;'><h1 style='display:table-cell; vertical-align:middle; font-size:40px;'>".$orgtitle."</h1></div>");
$mpdf->Output('IDEA-CERT-'.$orgtitle.'.pdf', 'I');
}
希望有人能在我的问题上帮忙。谢谢!
6条答案
按热度按时间rt4zxlrg1#
提供可写的临时目录是很重要的。最好的解决方案是使用操作系统提供的临时空间。
5cg8jx4n2#
转到您的项目
root
路径(vendor
文件夹所在的位置),然后运行mgdq6dx13#
使用带有try的php tmp
2q5ifsrm4#
在(XAMPP / LAMPP Ubuntu)中试用此功能
第一个
uplii1fm5#
尝试使用the documentation中所述的自定义临时目录:
建议通过
tempDir
配置键设置自定义临时目录,该目录必须具有写权限(建议模式775)。您将对composer vendor-dir之外的目录的权限拥有更多的控制权。
如果Web服务器使用者(通常是
www-data
)必须存取目录,则模式775可能无法满足需求。如有必要,请使用777。请注意,mPDF会自动清理其临时目录,因此请使用仅用于mPDF的目录。
rfbsl7qr6#
您可以使用以下命令更改文件权限:
chmod 777 /var/www/protected/vendor/mpdf/mpdf/tmp
但这将允许任何人在该计算机上任何类型访问该文件,所以可能不是一个好主意。不过,这将给予您一个起点,如果这起作用,您知道问题是文件权限。
如果您不是该文件的所有者,则可能需要以超级用户身份运行该文件
更好的解决方案是将所有者更改为运行服务器的进程,
chown www-data: /var/www/protected/vendor/mpdf/mpdf/tmp
个为将保存文件的进程更改
www-data
。奇怪的是,尝试将pdf保存到该目录,您使用的是Kartik的mPDF吗?默认配置是将文件内联发送到浏览器,只有在您更改了配置(全局或在创建小部件时)后,才应尝试保存文件:
如果是这样的话,最好将其配置为您需要的任何选项,可能是
Pdf::DEST_BROWSER
(默认)或Pdf::DEST_DOWNLOAD
,以强制下载而不提示用户。将pdf文件保存在应用程序所在的目录中并没有什么意义,除非你只打算将你的开发计算机用作客户端,因为没有办法知道其他客户端的文件夹结构会是什么样子,所以最好让他们的浏览器决定如何处理文件。