Нужна помощь в преодолении несовместимости определенного набора зависимостей behat с PHP 5.3


У меня была определенная конфигурация behat с определенным набором зависимостей, которая хорошо работала с PHP 5.5. Но позже мне пришлось перенести эту конфигурацию на сервер с Дженкинсом. Проблема в том, что на сервере установлен PHP 5.3 без возможности обновления.

Несмотря на то, что зависимости отказались устанавливаться обычным способом через composer, я все равно заставил их установить, используя параметр "--ignore-platform-reqs".

Установив зависимости, я столкнулся с другой проблемой, которую я не смог бы так легко преодолеть. Он просто отображает ошибку при попытке выполнить команду "bin/behat":

 PHP Parse error:  syntax error, unexpected '[' in .../workspace/automated-tests/vendor/guzzlehttp/psr7/src/functions.php on line 77
PHP Stack trace:
PHP   1. {main}() .../workspace/automated-tests/vendor/behat/behat/bin/behat:0
PHP   2. includeIfExists() .../workspace/automated-tests/vendor/behat/behat/bin/behat:21
PHP   3. include() .../automated-tests/vendor/behat/behat/bin/behat:17
PHP   4. ComposerAutoloaderInit617eef80953ba1e8b93feeaeccb52bc0::getLoader() .../workspace/automated-tests/vendor/autoload.php:7
PHP   5. composerRequire617eef80953ba1e8b93feeaeccb52bc0() .../workspace/automated-tests/vendor/composer/autoload_real.php:49
PHP   6. require() .../workspace/automated-tests/vendor/composer/autoload_real.php:59
Parse error: syntax error, unexpected '[' in .../workspace/automated-tests/vendor/guzzlehttp/psr7/src/functions.php on line 77 Call Stack: 0.0006 645368 1. {main}() .../workspace/automated-tests/vendor/behat/behat/bin/behat:0 0.0008 645976 2. includeIfExists() .../workspace/automated-tests/vendor/behat/behat/bin/behat:21 0.0016 649328 3. include('.../workspace/automated-tests/vendor/autoload.php') .../workspace/automated-tests/vendor/behat/behat/bin/behat:17 0.0021 680968 4. ComposerAutoloaderInit617eef80953ba1e8b93feeaeccb52bc0::getLoader() .../workspace/automated-tests/vendor/autoload.php:7 0.0082 1106296 5. composerRequire617eef80953ba1e8b93feeaeccb52bc0() .../workspace/automated-tests/vendor/composer/autoload_real.php:49 0.0089 1109928 6. require('.../workspace/automated-tests/vendor/guzzlehttp/psr7/src/functions_include.php') .../automated-tests/vendor/composer/autoload_real.php:59

Вот список зависимостей в composer.json:

{
  "require": {
    "behat/gherkin": "~4.4",
    "drupal/drupal-extension": "~3.1",
    "emuse/behat-html-formatter": "dev-master"
  },
  "require-dev": {
    "bossa/phpspec2-expect": "~1.0",
    "ocramius/proxy-manager": "~0.5",
    "phpunit/phpunit": "~4.5",
    "jakoch/phantomjs-installer": "1.9.8"
  },
  "autoload": {
    "psr-0": {
      "Behat\\Behat":    "src/",
      "Behat\\Testwork": "src/"
    }
  },
  "config": {
    "bin-dir": "bin/"
  }
}
Author: Aleksandras, 2016-01-27

2 answers

Синтаксис короткого массива [] был добавлен в PHP 5.4, поэтому я предполагаю, что вы используете более старую версию PHP на общем сервере. Обычно замена [] с помощью array() помогло бы, но здесь это пакет внешнего поставщика, поэтому не рекомендуется изменять код, так как изменения будут перезаписаны при обновлении пакета поставщика. Кроме этого, единственный способ исправить эту проблему - использовать более новую версию PHP.

Из этого связанного вопроса

 2
Author: Florian Lemaitre, 2017-05-23 12:07:40

Я нашел решение этой проблемы. Я изменил блок "требуется" в composer.json на следующий:

{
  "require": {
    "drupal/drupal-extension": "*",
    "emuse/behat-html-formatter": "dev-master"
  },

Обратите внимание, что я избавился от ""behat/gherkin": "~4.4"" и изменил версию drupal/расширения на "*". Таким образом, он загружает последнюю и наиболее стабильную версию вместе со всеми необходимыми зависимостями (так что behat 4 также включен) в соответствии со спецификациями моей системы (так что ее PHP 5.3 совместим).

По крайней мере, я так это вижу. Пожалуйста, поправьте меня, если я ошибаюсь.

 1
Author: Aleksandras, 2016-01-27 16:54:03