К содержанию

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
Foton
21 октября 2016, 13:34
modx.pro
6 392
Реклама

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

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

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

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


          Прямо вот этот сайт прямо сейчас работает на PHP 7.3. Естественно, на pdoTools
            Василий Столейков
            Василий Столейков Проверенный
            25 мая 2019, 12:31
            Значит это мой код нужно подтягивать под стандарты…
            Там видимо мои кастомные феномовские модификаторы нужно рефакторить чтобы не лезли феномовские ошибки.
            Спасибо за ответ!
        Антон
        Антон Старожил
        06 июня 2017, 11:48
          alex
          alex Старожил
          13 июня 2017, 12:52
          Добрый день, на сайте постоянно пишутся ошибки типа:

          [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
            Смотри js в контенте/шаблонах/чанках. Достаточно поставить пробел м/д { и продолжением в строках вида «{some_code». Часто «виноваты» конкретно счётчики метрики, addwords и т.п.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            15