How to Fix "Fatal Error: Maximum Execution Time of 30 Seconds Exceeded" in PHP
Google AdSense In-Article Display Placement
Publisher ID: ca-pub-XXXXXXXXXXXXXXXX (Configured in config.php)PHP enforces a maximum execution timeout (default 30 seconds) to prevent frozen scripts from exhausting server CPU threads. Learn how to diagnose infinite loops versus legitimate long-running tasks like CSV exports and backups.
For a quick fix in your script, add "set_time_limit(300);" at the top. For a global fix, edit php.ini and set "max_execution_time = 300", then restart Apache. On shared hosting, add "php_value max_execution_time 300" in .htaccess or edit .user.ini.
📋 Guide Table of Contents
1. Problem Diagnosis & Symptoms
When a database query hangs or a while loop fails its break condition, PHP terminates execution.
2. Primary Root Causes
- Cause: Infinite loops in code (while($row) without advancing pointer).
- Cause: Slow external API cURL calls without timeouts.
- Cause: Heavy operations like importing large CSV files.
3. Step-by-Step Diagnostic Fixes
Increase Timeout in php.ini or .user.ini
Raise the execution limit:
max_execution_time = 300
4. How to Verify the Resolution
- Run script and verify execution completes without timeout.
5. Diagnostic Troubleshooting Matrix
| Symptom Observed | Root Cause | Recommended Action |
|---|---|---|
| Timeout occurs on while loop | Infinite loop condition never satisfies exit | Audit loop incrementor and add break guard |
6. Critical Mistakes to Avoid
- ❌ Setting set_time_limit(0) permanently on public requests.
7. Frequently Asked Questions
❓ Does sleep() count towards max_execution_time on Linux?
On Linux, time spent in system calls like sleep() or waiting for database queries does not count toward CPU execution time.
Official Technical References
Google AdSense In-Article Matched Content Unit