Installing the Chilkat PHP Extension on Linux
Step-by-step instructions for installing the Chilkat extension on Linux (all architectures) and Alpine Linux, plus the checks that prevent the common “unable to load” errors.
- PHP version — e.g. the 8.5 extension for PHP 8.5.
- Architecture —
x86_64,x86,aarch64, orarmv7l. - Thread safety (ZTS): the ZTS download for a thread-safe PHP, or the regular (non-ZTS) download otherwise.
- C library: the standard Linux build for glibc systems, the Alpine build for musl. They are not interchangeable.
-
Download
Get the build for your system from the Chilkat Linux PHP Downloads (Linux and Alpine are both listed there).
-
What's in the download
Each
.tar.gzcontains:chilkat-php-<version>-<arch>-linux/ ├─ chilkat.so the Chilkat PHP extension ├─ chilkat.php PHP class definitions (your script includes this) ├─ phpinfo.php prints your PHP configuration ├─ showExtDir.php prints the extension directory ├─ test.php verifies the install ├─ license.pdf ├─ pcre2-license.pdf ├─ quickjs-license.pdf └─ THIRD-PARTY-NOTICES.txt
Two files, two roles:chilkat.sois the native extension that PHP loads (Steps 4–5).chilkat.phpdefines the Chilkat classes (CkGlobal,CkHttp, …) and isincluded by your own scripts — keep it where your script can find it (your project directory or a path oninclude_path). -
Check your PHP version, architecture, and thread safety
php -v php -i | grep -E "Thread Safety|Architecture" uname -m php --ini # shows the Loaded Configuration File (php.ini)If Thread Safety is enabled, use the ZTS download; if disabled, use the regular download. Match the architecture to
uname -m. -
Copy chilkat.so to the extension directory
Find the extension directory:
php showExtDir.php # prints ini_get("extension_dir")Copy the extension there (usually requires root):
sudo cp chilkat.so "$(php -r 'echo ini_get(\"extension_dir\");')"
-
Enable the extension in php.ini
Open the
php.inireported byphp --ini, find the Dynamic Extensions section, and add:extension=chilkat.so
If PHP runs under Apache, Nginx, or PHP-FPM, restart that service afterward so the change takes effect. (Note the web SAPI may load a different
php.inithan the CLI — checkphpinfo()in the web context.) -
Verify with test.php
Run the included
test.php, which unlocks Chilkat in trial mode and performs an AES encrypt/decrypt:php test.php
Successful output looks like:
Unlocked in trial mode. 4846f83aa211e239aa62a21f527f089ee9ddbead30ee15d4e79b607a621b97bedb9b6f00a9b21f1b43a50b4c1be0edf2 The quick brown fox jumps over the lazy dog. -
Use Chilkat in your scripts
Include
chilkat.phpand unlock once at startup (any string starts the 30-day trial; use your license code after purchase):<?php include("chilkat.php"); $glob = new CkGlobal(); $glob->UnlockBundle("Anything for 30-day trial"); // ... use any Chilkat class, e.g. new CkHttp(), new CkJsonObject(), ... ?>
Notes for Alpine Linux
Common errors
“Unable to load dynamic library 'chilkat.so'”
Usually a mismatch between the extension and your PHP. Re-check Step 3 and confirm the PHP version, architecture, and thread safety (ZTS) all match the download.
A GLIBC version error during load
If you see an error mentioning a required GLIBC_x.xx version, your system's
glibc is older than the build expects. Use the
Legacy Linux build, which targets a much older glibc. (On
Alpine, use the Alpine/musl build instead.)
“Class 'CkGlobal' not found”
Your script didn't include the class definitions. Add
include("chilkat.php"); and make sure chilkat.php is reachable
from your script (same directory or on the include_path).
Works on the command line but not in the web server
CLI and the web SAPI (Apache module / PHP-FPM) often use different
php.ini files. Run phpinfo() in the failing context, edit the
Loaded Configuration File it reports, and restart the web service.