运行 symfony 1.4 可以在 PHP7 下运行吗?
WIll it be possible to run symfony 1.4 under PHP7?
是否可以在 PHP7 下 运行 symfony 1.4?
如果是,需要进行哪些更改?
查看与您的问题相关的问题:
Symfony 1.4 using deprecated functions in php 5.5
根据您的代码库,我认为您最好的选择是升级到 Symfony 2 或 3。
或者你可以使用这个支持 5.6(将来可能是 7?)的项目:https://github.com/LExpress/symfony1
对于那些想在 symfony 1.4 和 PHP7!
中使用 doctrine 1.2 的人
在 %SF_LIB_DIR%/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Collection.php 第 463 行你会发现:
$record->$relation['alias'] = $this->reference;
在 PHP 5 这被解释为
$record->${relation['alias']} = $this->reference;
作者的意图。在 PHP7 中它将被解释为
${record->$relation}['alias'] = $this->reference;
导致关系错误的原因。
要解决这个问题,只需将隐式显式化即可:
$record->{$relation['alias']} = $this->reference;
这个问题就解决了。
此外,您还必须更改以下 Doctrine 文件:
Doctrine/Adapter/Statement/Oracle.php
第 586 行来自
$query = preg_replace("/(\?)/e", '":oci_b_var_". $bind_index++' , $query);
至
$query = preg_replace_callback("/(\?)/", function () use (&$bind_index) { return ":oci_b_var_".$bind_index++; }, $query);
Doctrine/Connection/Mssql.php
来自
的第 264 行
$tokens[$i] = trim(preg_replace('/##(\d+)##/e', "$chunks[\1]", $tokens[$i]));
到
$tokens[$i] = trim(preg_replace_callback('/##(\d+)##/',function ($m) use($chunks) { return $chunks[(int) $m[1]]; }, $tokens[$i] ));
和第 415 行来自
$query = preg_replace('/##(\d+)##/e', $replacement, $query);
至
$query = preg_replace_callback('/##(\d+)##/', function($m) use ($value) { return is_null($value) ? 'NULL' : $this->quote($params[(int) $m[1]]); }, $query);
for PHP7 不再有 preg 修饰符 'e'。通过这些修改,学说 1.2 将继续与 PHP7 一起工作,并且也在与 PHP5 一起工作!
是否可以在 PHP7 下 运行 symfony 1.4?
如果是,需要进行哪些更改?
查看与您的问题相关的问题: Symfony 1.4 using deprecated functions in php 5.5
根据您的代码库,我认为您最好的选择是升级到 Symfony 2 或 3。 或者你可以使用这个支持 5.6(将来可能是 7?)的项目:https://github.com/LExpress/symfony1
对于那些想在 symfony 1.4 和 PHP7!
中使用 doctrine 1.2 的人在 %SF_LIB_DIR%/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Collection.php 第 463 行你会发现:
$record->$relation['alias'] = $this->reference;
在 PHP 5 这被解释为
$record->${relation['alias']} = $this->reference;
作者的意图。在 PHP7 中它将被解释为
${record->$relation}['alias'] = $this->reference;
导致关系错误的原因。
要解决这个问题,只需将隐式显式化即可:
$record->{$relation['alias']} = $this->reference;
这个问题就解决了。
此外,您还必须更改以下 Doctrine 文件: Doctrine/Adapter/Statement/Oracle.php 第 586 行来自
$query = preg_replace("/(\?)/e", '":oci_b_var_". $bind_index++' , $query);
至
$query = preg_replace_callback("/(\?)/", function () use (&$bind_index) { return ":oci_b_var_".$bind_index++; }, $query);
Doctrine/Connection/Mssql.php 来自
的第 264 行$tokens[$i] = trim(preg_replace('/##(\d+)##/e', "$chunks[\1]", $tokens[$i]));
到
$tokens[$i] = trim(preg_replace_callback('/##(\d+)##/',function ($m) use($chunks) { return $chunks[(int) $m[1]]; }, $tokens[$i] ));
和第 415 行来自
$query = preg_replace('/##(\d+)##/e', $replacement, $query);
至
$query = preg_replace_callback('/##(\d+)##/', function($m) use ($value) { return is_null($value) ? 'NULL' : $this->quote($params[(int) $m[1]]); }, $query);
for PHP7 不再有 preg 修饰符 'e'。通过这些修改,学说 1.2 将继续与 PHP7 一起工作,并且也在与 PHP5 一起工作!