composer1升级为composer2后,thinkphp5安装插件后运行报错

在ThinkPHP5环境下,使用Composer下载PHPWord时遇到错误。升级到Composer2后,解决了下载问题,但在运行项目时出现ComposerAutoloadComposerStaticInit7ec9931e7e5ae7803c6eb8f933f2b236类重复声明的错误。通过对composer的autoload_real.php文件进行修改,成功消除了该错误并使项目正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:thinkphp5下用composer下载phpword报错,于是升级到了composer2安装phpword没问问题。但是在运行thinkphp5项目的时候,有如下报错:

Fatal error: Cannot declare class Composer\Autoload\ComposerStaticInit7ec9931e7e5ae7803c6eb8f933f2b236, because the name is already in use in D:\xxx\tp5\vendor\composer\autoload_static.php on line 7

这个应该是重复加载的报错问题,

搜索了ComposerStaticInit7ec9931e7e5ae7803c6eb8f933f2b236这个class被调用的地方,找到了调用文件composer\autoload_real.php,然后综合以前composer1生成的authload_real.php和目前composer2生成的autoload_real.php文件得到如下的代码,运行thinkphp项目就不报错了

<?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInit7ec9931e7e5ae7803c6eb8f933f2b236
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        require __DIR__ . '/platform_check.php';

        spl_autoload_register(array('ComposerAutoloaderInit7ec9931e7e5ae7803c6eb8f933f2b236', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
        spl_autoload_unregister(array('ComposerAutoloaderInit7ec9931e7e5ae7803c6eb8f933f2b236', 'loadClassLoader'));

        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
        if ($useStaticLoader) {
            require_once __DIR__ . '/autoload_static.php';

            call_user_func(\Composer\Autoload\ComposerStaticInit7ec9931e7e5ae7803c6eb8f933f2b236::getInitializer($loader));
        } else {
            $map = require __DIR__ . '/autoload_namespaces.php';
            foreach ($map as $namespace => $path) {
                $loader->set($namespace, $path);
            }

            $map = require __DIR__ . '/autoload_psr4.php';
            foreach ($map as $namespace => $path) {
                $loader->setPsr4($namespace, $path);
            }

            $classMap = require __DIR__ . '/autoload_classmap.php';
            if ($classMap) {
                $loader->addClassMap($classMap);
            }
        }

        $loader->register(true);

        if ($useStaticLoader) {
            $includeFiles = Composer\Autoload\ComposerStaticInit7ec9931e7e5ae7803c6eb8f933f2b236::$files;
        } else {
            $includeFiles = require __DIR__ . '/autoload_files.php';
        }
        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequire7ec9931e7e5ae7803c6eb8f933f2b236($fileIdentifier, $file);
        }

        return $loader;
    }
}

function composerRequire7ec9931e7e5ae7803c6eb8f933f2b236($fileIdentifier, $file)
{
    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
        require $file;

        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值