# ExitCode

> This class provides constants for defining console command exit codes.

[API reference](/docs/api/index.md) › [yii](/docs/api/yii/index.md) › [console](/docs/api/yii/console/index.md) › ExitCode

| class | `yii\console\ExitCode` |
| --- | --- |
| Since | 2.0.13 |
| Source | [`framework/console/ExitCode.php`](https://github.com/yiisoft/yii2/blob/22.0/framework/console/ExitCode.php#L37) |

This class provides constants for defining console command exit codes.

The exit codes follow the codes defined in the [FreeBSD sysexits(3)](https://man.openbsd.org/sysexits) manual page.

These constants can be used in console controllers for example like this:

```
public function actionIndex()
{
    if (!$this->isAllowedToPerformAction()) {
         $this->stderr('Error: ' . ExitCode::getReason(ExitCode::NOPERM));
         return ExitCode::NOPERM;
    }

    // do something

    return ExitCode::OK;
}
```

See also: <https://man.openbsd.org/sysexits>.

## Properties

| Property | Type | Description | Defined by |
| --- | --- | --- | --- |
| <span id="property-reasons"></span>`$reasons` static | `array` | A map of reason descriptions for exit codes. Default: `[self::OK => 'Success', self::UNSPECIFIED_ERROR => 'Unspecified error', self::USAGE => 'Incorrect usage, argument or option error', self::DATAERR => 'Error in input data', self::NOINPUT => 'Input file not found or unreadable', self::NOUSER => 'User not found', self::NOHOST => 'Host not found', self::UNAVAILABLE => 'A required service is unavailable', self::SOFTWARE => 'Internal error', self::OSERR => 'Error making system call or using OS service', self::OSFILE => 'Error accessing system file', self::CANTCREAT => 'Cannot create output file', self::IOERR => 'I/O error', self::TEMPFAIL => 'Temporary failure', self::PROTOCOL => 'Unexpected remote service behavior', self::NOPERM => 'Insufficient permissions', self::CONFIG => 'Configuration error']`. | `ExitCode` |

## Methods

| Method | Description | Defined by |
| --- | --- | --- |
| [`getReason()`](#method-getReason) static | Returns a short reason text for the given exit code. | `ExitCode` |

## Constants

| Constant | Value | Description | Defined by |
| --- | --- | --- | --- |
| <span id="const-OK"></span>`OK` | `0` | The command completed successfully. | `ExitCode` |
| <span id="const-UNSPECIFIED_ERROR"></span>`UNSPECIFIED_ERROR` | `1` | The command exited with an error code that says nothing about the error. | `ExitCode` |
| <span id="const-USAGE"></span>`USAGE` | `64` | The command was used incorrectly, e.g., with the wrong number of arguments, a bad flag, a bad syntax in a parameter, or whatever. | `ExitCode` |
| <span id="const-DATAERR"></span>`DATAERR` | `65` | The input data was incorrect in some way.  This should only be used for user's data and not system files. | `ExitCode` |
| <span id="const-NOINPUT"></span>`NOINPUT` | `66` | An input file (not a system file) did not exist or was not readable. | `ExitCode` |
| <span id="const-NOUSER"></span>`NOUSER` | `67` | The user specified did not exist.  This might be used for mail addresses or remote logins. | `ExitCode` |
| <span id="const-NOHOST"></span>`NOHOST` | `68` | The host specified did not exist.  This is used in mail addresses or network requests. | `ExitCode` |
| <span id="const-UNAVAILABLE"></span>`UNAVAILABLE` | `69` | A service is unavailable.  This can occur if a support program or file does not exist.  This can also be used as a catchall message when something you wanted to do does not work, but you do not know why. | `ExitCode` |
| <span id="const-SOFTWARE"></span>`SOFTWARE` | `70` | An internal software error has been detected.  This should be limited to non-operating system related errors as possible. | `ExitCode` |
| <span id="const-OSERR"></span>`OSERR` | `71` | An operating system error has been detected.  This is intended to be used for such things as ``cannot fork'', ``cannot create pipe'', or the like.  It includes things like getuid returning a user that does not exist in the passwd file. | `ExitCode` |
| <span id="const-OSFILE"></span>`OSFILE` | `72` | Some system file (e.g., /etc/passwd, /var/run/utx.active, etc.) does not exist, cannot be opened, or has some sort of error (e.g., syntax error). | `ExitCode` |
| <span id="const-CANTCREAT"></span>`CANTCREAT` | `73` | A (user specified) output file cannot be created. | `ExitCode` |
| <span id="const-IOERR"></span>`IOERR` | `74` | An error occurred while doing I/O on some file. | `ExitCode` |
| <span id="const-TEMPFAIL"></span>`TEMPFAIL` | `75` | Temporary failure, indicating something that is not really an error. In sendmail, this means that a mailer (e.g.) could not create a connection, and the request should be reattempted later. | `ExitCode` |
| <span id="const-PROTOCOL"></span>`PROTOCOL` | `76` | The remote system returned something that was ``not possible'' during a protocol exchange. | `ExitCode` |
| <span id="const-NOPERM"></span>`NOPERM` | `77` | You did not have sufficient permission to perform the operation.  This is not intended for file system problems, which should use NOINPUT or CANTCREAT, but rather for higher level permissions. | `ExitCode` |
| <span id="const-CONFIG"></span>`CONFIG` | `78` | Something was found in an unconfigured or misconfigured state. | `ExitCode` |

## Method details

### getReason() <span id="method-getReason"></span>

```php
public static function getReason(int $exitCode): string
```

Returns a short reason text for the given exit code.

This method uses [`$reasons`](/docs/api/yii/console/exitcode/index.md#property-reasons) to determine the reason for an exit code.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `$exitCode` | `int` | One of the constants defined in this class. |

**Returns**

`string`: The reason text, or `"Unknown exit code"` if the code is not listed in [`$reasons`](/docs/api/yii/console/exitcode/index.md#property-reasons).