Ir al contenido principal

PHP - MySQL - REDIS

PHP - MySQL - REDIS


PHP – MySQL

Abrimos una nueva máquina virtual Debian, y comenzamos la instalación.

PHP - MySQL - REDIS


# apt-get update
# apt-get upgrade

# apt-get install ssh


    Instalaremos el servidor Apache
# apt-get install apache2

    Paquetes necesarios para la ejecución de páginas web escritas en PHP
# apt-get install php5 libapache2-mod-php5 php5-cli php5-mysql

    Servidor de bases de datos
# apt-get install mysql-server

    Instalar estos otros paquetes
# apt-get install mysql-client mysql-admin mysql-query-browser libmysqlclient15-dev


    Adminsitrador gráfico para MySQL phpMyAdmin
# apt-get install phpmyadmin
ó
# aptitude install phpmyadmin

Acceso a phpmyadmin
# ln -s /usr/share/phpmyadmin /var/www/phpmyadmin
Comprobamos el usuario y contraseña de acceso a la Base de Datos
# mysql -h localhost -u root -p



Nos conectamos remotamente desde el navegador de nuestra máquina real a nuesto phpmyadmin para crear la Base de datos y la tabla con la que vamos a comenzar a trabajar.

http://192.168.1.198/phpmyadmin

PHP - MySQL - REDIS


 Creamos una Base de Datos, y una tabla con diversas columnas.

PHP - MySQL - REDIS


Ya podemos comenzar a trabajar con PHP y MySQL !!!






Para conectar con la BD: conectar.php
// Crear conexion
$con=mysqli_connect("localhost","root","root","bd_mjesus");

// Confirmas conexion
if (mysqli_connect_errno())
{
        echo "Fallo en la conexion a BD: " . mysqli_connect_error();
}else{
        echo "Conexion realizada correctamente";
}
?>

  

Página index del formulario: index.html

BASE DE DATOS DE PERSONAS




        NOMBRE:
        APELLIDOS:
        EDAD:
        DATOS:
       








Conexión a BD e inserción de datos: insertar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");

// Comprueba conexion
if (mysqli_connect_errno())
{
        echo "Fallo al conectar a la BD: " . mysqli_connect_error();
}

//Inserta desde formulario
$sql="INSERT INTO personas (nombre, apellidos, edad, fecha, datos)
VALUES
('$_POST[nombre]','$_POST[apellidos]','$_POST[edad]',now(),'$_POST[datos]')";

if (!mysqli_query($con,$sql))
{
        die('Error: ' . mysqli_error($con));
}

echo "Datos de Persona introducida en la Base de Datos correctamente";

echo "";
mysqli_close($con);
?>

  

Conexión a BD y consulta de datos: vertodo.php

//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");

// Comprueba conexion
if (mysqli_connect_errno())
{
        echo "Fallo al conectar a la BD: " . mysqli_connect_error();
}

echo "

PERSONAS GUARDADAS EN LA BASE DE DATOS

";

//Consulta de TODOS los datos de la BD
$result = mysqli_query($con,"SELECT * FROM personas");

//Muestra los resultados de la consulta
while($row = mysqli_fetch_array($result))
{
        echo "NOMBRE: " . $row['nombre'] . "";
        echo "APELLIDOS: " . $row['apellidos'] . "";
        echo "EDAD: " . $row['edad'] . "";
        echo "FECHA: " . $row['fecha'] . "";
        echo "DATOS: " . $row['datos'] . "";
        echo "
";
}

mysqli_close($con);


?>

  

Conexión a BD y consulta de datos: buscar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");

// Comprueba conexion
if (mysqli_connect_errno())
{
        echo "Fallo al conectar a la BD: " . mysqli_connect_error();
}


echo "

BUSCAR PERSONAS

";


//Consulta de NOMBRE mediante formulario en la BD
echo "
";
        echo "NOMBRE a buscar:
";
        echo "";
echo "
";


$result = mysqli_query($con,"SELECT * FROM personas WHERE nombre='$_POST[nombre]'");


