Sí, estás leyendo bien. Esto no es un post de esos que usan engaños para atraer visitas, realmente vamos a instalar un servidor apache en Android, configurarlo para que procese archivos de PHP y finalmente probar una aplicación real que se conecta a MySQL: todo corriendo desde nuestro teléfono móvil.
El sistema que montaremos en Android será el sistema de ventas en PHP con PDO y MySQL. Ya deberías saber que no necesitamos que nuestro teléfono esté rooteado. Dejo el post demostrativo al final (y bueno, si no quieres bajar míralo de una vez).
Importante: este post está actualizado hasta PHP 8 aunque las capturas tengan PHP 7. Si es necesario, actualizaré el post en el futuro.
Aprenderás a configurar Apache y PHP en Android sin que el teléfono esté rooteado y sin que mueras en el intento, gracias a la aplicación de Termux y unos paquetes.
He grabado un vídeo para instalar PHP y Apache en Android:
Mira este tutorial para instalar y configurar Termux, así como para aprender sus conceptos básicos y sacar las teclas de ayuda.
También necesitarás tener instalado MySQL o MariaDB en Android. Aquí supondré que ya lo tienes instalado, configurado y corriendo.
Cuando tengas instalado termux, ejecuta estos comandos:
apt update
Y luego:
apt upgrade
Si te pregunta elige que sí en ambos casos.
Ya hay un paquete que sirve para instalar a estas dos cosas juntas. Es decir, que a través de apache se procesen los archivos de PHP. Para instalar nuestro LAMPP en Android vamos a ejecutar:
apt install php-apache
Eso instalará apache, PHP y algunas librerías que nos permitirán combinar ambas cosas.
Con eso ya tenemos todo preparado, falta afinar las configuraciones.
Nano es un editor de textos que funciona en la terminal. Es importante instalarlo porque tendremos que modificar el archivo de configuración de apache. Para instalarlo simplemente corre este comando:
apt install nano
Los comandos básicos son presionar Ctrl + o
para guardar cambios y Ctrl + x
para salir. Ctrl + w
sirve para buscar en el archivo; y si quieres aprender más busca su manual en Google.
Para que las teclas como TAB y CTRL aparezcan mira el link que dejé arriba para que configures Termux como se debe.
Vamos a configurar el archivo httpd.conf; atención aquí, pues la ruta es importante. El archivo de configuración de apache está en:
/data/data/com.termux/files/usr/etc/apache2/httpd.conf
Puedes moverte al directorio con:
cd /data/data/com.termux/files/usr/etc/apache2/
Para que más tarde edites el archivo con nano:
nano httpd.conf
Aquí una captura de cómo se ve el directorio en donde está este importante archivo:
En este archivo vamos a modificar algunas cosas.
En el archivo que estamos editando vamos a buscar un apartado en donde se carguen los módulos, se debe ver algo así:
Justo ahí vamos a agregar una nueva línea con este contenido:
LoadModule MODULO_PHP libexec/apache2/NOMBRE_LIBRERÍA.so
Nota importante: el nombre de la librería puede cambiar. Por ejemplo, para PHP 8 es libphp.so
sin números. Recomiendo hacer un:
ls -la /data/data/com.termux/files/usr/libexec/apache2 | grep php
y ver el nombre del archivo que aparece. En mi caso es libphp.so
sin números, entonces mi comando fue:
LoadModule libphp /libexec/apache2/libphp.so
Lo que estamos haciendo es cargar el módulo de PHP que se encuentra en la ruta que se lee.
Toma en cuenta que la imagen a continuación es de una instalación para PHP 7 donde la librería era libphp7.so, pero para PHP 8 es libphp.so sin números, por ello es que es importante revisar el nombre de la librería con el comando que indiqué anteriormente.
Eso no es todo, ahora abajo de donde cargamos el módulo agregamos esto:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Le estamos indicando a Apache que los archivos que cumplan con una expresión regular (en donde el archivo sea uno de PHP) sean procesados por un manejador.
Para terminar (y esto no es tan necesario) vamos a buscar el fragmento en donde esté un código como el siguiente:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Lo vamos a cambiar por PHP de modo que quede así:
<IfModule dir_module>
DirectoryIndex index.php
</IfModule>
Esto lo hacemos para que ponga como índice a index.php y no a index.html (esto es un ajuste y ya; no significa que no podremos servir HTML).
Por ejemplo, si visitamos a sitio.com apache servirá por defecto el index.html, en cambio con este ajuste servirá a index.php.
Guardamos cambios, cerramos el archivo y listo.
Nuestra carpeta de htdocs está ubicada en (o mejor dicho, su ruta es):
/data/data/com.termux/files/usr/share/apache2/default-site/htdocs
Por lo que cualquier cosa que pongamos ahí será servida. Y si ponemos un archivo PHP será procesado. Navegamos ahí y creamos el index.php con:
nano index.php
Dentro de él ponemos el siguiente contenido:
<?php
phpinfo();
Guardamos y listo.
Esa imagen es sólo para ilustrar en dónde está.
Lo que queda es iniciar el demonio de apache. Para ello usamos el comando:
apachectl start
Si no marca errores (aparte del que dice que no se puede determinar el servidor de dominio como se ve en la imagen) entonces todo va bien.
En estos días me han reportado algunos errores. Si a ti te aparece lo siguiente, por favor sigue leyendo esta sección; si no, continúa con el siguiente paso:
apache is running a threaded mpm but your php module is not compiled to be threadsafe
Para arreglarlo, editamos el archivo httpd.conf mencionado anteriormente, en las líneas que tienen LoadModule
. Comentamos la siguiente línea:
LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
De manera que ahora se vea así:
#LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
Además, descomentamos la siguiente línea:
#LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
De manera que quede así:
LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
Aquí hay una imagen de cómo debería verse:
Eso debería arreglar el error.
Abrimos Chrome (o nuestro navegador) y vamos a:
localhost:8080/index.php
Verás algo así:
Lo hemos logrado; esa es la información de la versión de PHP que tenemos instalada en nuestro sistema Android.
Como ves, tenemos la versión 7.2.12; y el servidor de Apache obviamente funciona.
De hecho, desde otra computadora que esté en la misma red de tu Android puedes poner la dirección IP del mismo en el puerto 8080 y verás que se conecta:
¿Crees que esto es lo máximo que podemos hacer? lee el siguiente post para que veas cómo se implementa un sistema con MySQL que realiza un CRUD:
Sistema de ventas en PHP y MySQL corriendo sobre Android.
Si tienes problemas iniciando y deteniendo apache, y genera un error sobre httpd.pid mira este post.
En caso de que quieras cambiar el puerto, mira este post.
Recuerda que puedes ejecutar archivos de PHP desde la terminal así como lo hacemos en Windows. Igualmente puedes entrar al modo interactivo con php -a
Para trabajar con el demonio de apache puedes ejecutar apachectl start
, apachectl stop
y apachectl restart
para iniciarlo, detenerlo y reiniciarlo respectivamente.
Cabe mencionar que en la carpeta de htdocs puedes poner cualquier archivo (imagen, vídeo, archivo de texto, uno de HTML, etcétera) y será servido como normalmente se hace.
Con esto ya tienes una pila LAMPP en Android: Linux, Apache, MySQL y PHP. Puedes montar cualquier aplicación que montarías en un servidor con Linux.
Si deseas saber cómo instalar el servidor de MariaDB en Android visita: instalar MySQL en Android.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
Hola me podrías ayudar a cambiar php 8 por php 7 esque quiero trabajar con un proyecto que genere en php 7 y el componer no se me instala por las versiones distintas
Hola. Claro, le atiendo en https://parzibyte.me/#contacto
librería libhphp7.so no existe
para resolver el problema de la libreria de php hay q poner este comando:
apt install php7-apache
Hola gracias por el aporte, tengo un error agradezco me pueda ayudar ...... me funciono bien....pero al volverlo a instalar me sale un error, ya lo he reinstalado 3 veces borrando todos los datos y la cache del termux.....luego de escribir el comando apachectl start .... muestra el error .........httpd: Syntax error on line 546 of /data/data/com.termux/files/usr/etc/apache2/httpd.conf: Include/IncludeOptional: Could not open directory /data/data/com.termux/files/usr/conf.d: No such file or directory
Hola. El error lo dice claramente:
No existe el archivo o directorio /data/data/com.termux/files/usr/conf.d
Y hay un error de sintaxis en la línea 546
Por favor revise todos los pasos.
Saludos :)
Hola, gracias por estos buenos tutoriales.
Tengo un problema porq en la nueva actualización de apache2 la librería libhphp7.so no existe y cuando ejecuto apachectl start me lo informa. M podrías ayudar?
Compare tu tutorial con el servidor wamp, y donde tu añadiste código en el archivo httpd.conf están estos
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module /data/data/com.termux/files/usr/libexec/apache2/mod_allowmethods.so
LoadModule asis_module /data/data/com.termux/files/usr/libexec/apache2/mod_asis.so
LoadModule auth_basic_module /data/data/com.termux/files/usr/libexec/apache2/mod_auth_basic.so
, pero poniéndolos todos m da tres errores, y poniendo los últimos tres si se ejecuta como debe ser, como lo indica tu tutorial. Hasta ahí todo bien, pero cuando lo inició, que abro un php no se ejecuta, es como si no pasara por ningun servidor. Gracias
la libreria se llama libphp.so si instalaste ahora
Hola, podrías indicarme el mensaje de error, de ser posible con una captura de pantalla?
Saludos
Hola, Parzi. Muchas gracias por esta instructiva información, me ha servido bastante. Tengo una duda: cada que quiero parar apache2 con el comando o me sale el siguiente error:
(20014)Internal error (specific information not available): AH00058: Error retrieving pid file var/run/apache2/httpd.pid
AH00059: Remove it before continuing if it is corrupted.
Esto se soluciona borrando el archivo httpd.pid y volviendo a ingresar el comando $ apachectl -k stop., pero tendría que desconectar la conexión Wi-Fi. Y cada que quiero parar el servidor tengo que hacer el mismo proceso de borrado del archivo httpd.pid. Hay una forma de evitar esto?
Gracias por responder.
Saludos cordiales.
Hola, entiendo. Parece que esto solo pasa en determinados dispositivos. Prueba con el siguiente script:
https://gist.github.com/yoander/a7fd18c05475a1f04253b9f74db3c96b
Saludos
Buenas, muy útiles tus indicaciones.
Una vez instalados apache-php y mariadb, estoy intentando instalar PrestaShop pero me pide la siguiente extensión activada: intl extension.
He probado todo lo que he encontrado con apt-get, pkg, .. pero no consigo instalarla.
Necesitaría ayuda gracias!
Hola, si quieres instalar extensiones me parece que hay una forma compilando PHP por ti mismo; pero otra solución sería instalar PHP y MySQL (con prestashop) sobre Ubuntu; y claro que sí, Ubuntu puede ser instalado en Android con Termux. Mira este tutorial: https://parzibyte.me/blog/2019/04/16/instalar-ubuntu-android-sin-root/
No aseguro que con eso instales prestashop, pero sí que sea más fácil instalar la extensión sobre Ubuntu que sobre Termux
Hola, muchas gracias por el esfuerzo ha servido bastante. Te animo a que sigas publicando más sobre estos contenidos, salvas vidas. Por último Como se podría hacer con Java , hay alguna posibilidad? Gracias.
Gracias por tus comentarios. A qué te refieres con Java? a instalar el compilador e intérprete de Java? si es así, pronto lo haré
Te invito a seguirme en mis redes sociales y a suscribirte a mi blog para estar al tanto de mis aportes. Saludos
Buenas noches, me funciona todo, hasta que intento cargar el el index en el Google, 404 not found
Tal vez no pusiste el archivo en la ruta adecuada, recuerda que se debe llamar index.php