Nisu

mkInstaller - un constructor de instaladores para proyectos php

Para construir un instalador web para tu proyecto php + bdd

by mm AT nisu.org
Version October 2015

En esta página ..

  1. Qué hace?
  2. Por qué.
  3. Tutorial.
    1. Primeros pasos.
    2. Prueba el instalador.
    3. Bases de datos.
  4. How to.
  5. Ejemplos
  6. Relacionado.
Si escribes scripts php que necesitan instalación, mkInstaller.php rápidamente construye un instalador.

Qué hace?

  • Tu instalador en un minuto.
  • Completamente multilingüe.
  • Permite crear bases de datos mysql y postgresql, y copiar tablas o partes de tablas.
  • La apariencia se controla por plantillas y CSS.
  • El instalador resultante es un script php.
  • Ver los ejemplos.
Otras funciones:
  • Subida de grandes dumps de mysql o postgresql (ver los ejemplos).
  • Copias de seguridad completas de un site (ver los ejemplos).

Descárgalo. Obtén asistencia enviandome correo a: mm EN nisu.org

Por qué.

Si alguien escribe un script php y piensa distribuirlo, probablemente necesita hacer algo de trabajo extra, como escribir algunas instrucciones de instalación y preparar script para crear las bases de datos. Si, desafortunadamente, se requiere rediseñar la aplicación o las bases de datos, es necesario repetir el trabajo de prepara la instalación.
El propósito de mkInstaller.php es simplificar esta tarea al máximo.

Tutorial.

Primeros pasos.

Descarga mkInstaller.php en el directorio actual o instalalo.
Edita este script mio.php:

<?php
  
//!
  
$privado='algo secreto';
  
//!
  
$dependientedelsite='depende del site';

  echo
$dependientedelsite."\n";

?>

El script contiene dos variables que deben cambiar en otra instalación.
Para que mkInstaller.php las maneje, deben estar cada una en una línea y el comentario //! debe aparecer solo en una línea justo antes, como se muestra en mio.php.

Entonces creamos el instalador:

php mkInstaller.php -o out instdir/mi_inst.php mio.php
Nota: Si no tienes acceso a línea de comandos, coloca mkInstaller.php en un tu servidor web y cárgalo con tu navegador.
Se han creado el directorio instdir y el fichero _mkInstaller.php. El instalador está en el directorio instdir y se llama mi_inst.php. Lo hemos puesto en un directorio diferente para poder probarlo, pues si no sobreescribiría los ficheros originales al probarlo.

Ahora abre un navegador web y accede a:
http://nombre_de_tu_servidor/...../instdir/mi_inst.php
Por ahora no pulses el botón de Instalar.
Para mejorar el instalador, edita el fichero _mkInstaller.php, verás algo como:

//!!
$defvars=array (
  
'd206c1d1' =>
  array (
    
'va' => 'privado',
    
'df' => '""',
    
'ty' => text,
    
'st' => true,
    
'sz' => 2,
    
'lg' =>
    array (
      
'es' => 'Introduzca el valor de la variable <i>private</i>',
    ),
  ),
  
'68ec8746' =>
  array (
    
'va' => 'dependientedelsite',
    
'df' => '""',
    
'ty' => text,
    
'st' => true,
    
'sz' => 2,
    
'lg' =>
    array (
      
'es' => 'Introduzca el valor de la variable <i>sitedep</i>',
    ),
  ),
);
$defbdds=array (
);
$myopt=array (
  
'big' => false,
  
'out' => 'instdir/mi_inst.php',
);
$svbufs=array (
  
'mio.php' =>
  array (
    
'p' => true,
  ),
);


Es un array php, debe editarse con cuidado.
El item df es elvalor por defecto, que es evaluado al ejecutar el instalador, por lo que '""' se convertirá en vacío y '"\'\'"' se convertitía en '', y '' produciría un error de compilación. El item st dice que los valores tecleados por el usuario al instalar deben interpretarse como strings. Si es false, sería tomado como literal, con lo que df con valor '' produce vacío.

Observa que _mkInstaller.php contiene un largo comentario que puede usarse como plantilla para añadir funcionalidad.
Cambia text por 'password' para el item ty de la variable $privado. Y vuelve a ejecutar:

php mkInstaller.php
Recarga el instalador myinst.php con tu navegador y verás que la caja para $privado es de tipo 'password'.

Si no estás interesado en la apariencia, ve a la siguiente sección.

Ahora puedes editar una plantilla para mejorar el aspecto del instaldor. Para ver la plantilla por defecto ejecuta:
php mkInstaller.php -I
lo que muestra el contenido del instalador construido.

Edita una página web y coloca la marca {CONT} donde quieras que el instalador escriba su <iframe>. Llama a la página es-mi.html, pues es para el idioma español. El único requisito es que tenga definida una clase CSS de nombre ifr para el <iframe>. Por ejemplo:

	<html>
	<style>
	  .ifr {
	    width: 100%;
	    height: 100%;
	    border: none;
	  }
	</style>
	<h2 style="text-align: center">My installer.</h2>
	<h2 style="text-align: center">Mi instalador.</h2>
	{CONT}
	Hecho por mi.
	</body>
	</html>
Ejecuta entonces:
php mkInstaller.php -o tpl es-mi.html
y recarga mi_inst.php para ver la nueva página.
mkInstaller.php ha incluido es-mi.html como opción, no necesitas volverlo a especificar.
Puedes construir páginas para otros idiomas y llamarlas fr-mi.html, en-mi.html, etc., y ejecutar:
php mkInstaller.php
para reconstruir el instalador.

Prueba el instalador. ^

