首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于重写MAXPATHLENGTH而安装phpunit/phpunit时出现的编写器错误

由于重写MAXPATHLENGTH而安装phpunit/phpunit时出现的编写器错误
EN

Stack Overflow用户
提问于 2017-01-12 15:01:12
回答 1查看 1.1K关注 0票数 0

我有一个PHP项目,其文件夹结构如下所示:

代码语言:javascript
复制
C:\Users\Bas\Documents\Web_development\Projects\Back_end\Current\Project_name\Workspace

我已经为这个项目安装了composer,并且已经安装了一些软件包。我的composer.json看起来是这样的:

代码语言:javascript
复制
{
  "name": "Bas/Project_name",
  "description": "...",
  "minimum-stability": "stable",
  "license": "MIT",
  "authors": [
    {
      "name": "Bas",
      "email": "..."
    }
  ],
  "require": {
    "psr/log": "1.0.2",
    "monolog/monolog": "1.22.0",
    "ip2location/ip2location-php": "8.0.2"
  }
}

当我试图安装phpunit/phpunit版本5.7.x (最新)包时,它会给出[ErrorException] ZipArchive::extractTo(): Full extraction path exceed MAXPATHLEN (260)错误。完整的错误消息如下所示:

代码语言:javascript
复制
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug

Using version ^5.7 for phpunit/phpunit
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing symfony/yaml (v3.2.1)
    Loading from cache

  - Installing sebastian/version (2.0.1)
    Loading from cache

  - Installing sebastian/resource-operations (1.0.0)
    Loading from cache

  - Installing sebastian/recursion-context (2.0.0)
    Loading from cache

  - Installing sebastian/object-enumerator (2.0.0)
    Loading from cache

  - Installing sebastian/global-state (1.1.1)
    Loading from cache

  - Installing sebastian/exporter (2.0.0)
    Loading from cache

  - Installing sebastian/environment (2.0.0)
    Loading from cache

  - Installing sebastian/diff (1.4.1)
    Loading from cache

  - Installing sebastian/comparator (1.2.2)
    Loading from cache

  - Installing doctrine/instantiator (1.0.5)
    Loading from cache

  - Installing phpunit/php-text-template (1.2.1)
    Loading from cache

  - Installing phpunit/phpunit-mock-objects (3.4.3)
    Downloading: 100%

Installation failed, reverting ./composer.json to its original content.


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


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-autho
ritative] [--] [<packages>]...

我正在用composer require phpunit/phpunit命令安装这个包。

我已经对这个问题做了一些研究,它是由一个到长的目录结构引起的,但是当计算我当前的目录结构时,它只有87个字符。

我尝试使用composer install参数运行composer update命令和--prefer-source命令。这两种方法都不起作用,也给了我同样的错误。

我目前正在运行Windows 10 64位。

这个问题是如何发生的?因为我在MAXPATHLEN (260)变量下有一个目录结构。

有没有办法在不改变我的目录结构的情况下解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-20 01:13:25

你的路很长。它是否太长取决于项目中目录结构的深度。

记住,使用Composer将创建子文件夹。至少您将创建vendor/phpunit/phpunit (22个字符),并且在此基础上创建PHPUnit本身的所有子文件夹。我发现这条路径就是一个例子:src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php (另62个字符)。

再加上一些目录分隔符,我们至少有87 + 22 +2+ 62 =173个字符长。比你想象的更接近260的最大值。

解压缩模拟对象组件时会出现问题。我发现了一条有趣的路:tests/MockObject/Generator/namespaced_class_implementing_interface_dont_call_parent_constructor.phpt -101个字符。再加上供应商文件夹vendor/phpunit/phpunit-mock-objects (36个字符)和另外两个目录分隔符,我们的位置是87 + 36 +2+ 101 = 226 chars --接近最大值。现在您只需要来自任何地方的另外34个字符,可能在解压缩过程中创建了一个临时文件名,并且达到了极限。

缩短你现有的路径,它就能工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41616359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档