Mpdf: generování pdf padá na DependencyCheckeru

chikeet
Člen | 160
+
0
-

Ahoj,
při generování PDF s MPDF 7.0.1 se nemůžu dostat přes chybu, ze které nejsem moc chytrá:

Error detected. PDF file generation aborted: filemtime(): stat failed for C:\xampp\htdocs\myproject\app/../temp/cache/Nette%5CBridges%5CApplicationDI%5CApplicationExtension

Chybu vyhazuje DependencyChecker::isExpired (konkrétně \vendor\nette\di\src\DI\DependencyChecker.php:85). Nette DI mám ve verzi 2.4.9.

Chyba se objevila při upgradu MPDF z verze 6.3.1 (asi nepoužitelně zabugované) na 7.0.1, ale už předchozí verze generovala nečitelné PDFka (možná kvůli některému z těch bugů?). Projevilo se to ale až dnes, předtím se pdfka generovaly bez problémů.

Střídavě mi to vyhazuje výše zmíněnou chybu a po smazání cache vždycky při prvním spuštění Error detected. PDF file generation aborted: fopen(C:\xampp\htdocs\myproject\app/../temp/cache/_orm%00mapper.afac2b09bfca85c05357b260b1ae8759%00storage_reflection/_0669b0fa49da61b1943c9d012cacfff8): failed to open stream: No such file or directory. Nevím, jestli to nějak souvisí, ale i to se objevilo nově.

Za nakopnutí správným směrem budu ráda.

Pavel Kravčík
Člen | 1180
+
0
-

Povolený finfo.dll máš v PHP? Jinak myslím, že už je novější verze, než 0.1.

V Nette 2.4 to jede bez problémů.

chikeet
Člen | 160
+
0
-

Pavel Kravčík napsal(a):

Povolený finfo.dll máš v PHP? Jinak myslím, že už je novější verze, než 0.1.

V Nette 2.4 to jede bez problémů.

Jestli máš na mysli php_fileinfo.dll, tak jo, povoleno mám (jedu na windows). MPDF mám ^7.0.

chikeet
Člen | 160
+
0
-

Tak problém pořád trvá. Zkoušela jsem:

  • smazat cache (několikrát)
  • smazat vendor a znovu nainstalovat přes composer
  • instalovat nejnovější verzi: nette/di (2.4.10), nette/application (2.4.9), nette/caching (2.5.6)

V prvním případě se cache ORM vygeneruje (soubor fyzicky existuje, něco v něm je a nevypadá to rozbitě), ale aplikace ho z nějakého důvodu nevidí. Nastává vždy jen jednou po smazání cache.

Ve druhém případě (když je cache vygenerovaná) padá DependencyChecker na nenalezení cache C:\xampp\htdocs\myproject\app/../temp/cache/Nette%5CBridges%5CApplicationDI%5CApplicationExtension, která opravdu neexistuje – z nějakého důvodu se vůbec nevygeneruje.

Dá se generování cache nějak pomoct/vynutit/cokoliv? Jedu na windows, oprávnění mám nastavena správně, na disku je místa dost. Jiný důvod, proč by nemělo být možné generovat cache, mě zatím nenapadá. Jedině snad, že by to spadlo na té cachi ORMka a zbylé to nevygenerovalo, ale tam mě zase nenapadá, jak se přes to dostat, když ten soubor fyzicky existuje a aplikace ho „jen“ nevidí.

chikeet
Člen | 160
+
+2
-

OK, vyřešeno. Je to tak jednoduché, že se to až stydím napsat.

MPDF: Pomohlo vypnout debug mode. Se zapnutým debug modem jsem odstraňovala warning (který vznikal už před generováním PDF nezávisle na něm) takto:

		$e = error_get_last();
		if($e  && $e['type'] == 2 && strpos($e['message'], 'filemtime(): stat failed') !== FALSE
			&& strpos($e['message'], 'temp/cache/Nette%5CBridges%5CApplicationDI%5CApplicationExtension') !== FALSE)
		{
			error_clear_last();
		}

Moc se mi to sice nelíbí, ale s tou filtrací podle textu chyby je to asi použitelné.

PDFka o velikosti 0 B: Stačilo do jedné z dílčích metod pro generování PDF doplnit chybějící return, s MPDF ani s tím vyhazovaným warningem to nakonec nemělo nic společného. (Červenám se až za ušima.)

To jen pro úplnost, kdyby se někdo hodně nudil a dočetl to až sem :-)