This was my experience getting php and apache to run on termux
apt update && apt upgrade -y
apt install php-apache
I was following an old blog post that used php 7 and got these errors
Can't locate API module structure `php7_module' in file /data/data/com.termux/files/usr/libexec/apache2/libphp.so: undefined symbol: php7_module
Cannot load /data/data/com.termux/files/usr/libexec/apache2/libphp7.so
Corrected in apache config file
vim $PREFIX/etc/apache2/httpd.conf
LoadModule php_module /data/data/com.termux/files/usr/libexec/apache2/libphp.so
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
Comment out mpm_worker and use mpm_prefork
#LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
This still does not work as apache (httpd) was failing silently. According to Chatty LoadModule php_module ...libphp.so often fails in Termux because mod_php is incompatible or unstable with Android builds, so PHP-FPM is used instead since it’s decoupled, stable, and works via FastCGI.
But php-fpm was giving this error at first
Fri May 15 15:04:09 2026 (29777): Error Cannot create lock - Permission denied (13)
vim $PREFIX/etc/php-fpm.conf
[global]
error_log = /data/data/com.termux/files/usr/var/log/php-fpm.log
include=$PREFIX/etc/php-fpm.d/*.conf
mkdir -p $PREFIX/etc/php-fpm.d
vim $PREFIX/etc/php-fpm.d/www.conf
#substitute whoami, should look like u0_aNNN where NNN is a 3 digit number
[www]
user = whoami
group = whoami
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
; Disable OPcache here (IMPORTANT)
php_admin_value[opcache.enable] = 0
php_admin_value[opcache.enable_cli] = 0
And finally the command that works because I also had to force disable opcache from the command line
php-fpm -y $PREFIX/etc/php-fpm.conf -d opcache.enable=0 -d opcache.enable_cli=0
And I can test it out here from bash
php -r '
$h=["127.0.0.1","localhost","::1"];
foreach($h as $x){
$s=@fsockopen($x,9000);
echo "$x => ";
var_dump($s);
}
'
This is how you can configure apache to use php-fpm
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_fcgi_module libexec/apache2/mod_proxy
_fcgi.so
#<FilesMatch \.php$>
# SetHandler application/x-httpd-php #</FilesMatch>
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
This is just a test dev environment so a minimal/starter config was used. A proper config is needed for the real world. Also a rooted phone might not get the opcache error.

Comments