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 项目