PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

dba_optimize> <dba_nextkey
Last updated: Fri, 11 Apr 2008

view this page in

dba_open

(PHP 4, PHP 5)

dba_open — Abrir una base de datos

Descripción

resource dba_open ( string $ruta , string $modo [, string $gestor [, mixed $... ]] )

dba_open() establece una instancia de base de datos para el archivo en ruta con el modo dado usando gestor .

Lista de parámetros

ruta

Usualmente una ruta normal en su sistema de archivos.

modo

Es r para acceso de lectura, w para acceso de lectura/escritura a una base de datos existente, c para acceso de lectura/escritura y creación de base de datos si no existe actualmente, y n para crear, truncar y tener acceso de lectura/escritura.

Adicionalmente es posible definir el método de bloqueo de la base de datos con el siguiente caracter. Use l para bloquear la base de datos con un archivo .lck o d para bloquear el archivo de base de datos mismo. Es importante que todas sus aplicaciones hagan esto de forma consistente.

Si desea probar el acceso y no desea esperar al bloqueo puede añadir t como el tercer caracter. Cuando esté absulatemente seguro de que no necesita bloquear la base de datos puede hacerlo usando - en lugar de l o d. Cuando ninguna de las opciones d, l o - es usada, dba bloqueará el archivo de base de datos como si usara d.

Note: Solo puede haber un escritor para un archivo de base de datos. Cuando use dba en un servidor web y más de una petición requiera operaciones de escritura, ellas sólo pueden hacerse una después de la otra. Asimismo, no es posible tener acceso de lectura durante un proceso de escritura. La extensión dba usa bloqueos para prevenir estas situaciones. Vea la siguiente tabla:

Bloqueo DBA
ya abierto modo = "rl" modo = "rlt" modo = "wl" modo = "wlt" modo = "rd" modo = "rdt" modo = "wd" modo = "wdt"
no abierto ok ok ok ok ok ok ok ok
modo = "rl" ok ok espera falso inválido inválido inválido inválido
modo = "wl" espera falso espera falso inválido inválido inválido inválido
modo = "rd" inválido inválido inválido inválido ok ok espera falso
modo = "wd" inválido inválido inválido inválido espera falso espera falso
  • ok: la segunda llamada será exitosa.
  • espera: la segunda llamada espera hasta que dba_close() sea llamado para el primero.
  • falso: la segunda llamada devuelve falso.
  • inválido: no debe mezclar los modificadores "l" y "d" para el parámetro modo .

gestor

El nombre del gestor que será usado para acceder a ruta . A él se le pasan todos los parámetros opcionales dados a dba_open() y puede actuar sobre ellos.

Valores retornados

Devuelve un gestor positivo en caso de éxito, o FALSE si ocurre un error.

Registro de cambios

Versión Descripción
4.3.0 Es posible abrir archivos de base de datos sobre una conexión de red. Sin embargo en casos en los que se usa una conexión de socket (como http o ftp) la conexión será bloqueada en lugar del recurso mismo. Esto es importante ya que en tales casos el bloqueo es simplemente ignorado sobre el recurso y deben encontrarse otras soluciones.
4.3.0 El bloqueo y los modificadores de modo "l", "d", "-" y "t" fueron agregados. En versiones anteriores de PHP, es necesario usar semáforos para prevenir el acceso simultáneo a bases de datos para cualquier gestor de bases de datos con excepción de GDBM. Vea el soporte de semáforos tipo Sistema V.
antes de 4.3.5 El modo de apertura 'c' está dañado para varios gestores internos y trunca la base de datos en lugar de añadir los datos a una base de datos existente. Asimismo, dm y ndbm fallan en modo 'c' para configuraciones típicas (esto no puede arreglarse).

Ver también



dba_optimize> <dba_nextkey
Last updated: Fri, 11 Apr 2008
 
add a note add a note User Contributed Notes
dba_open
mskala at ansuz dot sooke dot bc dot ca
16-May-2008 11:15
As of GDBM version 1.8.3, GDBM's underlying open call uses non-blocking calls to flock() on systems that have flock().  As a result, calls with "rd" or "wd" locking modes will return error ("Can't be reader" or "Can't be writer") instead of waiting.  Use "rl" or "wl" instead, to make PHP do its own locking external to GDBM.
trohit at blue bottle dot com
23-Nov-2007 12:34
Here's a simple example to use the dba_open function

<?php

$id
= dba_open("/tmp/test.db", "n", "gdbm");

if (!
$id) {
        echo
"dba_open failed\n";
        exit;
}

dba_replace("key", "This is an example!", $id);

if (
dba_exists("key", $id)) {
        echo
dba_fetch("key", $id);
       
dba_delete("key", $id);
}

dba_close($id);
?>
doppelbauer at gmail dot com
20-Oct-2006 04:36
Windows does not support locking the database. You may use $_ENV to determine the OS:

$locking = (stripos($_ENV['OS'],'windows') === false ? 'd' : 'l');
xy ät affenkrieger.de
30-Mar-2006 04:13
If you get some strange errors like
dba_open(): myDbFilename.db : Permission denied
than you are propably using PHP on a Windoze machine. You have to make sure that the following conditions are met:

1) Use an absolute path to your db file. Relative paths will cause problems with locking
2) Specify a locking mode - that's the second character of the mode-argument, or else opening a dba-file will cause several notices/warnings etc.

And a final, general note:
3) Always use the english PHP doc on this site - the translations are often old as hell and miss important informations

HTH, Nils.

dba_optimize> <dba_nextkey
Last updated: Fri, 11 Apr 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites