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 и ошибкой? Или надо копать что-то другое?
Foton
21 октября 2016, 13:34
modx.pro
3 279
+2

Комментарии: 15

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

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

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

      Не подскажете, в чем может быть проблема?
        Василий Столейков
        25 мая 2019, 04:56
        0
        С PHP 7.3 pdoTools всё ещё не работает?
        У меня та же проблема что у автора топика один в один.
        Похоже прийдётся откатывать версию PHP…
          Василий Наумкин
          25 мая 2019, 07:13
          0
          С PHP 7.3 pdoTools всё ещё не работает?


          Прямо вот этот сайт прямо сейчас работает на PHP 7.3. Естественно, на pdoTools
            Василий Столейков
            25 мая 2019, 12:31
            0
            Значит это мой код нужно подтягивать под стандарты…
            Там видимо мои кастомные феномовские модификаторы нужно рефакторить чтобы не лезли феномовские ошибки.
            Спасибо за ответ!
        Антон
        06 июня 2017, 11:48
        0
          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
            Алексей Шумаев
            30 июня 2017, 17:46
            0
            Смотри js в контенте/шаблонах/чанках. Достаточно поставить пробел м/д { и продолжением в строках вида «{some_code». Часто «виноваты» конкретно счётчики метрики, addwords и т.п.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            15