Php Symfony2更新后命令给出;生成引导文件时出错";

Php Symfony2更新后命令给出;生成引导文件时出错";,php,symfony,composer-php,Php,Symfony,Composer Php,我目前使用Symfony2 2.3.7。 当我运行composer update命令时。在更新后cmd中,运行一个脚本来更新symfony2。但它失败了: Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception [RuntimeException]

我目前使用Symfony2 2.3.7。 当我运行composer update命令时。在更新后cmd中,运行一个脚本来更新symfony2。但它失败了:

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception

  [RuntimeException]                                     
  An error occurred when generating the bootstrap file.  

update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [packages1] ... [packagesN]
知道为什么会这样吗? 我试着跑:

composer update --no-scripts 
。。这样很好。以下各项也很有效:

php vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php
但是每次我尝试普通的编写器更新时,post脚本都会失败。 使用--verbose运行更新会产生以下结果:

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception

  [RuntimeException]                                     
  An error occurred when generating the bootstrap file.                                                      

Exception trace:
 () at C:\xampp\htdocs\forvaltning\vendor\sensio\distribution-bundle\Sensio\Bundle\DistributionBundle\Composer\ScriptHandler.php:203
 Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::executeBuildBootstrap() at C:\xampp\htdocs\forvaltning\vendor\sensio\distribution-bundle\Sensio\Bundle\DistributionBundle\Composer\ScriptHandler.php:43
 Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:165
 Composer\EventDispatcher\EventDispatcher->executeEventPhpScript() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:138
 Composer\EventDispatcher\EventDispatcher->doDispatch() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:107
 Composer\EventDispatcher\EventDispatcher->dispatchCommandEvent() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer.php:289
 Composer\Installer->run() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Command/UpdateCommand.php:118
 Composer\Command\UpdateCommand->execute() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:244
 Symfony\Component\Console\Command\Command->run() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:897
 Symfony\Component\Console\Application->doRunCommand() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:191
 Symfony\Component\Console\Application->doRun() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:117
 Composer\Console\Application->doRun() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:121
 Symfony\Component\Console\Application->run() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:83
 Composer\Console\Application->run() at phar://C:/ProgramData/Composer/bin/composer.phar/bin/composer:43
 require() at C:\ProgramData\Composer\bin\composer.phar:15

update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [packages1] ... [packagesN]
composer.json包含:

{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
    "psr-0": { "": "src/" }
},
"repositories": [
    {
        "type": "package",
        "package": {
            "name": "jquery/jquery",
            "version": "1.9.1",
            "dist": {
                "url": "http://code.jquery.com/jquery-1.9.1.js",
                "type": "file"
            }
        }
    }
],
"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.3.*",
    "twig/extensions": "1.0.*",
    "symfony/assetic-bundle": "2.3.*",
    "symfony/swiftmailer-bundle": "2.3.*",
    "symfony/monolog-bundle": "2.3.*",
    "sensio/distribution-bundle": "2.3.*",
    "sensio/framework-extra-bundle": "2.3.*",
    "sensio/generator-bundle": "2.3.*",
    "knplabs/knp-menu": "2.0.*@dev",
    "leafo/lessphp": "0.4.*@dev",
    "knplabs/knp-menu-bundle": "2.0.*@dev",
    "incenteev/composer-parameter-handler": "~2.0",
    "twbs/bootstrap": "2.3.*",
    "jquery/jquery": "1.9.*",
    "FortAwesome/Font-Awesome": "3.2.1",
    "egeloen/ckeditor-bundle": "2.*"
},
"require-dev": {
    "phpunit/phpunit": "3.7.*"
},
"scripts": {
    "post-install-cmd": [
        "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ],
    "post-update-cmd": [
        "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ]
},
"config": {
    "bin-dir": "bin"
},
"minimum-stability": "stable",
"extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web",
    "incenteev-parameters": {
        "file": "app/config/parameters.yml"
    },
    "branch-alias": {
        "dev-master": "2.3-dev"
    }
}
}

如何解决安装/更新Symfony 2问题 一个重要的Symfony要求是
app/cache
app/logs
目录必须可由web服务器和命令行用户写入

在Linux和macOS系统上,如果web服务器用户与命令行用户不同,则需要正确配置权限以避免出现问题。有几种方法可以实现这一点:

最常见的解决方案: 在终端中,执行以下命令:

