• Stars
    star
    365
  • Rank 116,475 (Top 3 %)
  • Language
    PHP
  • License
    BSD 3-Clause "New...
  • Created over 9 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Analyzer of PHP code to search issues with deprecated functionality in newer interpreter versions.

PhpDeprecationDetector

PhpDeprecationDetector - analyzer of PHP code to search usages of deprecated functionality in newer interpreter versions - deprecations detector.

Latest Stable Version Total Downloads License

PhpDeprecationDetector detects:

  • Usage of deprecated functions, variables, constants and ini-directives.
  • Usage of deprecated functions functionality.
  • Usage of forbidden names or tricks (e.g. reserved identifiers in newer versions).

It literally helps you find code that can fail after migration to newer PHP version.

  1. Installation
  2. Usage

Installation

Phar file

  1. Just download a phar from releases page and make executable
chmod +x phpdd-x.x.x.phar
  1. a. Local installation: use it from current folder:

    ./phpdd-x.x.x.phar -h

    b. Global installation: move it in to one of folders listed in your $PATH and run from any folder:

    sudo mv phpdd-x.x.x.phar /usr/local/bin/phpdd
    phpdd -h

Composer

Another way to install phpdd is via composer.

  1. Install composer:
curl -sS https://getcomposer.org/installer | php
  1. Install phpdd in global composer dir:
./composer.phar global require wapmorgan/php-deprecation-detector dev-master
  1. Run from any folder:
phpdd -h

Usage

Console scanner

To scan your files or folder launch phpdd and pass file or directory names.

Description:
  Analyzes PHP code and searches issues with deprecated functionality in newer interpreter versions.

Usage:
  scan [options] [--] <files>...

Arguments:
  files                                    Which files you want to analyze (separate multiple names with a space)?

Options:
  -t, --target[=TARGET]                    Sets target PHP interpreter version. [default: "8.0"]
  -a, --after[=AFTER]                      Sets initial PHP interpreter version for checks. [default: "5.3"]
  -e, --exclude[=EXCLUDE]                  Sets excluded file or directory names for scanning. If need to pass few names, join it with comma.
  -s, --max-size[=MAX-SIZE]                Sets max size of php file. If file is larger, it will be skipped. [default: "1mb"]
      --file-extensions[=FILE-EXTENSIONS]  Sets file extensions to be parsed. [default: "php, php5, phtml"]
      --skip-checks[=SKIP-CHECKS]          Skip all checks containing any of the given values. Pass a comma-separated list for multiple values.
      --output[=OUTPUT]                    The output type required. Options: stdout, json, junit. Defaults to stdout.
      --output-file[=OUTPUT-FILE]          File path to store results where output is not stdout.
  -h, --help                               Display help for the given command. When no command is given display help for the scan command
  -q, --quiet                              Do not output any message
  -V, --version                            Display this application version
      --ansi                               Force ANSI output
      --no-ansi                            Disable ANSI output
  -n, --no-interaction                     Do not ask any interactive question
  -v|vv|vvv, --verbose                     Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
  • By providing additional option --target you can specify version of PHP to perform less checks. Available target versions: 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0. A larger version includes rules for checking from all previous.
  • By providing --exclude option you can exclude specific folders or files from analyze. For example, --exclude vendor will prevent checking third-party libraries.
  • By providing --skip-checks option you can exclude specific checks from analyze.
  • If your files has unusual extension, you can specify all exts by --file-extensions option. By default, it uses php, phtml and php5.
  • If you need to generate machine-readable analyze result, use the --output-file option to specify path to store the output file as specified on --output (json or junit).

Example of usage

> ./bin/phpdd tests/
Max file size set to: 1.000 MiB
Folder /media/wapmorgan/Локальный диск/Документы/PhpDeprecationDetector/tests
- PHP 5.3 (3) - your version is greater or equal
+------------+---------+---------------------------------------------------------------------+
| File:Line  | Type    | Issue                                                               |
+------------+---------+---------------------------------------------------------------------+
| /5.3.php:2 | removed | Function dl() is removed.                                           |
| /5.3.php:3 | removed | Ini define_syslog_variables is removed.                             |
| /5.3.php:5 | changed | Function usage piet() (@call_with_passing_by_reference) is changed. |
|            |         | Call with passing by reference is deprecated. Problem is "&$hoho"   |
+------------+---------+---------------------------------------------------------------------+

- PHP 5.4 (2) - your version is greater or equal
+------------+---------+-----------------------------------------------+
| File:Line  | Type    | Issue                                         |
+------------+---------+-----------------------------------------------+
| /5.4.php:2 | removed | Function mcrypt_generic_end() is removed.     |
|            |         | Consider replace with mcrypt_generic_deinit() |
| /5.4.php:3 | removed | Function magic_quotes_runtime() is removed.   |
+------------+---------+-----------------------------------------------+
...
...
...

