Не ставятся некоторые modx-пакеты (Ubuntu 14.04+)

В очередной раз после обновления modx наступил на грабли при установке msearch2 (иногда бывает и у других пакетов), возможно кому-то будет полезно:
Итак, имеем ubuntu 14.04+ и modx revo
при установке msearch2 процесс останавливается на Trying to download russian dictionary…
Суть проблемы в файле: /your_site/core/packages/msearch2-x.y.z-pl/modCategory/%hash%.resolve.dictionaries.resolver (стр. 62)
После создания нового объекта PclZip нет проверки его на null, а стоило бы, потому как в некоторых сборках PHP на ubuntu функция gzopen называется gzopen64, и в /core/xpdo/compression/pclzip.lib.php PHP радостно падает, так как о gzopen64 ему ничего не известно.
Ветка на launchpad по этой проблеме:
https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1315888

Вариант решения — пропатчить /core/xpdo/compression/pclzip.lib.php, например, так как описано тут http://piwigo.org/forum/viewtopic.php?id=23759
Исходная функция:
function PclZip($p_zipname)
  {
    // ----- Tests the zlib
    if (!function_exists('gzopen'))
    {
      die('Abort '.basename(__FILE__).' : Missing zlib extensions');
    }
    // ----- Set the attributes
    $this->zipname = $p_zipname;
    $this->zip_fd = 0;
    $this->magic_quotes_status = -1;
    // ----- Return
    return;
  }
Исправленный вариант:
function PclZip($p_zipname)
  {
    // ----- Tests the zlib
   if (!extension_loaded('zlib'))
    {
      die('Abort '.basename(__FILE__).' : Missing zlib extensions');
    }
    if (function_exists('gzopen'))
    {
      $this->gzopen_func = 'gzopen';
    }
    elseif (function_exists('gzopen64'))
    {
      $this->gzopen_func = 'gzopen64';
    }
    else
    {
      die('Abort '.basename(__FILE__).' : Could not find gzopen');
    }
    // ----- Set the attributes
    $this->zipname = $p_zipname;
    $this->zip_fd = 0;
    $this->magic_quotes_status = -1;
    // ----- Return
    return;
  }
Кирилл
05 августа 2015, 19:18
modx.pro
1 599
+2

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

Михаил
05 августа 2015, 22:23
0
Есть такая проблема. Сам столкнулся.
    Василий Наумкин
    06 августа 2015, 05:29
    0
    Советую оформить issue в репозитории MODX. Можно даже сразу pull request с исправлением.
      Михаил
      06 августа 2015, 06:57
      0
      версия:
      Linux Electrica 3.13.0-57-generic #95-Ubuntu SMP Fri Jun 19 09:27:48 UTC 2015 i686 i686 i686 GNU/Linux

      вроде как 32 бита, а все равно такая же проблема.
        Василий Наумкин
        06 августа 2015, 07:37
        0
        Говорят, что это вообще баг старой версии PHP.

        У нас на хостинге Ubuntu 14.04.3 LTS x64 с PHP 5.5 и такой проблемы нет.
          Михаил
          06 августа 2015, 08:35
          0
          Тоже стоит 5.5. Но не ставился пакет ( Хотя на старом серваке с точь такими же системками все ставилось без проблем.
            Кирилл
            06 августа 2015, 12:05
            +2
            как я понимаю, проблема есть именно на 32битных системах, у меня, например, точно такая же ubuntu 14.04.3 LTS, но x32 + PHP 5.5.9 и баг имеется
            Сделал pull-request в xpdo, возможно поправят в следующем релизе.
              Василий Наумкин
              06 августа 2015, 12:14
              0
              Спасибо!
                Кирилл
                06 августа 2015, 12:16
                0
                и кстати, про проверку на null — это я погорячился, смысла в ней нет никакого, php сделает die () в конструкторе и до распаковки дело не дойдет :)
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9