PHP 7 a záchrana aplikací v Nette 2.0

- ludek
 - Člen | 83
 
Dobrý den,
zavolali mě k serveru, kde byl proveden upgrade na Ubuntu 16.04.1, což znamená PHP 7.0.8.
Bohužel se zjistilo, že na tom běží několik aplikací postavených na Nette 2.0.12, které přestaly fungovat: bílá obrazovka, nic se nezaloguje, ani se nevytvoří žádná část smazané cache. Po překopírování na lokál s PHP 5.4 fungují. Cesta zpět není, jinam se to přesunout nedá, původní autor aplikací není k dosažení. Jedná se o samé evidence něčeho: práce s mysql, formuláře, max. odesílání emailů.
Mám prosím nějakou možnost, jak to rozběhnout?

- norbe
 - Backer | 408
 
Máme několik starších projektů (nette 2.0.3), které jsme na php 7 rozjeli s minimem úprav.
Drobné shrnutí změn provedených v nette:
Nette\Diagnostics\BlueScreen::render
- odstraněn typehint \Exception u parametru
 
Nette\Diagnostics\Debugger::_exceptionHandler
- odstraněn typehint \Exception u parametru
 - v místě kde je ošetřena chyba při logování přidán další
	blok 
catch (\Throwable $e) 
Nette\loader.php
- smazáno volání 
set_magic_quotes_runtime,iconv_set_encodingamb_internal_encoding 
Driver pro mysql musí být mysqli (mysql zrušeno)
Pokud používáš dibi tak ještě smazat volání
set_magic_quotes_runtime v něm.

- ludek
 - Člen | 83
 
norbe napsal(a):
Nette\loader.php
- smazáno volání
 set_magic_quotes_runtime
Moc díky. To co zabraňuje spuštění je právě
@set_magic_quotes_runtime(FALSE); v libs/Nette/loader.php.
Po zakomentování se aplikace spustí a začnou se zobrazovat chyby
Laděnky.
Výsledek (edit):
Všechny aplikace se podařilo ihned zprovoznit provedením jen té jediné
změny v loader.php.
Všechno funguje včetně spojení na databázi (všude se používá jen Nette\Database) i odesílání emailů.
Výjimkou byl jeden projekt, kde bylo nutno přepsat redirecty, pokud obsahovaly nějaké parametry.
Z původního
$this->redirect('default','1','2');
což do prvního parametru místo první hodnoty předalo název volané metody
(‚default‘).
bylo nutno přepsat na:
 $this->redirect('default', array('par1'=>'1', 'par2'=>'2'));
Editoval ludek (12. 8. 2016 14:57)