PHP is the most popular server-side internet programming language today, so its necessary to understand learn how to get to the bottom of any blunders that may occur when your PHP code is executed. in this article, we will have a look at the fundamentals of the best way to do error managing in PHP, the use of the constructed-in functions, writing customized error handler capabilities, and with Exception error coping with. The forms of mistakes in PHP There are two elementary varieties of mistakes in tool: interior mistakes: These are the logic blunders in your code. These mistakes will also be prevented to an extraordinarily large level by careful programming. external mistakes: These are error associated to the interactions with the sector outside your code (e.g., failing to opening a file or database, the network connection dropping, being unable to load a definite PHP module, and many others.). These blunders will all the time occur, however their impact will also be mitigated. the simpler you prepare your code for these exterior mistakes, with the aid of assuming as little as imaginable when your code is executing, the much less these error will negatively have an effect on your program. how you can maintain PHP blunders as soon as error occur and we detect them, there are 4 basic methods to care for them: display the Error: this allows the error to be shown to the developer and/or person when this system is being finished. Log the Error: This allow the errors to be saved and reviewed from a textual log file. Act on the Error: the type of action needed can be completely different for each and every software state of affairs. Ignore the Error: This must always be kept away from. on this article, we will be able to focal point on the displaying, logging, and managing of error. as soon as you understand how to deal with errors, which you could act on them easily. displaying error and blunder Reporting Settings depending on if we are running code in manufacturing or in development, we would possibly want to activate or off reporting sure varieties of blunders. There are completely different locations where we can regulate what error types are to be stated: in the php.ini file within the .htaccess file for your web server From your personal PHP code. A full description of the PHP error configuration values may also be discovered right here. These are the most relevant options with their default price: options for showing PHP errors There are four that you can think of choices for displaying PHP error: error_reporting: Set the error reporting level. The default value is: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED, meaning this atmosphere does now not convey E_NOTICE, E_STRICT and E_DEPRECATED degree errors. display_errors: Set it to ON (default is OFF)if mistakes are to be printed to the monitor. log_errors: this means whether or now not error logging must be executed; default value is on. error_log string: sets the identify of the file where script mistakes should be logged Lets see how we will use these configuration options. right through building, we might wish to flip all error reporting from the php.ini: 1 2 display_errors = on error_reporting = E_ALL shall we do the same from our PHP code all through runtime by way of calling the error_reporting() perform: 1 error_reporting(E_ALL); To activate error logging and log the mistakes to our personal explicit log file (as an alternative of the default error log file, which is incessantly the net server error log file or the syslog file), shall we configure PHP with: 1 2 log_errors = on error_log = “/tmp/php-error.log” that you can now log errors via your PHP code: 1 error_log( “This code has blunders!” ); constructed-In Error levels PHP at the moment has 15 predefined error constants, each with their own selecting (bitmask) number. These are built-in error types that PHP otherwise you, the developer, can set off when an error happens. that you would be able to decide which error varieties you need reported, as we can see within the subsequent section. These are the built-in PHP error varieties: kind Description E_ERROR deadly run-time errors E_WARNING Run-time warnings (non-fatal error) E_PARSE collect-time parse blunders E_NOTICE Run-time notices E_CORE_ERROR fatal blunders that happen all through PHPs initial startup E_CORE_WARNING Warnings (non-fatal errors) that occur throughout PHPs preliminary startup E_COMPILE_ERROR fatal bring together-time errors E_COMPILE_WARNING collect-time warnings (non-fatal error) E_USER_ERROR consumer-generated error message E_USER_WARNING user-generated warning message E_USER_NOTICE person-generated notice message E_STRICT let to have PHP suggest modifications to your code that will ensure the very best interoperability and forward compatibility of your code E_RECOVERABLE_ERROR Catchable fatal error E_DEPRECATED Run-time notices E_USER_DEPRECATED user-generated warning message E_ALL All mistakes and warnings, as supported here are some code examples of those error constants being prompted: 1 2 three 4 5 6 7 eight 9 10 11 12 thirteen // E_ERROR nonExistingFunction(); // E_WARNING $fh = fopen(‘none-present-file’, ‘r’); // E_NOTICE $x = $y + 5; // $y was no longer defined // E_USER_ERROR if ($divisor == zero) trigger_error(“can’t divide by way of zero”, E_USER_ERROR); // error brought on via the developer developing customized Error Handlers Now that we can configure PHP to tell it what types of mistakes to record on, we’d like so as to handle completely different error varieties in our own manner. simply exhibiting standard PHP error messages is ceaselessly now not just right sufficient. We wish to deal with the error and display our own messages when an error occurs. For this, we are able to use the set_error_handler() function. here’s a very simple custom error dealing with function: 1 2 three 4 5 6 7 8 9 10 // error handler operate perform errorHandler($errno, $errstr) echo “Error: [$errno] $errstr”; // set error handler set_error_handler(“errorHandler”); // set off an error echo($foo); // undefined variable! So when an error happens, the customized error handler perform is called with an error-quantity argument and an error-string argument. These two arguments are passed from the set_error_handler() call to our operate. There are extra arguments lets use, as we can quickly see, however the output of operating this code can be: 1 Error:  Undefined variable: foo Lets see what a relatively less simple custom error handling function might seem like. This error handler will have to have the ability to detect the error varieties and decide what action to take and/or what error message to show. 1 2 3 4 5 6 7 eight 9 10 eleven 12 13 14 15 sixteen 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 function errorHandler($errno, $errstr, $errfile, $errline) change ($errno) case E_NOTICE: case E_USER_NOTICE: case E_DEPRECATED: case E_USER_DEPRECATED: case E_STRICT: echo(“STRICT error $errstr at $errfile:$errline n”); wreck; case E_WARNING: case E_USER_WARNING: echo(“WARNING error $errstr at $errfile:$errline n”); smash; case E_ERROR: case E_USER_ERROR: case E_RECOVERABLE_ERROR: exit(“fatal error $errstr at $errfile:$errline n”); default: exit(“Unknown error at $errfile:$errline n”); set_error_handler(“errorHandler”); $foo = false; if (! $foo) trigger_error(‘worth $foo should be proper’, E_USER_NOTICE); be aware how we are grouping the coping with of certain error varieties the use of the fall-through performance of the switch-case statements. The output could be something like: 1 STRICT error price $foo must proper at /tmp/take a look at.php:32 Now you can handle types of mistakes otherwise (or the identical) and convey custom error message, too. of course, a real customized error coping with perform must be capable of do rather more with mistakes and possibly act upon them in a selected and good method. you will need to maintain your customized error dealing with function simple and tough to ensure no mistakes happen inside this perform itself, as those would now not get stated. There are a couple of PHP libraries that help you with creating extra evolved error handling. the use of PHP Exceptions PHP model 5 presented otherwise of dealing with errors: Exceptions. Exception managing is used to alter the traditional drift of a working program if a certain error situation happens. Its a more language-syntax-built-in way of doing error coping with than writing customized error managing functions. Exceptions are represented in PHP by using the category Exception. Exceptions are raised using the throw syntax and can be caught the usage of a are attempting/catch syntax block. Any code wherein an Eexception error may just happen should be placed in the try block, which will also be followed by way of a trap block to deal with the error. because the thrown Exceptions bubble up the code stack, they can even be taken care of by using other trap blocks for your code. that is what the Exception syntax looks as if: 1 2 three four 5 6 7 eight 9 10 eleven 12 are trying // throw mistakes within the are trying-block // if an error occurs we will throw an exception throw new Exception(‘this is an error.’); capture(Exception $e) // capture the throws within the catch-block // do one thing with the exception object, eg. display its message echo ‘Error message: ‘ .$e->getMessage(); which might output: 1 Error message: this is an error. After an Exception object is thrown, we can access these member functions: getMessage() will get the Exception message getPrevious() returns previous Exception getCode() will get the Exception code getFile() gets the file by which the Exception passed off getLine() will get the line during which the Exception occurred getTrace() gets the stack trace getTraceAsString() gets the stack trace as a string __toString() is a string representation of the Exception __clone() clones the Exception here is another instance of Exception managing: 1 2 three four 5 6 7 eight 9 10 11 12 13 14 15 sixteen $file = ‘/tmp/foo.txt’; try // take a look at ! is_writable($file) ) // if not: throw an exception throw new Exception(‘File ‘ .$file. ‘ now not discovered or is not writable.’); echo(‘will the code get here?’); // no longer if an exception was thrown ahead of seize(Exception $e) echo ‘Error message: ‘ .$e->getMessage(); return false; if you run this code with out developing the file first, you’ll see this error: 1 Error message: File /tmp/foo.txt no longer found or is not writable. Exceptions bubble up the code stack, so as to have a couple of throw statements in different code blocks and nonetheless deal with them gracefully. on the other hand, any Exceptions that are thrown but now not caught will generate an E_FATAL error with the message Uncaught Exception. An example: 1 2 three four 5 6 7 eight 9 10 eleven 12 thirteen 14 15 16 $foo = 10; are attempting if( is_numeric($foo) ) if ($foo > 5) throw new Exception(‘quantity too high’); // this will be thrown else throw new Exception(‘not a host sort’); catch(Exception $e) echo ‘Error message: ‘ .$e->getMessage() . ‘ at line: ‘ . $e->getLine(); //return false; notice that we referred to as the $e->getLine() member perform of the Exception object to get the road number when the Exception was once thrown. it’s that you can imagine to nest a couple of are trying-throw-seize blocks within each different. this lets you specify what Exception error is handled where (in a clean and simple manner) at the level for your code where it makes probably the most sense. just keep in mind that to at all times put any code that throws inside a are trying block. customized Exception Handlers to this point we’ve got been the usage of the built-in Exception class, however we also can write our own custom Exception handler through extending the constructed-in Exception type. This turns out to be useful once we wish to override the built-in member capabilities or add new member functions. you’ll find a few in-depth code examples right here. difference Between same old errors and Exceptions usual error handling is the older means of handling mistakes in PHP. Exception managing is handiest to be had from PHP 5 onward and requires using an object-oriented programming structure. both can be used alongside each and every different. in reality, any Exception that is thrown however not caught will ultimately generate an E_FATAL error with the message Uncaught Exception. With the set_error_handler() operate code instance shown below, lets even handle all usual error as an Exception: 1 2 3 4 5 6 7 eight 9 10 eleven 12 thirteen 14 set_error_handler(function ($errno, $errstr, $errfile, $errline ) if (error_reporting()) throw new ErrorException($errstr, 0, $errno, $errfile, $errline); ); are trying // E_WARNING $fh = fopen(‘none-present-file’, ‘r’); capture(Exception $e) echo ‘Error message: ‘ .$e->getMessage(); return false; remaining phrase i’m hoping this quick introduction into PHP error dealing with has helped yield your working out of this important a part of building. You will have to now be aware of tips on how to show and log blunders and handle them in the quite a lot of methods PHP makes it possible, both with a customized error managing operate or by means of Exception managing.