//Muestra los resultados de la consulta
while($row = mysqli_fetch_array($result))
{
        echo "NOMBRE: " . $row['nombre'] . "";
        echo "APELLIDOS: " . $row['apellidos'] . "";
        echo "EDAD: " . $row['edad'] . "";
        echo "DATOS: " . $row['datos'] . "";
        echo "
";
}

mysqli_close($con);


?>


  
Conexión a BD y borrar datos: borrar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");

// Comprueba conexion
if (mysqli_connect_errno())
{
        echo "Fallo al conectar a la BD: " . mysqli_connect_error();
}

//Inserta desde formulario
$sql="DELETE FROM personas";

if (!mysqli_query($con,$sql))
{
        die('Error: ' . mysqli_error($con));
}

echo "

SE HA BORRADO TODOS LOS DATOS DE LA BASE DE DATOS

";

echo "";
mysqli_close($con);
?>

  

Conexión a BD y borrar datos por persona: borrar.php

//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");

// Comprueba conexion
if (mysqli_connect_errno())
{
        echo "Fallo al conectar a la BD: " . mysqli_connect_error();
}


echo "

BUSCAR PERSONAS

";


//Consulta de NOMBRE mediante formulario en la BD
echo "
";
        echo "NOMBRE a buscar:
";
        echo "";
echo "
";


$result = mysqli_query($con,"DELETE FROM personas WHERE nombre='$_POST[nombre]'");

echo "

SE HA BORRADO TODOS LOS DATOS DE LA PERSONA $_POST[nombre]

";


mysqli_close($con);


?>


  


Redis y Sesiones en PHP.

Vamos a usar ahora PHP con conexión a una Base de Datos, pero no va a ser MySQL, en este caso usaremos Redis.

También veremos en este caso el uso de sesiones.

Como funcionan las sesiones, …


El protocolo HTTP es stateless (sin estado).
Esto significa que no guarda la sesion del usuario que se encuentra en el momento conectado.

Esto es al menos en teoría, pero en la práctica esa no es nuestra experiencia cuando entramos en una web como usuarios.

POr ejempo, al navegar en un shopping site, el website "recuerda" que productos pusimos en la cesta.
¿Cómo trabaja, entonces ...?

La información adicional es salvada y enviada con nuestra petición al web server mediante el uso de cookies.
El uso de cookies se basa en variables key/value, es decir variables que pueden almacenarse en el sistema cliente y enviarse en una próxima petición al server.



Una cookie (o galleta informática) es una pequeña información enviada por un sitio web y almacenada en el navegador del usuario, de manera que el sitio web puede consultar la actividad previa del usuario.

Sus principales funciones son:

  •  Llevar el control de usuarios: cuando un se introduce un nombre de usuario y contraseña, se almacena una cookie para que no tenga que estar introduciéndolas para cada página del servidor.
    Sin embargo, una cookie no identifica solo a una persona, sino a una combinación de computador-navegador-usuario. 

    Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware (programas espía), por parte de agencias de publicidad y otros. 

    Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores. 


    Originalmente, sólo podían ser almacenadas por petición de un CGI desde el servidor, pero Netscape dio a su lenguaje Javascript la capacidad de introducirlas directamente desde el cliente, sin necesidad de CGIs. 

    En un principio, debido a errores del navegador, esto dio algunos problemas de seguridad. 

    Las cookies pueden ser borradas, aceptadas o bloqueadas según desee, para esto sólo debe configurar convenientemente el navegador web.




El mecanismo

Cuando estamos en el server, estos son los pasos a tener en cuenta al escribir código PHP.

1.   Una petición llega desde el cliente, sin cookie(s)
2.   Se envía la respueta, incluyendo cookie(s).
3.   Llega la próxima petición. Puesto que cookie(s) fueron ya enviadas     ellas han sido devueltas a nosotros en esta posterior petición.
4.   Se envía la próxima respuesta, también con cookie(s) (cambiadas o no).
5.   Pasos 3-4 son repetidos indefinidamente.

La cuestión importante de recordar es que , para una primera visita, desde un nuevo cliente (o alguien que limpia sus cookies), "no habrá cookies".

