Programming language

PHP has been the mainstay of many web applications for over two decades. Therefore, it is not surprising that methods and techniques have evolved to handle the intricacies of web communication, including HTTP status codes.

The Importance of HTTP Status Codes

Before delving deeper into PHP, it is important to clarify the purpose and significance of HTTP status codes. They are essential for communication between web servers and browsers, as they provide information about the outcome of a request.

There are several classes of status codes:

  • 2xx (Success): Indicates that the request was successfully processed.
  • 3xx (Redirection): Indicates that further actions need to be taken to complete the request.
  • 4xx (Client Error): These codes indicate that there is a problem with the request, often due to a user error.
  • 5xx (Server Error): In this case, the server has recognized that it made an error or is unable to fulfill the request for some reason.

PHP and Status Codes: A Historical Overview

In the early days of PHP, long before the frameworks and extensive libraries we know today, developers had to rely on the most basic language functions to set HTTP status codes. The header() function played a central role in this process.

The header() function allows sending raw HTTP headers. Setting status codes looked like this:

header('HTTP/1.0 404 Not Found‘);

Another common status code that was manually set is the 301 redirection code, often used for SEO purposes:

header('HTTP/1.0 301 Moved Permanently‘);
header('Location: /new-url.php‘);

However, this approach had several disadvantages:

The Evolution: Introducing the http_response_code() Function

Over time and with the advancement of the PHP engine, the PHP community recognized the need to simplify and make this process less error-prone. This led to the introduction of the http_response_code() function.

This function allows setting the HTTP status code simply by providing the numerical code:


The benefits of this method are clear:

Additional Assistance in Modern PHP

While http_response_code() represents a significant improvement, many modern PHP frameworks and libraries have introduced their own tools and methods for handling HTTP status codes. These often provide even higher levels of abstraction and additional helper functions.

For example, in the Laravel framework:

return response('Not Found', 404);

Or in the Symfony framework:

return new Response('Not Found', 404);

These modern frameworks and their methods offer even greater consistency, improved testing capabilities, and tighter integration with other parts of the web application.

In summary, PHP has undergone a remarkable evolution over the years: from error-prone and manual techniques for setting HTTP status codes to the currently much more intuitive and robust methods.

Best Practices

Common Issues and Solutions

Creating Custom Status Codes

The HTTP protocol defines a set of standard status codes intended for specific situations. But what if you feel that none of these codes exactly conveys what you want to communicate? This raises the question of whether and how to create custom status codes in PHP.

How to do it:

Technically, using the header() function, you can send any three-digit status code along with a message:

header('HTTP/1.1 599 Custom Status Message‘);

In this example, the status code "599" is sent with the message "Custom Status Message".

Should you do it?

In general, creating custom status codes is not recommended for several reasons:

If you still feel that the existing status codes do not precisely describe your situation, consider using custom headers or providing a detailed error message in the response body. This allows you to provide additional information without compromising the meaning and clarity of standardized status codes.

Although PHP provides flexibility to create custom status codes, in most cases, it is best to stick with established, standardized codes.


Proper handling of HTTP status codes in PHP is both an art and a science. While the technical aspects, such as using the correct syntax and functions, are relatively straightforward, correctly managing status codes in complex applications requires a deep understanding of both HTTP and the specific requirements of the application at hand. Developers who take the time to understand and master the nuances of status code management will be better positioned to create robust, user-friendly web applications.

PHP: header

header('HTTP/1.0 404 Not Found‘);     
header('HTTP/1.0 301 Moved Permanently‘);
header('Location: /new-url.php‘);

PHP: http_response_code