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
2 947
+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 и т.п.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.