尝试将php5.6 symfony2.3升级到php7 symfony2.8的故事(升级symfony成功,但php升级未能成功)
这是Symfony Advent Calendar 2015的第21天的文章。
昨天是qcmnagai先生创建Prezto用Symfony模块的尝试。
首先
我現在主要使用的產品是 CentOS 6.7 和 PHP 5.6(最近從 5.4 升級而來),以及 Symfony 2.3。Symfony 2.3 是長期支持版本,但在2016年5月結束了bug修復支援1(儘管安全修復支援一直到2017年5月)。另外,聽說 PHP 7 速度相當快2。
我试图一次性将Symfony2.3升级到PHP7,以便减少测试成本,但最终以失败告终。
将php5.6升级至php7.
在CentOS上添加以下的yum仓库就可以轻松安装php7:
https://webtatic.com/packages/php70/
首先,删除所有现有的php相关内容,给人一种清爽的感觉。使用sudo yum remove php*进行操作。
安装rpm软件包4
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
安装在php7和php5.6时代使用的扩展4:
yum install php70w php70w-opcache php70w-devel php70w-mbstring php70w-mcrypt php70w-pecl-xdebug php70w-gd php70w-pear php70w-pdo php70w-mysql php70w-intl
与pecl的对抗
至此按照预期进行得很顺利。包管理器太棒了。
从这里开始要安装pecl的扩展。
pecl从来没有一次像计划那样顺利地工作过。
1. APCu
已经发布了已经适配php7的5.1.2版本。
https://pecl.php.net/package-info.php?package=APCu&version=5.1.2
正如所述,
pecl 安装 apcu-beta
顺利完成4。
2. SSH2
SSH2 协议
由于上次成功了,所以不要轻易地执行 pecl install ssh2 命令,因为 pecl/ssh2 需要 PHP(版本大于等于 4.0.0,小于等于 6.0.0),而当前已安装的版本是 7.0.0RC4。
如果不这样做的话,就是这种感觉。
然而,关于这个问题,下面的文章详细总结了步骤,
按照那样做的话就可以轻松地进入。
训练有素的PHPer们可能已经习惯了,但是像我这样的新手PHPer经常会忘记在最后添加php.ini的描述。
extension=ssh2.so
3. Mongo => MongoDB
3. Mongo变为MongoDB
我一直以来都非常顺利,以至于有些措手不及。然而,Mongo却没有那么容易搞定。
PHP7不再支持某些传统扩展。
其中包括pecl/mongo。
未来将会依赖MongoDB5。
然而,到2015年12月21日时,MongoDB和PHP7的兼容性还没有稳定的版本。请参考链接:https://github.com/mongodb/mongo-php-driver/issues/171
由于在 GitHub 上有一个名为 PHP7 的分支,所以我将克隆下来的内容进行构建。
请按照READ ME中的详细步骤进行操作。
https://github.com/mongodb/mongo-php-driver/tree/PHP7#installation
然而,编译无法通过。看起来是因为CentOS默认的gcc版本过旧导致的(这就是CentOS的问题)根据下面链接中的指引,我们将启用更新的gcc版本。
気をつけなきゃいけないのは
scl enable devtoolset-2 bash
はbashのセッション(って言い方であってますかね?だいたい≒タブだと思います)ごとにしか効きません。
extension=mongodb.soも忘れずに。
意外而顺利地进行的印象。(但是,我没有花太多时间意识到这是自以为是。)
无法显示画面
FatalErrorException:错误:未捕获的TypeError:传递给Symfony \ Component \ Debug \ ExceptionHandler :: handle()的参数1必须是Exception的实例,而给定的是Error的实例,在hoge / vendor / symfony / symfony / src / Symfony / Component / Debug / ExceptionHandler.php:67处。
調べるとcomposer install忘れているとのこと。
http://stackoverflow.com/questions/13237755/symfony-2-app-dev-php-error
当我在思考时,尝试进行composer install时,会因为缺少ext-mongo而被怒斥。
ext-mongoはmongodbに変わったはず…、まさか。
そう、doctrine/mongodb-odmはmongodbに未対応(必然的にphp7にも未対応)なのでした。
https://github.com/doctrine/mongodb-odm/issues/1234
issue自体はここに上がっていたりします。
https://github.com/doctrine/mongodb-odm/issues/1292
現在のプロジェクトからdoctrineのmongoORマッパーへの依存を取り除くのは、
もはや検証どころではない時間がかかります。
就这样,PHP7和Symfony2.8的梦想暂时搁置了。
symofony2.3 => symofony2.8
難しいことを考えずにcomposer.jsonの
“symfony/symfony”: “2.3.*”,
を
“symfony/symfony”: “2.8.*”,
に書き換えるだけで、composer updateが通りました。
最初symfony2.8のcomposer.jsonの記述をできるだけ真似ようとしたのですが、これは失敗でした。
如果在twig相关的问题上出现错误,只需将app/config/config.yml按照以下方式进行修改即可解决。
profilerを開くとdeprecatedの警告が大量に出ていますが、
流石はsymfonyこの程度のVer UPは簡単に動きます。
まとめ
MongoDB的使用者尚不可升级至PHP7。绝对不行。
由于这是一个相对轻松和冲动的写作,如果有任何可以拿捏的地方,希望能请您轻轻地指正。非常感谢您能读到最后,以及陪伴我阅读。
明天是ochi51关于“关于CybozuHttpBundle”的内容。
这是一个关于PHP7的演讲稿的链接。
这是一个关于symfony框架已达到100%PHP7兼容性的博客文章的链接。
在我的环境中,需要root权限。
这是关于PHP驱动程序的链接,用于连接MongoDB,并查看其兼容性。