Otra cosa a tener en cuenta es que las cookies son devueltas al server desde el cliente en siguientes peticiones por "convención". No todos los clientes harán esto automáticamente.

Lo más importante de recordar acerca de cookies es que no puedes "confiar" en los datos.
Cuando una cookie es enviada al cliente, este la almacena en plain text en aquel sistema, luego los usuarios pueden editar cookies a su antojo, como agregar y elminar cookies facilmente.


Trabaja con cookies en PHP

Puesto que PHP está diseñado para resolver problemas Web, entonces tiene algunas grandes caracterísitcas para trabajar con cookies. Para 'set' una cookie usa la función 'setcookie()' :

  setcookie("visitado",true);
  ...
?>

El array 'superglobal' $_COOKIE contiene las keys y valores de las cookies que fueron enviadas en las peticiones.
En nuestro script PHP del lado servidor, nos interesa chequear los valores de $_COOKIE y usar la función setcookie.

Veamos las cookies enviadas por el server

Usando el cliente curl podemos crear la petición.
Curl además de mostrar la respuesta del server, le podemos indicar de forma sencilla donde guardar las cookies recibidas y luego por ejemplo, decidir editar dicha información.

$ curl -c cookie.txt http://localhost/quiz/index.html


Con la opción -b puedes enviar cookies junto con la petición.
Así que puedes probar realizar peticiones a tu script del quiz salvando las cookies, copiarlas a un nuevo fichero, editarlo, realizar cambios y lanzar una nueva petición teniendo en cuenta ese fichero, sería:

$ curl -b cookie.back http://localhost/quiz/index.html

Pero como todavía puedes no tener trabajando al quiz puedes practicarlo con un script que registre visitas, podría ser:

  if(!isset($_COOKIE['visitado'])) {
    echo " Es tu primer visita
" ;
    $j=1;
  }
  else {
   $j=$_COOKIE['visitado'];
   echo " Visita número " . ++$j . "

" ;
  }
  setcookie("visitado",$j);
?>


$ curl -c cookie.txt http://localhost/2_mecanismo_cookie1.php




Vamos a instalar REDIS:

Nos descargamos a través del repositorio git la version de la Base de Datos REDIS inestable desde: https://github.com/antirez/redis/tree/unstable



Instalamos el servidor de Base de Datos a través del repositorio y no a través de apt-get install. Lo hacemos así porque queremos, porque se podría haber  hecho por apt-get install.

Para ver que versión se ha descargado: $ apt-cache showpkg redis-server


Te aconseja también cual te descargaría, o que actualizaciones te haría.

Para ver la versión de mi Ubuntu: $ uname -a
Vemos que versión pertenece en la URL: http://packages.ubuntu.com/search?keywords=redis-server


Ahora construyo, …
1)          NO HACE FALTA el ./configure
2)          make este es el que compila. Se ha creado entre otros, src/redis.server
3)          $ ./redis-server vemos la versión(CTR-C)
4)          nano redis.conf
        demonize yes
5)          cd src
        ./redis-server ../redis.conf


**NOTA:
2.9.11
desde repositorio(la de desarrollo)
2.8.3 tar.gz para construir. ESTABLE
2.2.12 desde repositorio(la de desarrollo). ESTABLE




ACTIVIDAD: 
- conectar con el servidor redis
- conectar con un set

$ ./redis-cli
        127.0.0.1:6379> ping
        PONG
        127.0.0.1:6379> set miset nombre
        OK
        127.0.0.1:6379> get miset
        "nombre"


Pongo este código a la cabecera de mi bienvenida.php
#conectar con la base de datos
$db = new Redis();
$db->connect('localhost',6379);
$db->sadd('miset',$_POST['nombre']);
?>

Ahora añado al codigo de cabecera del PHP de la conexión a la Base de datos lo siguiente, quedando así:

#conectar con la base de datos
$db = new Redis();
$db->connect('localhost',6379);
$db->sadd('miset',$_POST['nombre']);
if($db->sismember('nombres',$name)) {
    echo "
....existente en la BD no graba...
";
 }
 else {
    $db->sadd('nombres',$name);
    echo "
....grabado...
";
 }
