elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 172
441  Programación / PHP / Introducción a la base de datos MongoDB en PHP en: 14 Agosto 2011, 20:28 pm
No voy a entrar en detalles sobre el concepto NoSQL ni a explicar de forma detallada qué es y para que sirve. Si estás leyendo este artículo, doy por hecho que tienes unos conocimientos básicos de PHP y de dases de datos.

Los chicos de GenbetaDev han dedicado dos artículos para explicar el concepto NoSQL y una introducción a MongoDB:

_El concepto NoSQL, o cómo almacenar tus datos en una base de datos no relacional
_Una introducción a MongoDB


Recomiendo leer los dos artículos citados más arriba si aún se tienen dudas sobre este tipo de bases de datos o sobre MongoDB. En este artículo nos centraremos en el uso de MongoDB desde una aplicación escrita en lenguaje PHP.

Instalar MongoDB
Lo primero que hay que hacer, es descargar desde la página oficial la versión de Mongo correspondiente a nuestro sistema operativo, en mi caso lo instalaré en un sistema operativo Windows de 32 bits. Los desarrolladores nos recomiendan usar la versión de 64 bits (claramente se necesita un Sistema Operativo de 64 bits para que funcione), dado que, la versión de 32 bits solamente permite un tamaño máximo de 2 GB de la base de datos.




Una vez descargada la versión que corresponde a nuestro SO, la descomprimimos en alguna carpeta.

El siguiente paso es crear las carpetas donde MongoDB guardará las bases de datos, es recomendable crearlas en el raíz del disco local. Yo en mi caso, las he creado dentro del disco local C. Hay que crear una carpeta llamada data y dentro de esta carpeta, otra, llamada db.

Si lo hacemos usando la consola, quedaría algo así:

C:\ mkdir \data
C:\ mkdir \data\db
C:\ tree data
C:\>tree data
Listado de rutas de carpetas
El número de serie del volumen es C490-7C5B
C:\DATA
└───db

C:\>
A continuación, nos dirigimos a la carpeta donde hemos descomprimido los archivos descargados anteriormente. Dentro de esa carpeta, lo que más nos interesa es el directorio /bin, dicho directorio podemos agregarlo a la variable de entorno del sistema, si no queremos acceder siempre a esa carpeta cuando queramos arrancar el servidor.

Los ficheros más importantes son mongod.exe y mongo.exe. El primero es el "daemon" o el servidor en si, mientras que el segundo es la consola de administración.

Es posible ejecutar el servidor en modo standalone, pero en nuestro cosa, lo instalaremos como un servicio del sistema, para eso hay que ejecutar el siguiente comando:

C:\mongo\bin>mongod --install  --serviceName MongoDB --serviceUser root --servicePassword root --logpath ..\log\log.txt
Con el parámetro --serviceName le indicamos el nombre que tendrá el servicio, con los dos siguientes, el usuario y la contraseña, mientras que con el último, le indicamos un archivo de texto donde en caso de error, pueda volcar la información de depuración, dicho archivo tiene que estar previamente creado.

Ahora si miramos en los servicios del sistema, observaremos que uno nuevo se ha creado:





 
Para arrancar el servicio, podemos lanzar en la consola lo siguiente:

net start MongoDB
Pero si no queremos instalarlo como servicio, podemos ejecutar directamente el comando mongod sin ningún parámetro y tendremos el servidor corriendo de forma temporal.

C:\mongo\bin>mongod
mongod --help for help and startup options
Sun Aug 14 18:43:09 [initandlisten] MongoDB starting : pid=192 port=27017 dbpath
=/data/db/ 32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data

**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
**       with --dur, the limit is lower

