php MpdfException IMAGE错误():解析图像文件时出错-Yii 2

vatpfxk5  于 2023-04-10  发布在  PHP
关注(0)|答案(5)|浏览(233)

我被困在非常尴尬的情况下,图像在本地环境中显示,同时生成PDF。但是,不是在生产中。当使用mPDF生成PDF时,图像显示为[X]。
Controller中插入$mpdf->showImageErrors = true;后。

public function actionExportCasesPdf($id) {
  .
  .
  .
  .
  $mpdf = new \mPDF();
  $mpdf->showImageErrors = true;
  $mpdf->WriteHTML($output);
  $mpdf->Output($fileName, 'D');
}

错误
MpdfException

IMAGE错误(..17.jpg):分析图像文件时出错-图像类型无法识别,GD imagecreate不支持
甚至,GD库使用apt-get install php5-gd命令安装在服务器中。并且,图像路径也正确使用。
我试着保持图像来源。但是,没有运气。

<img src="<?= \yii\helpers\Url::to('@web/images/logo.png', true) ?>" width="100" alt="logo" />

我搜索并尝试了这些链接给出的解决方案。但是,仍然没有运气:

  1. Images not showing on production but they do on local environment - GitHub
  2. mPDF 5.7.1 - image displays as a broken [x]
  3. Generated picture in mpdf
  4. Error parsing image file
    任何帮助/提示/建议都是值得赞赏的。
nwnhqdif

nwnhqdif1#

通过生成的URL,图片很可能无法用于MPDF。让我们尝试调试它:)在本地和prod环境中运行以下代码

$imageUrl = \yii\helpers\Url::to('@web/images/logo.png', true);
$image = file_get_contents($imageUrl);
echo (new \finfo())->buffer($image);
// echo $image; 
// ^^ uncomment, if previous line echoed something not image-related. 
// Maybe, you've got 404 error
yzckvree

yzckvree2#

它会抛出一个新的错误
无法打开流:HTTP请求失败!HTTP/1.1 401 Unauthorized
所以,问题是:服务器是用密码保护的。所以,我搜索它来找到方法。而且,File-get-contents failed to open stream Unauthorized有与上述错误相关的正确答案。

http://user_name:password@your_site.com/append_your_url

追加user namepasswordsite name如上,它工作正常.

相关搜索

  1. Images not showing on production but they do on local environment - GitHub
  2. mPDF 5.7.1 - image displays as a broken [x]
  3. Generated picture in mpdf
  4. Error parsing image file
hrirmatl

hrirmatl3#

mpdf在生成pdf时不获取透明图像,因此请确保您的图像不透明。
它在我的本地主机上工作,但在aws服务器上有问题。除了aws,它工作得很好。Gd库不允许解析透明图像。

oxcyiej7

oxcyiej74#

如果您在服务器上使用cpanel,请转到Hotlink Protection并激活允许直接请求(例如,当您在浏览器中输入图像的URL时)。但您的隐私政策必须允许screenshot form this section

mec1mxoz

mec1mxoz5#

特殊情况

在我的情况下,我的SSL证书过期了,所以我更新了它。我的应用程序托管在AWS(经典负载均衡器)上。
升级SSL证书后,一切都开始工作,但MPDF开始给图像文件的错误。
3-4小时后,我只是尝试使用AWS证书管理器删除SSL证书,并再次导入相同的证书。神奇的事情发生了,现在它的工作。

相关问题