pdoTools и php 7.1 Новый


Перенёс сайты на новый VDS. На старом использовался PHP 7.0.11, а на новом установил PHP 7.1 RC3. И перестал работать pdoResources.
В логе MODX ничего нет. Nginx пишет:
Stack trace:
#0 /home/admin/web/site.ru/public_html/core/cache/includes/elements/modsnippet/48.include.cache.php(37): pdoFetch->run()
#1 /home/admin/web/site.ru/public_html/core/model/modx/modscript.class.php(70): include('/home/admin/web...')
#2 /home/admin/web/site.ru/public_html/core/model/modx/modparser.class.php(521): modScript->process(Array)
#3 /home/admin/web/site.ru/public_html/core/components/pdotools/model/pdotools/pdoparser.class.php(271): modParser->processTag(Array, true)
#4 /home/admin/web/site.ru/public_html/core/model/modx/modparser.class.php(250): pdoParser->processTag(Array, true)
#5 /home/admin/web/site.ru/public_html/core/components/pdotools/model/pdotools/pdoparser.class.php(64): modParser->processElementTags('', '{$_modx->getChu...', true, false, '[[', ']]', Array, 9)
#6" while reading response header from upstream, client: 67.149.75.170, server: site.ru, request: "GET /tezd/page / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9003", host: "site.ru"
2016/10/21 15:49:16 [error] 7478#7478: *320052 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: [] operator not supported for strings in /home/admin/web/site.ru/public_html/core/components/pdotools/model/pdotools/pdofetch.class.php:155
Страницы, где нет вызовов pdoResources, показываются нормально. Подскажите, есть ли связь между версией PHP и ошибкой? Или надо копать что-то другое?
21 октября 2016, 16:34    Foton   
0    1163 +2

Комментарии (12)

  1. Василий Наумкин 21 октября 2016, 19:16 # +4
    Да, это более строгая версия PHP, которая видит мои старые косяки =)

    Добавь на строке 129 файла core/components/pdotools/model/pdotools/pdofetch.class.php
    $output = array();

    И смотри, будут ли еще ошибки.
    1. Foton 21 октября 2016, 19:54 # 0
      Спасибо, заработало! Постепенно насаждаемая типизация таки превратит php в подобие скучного c++. :(
      1. Иван Климчук 22 октября 2016, 20:12 # +2
        Зато косяков и плохого кода будет меньше. pdoTools используется уже несколько лет и постепенно улучшается, но даже в нем существуют потенциальные ошибки, которые еще никто не нашел. Вот 71 и обнажила одну из проблем. Так что только за нововведения. Тем более что полностью строгий режим выключен по умолчанию.
        1. Воеводский Михаил 22 октября 2016, 22:01 # +1
          Поддерживаю. Даже при наличии разных послаблений в 5 версии всегда старался и переменные заранее объявлять, и существование элементов массивов проверять, и т.д. Иногда это увеличивает код, хоть и незначительно, но точно делает его более читаемым, а в логах убирает предупреждения.
          1. Иван Климчук 22 октября 2016, 22:07 # 0
            На одной из прошлы работ у нас было строгое правило при разработке всегда держать открытым в реальном времени лог приложения (tail -t) и проверка ошибок была настроена на отлов даже простых Notice. Notice — потенциальная ошибка и при наличии хоть одного код никогда бы не прошел код ревью. Несмотря на то, что на PHP можно написать откровенно дрянной код есть способы писать и по настоящему качественный промышленный код и более строгие режимы проверок только добавляют удобств.
            1. Сергей Шлоков 22 октября 2016, 22:26 # 0
              Ставишь phpStorm и все потенциальные ошибки светятся. )
              1. Иван Климчук 22 октября 2016, 22:28 # 0
                Обращение к несуществующему ключу массива — нет. И таких ошибок хватает, которые проявляют себя только рантайме.
                1. Сергей Шлоков 22 октября 2016, 22:34 # 0
                  Тестирование никто не отменял. А вот такой код светится
                  if ($a == 'a') {
                     $result = 'Output';
                  }
                  return $result;
                  
      2. bonoman Вчера в 15:23 # 0
        После изменения типа переменной $output в pdofetch.class.php, появилась следующая ошибка:

        2017/11/24 14:53:21 [error] 28923#28923: *28045427 FastCGI sent in stderr: «PHP message: PHP Fatal error: Uncaught Error: Cannot use assign-op operators with string offsets in /home/s1825/www/core/cache/includes/elements/modsnippet/56.include.cache.php:418
        

        418 строка и далее, указанного файла, выглядят так:

        $output['filters'][$filter] .= $pdoFetch->getChunk($tpl, array(
        'filter' => $method,
        'table' => $table,
        'rows' => $rows,
        'has_active' => $has_active,
        'delimeter' => $mSearch2->config['filter_delimeter'],
        'filter_key' => $filter_key,
        ), $fastMode);
        

        Не подскажете, в чем может быть проблема?
      3. Антон 06 июня 2017, 11:48 # 0
        1. alex 13 июня 2017, 12:52 # 0
          Добрый день, на сайте постоянно пишутся ошибки типа:

          [2017-06-13 12:36:17] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 04501439b157dd6a07bd7d54474679b4 line 88, near '{display:' < — there
          [2017-06-13 12:36:18] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 24fa1a2d390c62190e4eb9ce2d220c83 line 88, near '{display:' < — there
          [2017-06-13 12:36:18] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 24fa1a2d390c62190e4eb9ce2d220c83 line 88, near '{display:' < — there
          [2017-06-13 12:36:18] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 90a373cfc9adada8cf32a233540388ac line 88, near '{display:' < — there
          [2017-06-13 12:36:20] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in bf19ac5ee111b03493d835497bd29f13 line 88, near '{display:' < — there
          [2017-06-13 12:36:20] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 680a74d8cb6a953ae6f8493163220c2c line 88, near '{display:' < — there
          [2017-06-13 12:36:20] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 680a74d8cb6a953ae6f8493163220c2c line 88, near '{display:' < — there
          [2017-06-13 12:36:20] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 28392d760efbe7b75f54e93ed3570705 line 88, near '{display:' < — there
          [2017-06-13 12:36:29] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in 7370ce3d514878616f6b93a387d79e35 line 99, near '{display:' < — there
          [2017-06-13 12:36:30] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in fd35ef4665246317c048b45310f311f2 line 61, near '{display:' < — there
          [2017-06-13 12:36:30] (ERROR @ /paas/c023/www/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag 'display' in fd35ef4665246317c048b45310f311f2 line 61, near '{display:' < — there

          в чем может быть проблема?

          — установлена последняя версия pdotools
          — php 5.6
          1. Алексей 30 июня 2017, 17:46 # 0
            Смотри js в контенте/шаблонах/чанках. Достаточно поставить пробел м/д { и продолжением в строках вида «{some_code». Часто «виноваты» конкретно счётчики метрики, addwords и т.п.
          Вы должны авторизоваться, чтобы оставлять комментарии.