mpdf Ошибка изображения, не удалось найти файл изображения

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

При попытке использовать стандартные изображения jpg для библиотеки mpdf я получаю следующую ошибку изображения...

<B>mPDF error: </B>IMAGE Error (https://www.example.net/myimage.jpg): Could not find image file
  1. Я пробовал http и https
  2. Я попробовал решения здесь, включая редактирование файла хостов серверов, проверку разрешений
  3. Независимо от того, какой URL-адрес изображения, проблема возникает (внешнее изображение также создает ту же проблему)
  4. Я убедился, что php gd и curl установлены на сервере
  5. Я неоднократно проверял правильность путей к изображениям, напрямую копируя и вставляя ссылку из ошибки.

Что нужно отметить,

  • У меня это работало на другом сервере (но это был общий хостинг, так что все уже было настроено, я сравнил их с помощью phpinfo(), и единственное отличие, которое я вижу, это то, что у меня немного более новая версия php.
  • У меня также была другая проблема после перемещения сайта, которая также включала чтение URL, где я получал ошибку 404 not found, хотя URL был правильным
  • Я использую файл hosts в Windows, чтобы указать домен на этом сервере, чтобы он еще не работал

2 ответа

Мне удается решить этот вопрос по местному развитию

Моя установка выглядит следующим образом:
XAMPP на windows 10
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.

Примечания: Это решение может не работать для всех настроек! Вы можете обратиться к ссылке ниже, чтобы узнать больше.
Ссылка: /questions/27564466/nevozmozhno-filegetcontents-ili-curl-cherez-https/27564468#27564468

Вы также можете попробовать добавить следующее перед curl_exec, чтобы узнать, что такое сообщение об ошибке...

          curl_setopt($ch, CURLOPT_FAILONERROR,true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR, fopen('php://output', 'w'));
Другие вопросы по тегам