Json report format

Also, you can store analyze result in json format for automatic check. Pass --output-file=FILENAME to write result to FILENAME file or do not set to output to stdout.

Junit report format

Also, you can store analyze result in junit format for automatic check. Pass --output-file=FILENAME to write result to FILENAME file or do not set to output to stdout.

Format of json - dictionary with items:

  • InfoMessage[] info_messages - list of information messages about analyzing process.
  • Issue[] problems - list of issues found in your code.
  • ReplaceSuggestion[] replace_suggestions - list of replacement suggestions based on your code.
  • Note[] notes - list of notes about new functions behaviour.

Items description:

  • InfoMessage structure:
    • string type - message type - any of (info | warning)
    • string message - message text
  • Issue structure:
    • string version - interpreter version which has current issue (like 7.2)
    • string file - relative path to file in which issue found (like src/ProblemClass.php)
    • string path - absolute path to file in which issue found (like /var/www/html/project/src/ProblemClass.php)
    • int line - line in file in which issue found
    • int column - column in line in which issue found
    • string category - issue category - any of (changed | removed | violation)
    • string type - concrete issue type (like "constant" or "identifier")
    • string checker - concrete issue object which may cause problem (like magic_quotes_runtime or preg_replace() (@preg_replace_e_modifier))
  • ReplaceSuggestion structure:
    • string type - replacement object type (like variable or ini)
    • string problem - replacement object (like mcrypt_generic_end() or each())
    • string replacement - suggestion to replace with (like mcrypt_generic_deinit() or foreach())
  • Note structure:
    • string type - type of note (like function_usage or deprecated_feature)
    • string problem - note object (like preg_replace() (@preg_replace_e_modifier) or parse_str() (@parse_str_without_argument))
    • string note - note text (like Usage of "e" modifier in preg_replace is deprecated: "asdasdsd~ie" or Call to parse_str() without second argument is deprecated)

More Repositories

1

Morphos

A morphological solution for Russian and English language written completely in PHP. Provides classes to inflect personal names, geographical names, decline and pluralize nouns, generate cardinal and ordinal numerals, spell out money amounts and time intervals. / Морфологическая библиотека для английского и русского языков. Склоняет имена собственные, названия географических объектов, склонение и плюрализация имен собственных и другое.
PHP
783
star
2

UnifiedArchive

UnifiedArchive - an archive manager with unified interface for different formats (bundled with cli utility). Supports all formats with basic operations (reading, extracting and creation) and popular formats specific features (compression level, password-protection, comment)
PHP
274
star
3

MediaFile

A unified reader of metadata from audio & video files.
PHP
156
star
4

Mp3Info

The fastest PHP library to extract mp3 meta information (duration, bitrate, samplerate and so on) and tags (id3v1, id3v2).
PHP
138
star
5

PhpCodeAnalyzer

PhpCodeAnalyzer scans codebase and analyzes which non-built-in php extensions used
PHP
96
star
6

TimeParser

A parser for date and time written in natural language for PHP.
PHP
95
star
7

Threadable

Easy-to-use threading library providing all basic features to perform work in background mode (with simulation mode).
PHP
77
star
8

java_for_beginners_book

71
star
9

SystemDaemon

Simple base for system daemons
PHP
60
star
10

BinaryStream

BinaryStream - a writer and reader for binary data. Best replacement for pack()/unpack().
PHP
52
star
11

csharp_for_beginners

49
star
12

Morphos-Blade

Morphos adapter for Blade
PHP
34
star
13

NcursesObjects

This is a php library that provides ncurses functionality in OOP way
PHP
34
star
14

FileTypeDetector

Detects file type by filename or content and generates correct mimetype.
PHP
33
star
15

yii2-inflection

Inflection extension for Yii2. Support for English / Russian languages to inflect words / names / numbers / money / date&time.
PHP
31
star
16

Imagery

Imagery simplifies image manipulations.
PHP
25
star
17

awesome-webservice

A curated list of awesome web services.
25
star
18

OpenApiGenerator

OpenApi configuration generator directly from PHP code (PhpDoc and php type hints). Can be used with a large monolithic backend
PHP
19
star
19

php-rpm-packager

A simple rpm packager for PHP applications.
PHP
10
star
20

Morphos-Twig

Morphos adapter for Twig
PHP
9
star
21

OneCloudApi.php

API client for 1cloud.ru
PHP
6
star
22

CabArchive

CabArchive - reader of cab-archives
PHP
3
star
23

ImageEditor

Moved to
PHP
3
star
24

posvt_ipz

CSS
1
star
25

cpp_for_beginners_book

1
star