【发布时间】:2018-03-12 11:59:18
【问题描述】:
在我的 MacOS 上运行 PHP 开发服务器时,我从 composer 收到以下错误。
Fatal error: Cannot redeclare composerRequire01a3dc0b1f885ed2b645be37711584c1()
(previously declared in /Users/<user>/Desktop/<app>/vendor/composer/autoload_real.php:63)
in /Users/<user>/Desktop/<app>/vendor/composer/autoload_real.php on line 70
但是,当在我的 Windows 机器上运行完全相同的代码时,一切似乎都运行得非常好。我已经确认我没有多次包含自动加载的 require 语句。这可能是什么原因造成的?如果这有什么不同,我正在使用 HomeBrew 的 Composer。我只是看不出这样一个特定的文件命名空间是如何被多次包含的。
编辑
作曲家 autoload_real.php
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit01a3dc0b1f885ed2b645be37711584c1
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit01a3dc0b1f885ed2b645be37711584c1', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit01a3dc0b1f885ed2b645be37711584c1', '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\ComposerStaticInit01a3dc0b1f885ed2b645be37711584c1::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\ComposerStaticInit01a3dc0b1f885ed2b645be37711584c1::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire01a3dc0b1f885ed2b645be37711584c1($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequire01a3dc0b1f885ed2b645be37711584c1($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
}
}
【问题讨论】:
-
可以把composer生成的
/vendor/composer/autoload_real.php贴在这里吗? -
@Federkun 添加
-
为什么要使用这些类和函数名称?
-
这个我没碰过,我只是复制了文件里的内容。我假设 Composer 是自己生成的。
标签: php composer-php slim slim-3