Sun Aug 14 18:43:09 [initandlisten] db version v1.8.2, pdfile version 4.5
Sun Aug 14 18:43:09 [initandlisten] git version: 433bbaa14aaba6860da15bd4de8edf6
00f56501b
Sun Aug 14 18:43:09 [initandlisten] build sys info: windows (5, 1, 2600, 2, 'Ser
vice Pack 3') BOOST_LIB_VERSION=1_35
Sun Aug 14 18:43:09 [initandlisten] waiting for connections on port 27017
Sun Aug 14 18:43:09 [websvr] web admin interface listening on port 28017
Una vez arrancado el servicio, ese es el mensaje que obtendremos. Si accedemos con el navegador web a la dirección http://localhost:28017, veremos información sobre el servidor.

Para crear una base de datos, tendremos que usar el gestor, está en la misma carpeta que el "daemon" y se llama mongo.exe. Lo ejecutamos y veremos información sobre el sistema.

Procedemos a crear una base de datos llamada "php". Para eso usamos el comando use, seguido del nombre de la base de datos.
 




La base de datos no se crea al instante, sino, se crea primero en memoria y luego se escribe en el disco. Lo mismo pasa con los datos introducidos en la base de datos. Esto es bueno porque aumenta la velocidad, pero en caso de corte de energía, los datos al estar en la memoria, se perderían.

Ahora ya tenemos nuestro servidor MongoDB corriendo y una base de datos, llamada php.




Trabajar con MongoDB desde PHP
Si nuestra versión de PHP no incluye el drive para MongoDB, como es mi caso, hay que instalarlo manualmente. Nos dirigimos a la página de descarga del driver para PHP y elegimos la versión que se corresponde a la versión de nuestro PHP, en mi caso, la versión 5.3.

Página de descargas del driver MongoDB para PHP.

Una vez descargado el fichero, nos dirigimos a la carpeta donde PHP guarda las extensiones (en mi caso, al estar usando XAMPP, está en /xampp/php/ext) y copiamos el archivo llamado php_mongo.dll.

Después hay que incluirlo en el fichero de configuración de PHP, php.ini, para que al arrancar cargue también el driver de MongoDB. Abrimos el fichero php.ini y agregamos la siguiente línea: extension=php_mongo.dll.

Para que los cambios surjan efecto, hay que reiniciar el servidor Apache. Si al arrancar el Apache nos muestra algún error, hay que fijarse (lo pondrá en el error) en la versión de VC con la que está compilado nuestro Apache y elegir la dll (el driver de Mongo descargado anteriormente) que corresponda a la versión del VC de Apache.

Ahora vamos a empezar con el código, primero vamos a probar si el driver de MongoDB realmente funciona bien:
 

Código
  1. <?php
  2.  
  3. $conn = new Mongo();
  4.  
  5. if ($conn) {
  6. echo "Ok";
  7. } else {
  8. echo "Fail";
  9. }
  10.  
  11. ?>

Si recibimos el mensaje Ok, es que todo funciona perfectamente, como véis en el ejemplo, estamos instanciando la clase Mongo, al constructor de la clase podemos pasarle varios parámetros, como la dirección del servidor, el puerto, etc. En nuestro caso, al dejarlo todo por defecto, se conectará a localhost usando el puerto por defecto de Mongo.

Código
  1. <?php
  2.  
  3. $conn = new Mongo();
  4. $db = $conn->php; //seleccionamos la base de datos php
  5.  
  6. // elegimos una coleccion llamada usuarios
  7. $coll = $db->usuarios;
  8.  
  9. // agregamos usuarios
  10. $obj = array(
  11. "user" => "madpitbull_99",
  12. "email" => "madpitbull@mail.com",
  13. "password" => "pass"
  14. );
  15. $coll->insert($obj);
  16.  
  17. // agregamos otro usuario
  18. $obj = array(
  19. "user" => "Alex",
  20. "email" => "alex@mail.com",
  21. "password" => "pass_de_alex"
  22. );
  23. $collection->insert($obj);
  24.  
  25. // pedimos todos los elementos de la coleccion
  26. $res = $coll->find();
  27.  
  28. // iterate through the results
  29. foreach ($res as $obj) {
  30. echo $obj["user"] . " - " . $obj["password"] . "\n";
  31. }
  32.  
  33. ?>
  34.  
  35.  


El código no requiere muchas explicaciones, lo primero que hacemos es conectarnos al servidor (al instanciar la clase). Seleccionamos la base de datos (que hemos creado anteriormente), y la colección (es como una tabla de los motores SQL) e insertamos dos usuario que más tarde listaremos.

A partir de aquí esto depende de vosotros, más abajo os dejo la documentación necesaria para seguir practicando, al final y al cabo, al poca diferencia entre usar MySQL, PostgreSQL o cualquier otro.

_Seguridad en PHP al usar MongoDB
_Documentación oficial (php.net) del driver nativo

442  Programación / PHP / Re: Recomendaciones al crear una red social en: 14 Agosto 2011, 12:27 pm
Has pensado en usar una "ya hecha" y adaptarla a tus requisitos?

Free PHP Social Network Script Collection.

Para los temas de escalabilidad, puedes usar alguna base de datos NoSql, como MongoDB.
443  Foros Generales / Foro Libre / ¿Creeis que esto es cierto? en: 13 Agosto 2011, 20:32 pm
El mensaje '¿Creeis que esto es cierto?' fue bloqueado
Esto no es un chat. No le veo ningún sentido a este post, a parte, habéis empezado con las ofensas.
Leer reglas:
http://foro.elhacker.net/reglas
444  Programación / Programación General / Re: Base de datos embebidas como sqlite pero NoSQL en: 13 Agosto 2011, 20:09 pm
Tal vez en NoSQL Databases encuentres algo que te sirva.

Prueba también OrientDB, Neo4j y como no Berkeley DB.

Para Redis hay un cliente llamado JRedit, puede que sea lo que busques.
445  Comunicaciones / Redes / Re: se me desconecta internet inalambrico en: 13 Agosto 2011, 19:33 pm
Si sólo te pasa con la Red2 entonces el problema no es tuyo. Seguramente sea el AP (Punto de Acceso).

Citar
¿el motivo por el que puedo conectarme aparte de la red-2 tambien a la red-1 es por que la persona que me da internet ha hecho lo que llaman subneteo?

Subnetwork. Seguramente esté usando un repetidor. O sea, que da igual que si te conectas a la Red1 o a la Red2, al final acabas conectándote al mismo sitio.
446  Comunicaciones / Redes / Re: ayuda configurar proxy(squid) en: 13 Agosto 2011, 19:16 pm
¿Y donde está el problema?

Las ACL de Squid son muy flexibles, permiten aplicar un horario sobre la ACL.

Citar
acl nombre_acl_horaria time [dias-abrev] [h1:m1-h2:m2]

Donde la abreviatura del día es:

S - Sunday (domingo)

M - Monday (lunes)

T - Tuesday (martes)

W - Wednesday (miércoles)

H - Thursday (jueves)

F - Friday (viernes)

A - Saturday (sábado)

además la primera hora especificada debe ser menor que la segunda, es decir h1:m1 tiene que ser menor que h2:m2

Por ejemplo

acl horario_laboral time M T W H F 8:00-15:00

Estaríamos especificando un horario de 8 a 15 y de lunes a viernes.

Tienes que leer más la documentación de Squid:

_Concepto de ACL en Squid.
_SQUID Y LAS LISTAS DE CONTROL DE ACCESO (1ra. Parte).

Hay mucha información sobre éste tema en la red.

447  Comunicaciones / Redes / Re: Servidor FTP programado en Python por mí en: 13 Agosto 2011, 19:04 pm
No sé si habrás arreglado el bug, pero acabo de probarlo y sigue igual (he seguido usando la consola).

Sugerencias para la siguiente versión:
  • Una vez iniciado el server, si se pulsa CTRL+C (con ésta combinación si funciona) o CTRL+Z que se cierre el proceso.
  • Al iniciar el servidor que muestre algún mensaje informativo, tipo: "Mipserv is starting up.... [Ok]
  • Ejecutar el servicio como Daemon.
  • Después de cerrar/apagar el script, parece que no libera bien el puerto (supongo que no cierra el socket). Muestra un error que dice: "Error al escuchar por el puerto 123".
  • Al enviar el comando LIST parece que el servidor no responde. Tiene algo que ver con el modo pasivo.



Aún tienes que afinarlo un poco más.
448  Programación / PHP / Re: crear consulta aprtir de un archivo exel en: 12 Agosto 2011, 23:33 pm
Puedes pasarlo a formato CSV, PHP tiene funciones nativas para trabajar con éste formato.

Si no quieres alterar el formato, puedes usar alguna de las muchas librerías para trabajar con Excel en PHP:

_PhpExcel.
_PHP-Excel.
_PHP Excel Reader.
_Read and write Excel data with PHP (Muy interesante).

O usando la API de Google, puedes hacerle consultas al documento Excel como si se tratara de SQL:

_http://code.google.com/apis/ajax/playground/#data_source_request
_http://code.google.com/apis/ajax/playground/#more_query_options (Es más avanzado que el siguiente)
_http://code.google.com/apis/ajax/playground/#using_the_query_language

A éste último ejemplo me refiero: SELECT A,D WHERE D > 100 ORDER BY D.
449  Comunicaciones / Redes / Re: Servidor FTP programado en Python por mí en: 12 Agosto 2011, 22:38 pm
Acabo de probarlo:



Cuando intento autenticarme, no me deja introducir ningún comando, solo con pulsar alguna tecla, ya sale el mensaje de error:




450  Foros Generales / Dudas Generales / Re: Existe algun auto-twitter en: 12 Agosto 2011, 19:59 pm
Voy a ver si con el PHP lo logro recargando la pagina cada X Segundos y enviar un tweet a determinada hora.

Eso se hace usando CRON.
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 172
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines