Se suele usar esta técnica para mostrar imágenes de tipo JPEG, GIF o PNG. Pero también es posible hacerlo para cualquier tipo de archivo como pueden ser PDF o MOV (vídeo quicktime).
Vamos a usar de ejemplo una base de datos llamada documentos.fp7 con dos únicos campos. Un campo contenedor llamado documento y otro de cálculo llamado tipo que extraerá la extensión del documento almacenado en documento.
El ejemplo nos mostrará una lista de los archivos guardados y un enlace que abrirá una ventana nueva donde se visualizará el contenido ya sea una imagen, un PDF o una película.
El código PHP que nos muestra el listado de documentos es este:
// Incluimos la librearia FileMaker.
require_once ('FileMaker.php');
// Establecemos la conexion con la base de datos indicando:
// base de datos (documentos.fp7)
// servidor donde esta alojada (127.0.0.1)
// usuario y password
$fm =& new FileMaker('documentos.fp7', '127.0.0.1');
$fm->setProperty('username', 'Admin');
$fm->setProperty('password', '');
// Buscamos todos los registros.
$request = $fm->newFindAllCommand('documentos');
$result = $request->execute();
// Comprobamos que no ha ocurrido ningun error
if ( FileMaker::isError($result) ) {
echo 'Error: '. $result->code .': '. $result->getMessage .'
';
die();
}
// Obtenemos los registros encontrados
$records = $result->getRecords();
// Recorremos en un bucle cada uno de los registros
foreach ($records as $record) {
// Guardamos el tipo de documento (segun la extension del archivo)
$tipo = $record->getField( 'tipo' );
// Al tratarse de un campo contendor lo que nos devuelve
// es una url al contenido del archivo
$documento = $record->getField( 'documento' );
// Mostramos el tipo de archivo y la url que lo muestra.
echo ''. $tipo .' '. $documento .'
';
// Cuando se trata de archivos GIF o JPG la url que obtenemos
// nos muestra esa extension pero con caulaquier otro tipo de
// archivo la extension que muestra es: .cnt
// ahora vamos a reemplazar .cnt por la extension propia del
// del tipo de archivo que queresmo visualizar
$doc = str_replace(".cnt", ".". $tipo, $documento);
// Mostramos el enlace que nos permitira visualizar el documento
echo 'Visualizar documento '. $tipo .'';
echo '
';
}
El código PHP que nos permite ver el contenido del campo contenedor es este:
// Incluimos la librearia FileMaker.
require_once ('FileMaker.php');
// Establecemos la conexion con la base de datos indicando:
// base de datos (documentos.fp7)
// servidor donde esta alojada (127.0.0.1)
// usuario y password
$fm =& new FileMaker('documentos.fp7', '127.0.0.1');
$fm->setProperty('username', 'Admin');
$fm->setProperty('password', '');
// Comprobamos si se ha pasado la variable -url
if (isset($_GET['-url'])){
$url = $_GET['-url'];
// Extraemos la extension del fichero
$url = substr($url, 0, strpos($url, "?"));
$url = substr($url, strrpos($url, ".") + 1);
// Segun la extension se estable el Content-type adecuado
// para su correcta visualizacion
switch ($url) {
case "jpg":
header('Content-type: image/jpeg');
break;
case "gif":
header('Content-type: image/gif');
break;
case "pdf":
header('Content-type: application/pdf');
break;
case "mov":
header('Content-type: video/quicktime');
break;
default:
header('Content-type: application/octet-stream');
}
// Mostramos el contenido del campo contenedor
echo $fm->getContainerData($_GET['-url']);
}
El secreto de visualizar correctamente el documento guardado en el campo contenedor está en decirle a navegador que tipo de documento es. Esto se hace especificándoselo en la cabecera del documento a servir mediante la función header()
Para más información sobre la función header() consultar aquí
Lista de Mime-types disponnibles