?>


Compruebo que se ha guardado el dato y se ha creado la variable miset
$ cd /home/mjesus/redis/src/
$ ./redis-cli
        > keys *
        1) "foo"
        2) "miset"

        > smembers miset

        > sismember miset pepe
        (integer) 1
  



Ahora, lo primero que debemos hacer es inicializar el servidor Redis, entrar en este y crear un usuario:

$ cd ~/redis/src
$ ./redis-server ../redis.conf
$ ./redis-cli
        > sadd miset "pepe"

  
session_start();
if (!isset($_SESSION['count'])) {
        $_SESSION['count'] = 0;
} else {
        $_SESSION['count']++;
        echo $_SESSION['count'];
}


if (!isset($_GET['login']) and !isset($_SESSION['login'])) {
        echo "Debes hacer login";
        exit;
}


if(!isset($_SESSION['login'])){
        if(isset($_GET['login'])){

                echo "Conectado con la base de datos\n";
                $db = new Redis();
                $db->connect('localhost',6379);

                $name=$_GET['login'];

                        if ($db->sismember('miset',$name)){
                                echo "OK, login realizado";
                                $_SESSION['login']=$name;

                        }else{
                                echo "usuario NO encontrado";
                                exit;
                        }
         }
}


if(isset($_GET['logout'])){
        unset($_SESSION['login']);
}

?>





Como usar pygments en PHP


Pygment es una función de PHP que proporciona una interfaz fácil de comando resaltador de sintaxis. Pygmentize es una interfaz de línea de comandos a la biblioteca Pygments, escrito en Python. Esto hace que sea fácil de Copy'n'Paste de código en bruto en los documentos HTML + PHP.


# sudo apt-get install python-pygments



ejemplo:

 pygmentize print
($ some_python_code, $ language = "python", $ style = "monokai",
 $ TabWidth = 4, $ extra_opts = "-O linenos = mesa, hl_lines = '7 8 9 '");
 ?>





 $code = '# Look for string:\ngrep -i string sample.php';

 / / La lista de ~ 197 idiomas soportados se puede ver mediante la ejecución de "pygmentize -L"
 $language = "bash";

 / / La lista de los 18 estilos admitidos se puede ver mediante la ejecución de "pygmentize-L"
 $style = "fruity";

  $tabwidth=4

 / / Esta cadena se pasa directamente en la línea de comandos.
 / / Debe comenzar con "O", de acuerdo a los docs pygmentize.
 / /$extra_opts="-O linenos=table,linenostart=57,hl_lines='69'"
 $extra_opts=""

 / / Tenga en cuenta que sólo se requieren los tres primeros argumentos.  Dejamos
 $html = pygmentize( $code, $language, $style );

 print $html;
 / / imprimirlo en la página ... o lo que sea.  Es sólo una cadena de HTML y CSS.

 ?>


Comentarios

Entradas populares de este blog

Configuración y Uso de Pandora FMS 5.0 SP3

CONFIGURACIÓN DE LA RED Lo primero que se debe de hacer es conocer la red que necesitas monitorizar, las distintas redes que posees y configurar las interfaces del CentOS donde tienes instalado Pandora FMS para que este sistema pueda verlas. Si haces un ping a alguna de estas redes, este debería responderte. Un ejemplo de como configurar distintas redes en CentOS sería el siguiente, donde las X son las que corresponda a tú red: # cd /etc/sysconfig/network-scripts/ # cat ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:75:A5:F2 TYPE=Ethernet BOOTPROTO=static IPADDR=10.x.x.155 BROADCAST=10.x.x.254 GATEWAY=10.x.x.1 NETMASK=255.255.255.0 DNS1=10.x.x.x DOMAIN=dominio.local DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no UUID=920d0ead-e3ad-4c99-8c79-617812986fb4 ONBOOT=yes # cat ifcfg-eth0:0 DEVICE=eth0:0 HWADDR=00:0C:29:75:A5:F2 TYPE=Ethernet BOOTPROTO=static IPADDR=10.x.x.155 BROADCAST=10.x.x.254 GATEWAY=10.x.x.

