php mpdf图像错误,找不到图像文件

qyyhg6bp  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(230)

我已经用这个把头发扯掉两天了,我忍不住想这是一件简单得可笑的事情。
当尝试使用标准的jpg图像的mpdf库,我得到以下图像错误...

<B>mPDF error: </B>IMAGE Error (https://www.example.net/myimage.jpg): Could not find image file
  1. http和https我都试过了
    1.我已经尝试了here解决方案,包括编辑服务器主机文件,检查权限
    1.无论图像的URL是什么,问题都会发生(外部图像也会给出同样的问题)
    1.我已经确保在服务器上安装了php gd和curl
    1.我已经反复检查,以确保图像路径是正确的,直接复制和粘贴链接从错误。
    注意事项,
  • 我在另一个服务器上运行这个(但是它是共享主机,所以一切都已经设置好了,我用phpinfo()比较了两者,我能看到的唯一区别是我的php版本稍微更新了一点。
  • 我也有另一个问题,因为移动网站,这也涉及阅读网址,我得到了404找不到错误,即使网址是正确的
  • 我正在使用Windows上的hosts文件将域指向此服务器,因此它尚未处于活动状态
m1m5dgzv

m1m5dgzv1#

我设法解决了这个地方发展的问题
我的设置如下:

Windows 10上的XAMPP

PHP版本5.6.35
启用ssl
mpdf版本5.4
这个问题与SSL/TLS版本不兼容有关。至于解决方案,我修补了mpdf.php
在mpdf.php上类结束之前添加以下函数

private function _curl($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_ENCODING,"");
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT,10);
    curl_setopt($ch, CURLOPT_FAILONERROR,true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

然后添加这一行,在抛出错误消息之前调用函数**_getImage**内的上述函数(大约第9283行~什么的,我的行号可能与您的行号不同)

// patch
if (empty($data)) {
    $data = $this->_curl($file);
}
// end patch

if (!$data) { return $this->_imageError($file, $firsttime, 'Could not find image file'); }

此方法是为了防止过多地修改mpdf库本身。
注意:此解决方案可能不适用于所有设置!您可以参考下面的链接以了解详细信息。
参考:https://stackoverflow.com/a/42185532/209247

chhkpiq4

chhkpiq42#

您还可以尝试在curl_exec之前添加以下代码,以查看错误消息是什么...

curl_setopt($ch, CURLOPT_FAILONERROR,true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR, fopen('php://output', 'w'));

相关问题