php7/pear在需要文件时显示解析错误

php7/pear在需要文件时显示解析错误,php,pear,php-7,Php,Pear,Php 7,我有一个遗留站点(不是我写的),在过去的几年里它一直在一个带有php5的服务器上。我正在用php7创建一个新的服务器,并测试哪些工作正常,哪些坏了 该站点通过包含文件pear/lib/DB.php来使用pear。我创建了一个只有代码的全新页面 <?php require_once( "DB.php" ); ?> 该站点只需要DB.php,因为我在include\u path 检查Pear的版本可以得到以下信息 $pear版本 PEAR Version: 1.10.3 PHP V

我有一个遗留站点(不是我写的),在过去的几年里它一直在一个带有php5的服务器上。我正在用php7创建一个新的服务器,并测试哪些工作正常,哪些坏了

该站点通过包含文件
pear/lib/DB.php
来使用pear。我创建了一个只有代码的全新页面

<?php

require_once( "DB.php" );

?>
该站点只需要DB.php,因为我在
include\u path

检查Pear的版本可以得到以下信息 $pear版本

PEAR Version: 1.10.3
PHP Version: 7.0.15-0ubuntu0.16.04.4
Zend Engine Version: 3.0.0
Running on: Linux cdc-migration-0d 3.13.0-103-generic #150-Ubuntu SMP Thu Nov 24 10:34:17 UTC 2016 x86_64
我的研究表明,Pear的最新版本与php7兼容,因此它们应该协同工作。你知道为什么在测试页面上只需要
DB.php
就会立即产生解析错误吗

编辑: pear文件中生成错误的代码如下

function &factory($type, $options = false)
    {
        if (!is_array($options)) {
            $options = array('persistent' => $options);
        }

        if (isset($options['debug']) && $options['debug'] >= 2) {
            // expose php errors with sufficient debug level
            include_once "DB/{$type}.php";
        } else {
            @include_once "DB/{$type}.php";
        }

        $classname = "DB_${type}";

        if (!class_exists($classname)) {
            $tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
                                    "Unable to include the DB/{$type}.php file",
                                    'DB_Error', true);
            return $tmp;
        }

                @$obj =& new $classname; // ##### this is line 310 that generates the error #####

        foreach ($options as $option => $value) {
            $test = $obj->setOption($option, $value);
            if (DB::isError($test)) {
                return $test;
            }
        }

        return $obj;
    }
自PHP5.3以来,通过引用分配new的返回值是不推荐的

这是PHP4编写PHP的风格

改为写:

$obj = new $classname; 
自PHP7起,此功能已被删除

见:

自PHP5.3以来,通过引用分配new的返回值是不推荐的

这是PHP4编写PHP的风格

改为写:

$obj = new $classname; 
自PHP7起,此功能已被删除


请参阅:

那么,该文件的第310行是什么?你能在文件的这一部分上下各写几行吗?顺便说一下,我有点想知道你引用的那条非常奇怪的路径:
/local/sites/…
。这看起来一点都不像Ubuntu…@arkascha我在原始问题中添加了生成该错误的函数。至于奇怪的路径,我的前辈们使用了不典型的安装路径(这是一种痛苦),到目前为止,我一直坚持“如果它没有坏掉”的理念,但这可能会随着服务器升级而改变。我所做的只是在
go pear.phar
提示下更改根路径,这一行确实是一个语法错误。。。我想知道它是从哪里来的这看起来像是一个手动修改。看看它!它的风格与功能的结果完全不同。这是唯一有不同(错误)缩进的行。它前面有一个愚蠢的
@
。简而言之:那条线看起来可疑。关于自定义路径。。。这也就好像手动“野生”安装完成了一样。问题是为什么?能够进行手动操作?为什么不使用为Ubuntu提供的准备好的、健壮的软件包呢?那么,文件的第310行是什么?你能在文件的这一部分上下各写几行吗?顺便说一下,我有点想知道你引用的那条非常奇怪的路径:
/local/sites/…
。这看起来一点都不像Ubuntu…@arkascha我在原始问题中添加了生成该错误的函数。至于奇怪的路径,我的前辈们使用了不典型的安装路径(这是一种痛苦),到目前为止,我一直坚持“如果它没有坏掉”的理念,但这可能会随着服务器升级而改变。我所做的只是在
go pear.phar
提示下更改根路径,这一行确实是一个语法错误。。。我想知道它是从哪里来的这看起来像是一个手动修改。看看它!它的风格与功能的结果完全不同。这是唯一有不同(错误)缩进的行。它前面有一个愚蠢的
@
。简而言之:那条线看起来可疑。关于自定义路径。。。这也就好像手动“野生”安装完成了一样。问题是为什么?能够进行手动操作?为什么不使用为Ubuntu提供的准备好的、健壮的软件包呢?请参阅:然而这里()的内容是“新对象不能通过引用分配”。这是一个向后兼容的变化。我想我们在同一条通往救赎的道路上。谢谢@arkaschayou是正确的,它是php4,它被使用是因为我是个白痴。我在旧服务器上执行了pear的新安装,而不是为此目的复制的新服务器。因此,找到的DB.php不是最新的、与php7兼容的版本,而是用php4编写的旧版本。一旦我在正确的服务器上执行了更新,它就复制了一个新版本的DB.php(),并且能够毫无错误地要求它。很高兴你能找到它:)请参阅:但是这里()它指出“新对象不能通过引用分配”。这是一个向后兼容的变化。我想我们在同一条通往救赎的道路上。谢谢@arkaschayou是正确的,它是php4,它被使用是因为我是个白痴。我在旧服务器上执行了pear的新安装,而不是为此目的复制的新服务器。因此,找到的DB.php不是最新的、与php7兼容的版本,而是用php4编写的旧版本。一旦我在正确的服务器上执行了更新,它就复制了一个新版本的DB.php(),并且能够毫无错误地要求它
$obj = new $classname;