{"id":124,"date":"2026-09-16T23:53:11","date_gmt":"2026-09-16T23:53:11","guid":{"rendered":"https:\/\/ping4support.com\/blog\/?p=124"},"modified":"2026-09-17T00:05:05","modified_gmt":"2026-09-17T00:05:05","slug":"how-to-upgrade-whmcs","status":"publish","type":"post","link":"https:\/\/ping4support.com\/blog\/how-to-upgrade-whmcs\/","title":{"rendered":"How to Upgrade WHMCS?\u00a0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Keeping WHMCS updated is essential for better security, improved performance, bug fixes, and compatibility with the latest server environments and payment gateways. WHMCS offers two ways to upgrade: the built-in Automatic Updater in the Admin Area, and a manual upgrade on the server. Always review the official WHMCS release notes and system requirements before upgrading, since steps can vary by version.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why Keep WHMCS Updated<\/strong>&nbsp;<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Security \u2013 each release includes fixes for known vulnerabilities\u00a0<\/li>\n\n\n\n<li>Stability \u2013 bug fixes and performance improvements for core services\u00a0<\/li>\n\n\n\n<li>Compatibility \u2013 support for newer PHP versions, payment gateways, and server software\u00a0<\/li>\n\n\n\n<li>New Features \u2013 access to the latest tools for managing clients, billing, and support\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Choosing Between Automatic and Manual Upgrades<\/strong>&nbsp;<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Automatic Updater \u2013 recommended for most installations; handles file replacement, database updates, and compatibility checks with minimal manual work\u00a0<\/li>\n\n\n\n<li>Manual upgrade \u2013 recommended for advanced users, when the server can&#8217;t meet the Automatic Updater&#8217;s requirements, when managing multiple installations, or when full control over each step is needed\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Method 1: Automatic WHMCS Upgrade<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>System Requirements<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP memory limit of at least 128 MB\u00a0<\/li>\n\n\n\n<li>At least 250 MB of free disk space\u00a0<\/li>\n\n\n\n<li>PHP allow_url_fopen setting enabled\u00a0<\/li>\n\n\n\n<li>PHP max_execution_time of 60 seconds or more\u00a0<\/li>\n\n\n\n<li>PHP Zip extension or the proc_open function enabled\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP open_basedir disabled, or configured to include the WHMCS document root\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steps to Update<\/strong>\u00a0<br><br>Go to Utilities \u2192 Update WHMCS and click Check for Updates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click Configure<strong> <\/strong>Update<strong> <\/strong>Settings and set the Update Channel to Stable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Review the release notes for the target WHMCS version.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click Download Database Backup before proceeding with the update.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Review any customizations flagged as affected by the update.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click Update Now and wait for the process to complete without closing the browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Log in as both an admin and a client to confirm tickets, orders, and product pages are working correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Manually trigger the cron job once to confirm automation, invoicing, and renewal emails are running without errors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Re-verify your WHMCS license key under Setup \u2192 General Settings if you see a licensing warning after the update.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the update menu is missing, go to Setup \u2192 Staff Management \u2192 Administrator Roles and enable the Update WHMCS permission for your role.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Method 2: Manual Upgrade on the Server<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before starting, confirm you have SSH access to the server, access to the WHMCS installation directory, a valid WHMCS license to download the latest release, and account-level permissions for file operations.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The example below uses generic placeholder values. Replace youraccount, yourdomain.com, and admindir with the real values for your own server.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 1: Prepare the Server and Take a Backup<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify the WHMCS installation directory (confirmed by the presence of configuration.php)\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable Maintenance Mode from Setup \u2192 General Settings \u2192 Maintenance Mode so customers can&#8217;t access the site mid-upgrade\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Take a full copy of the existing installation folder before changing anything\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">        Back up the entire installation folder to a safe, timestamped copy:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">         cd \/home\/youraccount\/\u00a0<br>         cp -vR public_html\/ public_html.old\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 2: Back Up the Database<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Database credentials are stored inside configuration.php in the WHMCS installation folder\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Export a full database backup before making any further changes\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">         View the database details in configuration.php:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">          cat public_html.old\/configuration.php\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">         Export the database using mysqldump\u00a0\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">          mysqldump whmcs_db_name > whmcs_db_backup_old.sql\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 3: Download and Upload the New Release<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Download the latest full-release WHMCS package from the official client area (you must be logged in as a client to access the download)\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Upload the downloaded package to the server using SCP or FTP\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a0<strong>Step 4: Extract and Copy the New Files<\/strong>\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Before extracting, confirm there is no leftover whmcs\/ folder from a previous attempt\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Extract the package, then copy its contents into the live installation folder\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using a force-copy command skips confirmation prompts, so double-check the source and destination paths first\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">        Confirm no old extraction folder exists, then extract and copy the new files in:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">         cd \/home\/youraccount\/\u00a0<br>         ls -d whmcs\/ 2>\/dev\/null || echo &#8220;no leftover folder, safe to continue&#8221;\u00a0<br>         unzip whmcs_vXXX_full.zip\u00a0<br>         cp -Rv whmcs\/* .\/public_html\/\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 5: Rename the Admin Directory and Fix Permissions<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you use a renamed admin folder for security, move it aside and rename the new admin folder to match\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy over any .htaccess authentication rules from the old admin folder to the new one\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm the AuthUserFile path referenced in .htaccess is still accessible after the rename\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reset file ownership so the web server user owns all the new files\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">        Rename the admin directory (replace admindir with your own custom admin path):\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">         cd \/home\/youraccount\/public_html\/\u00a0<br>         mv admindir\/ admindir.old\u00a0<br>         mv admin\/ admindir\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">       If present, copy the old .htaccess rules into the new admin folder, for example:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">      AuthName &#8220;Admins Only&#8221;\u00a0<br>      AuthUserFile &#8220;\/home\/youraccount\/.htpasswds\/admindir\/passwd&#8221;\u00a0<br>      AuthType Basic\u00a0<br>      require valid-user\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">      Fix ownership so the account user owns all files:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">      chown -R youraccount.youraccount public_html\/*\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 6: Run the Upgrade Wizard<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the WHMCS installer in a browser \u2014 it will detect the existing installation and redirect you into the upgrade wizard\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Accept the WHMCS End User License Agreement and follow the on-screen steps to upgrade the database\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do not close the browser or interrupt the process while the database upgrade is running\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Open the installer at:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/yourdomain.com\/install\/install.php\n<\/div><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Disable Maintenance Mode\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm core functions work: client login, ticket submission, orders, and product pages\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Manually trigger the cron job once to confirm automation, invoicing, and renewal emails are running without errors\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Re-verify your WHMCS license key is active if a licensing warning appears after the update\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Troubleshooting Common WHMCS Upgrade Issues<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Database Upgrade Errors<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check the WHMCS error logs for the specific failure\u00a0<\/li>\n\n\n\n<li>Restore the database backup if the upgrade cannot complete\u00a0<\/li>\n\n\n\n<li>Verify database user permissions are correct\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Upgrading WHMCS on a production server requires careful preparation, whether you use the Automatic Updater or a manual upgrade. Both approaches depend on complete backups, a clear understanding of any customizations, and thorough testing afterward. For most installations, the Automatic Updater is the safer and faster option \u2014 manual upgrades remain useful for advanced users and custom server setups. Keep this checklist handy so your next upgrade goes just as smoothly.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keeping WHMCS updated is essential for better security, improved performance, bug fixes, and compatibility with the latest server environments and&#8230;<\/p>\n","protected":false},"author":1,"featured_media":128,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[20],"tags":[],"class_list":["post-124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-techncal-support"],"_links":{"self":[{"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/posts\/124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/comments?post=124"}],"version-history":[{"count":3,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/posts\/124\/revisions"}],"predecessor-version":[{"id":132,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/posts\/124\/revisions\/132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/media\/128"}],"wp:attachment":[{"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/media?parent=124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/categories?post=124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ping4support.com\/blog\/wp-json\/wp\/v2\/tags?post=124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}