Mensajería OpenFire: Instalación y Configuración

Exportamos una nueva OVA de DEBIAN. Configuramos su interfaz: # rm /etc/udev/rules.d/70-persistem-net.rules # reboot Preparamos la conexión remota: # apt-get install ssh #ifconfig -a Instalación paso a paso: $ ssh root@192.168.1.198 Necesitaremos en la instalación de  mensajería   OpenFire : Servidor LAMP •           Linux •           Apache •           MySQL •           PHP phpadmin y Java # apt-get install apache2 php5 mysql-server phpmyadmin # apt-get install openjdk-6-jdk Descarga y puesta en funcionamiento de OpenFire: # wget http://download.igniterealtime.org/openfire/openfire_3.9.1_all.deb # dpkg -i openfire_3.9.1_all.deb Para saber que está funcionando: # netstat -putan|grep java Voy al navegador de mi máquina REAL y pongo la IP:8080, en mi caso, 192.168.1.198:9090 No se recomienda que se use la Base de Datos internas

pfsense: Proxy Squid3 instalación y configuración

Nuestra máquina de pfsense con 2 adaptadores , uno en adaptador puente y otra en solo anfitrión: Me conecto desde el interfaz anfitrión al pfsense desde el navegador: Nos movemos a: System / Package/Available Packages/instalamos squid3 Service / Proxy server Configuramos en la pestaña de General las siguientes opciones: LAN Proxy Port: 3128 Allow users on interface(picado) Transparent Proxy(picado) Enabled logging(picado) Log Store Directory: /var/squid/logs Administrator email: email administrador Language: es SAVE Nos aseguramos que squid está corriendo: Status / Service Con esta configuración debemos tener internet en nuestro cliente Windows. RESTRICCIONES Y PERMISOS Podemos configurar las restricciones en la pestaña Service / Proxy server / (pestaña)ACLs Por ejemplo, restringimos el acceso a google.es: En Service / Proxy server / Local Cache o

FireWall de PFsense: NAT

NAT Network address transletion - Traducciones de direcciones de red Se diferencia de la tabla filter, que con estas reglas se redirecciona. Si queremos que nuestro servidor web de servicio al exterior, tiene una dirección interna, pero si sale con esta IP, al salir se corta la IP. Que el router coja esta IP interna de este servidor Web y la cambie por la IP publica del route se llama NAT. Esto que hace el router automáticamente es lo que vamos a hacer ahora. SNAT: source NAT(origen) DNAT: destination NAT(destino) SNAT, cambiamos el origen. Windows manda el paquete y llega a pfsense, y este cambia el origen PAQUETE: origen: wXP (192.168.56.2) ↔ WAN (80.21.21.21) destino: google.es DNAT, cambiamos el destino Queremos dar servicio web, pero mi servidor esta en una red privada, en la 10.0.0.2. Al dar la IP de mi WAN, debo hacer que llegue a mi servidor. Cada vez que llegue un paquete a la Wan al puerto, en este caso, 80, l

FireWall de PFsense: Reglas de Filtro 1/3

FILTER RULES (Reglas de Filtro) Para instalar el PFsense te recuerdo el enlace donde se explica en mi blog: http://mjesussuarez.blogspot.com.es/2013/12/instalacion-y-uso-de-pfsense.html A partir de este punto, entramos en PFsense a partir de la IP LAN: 192.168.56.2 Las 2 opciones mas interesantes de ver sobre cortafuegos en PFsense es NAT y Rules . Aunque usaremos también los Aliases . Dentro de interfaces tenemos LAN y WAN, pero también podemos asignar interfaces, como por ejemplo una zona demilitarizada(DMZ) para alojar en esta rama un Servidor Web . Para crear una interfaz nueva debemos ir a Interfaces / assign / VLANs . Pero que es una VLAN . Significa que físicamente están todas las redes unidas, pero Virtualmente se han formado LANs independientes y que no se ven unas a otras, o si se ven, pero están separadas virtualmente como si estuvieran separadas de forma física. Pero este tema lo trataremos mas adelante, ahora haremos