Ho recentemente aggiornato il server di un cliente installando una nuova versione di XAMPP con PHP 7.0.15.
Sul server c’è un’applicazione sviluppata con il framework Yii 1.1.
Tutto bene a parte il fatto che nei report non l’immagine del logo non viene visualizzata.
Per la generazione dei report l’applicazione utilizza le ottime estensioni HTML2PDF 4.0.5 e mPDF 6.0.

Per ottenere la visualizzazione dell’errore ho inserito nel codice, dopo la definizione dell’istanza della classe mpdf:

$mpdf = new mPDF();
$mpdf->showImageErrors = true;

Cerco con Google e non trovo molto.

Il codice sul vecchio server funziona quindi penso che il problema sia dovuto alla versione del PHP; faccio mille prove senza successo.

Cerco poi il punto nel codice dove viene visualizzato l’errore e lo trovo nel chilometrico mpdf.php (circa 32.700 righe di codice) precisamente alla riga 10.791:

$minfo = $this->_getImage($this->_tempimglnk, false);
if (!$minfo) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file image object created with GD library to parse PNG image'); }

Visto che l’errore contiene “parsing temporary file…” subito l’occhio mi cade sulla costante definita _MPDF_TEMP_PATH
dichiarata in testa al file alla riga 69:

if (!defined('_MPDF_TEMP_PATH')) define("_MPDF_TEMP_PATH", _MPDF_PATH.'tmp/');

Modifico la stringa dell’errore per visualizzare il contenuto di _MPDF_TEMP_PATH e _MPDF_PATH sempre tramite l’errore alla riga 10.791:

if (!$minfo) { return $this->_imageError($file, $firsttime, '<br />path='._MPDF_PATH.'<br />temp_path='._MPDF_TEMP_PATH.' <br />
***Error parsing temporary file image object created with GD library to parse PNG image'); }

Il risultato ottenuto è stato sorprendente perché _MPDF_PATH era correttamente valorizzata mentre _MPDF_TEMP_PATH è VUOTA!
Naturalmente in questo modo mPDF non sa dove appoggiarsi per le elaborazioni temporanee e fallisce.
Dopo varie prove ho concluso che con questa particolare configurazione _MPDF_TEMP_PATH è in conflitto con qualcosa che non le permette di essere valorizzata.

Per far funzionare di nuovo tutto è bastato cercare _MPDF_TEMP_PATH e sostituire con _MPDF_TMP_PATH. (TMP senza la E). La nuova costante _MPDF_TMP_PATH è cottettamente valorizzata quindi l’immagine si è caricata senza problemi.

Sinceramente è la prima volta che mi capita una cosa del genere. Spero che la mia esperienza possa esserti utile. Se hai bisogno di aiuto per risolvere qualche problema con Yii, anche nelle versioni successive, o vuoi imparare a farlo, contattami per una consulenza.