Composer 安装错误:ZipArchive::extractTo():完整提取路径超过 MAXPATHLEN (260)

Posted

技术标签:

【中文标题】Composer 安装错误:ZipArchive::extractTo():完整提取路径超过 MAXPATHLEN (260)【英文标题】:Composer Install Error: ZipArchive::extractTo(): Full extraction path exceed MAXPATHLEN (260) 【发布时间】:2015-05-22 00:55:31 【问题描述】:

当我跑步时:

php composer.phar require kartik-v/yii2-widgets "*"

我得到以下输出(使用 -vvv 详细标志):

  - Installing kartik-v/bootstrap-fileinput (v4.1.7)
Downloading https://api.github.com/repos/kartik-v/bootstrap-fileinput/zipball/f95a7e5fa0a9db1ead445e438653aa71e9f599f9
    Downloading: connection...
    Downloading: 0%
    Downloading: 5%
    ...
    Downloading: 95%
    Downloading: 100%
    Downloading: 100%
Writing C:/Users/Michael/AppData/Local/Composer/files/kartik-v/bootstrap-fileinput/f95a7e5fa0a9db1ead445e438653aa71e9f599f9.zip into cache
    Extracting archive

  [ErrorException]
  ZipArchive::extractTo(): Full extraction path exceed MAXPATHLEN (260)

Exception trace:
 () at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Downloader/ZipDownloader.php:79
 Composer\Util\ErrorHandler::handle() at n/a:n/a
 ZipArchive->extractTo() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Downloader/ZipDownloader.php:79
 Composer\Downloader\ZipDownloader->extract() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Downloader/ArchiveDownloader.php:44
 Composer\Downloader\ArchiveDownloader->download() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Downloader/DownloadManager.php:201
 Composer\Downloader\DownloadManager->download() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Installer/LibraryInstaller.php:156
 Composer\Installer\LibraryInstaller->installCode() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Installer/LibraryInstaller.php:87
 Composer\Installer\LibraryInstaller->install() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Installer/InstallationManager.php:152
 Composer\Installer\InstallationManager->install() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Installer/InstallationManager.php:139
 Composer\Installer\InstallationManager->execute() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Installer.php:578
 Composer\Installer->doInstall() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Installer.php:225
 Composer\Installer->run() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Command/RequireCommand.php:154
 Composer\Command\RequireCommand->execute() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:253
 Symfony\Component\Console\Command\Command->run() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:874
 Symfony\Component\Console\Application->doRunCommand() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:195
 Symfony\Component\Console\Application->doRun() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Console/Application.php:147
 Composer\Console\Application->doRun() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:126
 Symfony\Component\Console\Application->run() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Console/Application.php:84
 Composer\Console\Application->run() at phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:43
 require() at C:\ProgramData\ComposerSetup\bin\composer.phar:25


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--sort-packages] [packages1] ... [packagesN]

我什至尝试使用标志“--prefer-source”,但我得到了同样的错误。有没有办法告诉作曲家增加 MAXPATHLEN?它到底在抱怨哪条路?

【问题讨论】:

【参考方案1】:

尝试使用 --prefer-source 标志

composer install --prefer-source

【讨论】:

这实际上对我有用。 --prefer-source 直接签出存储库。这需要更多时间,但不会遇到路径问题。 +1 它在 Windows 上也适用于我,注意:composer update --prefer-source 没有。只有在删除供应商文件夹并运行 install 后,我才实现了克隆 repos 这在 Windows 10 64 位机器上非常适合我。谢谢!【参考方案2】:

Composer 抱怨下载路径对于 Windows 上的 PHP 来说太长了。 Windows 的最大路径长度 (MAXPATHLEN) 为 260 个字符,因此我认为您无法更改。

当我在安装 Symfony 时遇到这个问题时,我通过使用项目目录的短路径(例如 C:\projects\myproject)来修复它。

在调查这个问题时,我发现它也可以通过在安装时使用 --prefer-source 标志来修复,如下所示:

php composer.phar install --prefer-source

请注意,您需要在 Windows shell 路径中使用 git 才能使其工作,因为这会从 Github 中检查源代码,而不是下载分发文件。它也更慢。

另请注意,您可能必须在使用 --prefer-source 标志再次安装之前删除 vendor/ 文件夹:

rm -rf vendor/

【讨论】:

【参考方案3】:

尝试缩短您的项目完整路径,例如 c://www/yii-project,因为 Windows 操作系统不允许目录超过 250 个字符

【讨论】:

据我所知,实际上是 255 个字符【参考方案4】:

我相信它抱怨这个 C:/Users/Michael/AppData/Local/Composer/files/kartik-v/bootstrap-fileinput/f95a7e5fa0a9db1ead445e438653aa71e9f599f9.zip 可能超过 256 个字符。据我所知,你不能拥有比 Windows 更长的路径。

不确定是否有解决方案。您可能可以创建一个短路径并将您的应用程序安装在那里。

【讨论】:

感谢您的建议。我在 [link]getcomposer.org/doc/04-schema.md#config[/link] 上找到了可以将 "config": "cache-dir": "PATH" 添加到 composer.json 文件的位置。我再次运行安装,虽然它使用了新路径,但我仍然在同一个地方收到相同的错误,并且该文件路径少于 90 个字符。再次查看错误,我认为缓存目录较少,而将文件解压缩到的路径更多。我不得不考虑重新配置 WAMP 的根网站目录以某种方式缩短它。【参考方案5】:

尝试在命令行中运行

mklink /j <Link> <Target> 

创建符号链接并将文件路径长度减少到少于 260 个字符。更多详情https://technet.microsoft.com/en-us/library/cc753194(v=ws.11).aspx

【讨论】:

以上是关于Composer 安装错误:ZipArchive::extractTo():完整提取路径超过 MAXPATHLEN (260)的主要内容,如果未能解决你的问题,请参考以下文章

Composer [UnexpectedValueException] 错误将尝试使用 composer 安装 github 项目

Composer 安装时出现 SSL 错误

致命错误:仅从在线下载为 zip 时未找到“ZipArchive”类

安装 Composer - 内部错误

Composer 安装提供大量错误

Composer 在安装 Laravel 时显示错误