Symfony - Composer 更新 - 需要使用旧的依赖项(PHP 5.4 到 PHP 5.3)
Posted
技术标签:
【中文标题】Symfony - Composer 更新 - 需要使用旧的依赖项(PHP 5.4 到 PHP 5.3)【英文标题】:Symfony - Composer update - need to user older dependencies (PHP 5.4 to PHP 5.3) 【发布时间】:2016-05-29 00:00:22 【问题描述】:基本上我有一个问题——我们有一个基于 php 5.4 构建的 Symfony 站点,但我们的服务器运行的是 PHP 5.3(是的——它很旧,上面有 200 多个站点,所以我不想升级以防它变旧网站!)
我们知道问题在于 Doctrine(速记数组语法) - 可以手动更新文件并使用较旧的数组语法。
但我应该可以通过 Composer 完成 - 但我不确定要使用哪个命令。
我知道这可能会非常简单。我想我会先问一下,因为如果出现问题,我可能会节省恢复备份的时间!
更新:
试过composer install
问题 1 - 学说/orm v2.5.0 需要 php >=5.4 -> 您的 PHP 版本 (5.3.28) 不满足该要求。 - 学说/orm v2.5.0 需要 php >=5.4 -> 您的 PHP 版本 (5.3.28) 不满足该要求。 - 对教条/orm v2.5.0 的安装请求 -> 可满足于教条/orm[v2.5.0]。
试过composer install --ignore-platform-reqs
无需安装或更新
试过composer update
致命错误:第 51 行 phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Rule.php 中允许的内存大小为 335544320 字节已用尽(尝试分配 64 字节)
没想到会有这样的响应 - 可能是服务器配置问题。可惜它看起来确实在做某事!
【问题讨论】:
命令是什么意思?只需打开您的 composer.json 并将所需的 php 版本更改为 5.3... 的东西。您只需检查所有必需的捆绑软件是否支持这些版本。即学说 Bundle 需要 "php": ">=5.3.9", 好的 - 所以只要运行 composer update 就会降级该学说以在 5.3 上运行。目前 composer 中的行是 "php": ">=5.3.3", 问题是其他有 php 要求的依赖项,这就是为什么 ignore-platform-reqs 应该工作! 我要做的是在 5.3 下创建一个新的 Symfony 项目: composer create-project symfony/framework-standard-edition my_project "2.7.*" 然后使用生成的 composer.json 作为我的开始观点。当然,将您的开发机器设置回 5.3。 【参考方案1】:使用--ignore-platform-reqs
对你没有帮助,它会让事情变得更糟。正如我从您的问题中得出的那样,您的开发中有一个旧的 5.4 PHP,而您的生产机器上有一个更旧的 5.3。
我看到的任务是如何使用开发 PHP 更新生产 PHP 的依赖项。
幸运的是,如果 Composer 当前正在运行它,您可以告诉 Composer 假设使用不同版本的 PHP。
您可以为在特定机器上执行的任何 Composer 调用全局配置它,也可以为单个项目配置它。您的决定取决于您希望使用开发机器做什么,即是否必须支持另一个具有不同要求的项目。
composer config -g platform.php 5.3.16
将是全局配置,而本地配置将省略 -g
。
全局配置的效果是 Composer 将创建或添加到文件~/.composer/config.json
一个带有确切 PHP 版本号的部分。请务必使用完全正确的版本! PHP 5.3 在其生命周期中有一些重要的错误修复,补丁级别很重要,因为以后的 PHP 版本不需要 PHP 代码中的某些变通方法。您应该避免在没有解决方法的情况下在仍然损坏的版本上运行软件。
在本地版本中运行该命令会将假设的 PHP 版本添加到项目composer.json
文件中。
添加平台后,您只需运行composer update
,就会看到正在安装的与给定 PHP 5.3 版本兼容的软件包。
在生产部署期间,您只需运行composer install --no-dev
,无需任何额外工作。
【讨论】:
感谢您的意见 - 我会调查这个 +1 ;)【参考方案2】:在大多数服务器环境中,应该可以一次安装多个 PHP 版本,并且仅将特定版本用于特定文件夹/站点(例如,通过 htaccess 激活它)。因此,您的 200 个站点可以使用旧版本作为标准,而您的新站点可以使用新的 PHP 版本。我也在我的一台服务器上这样做了,这对我来说是一个很好的解决方案,我不必一次升级所有代码。
稍后当所有站点都更新时(由于缺少旧 PHP 版本的安全更新,您需要更新它们的时候)然后您可以将较新版本设置为默认 PHP 版本并忽略旧版本。
【讨论】:
以上是关于Symfony - Composer 更新 - 需要使用旧的依赖项(PHP 5.4 到 PHP 5.3)的主要内容,如果未能解决你的问题,请参考以下文章
在Composer更新后找不到Symfony AbstractController
Symfony - Composer 更新 - 需要使用旧的依赖项(PHP 5.4 到 PHP 5.3)