A Hesk help desk that returns a blank page or a generic HTTP 500 Internal Server Error gives almost nothing away at the browser level. The actual cause sits in the PHP error log, the web server response, or the Hesk configuration file, and the browser deliberately hides it so sensitive paths and stack traces are not exposed to visitors. On a managed LiteSpeed stack running CloudLinux and PHP Selector, you have every tool required to surface the real message without touching root-level services. The work is a matter of knowing where Hesk, LiteSpeed, and PHP each record their failures, and then reading them in the correct order.

Hesk is a compact PHP application, so the failure categories are predictable: a PHP version mismatch introduced by MultiPHP, a corrupted or mis-permissioned hesk_settings.inc.php, a missing PHP extension such as mysqli or mbstring, a memory or execution ceiling hit during attachment handling or large ticket queries, or a database connection that silently fails. Each of these produces a different fingerprint in the logs, and the goal of this walkthrough is to match the symptom to the correct log source before changing anything.

Locate the real error in the correct log

The browser message is never the diagnosis. Start with the PHP error log, which on this platform is written per-site rather than to a global location you cannot read. In cPanel Jupiter, open Metrics > Errors for a quick view of the most recent entries, then open File Manager and look in your Hesk directory (for example /home/youruser/public_html/hesk/) for a file named error_log. LiteSpeed and PHP both append to this file when a script in that folder fails. In DirectAdmin Evolution, use System Info & Files > File Manager and check the same directory, plus ~/domains/yourdomain.com/logs/ for the domain-level error record.

Read the final entries first. A line such as PHP Fatal error: Uncaught Error: Call to undefined function mysqli_connect() points to a missing extension. A line containing Allowed memory size of 134217728 bytes exhausted points to a memory ceiling. An entry like PHP Parse error: syntax error, unexpected '}' in /home/youruser/public_html/hesk/hesk_settings.inc.php means the config file was edited and broken. If the error_log file does not exist, create visibility by enabling logging yourself rather than assuming nothing failed.

Place a .user.ini file in the Hesk root to force PHP to record and, temporarily, display errors while you work:

; /home/youruser/public_html/hesk/.user.ini
display_errors = On
log_errors = On
error_reporting = E_ALL
error_log = /home/youruser/public_html/hesk/hesk_error.log

Changes to .user.ini are cached by PHP for the duration of user_ini.cache_ttl (commonly 300 seconds), so wait a few minutes or reload the page a couple of times before concluding the setting is ignored. Once you have captured the message, set display_errors = Off again so no diagnostic output reaches real users. Never leave display_errors on for a production help desk, because Hesk pages echo database and path details that should stay private.

Resolve PHP version and extension faults

A large share of Hesk 500s appear immediately after a PHP version change or an account migration. Hesk 3.x runs cleanly on PHP 7.4 through 8.1; pushing it onto PHP 8.2 or newer without updating the application can trigger fatal errors from removed functions and stricter type handling. Confirm and correct the version through cPanel > MultiPHP Manager, where you select the domain and assign a known-good version such as ea-php81. In DirectAdmin, the equivalent control is Account Manager > PHP Version Selector (or Select PHP Version under CloudLinux).

With the version set, open the extension manager. In cPanel this is Select PHP Version > Extensions, and in DirectAdmin it is the same PHP Version Selector screen. Hesk needs mysqli for database access, mbstring for multibyte ticket text, json, gd for any image handling, and openssl for secure SMTP. If the log showed Call to undefined function mb_strlen() or a mysqli error, tick the missing extension, save, and reload Hesk. Because PHP Selector applies these settings per account, no server-wide change is involved and no root access is needed.

If Hesk loads but the admin area or attachment upload dies with a timeout or memory error, raise the per-directory limits through the same .user.ini file. Values here are constrained by the account package ceiling, but most limits can be lifted within it:

memory_limit = 256M
max_execution_time = 120
upload_max_filesize = 32M
post_max_size = 34M
max_input_vars = 3000

Alternatively, cPanel's MultiPHP INI Editor exposes the same directives through a form under the Basic Mode tab if you prefer not to edit the file by hand. Keep post_max_size slightly larger than upload_max_filesize so multipart form submissions carrying an attachment plus form fields do not get truncated. The same reasoning for sizing attachment-related limits is covered in our osTicket media and upload limits guide, and the principles transfer directly to Hesk.

Repair configuration and database connection errors

When the log points at hesk_settings.inc.php, the fault is almost always a syntax break from a manual edit or a stale database credential. Open /home/youruser/public_html/hesk/hesk_settings.inc.php in File Manager's code editor and verify that every PHP string is quoted and every line ends with a semicolon. The database block should look structurally like this:

$hesk_settings['db_host'] = 'localhost';
$hesk_settings['db_name'] = 'youruser_hesk';
$hesk_settings['db_user'] = 'youruser_heskdb';
$hesk_settings['db_pass'] = 'your-password-here';
$hesk_settings['db_pfix'] = 'hesk_';

A fatal error reading Access denied for user or Unknown database means the credentials no longer match the account. This is common after restoring a backup, because the database and user names are prefixed with the hosting username, which changes between accounts. Confirm the live values in cPanel > MySQL Databases (or DirectAdmin > Account Manager > MySQL Management), then reconcile them with the config file. If the password is uncertain, set a new one in the MySQL panel and paste the exact value into db_pass. Keep db_host as localhost on this platform; a remote host string will fail because shared accounts connect to the local socket.

If the connection succeeds but Hesk still errors with messages mentioning missing tables, open phpMyAdmin from the control panel, select the Hesk database, and confirm the table prefix in the URL table names matches db_pfix. A mismatch between hesk_ in the config and hesk3_ in the actual tables produces fatal query failures that look like application bugs. While in phpMyAdmin, a database that was interrupted mid-write can be repaired by selecting all tables and choosing Repair table from the dropdown, which resolves many intermittent 500s caused by a crashed MyISAM table.

File permissions round out the common causes. Hesk expects directories at 0755 and PHP files at 0644; an entry of 0777 on hesk_settings.inc.php can trigger a security block, while 0600 can make the file unreadable to the web server. Correct these in File Manager via right-click Change Permissions. After every change, clear the LiteSpeed cache for the site through cPanel > LiteSpeed Web Cache Manager > Flush All, then reload the page so you are testing current code rather than a cached failure. Working through logs, PHP version, extensions, configuration, and database in that order isolates nearly every Hesk 500 to a single reproducible cause.