Static analyzis tool for PHP : Coupling, Cyclomatic complexity, Maintainability Index, Halstead's metrics... and more !

Installs: 5 736

Dependents: 9

Stars: 670

Watchers: 44

Forks: 71

Open Issues: 14

Language: HTML

v1.5.2 2015-11-26 15:21 UTC


Gives metrics about PHP project and classes.

License Build Status Scrutinizer Code Quality Latest Stable Version Dependency Status


As phar archive:

wget https://github.com/Halleck45/PhpMetrics/raw/master/build/phpmetrics.phar
chmod +x phpmetrics.phar
mv phpmetrics.phar /usr/local/bin/phpmetrics

With Composer (Make sure you have ~/.composer/vendor/bin/ in your path):

php composer.phar global require 'halleck45/phpmetrics'


Do not hesitate to visit the official documentation.

The command command phpmetrics <folder or filename> will output:

Standard report

If you want to get the summary HTML report (with charts):

phpmetrics --report-html=/path/of/your/choice.html <folder or filename>

No panic : you can read the How to read the HTML report page

If you need a pure string representation of the reports in StdOut, just use phpmetrics -q --report-xml=php://stdout <folder or filename>

Conditions of failure

Customizing the conditions of failure is very easy with the--failure-condition option. For example:

--failure-condition="average.maintainabilityIndex < 100 or sum.loc > 10000"

With this example, PhpMetrics script returns 1 if the average of Maintainability index is lower than 100 or if the total number of lines of code is greater than 10000.

You can also work with package:

--failure-condition="My/Package1/XXXX.average.bugs > 0.35"

Remember that in PhpMetrics packages are file oriented (and not object oriented).

Conditions are evaluated with the Hoa Ruler component. Available operators are and, or, xor, not, = (is as an alias), !=, >, >=, <, <=, in and sum

List of availables metrics is documented here.

 IDE integration

 Jenkins and CI

You'll find a complete tutorial in the documentation

You can easily export results to XML with the --report-xml option:

phpmetrics --report-xml=/path/of/your/choice.xml <folder or filename>

You can also export results as violations (MessDetector report), in XML format with the --violations-xml option:

phpmetrics --violations-xml=/path/of/your/choice.xml <folder or filename>


Configuration options

  • --report-html - Path to save report in HTML format. Example: --report-html=/tmp/report.html
  • --report-xml - Path to save summary report in XML format. Example: --report-xml=/tmp/report.xml
  • --report-cli - Enable report in terminal.
  • --violations-xml - Path to save violations in XML format. Example: --violations-xml=/tmp/report.xml
  • --report-csv - Path to save summary report in CSV format. Example: --report-csv=/tmp/report.csv
  • --report-json - Path to save detailed report in JSON format. Example: --report-json=/tmp/report.json
  • --chart-bubbles - Path to save Bubbles chart, in SVG format. Example: --chart-bubbles=/tmp/chart.svg. Graphviz IS required
  • --level - Depth of summary report.
  • --extensions - Regex of extensions to include.
  • --excluded-dirs - Regex of subdirectories to exclude.
  • --symlinks - Enable following symlinks.
  • --without-oop - If provided, tool will not extract any information about OOP model (faster).
  • --failure-condition - Optional failure condition, in english. Example: --failure-condition="average.maintainabilityIndex < 50 or sum.loc > 10000"
  • --config - Config file (YAML). Example: --config=myconfig.yml
  • --template-title - Title for the HTML summary report.

A complete example command line:

phpmetrics --report-html=report.html --report-xml=report.xml --report-cli=true --violations-xml=violations.xml --report-csv=report.csv --report-json=report.json --chart-bubbles=chart.svg --level=3 --extensions=php|inc --excluded-dirs="cache|logs" --symlinks=true --without-oop=true --failure-condition="average.maintainabilityIndex < 50 or sum.loc > 10000" --template-title="My Report" /path/to/source

 Configuration file

You can customize configuration with the --config=<file> option.

The file should be a valid yaml file. For example:

# file <my-config.yml>
    # paths to explore
        extensions: php|inc
        exclude: Features|Tests|tests

    # report and violations files
            xml:    ./log/phpmetrics.xml
            html:   ./log/phpmetrics.html
            csv:    ./log/phpmetrics.csv
            xml:    ./log/violations.xml
            bubbles: ./log/bubbles.svg

    # condition of failure
    failure: average.maintainabilityIndex < 50 or sum.loc > 10000

    # rules used for color ([ critical, warning, good ])
      cyclomaticComplexity: [ 10, 6, 2 ]
      maintainabilityIndex: [ 0, 69, 85 ]

Each rule is composed from three values.

  • If A < B < C : A: min, B: yellow limit, C: max
  • If A > B > C : A: max, B: yellow limit, C: min

You can save the configuration in a .phpmetrics.yml file in the root directory of your project. PhpMetrics will look for it and use it.


In order to run unit tests, please install the dev dependencies:

curl -sS https://getcomposer.org/installer | php
php composer.phar install
gem install semver

Then, in order to run the test suite:


Finally, build the phar:




See the LICENSE file.