Laravel 5.3 在 DriverException.php 第 33 行找不到接口 Throwable

Laravel 5.3 Interface Throwable not found at DriverException.php line 33

最后一天我将 Laravel 项目上传到服务器。一切都像在本地系统上一样工作正常。从今天早上开始,当用户提交 POST 请求之一时,它会抛出上述错误,并且所有请求都正常工作。

我试过

composer dump-autoload cleared route and cache

这是DriverException.php

    <?php
/*
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the MIT license. For more information, see
 * <http://www.doctrine-project.org>.
 */

namespace Doctrine\DBAL\Driver;

/**
 * Contract for a driver exception.
 *
 * Driver exceptions provide the SQLSTATE of the driver
 * and the driver specific error code at the time the error occurred.
 *
 * @author Steve M端ller <st.mueller@dzh-online.de>
 * @link   www.doctrine-project.org
 * @since  2.5
 */
interface DriverException extends \Throwable
{
    /**
     * Returns the driver specific error code if available.
     *
     * Returns null if no driver specific error code is available
     * for the error raised by the driver.
     *
     * @return integer|string|null
     */
    public function getErrorCode();

    /**
     * Returns the driver error message.
     *
     * @return string
     */
    public function getMessage();

    /**
     * Returns the SQLSTATE the driver was in at the time the error occurred.
     *
     * Returns null if the driver does not provide a SQLSTATE for the error occurred.
     *
     * @return string|null
     */
    public function getSQLState();
}

但是none帮助了我。

我想这不是您所希望的答案,但问题是您使用的代码是为 PHP 7 编写的。Throwable 接口首次引入是在 PHP 7 和使用它的代码因此无法在较旧的 PHP 版本上运行。

我最好的猜测是,特别是因为你显示的异常来自供应商包,你自己的代码库很好,只有一个依赖项导致了问题(因为你最近更新了你的依赖项)。要解决这个问题,你可以做的是在 composer.json 中为你的项目模拟一个比你的开发机器 运行ning 更低的 PHP 版本(你似乎 运行 PHP 7 那里)。如果没有这样的设置,composer 本身将始终尝试更新到与 运行 上的机器兼容的最新软件包(当然还有 composer.json 中定义的版本)。

顺便说一句,就在昨天,我回答了一个问题,我现在要建议的确切功能造成了麻烦 (),但对您的情况会有所帮助。因此,请继续并将以下配置部分添加到您的 composer.json(最好使用您的服务器 运行ning 的确切 PHP 版本):

"config": {
    "platform": {
        "php": "5.6.0"
    }
}

如果 composer.json 中已经有一个 config 块,只需向其中添加 platform.php 参数即可。之后,运行 composer update(很可能)降级有问题的软件包。

如果这不能解决问题,您可能需要手动查找有问题的包并降低它们的版本,以便它们与您的生产 PHP 版本一起使用。

Throwable 是 PHP 7.0+ 的概念。 您确定您没有使用与 PHP 不兼容的 DBAL 版本吗? DriverException 仅在需要 PHP 7.1 的 2.6 中扩展 Throwable。 因此,您需要做的是检查您的服务器配置是否符合要求,即运行 php>7.1 并安装了 DBAL 扩展。