When executing PHP scripts called by web browsers, it is important to monitor their execution time to prevent timeouts from occurring.

In this guide, we will explore different methods to increase the PHP max execution time, ensuring your scripts have enough time to complete their tasks without affecting server performance.

PHP Timeout

In PHP, a timeout refers to the maximum amount of time that a script is allowed to run before it is terminated automatically. This is done to prevent runaway scripts from consuming excessive server resources, like memory and CPU, or causing performance issues.

The timeout setting can be particularly important on shared web hosting environments, where multiple users share the same server resources.

By default, the PHP configuration has a predefined timeout value, which is usually set to 30 seconds. This value can be found in the php.ini configuration file, with the directive called max_execution_time. If you want to change the timeout value, you can modify this directive in the php.ini file, or you can also set it programmatically within your PHP script using the ini_set() function or the set_time_limit() function.

When a PHP timeout occur?

A PHP timeout occurs when a PHP script takes too long to execute and exceeds the predefined time limit, resulting in the termination of the script and potentially producing an HTTP 500 error.

In the context of web applications like Drupal, WordPress, and Laravel, timeouts can be particularly problematic as long-running processes can consume significant infrastructure resources and impair application performance. Most web browsers don’t wait longer than two minutes before discontinuing a request and displaying an error.

Causes of PHP timeout

Some common causes of PHP timeouts include:

  • Long-running requests such as cron.php in Drupal or WordPress
  • Complex database queries on large datasets, like multiple JOINs on large database tables
  • Extended database table locks
  • Complex views queries on large databases
  • Calls to slow or unresponsive external service providers using RPC calls, cURL, file_get_contents($url), or similar methods
  • Processing large database result sets in PHP code
  • File operations involving large files or directories
  • Issues such as infinite loops or uncontrolled recursion in your PHP scripts
  • Calls to the sleep() function for extended durations

How to identify the PHP timeout problem

To identify problematic PHP scripts, pages or requests, you can:

  • Use an application performance monitoring tool, like New Relic, to monitor applications in production and troubleshoot potential performance issues
  • Examine application logs, such as Apache logs or Nginx request logs, to identify requests with long execution times
  • Use performance logging features available in development modules, like Drupal’s Devel module or Laravel Telescope, to analyze page delivery performance details in non-production environments

Addressing PHP Timeouts

To prevent PHP scripts from being interrupted by timeout errors, you can either increase the max execution time or apply best practices and optimization strategies to your application’s design.

How to Increase PHP Max Execution Time

Modify max_execution_time in php.ini

The php.ini configuration file contains the default settings for your PHP installation. You can increase the max execution time by updating the max_execution_time directive in this file.

  • Locate the php.ini file on your server.
  • Open the file and search for the max_execution_time directive.
  • Change its value to the desired number of seconds (e.g., 300 seconds for 5 minutes):
max_execution_time = 300
  • Save the file and restart your web server for the changes to take effect.

Modify max_execution_time in .htaccess (for Apache web server):

If your website is hosted on an Apache web server, you can modify the .htaccess file in your website’s root directory to increase the max execution time.

  • Create or open the .htaccess file in your website’s root directory.
  • Add the following line to set the timeout value to 300 seconds:
php_value max_execution_time 300
  • Save the file.

Use ini_set() in your PHP script

You can also set the max execution time programmatically within your PHP script using the ini_set() function. Add the following line at the beginning of your script:

<?php

ini_set('max_execution_time', 300);

Use set_time_limit() in your PHP script

The set_time_limit() function allows you to set the max execution time for a particular script.

This function accepts an integer parameter, which represents the number of seconds the script should be allowed to run. For example, to set the timeout value to 300 seconds:

<?php

set_time_limit(300);

According to the PHP manual, the set_time_limit() function restarts the timeout counter from zero. In other words, if the default max_execution_time is 30 seconds, and you call set_time_limit(300) at the beginning of your script, your script will now have a total of 330 seconds to run.

Modify php.ini settings via a custom configuration file

This works only if you are using a hosting that allow to create a custom php.ini file to override the default settings.

  • Create a new file named php.ini or .user.ini in your website’s root directory. The file name depends on your host’s configuration, please refer to its documentation to know wich to use.
  • Add the following line to set the max execution time to 300 seconds:
