Error levenshtein – Laděnka nezachytila a příčina vzniku erroru neznámá

před 2 lety

Daewoo
Člen | 33
+
0
-

Ahoj,

dnes jsem několikrát obdržel warování, které se nepropsalo do Laděnky (obdržel jsem do konzole prázdnou odpověď):

Warning: levenshtein(): Argument string(s) too long in \private\vendor\nette\utils\src\Utils\ObjectMixin.php:452

Mám za to, že se týká buď výpisu nějakého erroru přes getTraceAsString do payloadu, nebo obecně v chybě serializaci nějakého objektu. Bohužel se mi nepodařilo lokalizovat jeho přesný vznik a objevuje se jen „někdy“. Zasílám pro představu celou metodu (neřešte refactoring):

	public function handleEvents()
	{
		$events = [];
		$error = false;
		try
		{
			/**
			 * @var $Events Entity\Event[]
			 */
			$Events = $this->eventService->fetchByDate($from, $to);

			foreach($Events as $Event)
			{
				$events[] = $Event->toCalendarObject();
			}
		}
		catch (\Exception $Exception)
		{
			$this->payload->error = $Exception->getMessage() . ' ' . $Exception->getTraceAsString();
			$error = true;
		}

		if ($error)
		{
			$this->sendPayload();
		}

		$this->sendJson($events);
	}

A toCalendarObject:

public function toCalendarObject()
	{
		$obj = new \stdClass();
		$obj->id = $this->getId();
		$notes = [];
		foreach($this->getNotes() as $note)
		{
			$notes[] = htmlspecialchars($note->getText());
		}

		$obj->text = implode('<hr>', $notes);
...
return $obj;
}

Používám PHP 7.1.6 pod Win7 (taky je možné, že se jedná o bug – 7.1 je vůbec celkově dost zavšivená) a Nette 2.3. Setkal jste se s tím někdo?

Editoval Daewoo (30. 11. 2017 10:15)

před 2 lety

David Matějka
Moderator | 6013
+
0
-

jako v produkcnim rezimu jo? zkus kdyztak zapnout u tracy v neonu

tracy:
	logSeverity: E_ALL

aby to logovalo bluescreen pro vsechny chyby

před 2 lety

Daewoo
Člen | 33
+
0
-

Zkusím. Zapomněl jsem napsat, že chyba se propsala jen do exception logu. Jak se to objeví znova, dám hned vědět.

před 2 lety

Daewoo
Člen | 33
+
0
-

Možná, že to pomohlo – i když nepřímo. Zřejmě se jedná o nějaký bug v PHP.

Používám ještě majkl578/nette-identity-doctrine a začalo mi to teď neustále vyhazovat hlášku Nette\MemberAccessException Call to undefined method Nette\Reflection\Parameter::isPassedByReference() s tím, že ve vygenerované proxině pro entitu User, která je namapovaná do Identity a používaná k autorizaci, nebylo možné nalézt jednu metodu skrz __call (přitom ona existovala). Možná to s tím souvisí a je to důsledek nějakého předešlého úniku paměti. Pro doplnění výpis chyby:

...\nette\reflection\src\Reflection\Parameter.php:113	source  Nette\Utils\ObjectMixin::call(arguments)
...\lib\Doctrine\Common\Proxy\ProxyGenerator.php:929	source  Nette\Reflection\Parameter->__call(arguments)
...\lib\Doctrine\Common\Proxy\ProxyGenerator.php:799	source  Doctrine\Common\Proxy\ProxyGenerator->buildParametersString(arguments)
inner-code	Doctrine\Common\Proxy\ProxyGenerator->generateMethods(arguments)
...\lib\Doctrine\Common\Proxy\ProxyGenerator.php:279	source  call_user_func(arguments)
...\lib\Doctrine\Common\Proxy\AbstractProxyFactory.php:234	source  Doctrine\Common\Proxy\ProxyGenerator->generateProxyClass(arguments)
...\lib\Doctrine\Common\Proxy\AbstractProxyFactory.php:133	source  Doctrine\Common\Proxy\AbstractProxyFactory->getProxyDefinition(arguments)
...\doctrine\orm\lib\Doctrine\ORM\EntityManager.php:500	source  Doctrine\Common\Proxy\AbstractProxyFactory->getProxy(arguments)
...\nette-identity-doctrine\lib\Http\UserStorage.php:61	source  Doctrine\ORM\EntityManager->getReference(arguments)
...\vendor\nette\security\src\Security\User.php:125	source  Majkl578\NetteAddons\Doctrine2Identity\Http\UserStorage->getIdentity()
...\modules\FrontModule\presenters\BasePresenter.php:124	source  Nette\Security\User->getIdentity()

 $allowed = $this->authorizator->isAllowed($this->user->getIdentity(), $resource, $action);

Po restartu Apache je klid, neukazuje se ani na předchozí hláška. Asi bych to tím uzavřel – problém zřejmě nebude v Nette a nahrál novější verzi PHP.

před 2 lety

David Matějka
Moderator | 6013
+
0
-

jo, tohle je asi nejaka blba chyba v php, ktera se jeste asi nikomu nepovedla izolovat, viz

sleduj jeste log, jestli se tam neobjevi neco s tim levenshteinem, mozna to spolu souvisi..