Php en red!

Hola experto, te molesto nuevamente!
Te comento que no falta mucho para terminar una aplicación, pero se me generaron algunas dudas..
Por ejemplo:
Yo instalo el sistema en una pc común y corriente, todo funciona bien.
El tema es que si me piden que el sistema este en otra maquina...
Lo que haría yo seria por medio del cable utp conecto las maquinas (si son dos), en una arranco el servidor y en la otra pc me meto al servidor a través de una ip.
Eso seria todo, ¿o tengo que programar algo con anteriridad para que funcione?
Otra cosa, si por ejemplo se esta guardando un registro y se corta la luz, ¿qué pasa?, también tengo que programarlo, osea no se que tengo que tener en cuenta
Espero tu respuestas!
Muchas gracias!
Diego

2 Respuestas

Respuesta
1
Efectivamente los servidores web PHP funcionan a través de redes Ethernet. Mejor que conectar las 2 máquinas directamente deberías utilizar un Switch o algún dispositivo similar, para que no tengas que preocuparte del trenzado de los cables, etc...
Una vez conectados, configuras los adaptadores de red para estar trabajando en la misma subred, por ejemplo una tendría la IP:
192.168.0.1 (servidor)
Y la otra
192.168.0.2 (cliente)
Con la misma máscara de red:
255.255.255.0
Con ambos ordenadores arrancados, el cliente utilizaría la IP del servidor (192.168.0.1) para acceder a sus contenidos.
Sobre la pérdida de datos, depende mucho de qué base de datos uses, y qué tipo de datos estés enviando.
Si se va la luz mientras estás enviando una imagen, es posible que quede irreparablemente corrupta en el servidor (si la almacenas en disco). Si estás escribiendo en una BBDD es posible que puedas al menos "deshacer" (ROLLBACK) el cambio parcial, si tu base de datos soporta transacciones (START TRANSACTION).
En MySQL necesitas tablas InnoDB, por ejemplo, para tener capacidades transaccionales. Documentación: http://dev.mysql.com/doc/refman/5.0/es/commit.html
Lo único que tienes que hacer es añadir un START TRANSACTION antes de empezar a insertar y un COMMIT cuando el registro se haya insertado correctamente.
Por supuesto, a tu servidor JAMÁS se le debería de ir la luz, así que tendrías que pensar en comprar hardware específico, como UPS (Uninterrupted Power Supplies) que básicamente son unas baterías gigantes que en caso de fallo eléctrico mantienen el equipo encendido durante el tiempo justo para poder grabar lo que se esté haciendo en ese momento.
Hola experto, muchas gracias por tu respuesta ya que me aclaraste algunas dudas...
Ahora la duda es como tendría que hacer para poder hacer uso del start transaction antes de empezar a guardar el registro y el commit después de grabarse dicho registro
la BD la hago en mysql y las tablas estab en Innodb... por un lado eso estaría
Espero tu respuesta
Desde ya muchas gracias
Diego
Pues sencillamente tienes que ejecutar esos comandos igual que la operación que quieras hacer:
mysql_query('START TRANSACTION');
... cosas ...
mysql_query('COMMIT'); // si ha habido éxito
mysql_query('ROLLBACK'); // ante los fallos
Hola de nuevo experto, gracias por tu respuesta...
Por ejemplo tengo este script...
<?php
require_once "../../includes/cnx.php";
if (isset($_POST["bt_aceptar"])){
   $apellido=$_POST['apellido'];
   $nombre=$_POST['nombre'];
   $importe=$_POST['importe'];
   $doctores=$_POST['doctores'];
   $fech=explode('-',$_POST['fecha']);
   $fecha=$fech[2].'-'.$fech[1].'-'.$fech[0];
   $consulta="INSERT INTO carnet VALUES ";
   $consulta.="('',$doctores,'$fecha','$apellido','$nombre',$importe)";
   mysql_query($consulta, $con);
}
?>
esto hace la carga de un carnet nuevo por ejemplo
no entiendo como aplicar los comandos que me decis
mysql_query("start transaction")  
$consulta="INSERT INTO carnet VALUES ";
   $consulta.="('',$doctores,'$fecha','$apellido','$nombre',$importe)";
   mysql_query($consulta, $con);
mysql_query('COMMIT');
mysql_query('ROLLBACK');
Espero que me puedas ayudar con el ejemplo que te muestro
Gracias desde ya por tus respuestas...
Saludos
Diego
Mysql_query('ROLLBACK'); lo tienes que usar en el caso de que algo vaya mal durante la inserción; por ejemplo:
Start transaction
Insertar algo en la tabla de usuarios
Insertar algo relacionado con lo anterior en la tabla de diagnósticos
Insertar XXX... <- Esto falla
Como no quieres que se inserten parcialmente las cosas, si detectas un fallo en la transacción es cuando lanzas un mysql_query('ROLLBACK');
En tu caso sólo necesitas hacer el commit, porque sólo estás realizando una única inserción.
Por favor, consulta la documentación de START TRANSACTION, COMMIT y ROLLBACK en MySQL5 que tiene bastantes ejemplos y explica exactamente cómo utilizarlo :)
Hola experto, gracias nuevamente
Estuve leyendo el manual que me dijiste.
Hice el código para la transacción.
------------------------
require_once "../../includes/cnx.php";
if (isset($_POST["bt_aceptar"])){
          $apellido=$_POST['apellido'];
          $nombre=$_POST['nombre'];
          $importe=$_POST['importe'];
          $doctores=$_POST['doctores'];
          $fech=explode('-',$_POST['fecha']);
          $fecha=$fech[2].'-'.$fech[1].'-'.$fech[0];
     $consulta="INSERT INTO carnet VALUES ";
     $consulta.="('',$doctores,'$fecha','$apellido','$nombre',$importe)";
}    
     mysql_query("BEGIN");
    if (mysql_query($consulta, $con)){
      mysql_query("COMMIT");
     }else{
       mysql_query("ROLLBACK");
}
-------------------------------------
Por favor quiero que veas el código y me digas si esta bien
lo probé y me carga pero la verdad no se si están funcionando las transacciones
Espero que me puedas ayudar
Saludos desde ya
Diego
El código tiene buena pinta.
Si los inserts se van realizando, es que las transacciones funcionan.
Recuerda que no necesitas START TRANSACTION cuando hagas SELECT, sólo cuando hagas acciones que modifiquen los contenidos de la tabla: INSERT, UPDATE y DELETE
Respuesta
1
Bueno lo primero asumo que estás en local, por tanto cada máquina tendrá una ip, si entre ambas máquinas se pueden hacer ping de una ip a la otra y da respuesta, entonces el modelo servidor funcionará ya que en la segunda máquina pondrás http://192.168.1.1/index.php por ejemplo y accederá correctamente.
Para manejar los cortes de luz, bueno, lo óptimo siempre que sea una empresa es tener un SAI para evitar pérdidas de datos, sino lo que puedes hacer es en PHP, SIEMPRE antes de guardar un registro comprobar que todos los datos han sido introducidos correctamente, y que no haya datos vacíos, al menos de los datos que sean requeridos como obligatorios. Y una vez que tengas todo correcto entonces guardas, así nunca guardarás datos incompletos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas