mpdf Ошибка изображения, не удалось найти файл изображения
Я рвал на себе волосы вот уже два дня, и не могу помочь, но думаю, что это что-то смехотворно простое.
При попытке использовать стандартные изображения jpg для библиотеки mpdf я получаю следующую ошибку изображения...
<B>mPDF error: </B>IMAGE Error (https://www.example.net/myimage.jpg): Could not find image file
- Я пробовал http и https
- Я попробовал решения здесь, включая редактирование файла хостов серверов, проверку разрешений
- Независимо от того, какой URL-адрес изображения, проблема возникает (внешнее изображение также создает ту же проблему)
- Я убедился, что php gd и curl установлены на сервере
- Я неоднократно проверял правильность путей к изображениям, напрямую копируя и вставляя ссылку из ошибки.
Что нужно отметить,
- У меня это работало на другом сервере (но это был общий хостинг, так что все уже было настроено, я сравнил их с помощью 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'));