{"id":13505084,"url":"https://github.com/algo13/php-nag","last_synced_at":"2025-03-29T22:31:26.922Z","repository":{"id":99632283,"uuid":"55298299","full_name":"algo13/php-nag","owner":"algo13","description":"Static analysis tool for PHP source code by PHP.","archived":false,"fork":false,"pushed_at":"2017-02-16T14:57:12.000Z","size":45,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-01T02:35:15.265Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/algo13.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-04-02T14:17:33.000Z","updated_at":"2019-11-25T12:22:10.000Z","dependencies_parsed_at":"2023-07-31T08:15:12.889Z","dependency_job_id":null,"html_url":"https://github.com/algo13/php-nag","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algo13%2Fphp-nag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algo13%2Fphp-nag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algo13%2Fphp-nag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algo13%2Fphp-nag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/algo13","download_url":"https://codeload.github.com/algo13/php-nag/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246254077,"owners_count":20747946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T00:00:58.126Z","updated_at":"2025-03-29T22:31:25.364Z","avatar_url":"https://github.com/algo13.png","language":"PHP","funding_links":[],"categories":["Standalone"],"sub_categories":["Bugs finders"],"readme":"# php-nag\n\nStatic analysis tool for PHP source code by PHP.\n\nfor running on PHP \u003e= 5.5  \nfor parsing PHP 5.2 to PHP 7.1  \n(Depend on the [PHP-Parser](https://github.com/nikic/PHP-Parser) version 3)\n\n## Getting Started\n\n[Download phar](https://github.com/algo13/php-nag/releases)\n\n## Usage\n\n~~~sh\nphp -d \"memory_limit=512M\" phpnag.phar file.php\n~~~\n\nWindows:\n\n~~~sh\n\u003e php phpnag.phar src | findstr /V \"ORDER DEFAULT_NOTHING\"\n~~~\n\nLinux:\n\n~~~sh\n$ php phpnag.phar src | grep -v 'ORDER|DEFAULT_NOTHING'\n~~~\n\n## Summary\n\n-   Property/MULTIPLE\n\n    ~~~php\n    class C\n    {\n        public $a, $b;\n    }\n    ~~~\n\n-   ClassConst/MULTIPLE\n\n    ~~~php\n    class C\n    {\n        const A = 1, B = 2;\n    }\n    ~~~\n\n-   For/COND_MULTIPLE\n\n    ~~~php\n    for (;$a \u003c 2, $b \u003c 3;) {}\n    ~~~\n\n-   ErrorSuppress :beginner:\n\n    ~~~php\n    @file('test.txt');\n    ~~~\n\n-   AssignRef/NEW :bomb:\n\n    ~~~php\n    $instance =\u0026 new Class();\n    ~~~\n\n-   Catch/EMPTY :beginner:\n\n    ~~~php\n    try {\n        func();\n    } catch (Error $e) {\n        // empty.\n    }\n    ~~~\n\n-   Goto :beginner:\n\n-   Variable/VARIABLE_VARIABLES :beginner:\n\n    ~~~php\n    $$value;\n    ~~~\n\n-   Variable/DEPRECATED_GLOBALS :bomb:\n\n-   ArrayDimFetch/Const :dash:\n\n    ~~~php\n    $value[key];\n    ~~~\n\n-   Equal/WEAK_COMP_NUM\n\n    ~~~php\n    $value = '1abc';\n    if ($value == 1) {};\n    ~~~\n\n-   Equal/WEAK_COMP_FUNC\n\n    ~~~php\n    if (strpos($value, 'startswith') == 0) {};\n    ~~~\n\n-   BinaryOp/LOGICAL_OPERATOR :beginner:\n\n    ~~~php\n    if ($val1 and $val2) {};\n    ~~~\n\n-   FuncCall/NON_BEGINNER_FUNC :beginner:\n\n-   FuncCall/NON_OCT\\[chmod\\]\n\n    ~~~php\n    chmod($filename, 755);\n    ~~~\n\n-   FuncCall/DEFINE_CONST\n\n    ~~~php\n    define(STRING, 'value');\n    ~~~\n\n-   FuncCall/DEFINED_CONST\n\n    ~~~php\n    defined(STRING);\n    ~~~\n\n-   FuncCall/DEPRECATED_FUNC_PARAM\\[`setlocale`/$category\\] :bomb:\n\n    ~~~php\n    setlocale('STRING', 0);\n    ~~~\n\n-   FuncCall/DEPRECATED_INI_GET\\[$directive\\] :beginner:\n\n-   FuncCall/DEPRECATED_INI_SET\\[$directive\\] :bomb:\n\n-   FuncCall/DEPRECATED_FUNC_PARAM\\[`PREG_REPLACE_EVAL`\\] :bomb:\n\n    ~~~php\n    preg_replace('/pattern/e', 'value', $string);\n    ~~~\n\n-   FuncCall/DEPRECATED_FUNC_PARAM_NUM\\[`array_push`\\] :dash:\n\n    ~~~php\n    array_push($array, 'value');\n    ~~~\n\n-   FuncCall/WEAK_COMP_FUNC_PARAM\\[`in_array`\\]\n\n    The third argument is not set.\n\n-   FuncCall/WEAK_COMP_FUNC_PARAM\\[`array_search`\\]\n\n    The third argument is not set.\n\n-   FuncCall/DEPRECATED_FUNC_PARAM_NUM\\[`htmlentities` or `htmlspecialchars`\\] :smiling_imp:\n\n    The $flags argument is not set.\n\n-   FuncCall/DEPRECATED_FUNC_PARAM_ENC\\[`htmlentities` or `htmlspecialchars`\\]\n\n    The $encoding argument is not set.\n\n-   FuncCall/RECOMMEND_FUNC_PARAM\\[`htmlentities` or `htmlspecialchars`\\]\n\n    It is recommended that you use `ENT_QUOTES` flag.\n\n-   FuncCall/DEPRECATED_FUNC_PARAM\\[`htmlentities` or `htmlspecialchars`\\] :smiling_imp:\n\n    Deprecated flag(`ENT_COMPAT`, `ENT_NOQUOTES`, `ENT_IGNORE`)\n\n-   FuncCall/DEPRECATED_API\\[$funcName\\] :bomb:\n\n-   List/ASSIGN_ORDER :bomb:\n\n    ~~~php\n    list($a[], $a[]);\n    ~~~\n\n-   List/EMPTY :bomb:\n\n    ~~~php\n    list(,);\n    ~~~\n\n-   Print/USER_INPUT\\[$\\_GET or $\\_POST ...\\] :smiling_imp:\n\n-   Echo/USER_INPUT\\[$\\_GET or $\\_POST ...\\] :smiling_imp:\n\n-   ClassLike/PHP4CONSTRUCT :bomb:\n\n-   ClassLike/MIXED_ORDER\\[Method/Property\\]\n\n    ~~~php\n    class Example {\n        public $member1;\n        public function func1(){};\n        public $member2;\n        public function func2(){};\n    }\n    ~~~\n\n-   ClassLike/VISIBILITY_MIXED_ORDER\n\n-   ClassLike/VISIBILITY_ORDER\n\n    `public`, `protected`, `private`\n\n-   Unset/Superglobals :boom:\n\n    ~~~php\n    unset($_SESSION);\n    ~~~\n\n-   Switch/FALL_THROUGH\n\n    ~~~php\n    switch ($string) {\n    case 'one':\n        $value = 'string';\n        //break; \u003c= fall through\n    case 'two':\n        $value = 'string string';\n        break;\n    }\n    ~~~\n\n-   Switch/CONTINUE_BREAK\n\n-   Switch/DEFAULT_NOTHING\n\n-   Switch/DEFAULT_MULTIPLE :bomb:\n\n-   Switch/DEFAULT_NON_TAIL :beginner:\n\n-   FunctionLike/DUPLICATE_FUNC_PARAM :bomb:\n\n    ~~~php\n    function func($a, $a) {}\n    ~~~\n\n-   Cond/BITWISE_OPERATOR :beginner:\n\n    ~~~php\n    if ($a \u0026 $b) {}\n    ~~~\n\n-   Cond/ASSIGN_IF (for, while ...)\n\n    ~~~php\n    if ($a = func()) {}\n    ~~~\n\n-   Cond/WEAK_COMP_IF (for, while ...)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falgo13%2Fphp-nag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falgo13%2Fphp-nag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falgo13%2Fphp-nag/lists"}