什么是 phpmd 以及如何使用它?

what is phpmd and how to use it?

我有 Ubuntu 14.04 + Sublime text 3 并安装了 phpcs 包

另外我在我的系统上安装了 phpcsphp-cs-fixer

来自this blog

我发现 phpmd (PHP Mess Detector) 也是一个必需的库,所以安装 phpmd 按照 official php md 页面上的给定说明使用替代方法 来自 github 存储库一切都结束了。

:~/phpmd$ curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /home/keshav/phpmd/composer.phar
Use it: php composer.phar

但是现在当我在终端上写的时候

  phpmd /opt/lampp/htdocs/myproject, myfile.php 

phpmd: command not found

Home 目录下有 phpmd 文件夹,一切正常。

我在核心 PHP 上有本地项目,按照 github 上的建议在项目文件夹中创建 composer.json

请告诉我

是什么意思

Then install Composer in your project (or download the composer.phar directly):

我认为问题在于您已经在本地目录中安装了 phpmd,但您却试图像在全局安装一样使用它。

参考站点上的安装说明再清楚不过了。由于您已经安装了 phpcs 和 php-cs-fixer,并且它们对您有用,因此只需按照 phpmd 的类似说明进行操作。这些都是 PHP 个项目,安装方式类似。

无论如何,要将 phpmd 用作全局命令,您有多种选择。

Github

克隆 github repository just like you did and add the phpmd bin directory to your PATH variable.

全局作曲家安装

使用 composer global command 全局安装 phpmd。您还需要确保 composer 的 bin 目录在 PATH 中。默认为 ~/.composer/vendor/bin.

composer global require phpmd/phpmd

此命令将全局安装 phpmd,一旦 ~/.composer/vendor/bin 在您的 PATH 中,您就可以通过简单地调用 phpmd 来调用它.

作曲家的文档中对此有很好的解释:https://getcomposer.org/doc/03-cli.md#global

下载 phar 存档

这是您可以做的最简单的事情。只需转到 phpmd releases, choose the latest and download the phar archive.

将 phar 文件放到任何你喜欢的地方。请记住,它需要在您的 PATH 中。您也可以重命名它,以跳过 .phar 扩展名。

例如:

wget http://static.phpmd.org/php/2.1.3/phpmd.phar
sudo mv phpmd.phar /usr/bin/phpmd
sudo chmod +x /usr/bin/phpmd

Docker 容器

首先,使用 static analysis tools for PHP 获取 docker 图像:

docker pull jakzal/phpqa

镜像提供的工具之一是phpmd。下面的命令将在 docker 容器中 运行 phpmd 并将当前工作目录挂载为 /project.

docker run -it --rm -v $(pwd):/project -w /project jakzal/phpqa \
    phpmd src text cleancode,codesize,controversial,design,naming,unusedcode

当您使用基于 composer 的安装时,它会安装到 ./vendors 目录中的 ./bin 目录中。所以对我来说,相对于我项目的根目录,它在这里:

./vendor/bin/phpmd

而且我能够通过 运行ning ./vendor/bin/phpmd . text codesize 从我项目的根目录中 运行 它。 (我还没有得到任何有用的输出,但是另一个问题)