Я столкнулся со странной проблемой. Я использую пакет phpoffice/phpspreadsheet
для синтаксического анализа csv и excel с Symfony 3. Недавно я установил кэш redis для этого пакета, как было рекомендовано здесь :
$client = new \Redis();
$client->connect('127.0.0.1', 6379);
$pool = new \Cache\Adapter\Redis\RedisCachePool($client);
$simpleCache = new \Cache\Bridge\SimpleCache\SimpleCacheBridge($pool);
\PhpOffice\PhpSpreadsheet\Settings::setCache($simpleCache);
И это действительно работает, я получил ускорение в 2 раза.Однако у меня возникла проблема при запуске тестов.Все проходит, кроме одного.Имеет @dataProvider
.И это не удалось на 6-м индексе.Важно: это не зависит от входных данных, представленных в @dataProvider
.Я изменил параметры по-разному.Я даже дублировал их.Так что даже по всем параметрам одинаковые тесты не пройдены по 6-му параметру.Ошибка: Segmentation fault
.
После некоторой отладки я обнаружил проблему.Ошибка была вызвана этой строкой функцией `unserialize '.Довольно странно для меня.
Тесты проходят без кеша redis.Так что это как-то связано с редисом.Но даже не могу найти строку, содержащую "redis" или "phpspreadsheet" в параметре unserialize
(я получил параметр при отладке).
Я не имею ни малейшего представления о том, что происходит.Я не имею отношения к коду в тестах в случае сбоя тестового примера, ядро даже не загружается.
Обновление
Я пытался получить больше информации с помощью strace
.Это последние строки этой команды:
read(25, "ContainerBuilderDebugDumpPass.php\";}i:65;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":130:{s:121:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CompilerDebugDumpPass.php\";}i:66;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":124:{s:115:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ConfigCachePass.php\";}i:67;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":129:{s:120:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSecurityVotersPass.php\";}i:68;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":117:{s:108:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php\";}i:69;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":123:{s:114:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/TwigEnvironmentPass.php\";}i:70;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":118:{s:109:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/TwigLoaderPass.php\";}i:71;C:46:\"Symfony\\Component\\Conf"..., 8192) = 8192
read(25, "source\":123:{s:114:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php\";}i:157;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":122:{s:113:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/CheckReferenceValidityPass.php\";}i:164;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":120:{s:111:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/RemovePrivateAliasesPass.php\";}i:165;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":130:{s:121:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php\";}i:166;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":125:{s:116:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/RemoveAbstractDefinitionsPass.php\";}i:167;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":107:{s:99:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/RepeatedPass.php\";}i:168;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":140:{s:131:\"/vagrant/vendor/symfony/symfony/src/Symfony/Component/Dep"..., 8192) = 8192
read(25, "y/src/Symfony/Bundle/SecurityBundle/Resources/config/security_rememberme.xml\";}i:217;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":110:{s:101:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Resources/config/templating_php.xml\";}i:218;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":111:{s:102:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Resources/config/templating_twig.xml\";}i:219;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":105:{s:97:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Resources/config/collectors.xml\";}i:220;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":100:{s:92:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Resources/config/guard.xml\";}i:221;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":110:{s:101:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Resources/config/security_debug.xml\";}i:222;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":107:{s:99:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php\";}i:225;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":107:{s:99:\"/vagrant/ve"..., 8192) = 8192
read(25, "grant/vendor/symfony/swiftmailer-bundle/DependencyInjection/Configuration.php\";}i:275;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":83:{s:75:\"/vagrant/vendor/symfony/swiftmailer-bundle/Resources/config/swiftmailer.xml\";}i:276;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":90:{s:82:\"/vagrant/vendor/doctrine/doctrine-bundle/DependencyInjection/DoctrineExtension.php\";}i:277;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":118:{s:109:\"/vagrant/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php\";}i:280;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":86:{s:78:\"/vagrant/vendor/doctrine/doctrine-bundle/DependencyInjection/Configuration.php\";}i:281;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":84:{s:76:\"/vagrant/vendor/doctrine/doctrine-cache-bundle/Resources/config/services.xml\";}i:282;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":74:{s:66:\"/vagrant/vendor/doctrine/doctrine-bundle/Resources/config/dbal.xml\";}i:283;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":73:{s:65:\"/vagrant/vendor/doctrine/doctrine-bundle/Resources/config/orm.xml\";}i:284;C:46:\"Symfony\\Component\\Config\\Resource\\FileResour"..., 8192) = 8192
read(25, "alidator.xml\";}i:341;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":82:{s:74:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/security.xml\";}i:342;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":78:{s:70:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/util.xml\";}i:343;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":80:{s:72:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/mailer.xml\";}i:344;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":83:{s:75:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/listeners.xml\";}i:345;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":93:{s:85:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/flash_notifications.xml\";}i:346;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":92:{s:84:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/username_form_type.xml\";}i:347;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":81:{s:73:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/profile.xml\";}i:348;C:46:\"Symfony\\Component\\Config\\Resource\\FileResource\":86:{s:78:\"/vagrant/vendor/friendsofsymfony/user-bundle/Resources/config/registrat"..., 8192) = 5259
read(25, "", 8192) = 0
read(25, "", 8192) = 0
close(25) = 0
poll([{fd=24, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
sendto(24, "*2\r\n$3\r\nGET\r\n$41\r\nphpspreadsheet.5bc41211f37c89.76849835.A1\r\n", 61, MSG_DONTWAIT, NULL, 0) = 61 poll([{fd=24, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=24, revents=POLLIN}])
recvfrom(24, "$", 1, MSG_PEEK, NULL, NULL) = 1
poll([{fd=24, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=24, revents=POLLIN}])
recvfrom(24, "$430\r\na:4:{i:0;b:1;i:1;O:34:\"PhpOffice\\PhpSpreadsheet\\Cell\\Cell\":6:{s:41:\"\0PhpOffice\\PhpSpreadsheet\\Cell\\Cell\0value\";s:3:\"sku\";s:51:\"\0PhpOffice\\PhpSpreadsheet\\Cell\\Cell\0calculatedValue\";N;s:44:\"\0PhpOffice\\PhpSpreadsheet\\Cell\\Cell\0dataType\";s:1:\"s\";s:42:\"\0PhpOffice\\PhpSpreadsheet\\Cell\\Cell\0parent\";N;s:43:\"\0PhpOffice\\PhpSpreadsheet\\Cell\\Cell\0xfIndex\";i:0;s:53:\"\0PhpOffice\\PhpSpreadsheet\\Cell\\Cell\0formulaAttributes\";N;}i:2;a:0:{}i:3;N;}\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 438
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
rt_sigaction(SIGSEGV, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f6a6bcdc390}, NULL, 8) = 0
tgkill(19881, 19881, SIGSEGV) = 0
rt_sigreturn({mask=[]}) = 140094735159296
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_TKILL, si_pid=19881, si_uid=1000} ---
+++ killed by SIGSEGV +++
Segmentation fault
Я не знаю, какой это язык, но из кода видно, что выполняется код, связанный с phpspreadsheet.Предыдущие строки - строки из unserialize
.Так что, скорее всего, unserialize
вызывает некоторые методы из phpspreadsheet.Но как?Успешные результаты unserialize
- это просто массивы FileResource
экземпляров.