Error levenshtein – Laděnka nezachytila a příčina vzniku erroru neznámá
- Daewoo
- Člen | 36
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)
- David Matějka
- Moderator | 6445
jako v produkcnim rezimu jo? zkus kdyztak zapnout u tracy v neonu
tracy:
logSeverity: E_ALL
aby to logovalo bluescreen pro vsechny chyby
- Daewoo
- Člen | 36
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.
- David Matějka
- Moderator | 6445
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..