max_execution_time = 300
  • Save the file.

This may be the only line in the new file. All other directives will be loaded from the original php.ini, and the corresponding directives in your newly created file will override their counterparts.

Downsides of Long-Running PHP Scripts: Why It’s a Bad Practice

Before exploring the best practices to prevent PHP timeout issues, it’s crucial to recognize that increasing the max execution time is not always the ideal solution and should be employed with a clear understanding of the context.

It’s crucial to find a balance between giving your script enough time to complete its tasks and ensuring the stability and performance of the server.

Running PHP scripts for an extended period can be considered bad practice for several reasons:

  • Server resource consumption: Long-running scripts can consume a significant amount of server resources, such as CPU and memory. This can lead to decreased performance, slower response times, and even crashes if the server becomes overwhelmed.

  • Poor user experience: When a PHP script takes too long to execute, users may experience slow page load times or unresponsive web applications. This can result in frustration and may cause users to abandon the website or application.

  • Scalability issues: If a website or application relies on long-running PHP scripts, it may face difficulties in scaling to accommodate increased traffic or demand. The additional load can exacerbate the performance issues associated with extended script execution times.

  • Timeouts: Most web servers and browsers have default timeout settings to prevent runaway scripts from consuming excessive resources. If a script exceeds the set timeout limit, it will be terminated, potentially causing errors, data loss, or incomplete processes.

  • Maintenance challenges: Long-running scripts can be more difficult to maintain and debug, as it can be challenging to identify the specific section of the code that is causing performance issues.

Best Practices to Prevent PHP Timeout Issues

To avoid PHP timeout issues, applying best practices and strategies can significantly improve the efficiency and maintainability of your code. Some of these practices include:

  • Design Patterns: Utilize proven design patterns that promote modularity, scalability, and reusability. This can help you build a more robust and efficient application.

  • Clean Code: Write clean, concise, and well-documented code. This makes it easier to identify potential bottlenecks and optimize your code as needed.

  • Clean Architecture: Implement a clean architecture to separate concerns, making your application more maintainable and easier to understand. This allows for more efficient troubleshooting and optimization.

  • Background Jobs: Offload time-consuming tasks to background processes, preventing them from blocking the main application thread. This can significantly improve the overall responsiveness and user experience.

  • Message Brokers and Queues: Use message brokers and queues to manage asynchronous processing of tasks. This helps distribute the workload across multiple processes or even multiple servers, reducing the impact of long-running tasks on your application’s performance.

  • Caching: Implement caching mechanisms to store and quickly retrieve frequently accessed data, reducing the need for time-consuming database queries or complex calculations.

  • Database Optimization: Optimize your database queries and schema to minimize the time it takes to fetch and process data. This can involve using proper indexing, query optimization, and denormalization when appropriate.

  • Load Balancing: Distribute incoming requests across multiple servers or instances to prevent overloading a single server, ensuring optimal performance and minimizing the risk of timeouts.

  • Monitoring and Profiling: Regularly monitor your application’s performance and profile your code to identify bottlenecks, slow-running functions, or problematic queries. This helps you proactively address potential timeout issues.

  • Asynchronous Processing: Utilize asynchronous processing techniques to allow your application to continue processing other tasks while waiting for time-consuming operations to complete.

By incorporating these best practices and strategies into your application’s design and development, you can effectively prevent PHP timeout issues and ensure a more robust, efficient, and maintainable codebase.

Final Considerations

In conclusion, managing PHP timeouts effectively is essential to maintaining optimal performance, user experience, and scalability for your web applications. While increasing the max execution time can be a viable solution in some cases, it is not always the best approach and should be employed with a clear understanding of the context.

Instead, focusing on implementing best practices, such as design patterns, clean code, clean architecture, background jobs, message brokers, queues, caching, database optimization, load balancing, monitoring, and asynchronous processing, can significantly improve your application’s efficiency, maintainability, and resilience against timeout issues.

By adopting these strategies and continuously monitoring your application’s performance, you can ensure a more reliable and enjoyable user experience, prevent potential issues related to PHP timeouts, and create a more robust, efficient, and maintainable codebase.