Abre el instalador mi_inst.php con tu navegador y entra los valores solicitados. Pulsa "Instalar" y observa que aparece un nuevo mio.php en instdir con los valores correctos.

Bases de datos. ^

Crea una base de datos:
	mysql -p -u root

	create database mydb;
	use mydb;
	create table one (
		name varchar(255) NOT NULL default ''
		) type=MyISAM;
	create table two (
		value int(11) NOT NULL default '0'
		) type=MyISAM;
	insert into two (value) values (222);
	quit
	
Edita mio.php:

<?php
  
//!
  
$private='some secret';
  
//!
  
$sitedep='depends on site';

  echo
$sitedep."\n";

  
//!
  
$dbname='mydb';
  
//!
  
$dbhost='localhost';
  
//!
  
$dbuser='root';
  
//!
  
$dbpwd='my current passwd';

?>

Pon valores coreectos para $dbuser y $dbpwd, el ususario y la contraseña reales que has empleado.
Después ejecuta:
php mkInstaller.php -d 'dbhost==dbuser==dbpwd==dbname'
Si los valores especificados para $dbuser o $dbpwd son incorrectos, obtendrás un error. Si, observa como se copian las tablas en el instalador. Si quieres alterar este comportamiento, edita _mkInstaller.php y cambia $defbdds a (copy/paste):

$defbdds=array(
  
'mydbdef'=>array(
    
'ty'=>'mysql',    
    
'vho'=>'dbhost',
    
'vus'=>'dbuser',
    
'vpw'=>'dbpwd',
    
'mydb'=>array(
      
'vdb'=>'dbname',
      
'tc' => array(), // all the tables
      
'tp' => array('two' => array(), ),
      ),
    ),
  );


De paso, pon ty a password en la variable dbpwd. Vuelve a ejecutar:
php mkInstaller.php
El fichero _mkInstaller.php se ha actualizado. Edítalo y verás que tc contiene la lista actual de tablas de tu base de datos.

El instalador está listo, cárgalo con tu navegador, especifica un nombre de base de datos diferente. Verifica que la base de datos se crea y se copian los datos de la tabla two. Más información aquí.

How to. ^

Pretendo ahora resumir los pasos genéricos para crear un instalador. Para más información, leer el tutorial anterior o la referencia en inglés. También hay una explicación en castellano aquí.

Escenario: tienes un(os) script(s) php que quieres distribuir y contiene(n) datos secretos o dependientes de la instalación. Además manejan bases de datos mysql o postgres. Los pasos para construir el instalador son:

  1. Instalas mkInstaller.php en el directorio actual.

  2. Determinas que variables son dependientes de la instalción, por ejemplo secretos, nombres de bases de datos, etc. Supongamos que estas variables están en los ficheros f1.php y f2.inc. Ojo: variables con el mismo nombres en diferentes ficheros se consideran la misma variable.

  3. Para cada una, estableces una asignación de valor "instalable", de la forma:
    //!
    // %id%: mensaje
    $variable=valor_dependiente_de_instalación;
    La línea que contiene mensaje es opcional y establece el mensaje que mostrará en el idioma id para solicitar el valor al instalar.

  4. El instaldor puede incluir ficheros fijos, como imágenes, otros scripts, css, plantillas, etc., por ejemplo estilo.css y foto.jpg.

  5. Ejecutas:
    php mkInstaller.php -o out prueba/fichero_instalador.php f1.php f2.inc -- estilo.css foto.jpg
  6. El instalador está listo en el directorio prueba, puedes probarlo abriéndolo con el navegador, en tu servidor web.

  7. Si quieres incluir el setup de la(s) base(s) de datos en el instalador, ejecuta:
    php mkInstaller.php -d "host==usuario==contraseña==basededatos=tipo"
    donde tipo es mysql o pgsql y el restos de parámetros son, o bien valores fijos, que deben ir precedidos de ":", o bien nombres de variables instalables, por ejemplo:
    php mkInstaller.php -d ":localhost==misuer==mipasswd==:nombrebase"
    Usará localhost y nombrebase como datos fijos y miuser y mipasswd son nombres de variables. En el ejemplo se sobreentinde mysql4.

  8. Edita _mkInstaller.php y cambia las frases que solicitan valores de variables a algo más amigable. Puedes aprovechar para añadir más idiomas. Ojo: _mkInstaller.php es php y debe ser sintácticamente correcto.

  9. Si quieres mejorar la apriencia, prepara un CSS para el frame interior o plantillas en distintos idiomas para la página en conjunto.

Ejemplos ^

Ejemplos de la actividad docente:
  • Portal culinario: probar, descargar. Ejemplo espectacular de instalador con muchas propiedades. Posiblemente algunas de las preguntas que hace podrían evitarse, pero demuestra todas las posibilidades de mkInstaller.
  • Portal culinario: probar, descargar. Instalador muy correcto integrado con la plantilla del pry, el si/no debería cambiarse por un select.
  • MP3: probar, descargar. Sencillo pero bien realizado, pues incluye código de revisión del entorno de instalación..
  • Periódico online: probar, descargar. Este instalador y el resto, limitan su interés al plano estético.
  • Venta de entradas: probar, descargar. .
  • MP3: probar, descargar. .
  • Portal del bebé: probar, descargar. .
  • Web pizza: probar, descargar. Con problemas en el entorno de usuario.
  • Web pizza: probar, descargar. .
  • Venta de entradas: probar, descargar. Éste y el resto, probablemente han olvidado generar un administrador del site.
  • Portal del bebé: probar, descargar. .
  • Banco Brando: probar, descargar. .
  • Web pizza: probar, descargar. .
  • Venta de entradas: probar, descargar. .
Ejemplos del autor.
English Select Style - Legal