ABCD - versiones bases de datos

From ABCD Wiki
Revision as of 11:54, 1 March 2020 by Guilda (talk | contribs)
Jump to: navigation, search

Para Windows

charset Versión Cisis
ansi 16-60
bigisis
ffi
utf8 16-60
ffi

Para Linux

charset Versión Cisis
ansi 16-60
bigisis
ffi
utf8 16-60
bigisis

Desde el punto de vista de la instalación el directorio cgi-bin se presenta de la siguiente manera: none

Para acceder correctamente la version del cisis, el config.php utiliza dos variables:

Variable Valoe
$UNICODE 0, el juego de caracteres es ansi
1, el juego de caracteres es utf8
fila 2, celda 1 fila 2, celda 2 fila 2, celda 3

Para determinar cuál versión de cisis va a utilizarse para gestionar una base de datos, en el archivo config.php se toman las siguientes decisiones:

  1. Se define el path a la carpeta cgi-bin mediante la asignación $cgibin_path=$ABCD_path."www/cgi-bin/"; . $ABCD_path es el camino de acceso a la carpeta donde está instalado ABCD y se define a principio del script
  1. Se lee el archivo abcd.def donde deben figurar los parámetros $def["UNICODE"] y $def["CISIS_VERSION"]
  2. Se incorpora el script config_extended.php y hay alguna base de datos activa ($_REQUEST["base"]) se lee el archivo dr_path.dat que puede reconfigurar los parámetros $def["UNICODE"] y $def["CISIS_VERSION"]
  3. A partir de aquí se toman las siguientes decisiones:
si $def["UNICODE"] no está definida o tiene un valor 0 o ansi, entonces se define
          $unicode='ansi';

$charset="ISO-8859-1";

si $def["UNICODE"] vale 1, entonces se define
          $unicode='utf8';

$charset="UTF-8";

Con estos valores se puede establecer la ruta hacia el ejecutable a utilizar para gestionar la base de datos:

          $cisis_path=$cgibin_path.$unicode."/".$cisis_ver."/";

Según el método seleccionado para la comunicación con el servidor (GET o POST) establecido en la variable


HTML - Content-Type

Hay una tercera variable importante que viene del php.ini y se denomina default_charset que en algunos servidores viene como UTF-8 y en otros como ISO-8859-1. Si es UTF-8 entonces hay que incluir el comando 

     header('Content-Type: text/html; charset=iso-8859-1'); 

en el config.php del módulo central para aquellas instalaciones que trabajan con lenguajes latinos porque los mensajes del sistema están en iso-8859-1 y no en utf-8. Igual ocurre con las bases de datos que se han desarrollado usando 1660-ansi. Por eso es que a veces reportan que los caracteres aparecen distorsionados.

Este comando se debe incluir en el config.php porque todos los scripts lo leen al principio y ese debe ser el primer comando de la página generada. Entonces, se leería la variable default_charset del php.ini y según el charset definido para la base de datos generar el header correctamente. Esto tiene relación con el encoding de la página el cual debe coincidir con el charset de las bases de datos que debe ser igual al de los archivos y demás páginas que se muestran tanto en central como en OPAC-ABCC.

En wxis_llamar.php se agregó una rutina que convierte los datos de ANSI a UTF-8 según el charset de la base de datos. Aunque está prevista la conversión de UTF-8 a ANSI esta no se recomienda porque los resultados son inesperados.

       $cset=strtoupper($charset); 
       if (!isset( $charset_db)or $charset_db=="") $charset_db="ANSI";
       $cset_db=strtoupper($charset_db);
       if ($cset_db!=$cset){
          foreach ($contenido as $value) {
              if ($cset=="UTF-8" and $cset_db=="ISO-8859-1"){
                   $cont_cnv[]=utf8_encode($value);
              } else{
                    $cont_cnv[]=utf8_decode($value)
              } 
          }
          if (isset($cont_cnv) and count($cont_cnv)>0) $contenido=$cont_cnv;
       }
               
  1. Se lee el charset de la página ($cset=strtoupper($charset))
  2. Se lee el charset de la base de datos, $charset_db, (leído del dr_path.dat). Si no está definido se asume ANSI
  3. Si el charset de la la base de datos no es igual al charset de la página se convierte la salida del wxis ($contenido) al charset de la página