rm -rf bin
rm -rf vendor
composer install
# or if your didn't install composer
php composer.phar install
rm -rf app/cache/*
rm -rf app/logs/*
现在应该可以用了有关更多信息,请参阅

如果仍然存在此错误:«
生成引导文件时出错
»
这意味着您有文件权限问题。
请参阅以下步骤以解决此问题↓

设置或修复文件权限: 在终端中,执行以下命令:

rm -rf bin
rm -rf vendor
composer install
# or if your didn't install composer
php composer.phar install
rm -rf app/cache/*
rm -rf app/logs/*
在macOS系统上,
chmod
命令支持
+a
标志来定义ACL。使用以下脚本确定web服务器用户并授予所需的权限:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "$(whoami) allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
# if this doesn't work, try adding `-n` option
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX app/cache app/logs
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX app/cache app/logs
在大多数Linux和BSD上发行版不支持
chmod+a
,但支持另一个名为
setfacl
的实用程序。在使用之前,您可能需要在磁盘分区上安装
setfacl
和。然后,使用以下脚本确定web服务器用户并授予所需的权限:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "$(whoami) allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
# if this doesn't work, try adding `-n` option
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX app/cache app/logs
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX app/cache app/logs
如果前面的方法都不适用于您 更改以使缓存和日志目录可组写或全局写(取决于web服务器用户和命令行用户是否在同一组中)。要实现这一点,请在
app/console
web/app.php
web/app_dev.php
文件的开头添加以下行:

umask(0002); // This will let the permissions be 0775
// or
umask(0000); // This will let the permissions be 0777
注意:更改umask不是线程安全的,因此建议在可用时使用ACL方法


有关更多信息,请参阅官方文档:

我认为在运行更新之前,请删除web目录“web/bundles”中的文件夹bundle。这应该可以解决更新后cmd中的资产安装问题,我有同样的问题,分两部分解决。问题的症结在于我的代码不好,不会特别适用于其他人,但我发现问题的方法可能对其他人有用

首先,我创建了一个临时文件:app/test.php

use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

/**
 * @var ClassLoader $loader
 */
$loader = require __DIR__.'/../vendor/autoload.php';
您会注意到这是app/autoload.php的精简版本

接下来,在我的shell中,我简单地运行:

php app/test.php
经过一些尝试和错误之后,我发现我在一个私有回购中有一个错误,这是我在composer.json文件中的一个要求。在我的例子中,我有一个引导文件,它调用了我们正试图让composer创建的bootstrap.cache.php


无论如何,此方法很有用,因为它输出composer安装/更新不会输出的错误,即使启用“-verbose”并临时修改代码以输出所有错误。

尝试用

php app/console cache:clear
然后再试一次

composer update

我也有同样的问题。甚至打电话

composer create-project symfony/framework-standard-edition path/ "2.3.*"
在空目录中失败


毕竟我重新启动了,一切都恢复正常。

我也看到了这个错误。在我的例子中,当我在php.ini中禁用APC扩展时,错误停止了。

这也可能是由某些控制器中的错误引起的,如果代码不清楚,则无法更新编写器。希望此帮助

我在Mac OS(Mavericks)上使用Symfony3在MAMP上运行
composer.phar安装时遇到同样的问题:
script Sensio\Bundle\DistributionBundle\composer\ScriptHandler::buildBootstrap处理更新后cmd事件时异常终止


通过将PHP版本从5.4更新到5.6解决了这个问题。由于Symfony在MAMP中运行,我忘记了Symfony3不支持我的系统默认PHP版本。PHP升级后,编写器成功运行

在Bluehost共享主机服务器上使用Symfony 3时,我遇到了同样的问题。 为了让composer运行,我首先必须找到并使用PHP5.4客户端,然后我遇到了与您相同的错误。

PHP需要是PHP5.5.9的最低版本

因此,您使用的是composer支持的php客户端,而Symfony不支持。 Bluehost提供了php客户端v5.6.24,可在
/usr/php/56/bin/php
访问

因此,使用该php可执行文件:

/usr/php/56/bin/php ~/my/path/to/composer.phar install
我成功地运行了“
composer安装
”,所有安装后cmd都已完成,没有错误。 这也是调用
bin/console
或在您的情况下调用
app/console
命令的方法。 i、 e


我通过更新composer.json以匹配机器上的php版本来解决这个问题

"config" : {
    "bin-dir" : "bin",
    "platform" : {
        "php" : "7.0.21" //Update this same as your $> php -v
    }
},

就我而言,我没有权限错误。它与pnctl事件循环发射器库中禁用的PHP函数的require()有关。作曲家自动加载器严重失败,使脚本崩溃。解决方案是在php.ini中启用pcntl_uu函数

有问题的文件是vendor/composer/./gos/pnctl event-loop-emitter/src/functions.php

; This directive allows you to disable certain functions for security reasons.^M
; It receives a comma-delimited list of function names. This directive is^M
; *NOT* affected by whether Safe Mode is turned On or Off.^M
; http://php.net/disable-functions^M
; disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
disable_functions =

运行
composer update--verbose
应该会对异常进行完整的回溯,从而更容易(或者在您的情况下实际上可能)调试您尝试过的问题?此外,确保运行
composer--self update
来更新它自己的bi