【问题标题】:How to use PHPUnit on remote server with PhpStorm 8如何通过 PhpStorm 8 在远程服务器上使用 PHPUnit
【发布时间】:2014-11-12 13:18:29
【问题描述】:

我在远程服务器上的 Ubuntu 12.04 上运行了一个 php-fpm 5.3.10 安装,我正在尝试在 PhpStorm 8 中使用 PHPUnit(截至昨天)。我没有本地 php 安装。

我已经在我的服务器上安装了 PHPUnit,并且可以通过命令行使用它。

我已经(似乎)成功地将我的 PhpStorm 链接到我的远程服务器和远程解释器,并配置了正确的部署设置。

起初我遇到了一个问题,它会尝试远程运行我的本地路径,但该问题已得到解决。但是,我不断收到错误Cannot find PHPUnit in include path (.:/usr/share/php:/usr/local/bin)。这几乎可以肯定是服务器端错误(PhpStorm 也知道这些包含路径,这可能会使它们与本地路径混淆),因为当我在 php.ini 中更改包含路径时路径会发生变化。

如果我根本不安装 PHPUnit,这与它返回的错误相同,所以这似乎是服务器端问题。

我尝试通过 PEAR(PHPUnit 已弃用并且很快不再支持它,但在很多 PhpStorm 教程中仍然提到)、通过 Composer(在远程服务器上,而不是在 PhpStorm 中)甚至手动安装 PHPUnit。

服务器很好地接受了这些安装方法(PEAR 方法似乎安装了旧版本的 PHPUnit,1.0.x 而不是明显可用的 4.0.x)但它们都给出了相同的问题。

如果我手动将 PHPUnit 放置在我的包含路径中(不过,我不确定它需要什么样的文件。a .phar?源文件?)它似乎确实有一些东西,但我得到了一个 XDebug 错误它告诉我它找不到必要的 PHPUnit 文件,所以我认为这不是要走的路(它不应该是这样)。

在这一点上,我开始没有想法了,Stackoverflow 对类似问题的响应或 PhpStorm/PHPUnit 文档似乎都无法帮助我。

编辑 1:根据要求包含设置图片。

(还不能发布图片,没有足够的代表) settings

除此之外,可能值得注意的是,我正在为我的部署使用一个挂载的文件夹,它只是指我的服务器的文件系统(它在我的本地网络中)

编辑 2:按照建议将部署更改为 SFTP 并更新了我的映射,因为 PhpStorm 能够成功验证我的远程环境,那里的一切似乎都井然有序。

通过 Composer 重新安装 PHPUnit 并在我的 PHPUnit 设置中选择自动加载器后,它仍然给出有关包含路径的错误(使用自动加载器时不应该这样做,应该吗?)所以我将包含路径更改为指向到/usr/share/php/Composer/vendor/phpunit(以及它上面的两个目录,为了更好的衡量)。

它仍然给出错误,但是在错误中它说它在包含路径中找不到 PHPUnit,而安装在一个名为 phpunit(全小写)的目录中。将目录名改成PHPUnit后,不再提示包含路径错误,而是出现XDebug错误:Warning: include(/usr/share/php/Composer/vendor/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /usr/share/php/Composer/vendor/composer/ClassLoader.php on line <i>382</i>

我不确定这到底意味着什么,我不知道错误是否是因为我不应该更改目录名称(似乎没有必要),因为我没有进行足够的更改其中(其他目录可能仍然是小写的)或者因为这些文件根本不应该在包含路径中(composer 应该管理我的依赖项,不是吗?)。

【问题讨论】:

  • 1) 我假设您已经正确设置了远程 PHP 解释器,对吗? 2) Settings | PHP | PHPUnit 的屏幕截图 3) 确保您已正确创建 SFTP 类型的部署条目并将其标记为该项目的默认值 - IDE 将使用其中的路径映射
  • 我用附加信息编辑了我的问题,我的所有设置似乎都是有序的(至少对我来说)
  • 1) 如果您想使用 ** Remote PHP Interpreter**(通过 SSH 工作),那么您必须使用 SFTP 部署。 2)您正在使用“从包含路径加载”。在这种情况下,您必须在 php.ini 的 include_path 选项中添加 PHPUnit 安装路径。注意:这仅在您的 PHPUnit 安装是基于作曲家(大量单个文件)时才有效。如果通过 PEAR 安装——它实际上是一个 PHAR。所以最好使用纯 Composer 方式(并使用自动加载器选项)或 PHAR 方式。
  • 我不知道在这种情况下 SFTP 是一个要求,我还为我的 PhpStorm 项目文件使用了挂载的文件夹,所以从技术上讲,没有任何东西需要部署到我的项目之外的任何地方,有什么办法吗利用这一事实?
  • 您可能不需要使用它来传输文件......但它绝对是路径映射所需要的。 confluence.jetbrains.com/display/PhpStorm/…

标签: php phpunit phpstorm remote-server


【解决方案1】:

在某些情况下,这可以非常容易地解决。 PHPStorm 在包含路径中查找文件夹 PHPUnit,但我发现这是区分大小写的!通过 composer 安装会将 PHPUnit 安装在一个名为 /vendor/phpunit/phpunit/phpunit 的文件夹中,这都是小写的。这意味着除非您将文件夹名称更改为“PHPUnit”,否则 PHPStorm 将无法找到该文件夹​​。因此,包含路径应​​该是:/usr/share/php/composer/vendor/phpunit/phpunit,并且在该文件夹中,应该有另一个名为“PHPUnit”的文件夹(区分大小写!)。我确定这不是完美的解决方案,但它确实有效。

【讨论】:

  • 这是我的一位同事,他是最终提出这个解决方案的人。感谢@LazyOne 为我们指明了有关 SFTP 等的正确方向。
  • “但我发现这是区分大小写的!” -- 不明白这里有什么惊喜。 Linux 是区分大小写的操作系统,并使用区分大小写的文件系统(而 Windows 则相反)。如果您通过 composer .. 安装了 PHPUnit,那么使用“自动加载器”选项(而不是“包含路径”)应该可以正常工作并且 应该 从一开始就绕过这样的时刻——不知道为什么不适合你。
  • 是的,我们知道这是 Windows 和 Linux 之间的区别,但是我们希望 PhpStorm 也意识到这一点并知道 PHPUnit 使用什么样的命名约定。最后我们不得不更改目录名称,这似乎非常规。
  • 为什么它应该意识到这一点?为什么这里甚至提到了 IDE?是 PHP 本身无法找到该文件,而不是 IDE。如果 IDE 不能正确转换路径(本地远程)或类似的东西——那么是的,但否则——这都是关于 PHP 本身/配置的。顺便说一句:您是否设法弄清楚为什么“自动加载器”选项对您不起作用......或者您已经停止了当前的工作解决方案?
  • 符号链接到文件夹可能更安全,而不是完全移动它
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2016-01-28
  • 2015-07-04
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多