Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Copia de seguridad Firebird desde PHP (https://www.clubdelphi.com/foros/showthread.php?t=76459)

subzero 02-11-2011 15:53:15

Copia de seguridad Firebird desde PHP
 
Hola.

Alguno a tenido la oportunidad de realizar copia de seguridad de una base de datos en firebird desde php, he recurrido al manual de php pero el codigo que muestra no funciona:

Código PHP:

$resource_service_handle ibase_service_attach ('localhost''username''password');

ibase_backup($resource_service_handle'source_database''destination_file');

ibase_service_detach ($resource_service_handle); 

Y lo he cambiado por:

Código PHP:

$resource_service_handle ibase_service_attach (DB_NAMEDB_USERNAMEDB_PASSWORD) or die(ibase_errmsg());

    
ibase_backup($resource_service_handleDB_NAMEPATH_BK.SD."copia_.fbk") or die(ibase_errmsg());

    
ibase_service_detach ($resource_service_handle); 

Donde las constantes estan definidas y funcionan (dan acceso a la aplicacion). El error que me retorna es

localhost:/opt/lampp/htdocs/aplicacion_local/bd/basedatos.fdb
SYSDBA
masterkey
localhost:/opt/lampp/htdocs/aplicacion_local/bakups/copia_.fbk

Warning: ibase_service_attach() [function.ibase-service-attach]: Cannot attach to services manager service opt/lampp/htdocs/aplicacion_local/bd/basedatos.fdb:service_mgr is not defined in /opt/lampp/htdocs/aplicacion_local/controllers/backup.php on line 9

Warning: ibase_backup() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/aplicacion_local/controllers/backup.php on line 11

Warning: ibase_service_detach() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/aplicacion_local/controllers/backup.php on line 13

De antemano muchas gracias!

duilioisola 02-11-2011 16:04:28

Primero y principal: No se casi nada de PHP.

Veo que tu defines:
localhost:/opt/lampp/htdocs/aplicacion_local/bd/basedatos.fdb
y el error dice que no se puede conectar a:
opt/lampp/htdocs/aplicacion_local/bd/basedatos.fdb

Comprueba que las variables que tienes llegan a la función con los valores correctos.
Supongo que podrás poner algo asi como un ShowMessage(DB_NAME) antes de la función.

subzero 02-11-2011 17:34:37

Gracias por su respuesta, enseguida voy a revisar, y comento como fue

subzero 02-11-2011 18:38:08

bueno probe algo mas

Código PHP:

if (($service ibase_service_attach(DB_SERVERDB_USERNAMEDB_PASSWORD)) != FALSE) {
        
//retrieve server info
        
$server_info  ibase_server_info($serviceIBASE_SVC_SERVER_VERSION)
                      . 
' / '
                      
ibase_server_info($serviceIBASE_SVC_IMPLEMENTATION);
        
        
ibase_backup($serviceDB_NAMEDB_SERVER.":".PATH_BK.SD."basededatos_.fbk") or die(ibase_errmsg());
        
        
//detach from server (disconnect)
        
ibase_service_detach($service);
    }
    else {
        
$ib_error ibase_errmsg();
    }
    
    echo 
$server_info

Donde:

DB_NAME : localhost:/opt/lampp/htdocs/aplicacion/bd/basededatos.fdb
DB_USERNAME : SYSDBA
DB_PASSWORD : masterkey
PATH_BK : /opt/lampp/htdocs/aplicacion/bakups
DB_SERVER : localhost:/opt/lampp/htdocs/aplicacion/bakups/basededatos_.fbk

la cuestion es que no me genera error como tampoco crea el archivo de la copia de seguridad.

Agradezco la ayuda que me puedan brindar

duilioisola 02-11-2011 19:13:50

Cita:

ibase_backup($service, DB_NAME, DB_SERVER.":".PATH_BK.SD."basededatos_.fbk") or die(ibase_errmsg());
En esta línea veo algo raro:

Se llama a la función ibase_backup y supongo que le pasas el parámetro origen y destino.

Origen = DB_NAME = localhost:/opt/lampp/htdocs/aplicacion/bd/basededatos.fdb: ok
Destino = DB_SERVER.":".PATH_BK.SD."basededatos_.fbk" = localhost:/opt/lampp/htdocs/aplicacion/bakups/basededatos_.fbk:/opt/lampp/htdocs/aplicacion/bakups.basededatos_.fbk: ERROR

Además, el backup siempre se hace a un disco local.
Cuando la haces con la línea de comando es
Código:

origen = IP:Path/nombre_db
destino = Path/nombre_bk
gbak -t origen destino
Ejemplo:
gbak -t 192.168.1.1:/bases/base.fdb C:\Backups\Backup.FBK

Si quieres que el backup esté en otro lugar, deberás hacerlo al disco local y luego copiarlo
Código:

gbak -t 192.168.1.1:/bases/base.fdb C:\Backups\Backup.FBK
copy C:\Backups\Backup.FBK \\ServidorBackup\Backups\Backup.FBK


subzero 02-11-2011 21:15:18

ok, voy a revisar esto ultimo, realmente agradezco tu interes en ayudarme.

subzero 03-11-2011 16:36:38

Gacias, hice los cambios sugeridos y quedo algo asi:

$service = ibase_service_attach(localhost,SYSDBA,masterkey);
ibase_backup($service, localhost:/opt/lampp/htdocs/smi_local/bd/basededatos.fdb, localhost:/opt/lampp/htdocs/smi_local/backups/basededatos_.fbk);

se ejectua pero no me muestra ni erros ni crea el archivo del respaldo. Que mas puedo hacer

duilioisola 03-11-2011 17:09:36

Lo dicho antes: el backup siempre se hace a un disco local

La parte subrayada no es válida.
ibase_backup($service, localhost:/opt/lampp/htdocs/smi_local/bd/basededatos.fdb, localhost:/opt/lampp/htdocs/smi_local/backups/basededatos_.fbk);

Suponiendo
  • que la dirección de la base origen es correcta
  • que el php está en el mismo servidor que la base (localhost)
  • que tiene derechos de escritura a la carpeta /opt/lampp/htdocs/smi_local/backups/
Quedaría así:

ibase_backup($service, localhost:/opt/lampp/htdocs/smi_local/bd/basededatos.fdb, /opt/lampp/htdocs/smi_local/backups/basededatos_.fbk);

subzero 04-11-2011 01:15:02

Siguiendo las recomendaciones comprombe que:

La base origen es correcta
Php está en el mismo servidor que la base (localhost)
Tiene derechos de escritura a la carpeta /opt/lampp/htdocs/smi_local/backups/

y cambie la ruta tal como me propones pero lo mas raro es que sigue sin generar el archivo resultado.... y lo mas enigmatico es que ningun error.

De todas formas agradezco tu paciencia. sin embargo he seguido consultando pero no he encontrado nada parecido. Sigo tratando

subzero 10-11-2011 16:11:37

Hasta el momento no he podido lograr generar la copia de seguridad desde php utilizando la funcion ibase_backup, por lo que estoy pensando mejor realizar un ejecutable para copias de seguridad de mi base de datos.

Antes de finalizar quiero agradecer enormente a duilioisola, por su paciencia y por tomar un poco de su tiempo en ayudarme con ideas.

duilioisola 11-11-2011 09:15:24

Cita:

ibase_backup($service, DB_NAME, DB_SERVER.":".PATH_BK.SD."basededatos_.fbk") or die(ibase_errmsg());
No se que es la parte "or die(ibase_errmsg());", pero leí que envía un mensaje y sale del script.

Las expresiones lógicas se suelen evaluar solo la parte necesaria. Si la primera parte de una expresión con or es verdadera, el resultado es verdadero, por lo que no se evalúa la siguiente. Si la primera es falsa, se evalúa la siguiente.

Dicho esto, puede que ibase_backup() falle y por lo tanto se llame a die(...) y cierre el script.

Quita esto y deja que salga una exception o el tipo de error que te envíe PHP.


La franja horaria es GMT +2. Ahora son las 17:51:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi