Mar
16
2010
0

Virtualizar Ubuntu en Windows XP con Virtual Box

Me han preguntado como provar GNU/Linux en Window$ Xp. Para ello lo mejor es virtualizar ubuntu a travez de una maquina virtual.

He encontrado una guia muy buena, asi que la copio aquí

Para comenzar el procedimiento, necesitaremos unas cuantas cosillas para completarlo correctamente, las cuales son:

  1. CD/DVD del sistema operativo Ubuntu o su respectiva imagen CD/DVD
  2. Descargar la última versión estable del software VirtualBox disponible en este enlace (pesa alrededor de unos 60 megas)
  3. En cuanto a los requerimientos mínimos, no hay, ya que los límites se los asignas tú (la ram y el disco duro)

Asumiendo que ya se descargó el software (VirtualBox) y también ya se instaló. Comenzaremos con los primeros pasos para comenzar la instalación de Ubuntu en la máquina virtual los cuales los divideremos en la siguiente etapas:

Creación y asignación de recursos de la máquina virtual

Tal vez el paso más sencillo de todo el proceso ya que en base a un asistente iremos ingresando los parámetros que necesita la máquina virtual según el poder de nuestro equipo.

Después de haber completado la instalación del software, procedemos a abrirlo, al hacerlo nos toparemos con una ventana de inicio.

En dicha ventana, para comenzar el asistente presionaremos el botón de “Nueva”. Inmediatamente después aparecerá la ventana referente a éste, para avanzar presionaremos “Siguiente”.

2

El nombre de la máquina virtual y el tipo de sistema que se le instalará, el nombre es opcional y el sistema operativo en este caso será  Linux en su versión Ubuntu.

3

Una de las etapas más importantes en la virtualización, la selección de la memoria. Esta parte cambiará para todos, ya que dependiendo de los recursos con los que cuente nuestra computadora (memoria RAM) podremos anadir más o menos, según sea nuestro caso.

Se recomienda dejar al menos la mitad de memoria para el sistema operativo base y asignar la otra mitad a la máquina virtual, es decir, no se excedan. Por ejemplo si tenemos 2 GB de RAM, lo ideal sería anadir 1 GB a la máquina virtual para que el sistema base no entre en conflicto.

4

Seleccionar la imagen de disco duro que usaremos para bootear (arrancar). Como recién acabamos de crear la máquina virtual entonces crearemos uno nuevo, entonces seleccionaremos “crear un disco virtual nuevo” y pulsaremos el botón “Siguiente”.

5

El inicio de otro asistente, con éste configuraremos nuestro disco duro virtual en unos cuanto pasos.

6

Lo siguiente es elegir el tipo de almacenamiento que utilizaremos, siendo dos opciones las disponibles: el de expansión dinámica y el de tamano fijo. Como no tenemos idea cuanto ocupará la instalación de Ubuntu, seleccionaremos la primera opción: Almacenamiento de expansión dinámica.

7

Lo siguiente será añadir el disco duro virtual que vamos a utilizar en la máquina. En sí, el asistente pone los datos que l suministramos al inicio, asi que dejaremos los datos como están y solo presionaremos el botón de “siguiente”.

8

Por último, ya solo bastará con presionar el botón de terminar para completar la etapa de asignación de recursos en nuestra máquina virtual.

9

Virtualizando (iniciando) nuestra máquina virtual

Ya hemos preparado nuestra máquina para poder instalar un sistema operativo en ella. De haber realizado todo correctamente tendremos una pantalla como la siguiente:

10

En dicha ventana se muestran las características de nuestra PC Virtual (los que introducimos en el paso anterior). Hasta este momento es como si tuvieramos nuestro ordenador apagado. Lo siguiente será “encenderlo”.  Para realizar dicha acción daremos clic derecho sobre el nombre de nuestra máquina y seleccionaremos “iniciar” tal y  como se muestra acontinuación:

11

12

Ya hemos “encendido” nuestra PC.  Pero ésta aún no tiene sistema operativo (recuerdar que es nueva), afortunadamente el software (VirtualBox) detecta que aún no hay sistema e inmediatamente después de iniciarla nos mostrará otro asistente.

En dicho asistente se nos informa lo que previamente comentamos “que nuestra máquina aún no tiene sistema”. Con presionar “siguiente” pasaremos a la siguiente etapa.

13

En esta parte seleccionaremos el medio de instalación del sistema por CD/DVD… En esta parte es donde haremos uso del CD/DVD de Ubuntu que se mencionó en los requisitos.

Para continuar, seleccionaremos CD/DVD y además, indicaremos la unidad que éste tiene (por lo regular suele ser D:), una vez indicados los dos datos daremos “siguiente”.

14

Ya por último, solo presionaremos el botón de “Terminar” para que nuestra configuración tenga efecto.

15

Booteando el CD/DVD de Ubuntu en nuestra máquina virtual

Después de haber configurado e iniciado nuestra máquina, ya sólo será necesario insertar el CD/DVD de Ubuntu. Al hacerlo, la máquina que hemos creado y configurado booteare este disco y podremos iniciar la instalación del sistema.

16

En la siguiente parte de esta guía/tutorial completaremos los pasos para la instalación virtual de Ubuntu sobre Windows XP.

Cabe destacar que no tiene que ser siempre una instalación desde un CD/DVD, también puede ser realizada desde un pendrive/memoria usb o bien, desde una imagen de disco que tengamos en el disco duro o incluso, alguna que tengamos guardada en la red.

Visto en | http://culturacion.com/

Written by Jp Neira in: Computación / Internet, GNU/Linux |
Mar
14
2010
0

10 tipos de personas

Hay 10 tipos de personas, las que saben ternario, las que no, y las que lo confunden con binario.

– Anónimo

Written by Jp Neira in: Computación / Internet, Humor |
Mar
12
2010
0

¿Tienes un notebook con acelerómetro? Ayuda a detectar terremotos

¿Quieres medir terremotos? Esta es tu oportunidad de hacerlo desde tu casa. Hemos recibido un mensaje del profesor Andrés Sepúlveda del Departamento de Geofísica de la Universidad de Concepción, Chile, donde se está realizando un experimento para crear una red de observación sismológica (colaborando con la Universidad de Stanford) y se necesitan voluntarios.

Para participar, sin embargo, es necesario tener un notebook que venga con acelerómetro integrado. Normalmente los equipos más nuevos (menos de 5 años) traen uno, así que revisa tu hardware si quieres colaborar con el proyecto.

Los acelerómetros en los notebooks nuevos se usan normalmente para proteger el disco duro, pero con la instalación de un programa especial pueden transformarse en sismógrafos. El proyecto Quake Catcher Network de la Universidad de Stanford y la Universidad de California, desarrolló este programa y quiere instalarlo en los computadores de la zona para entender mejor las réplicas del terremoto”, explica Sepúlveda.

Además, necesitarás tener de sistema operativo Windows o Mac (no existe el software para Linux) y conexión a internet permanente o al menos durante medio día.

Se están buscando voluntarios especialmente en Chile, dentro de la zona afectada por el terremoto de 8,8º Richter y sus réplicas. Si vives en otro país donde haya sismos que no sea Chile, también puedes inscribirte como voluntario dentro de la red global del proyecto.

Si estás en Chile y estás interesado, contacta al Dr. Andrés Sepúlveda en andres.sepulveda@gmail.com o inscríbete directamente en el sitio.

Via | FayerWayer

Written by Jp Neira in: Ciencia, Computación / Internet |
Mar
11
2010
0

Supercomputador más rápido de China tendrá CPUs de fabricación nacional

BEIJING, 8 mar (Xinhua) — Científicos chinos equiparán al supercomputador más rápido del país, el “Tianhe-1″, con chips de unidades centrales de procesamiento (CPUs, siglas en inglés) de fabricación nacional este año, con los que se reemplazará el único componente importado del aparato.

Zhang Yulin, rector de la Universidad Nacional de Tecnología de Defensa, que desarrolló el computador, afirmó hoy lunes a Xinhua que los nuevos chips han sido especialmente diseñados especialmente para el “Tianhe-1″, que significa Vía Láctea en chino mandarín.

“Los nuevos CPUs permitirán aumentar notablemente la velocidad máxima y eficiencia de computación del ‘Tianhe-1′”, subrayó Zhang durante una rueda de prensa celebrada en Beijing en el marco de la sesión anual de la Asamblea Popular Nacional, máximo órgano legislativo del país.

El “Tianhe-1″, presentado en octubre del año pasado, podría competir con los computadores más potentes del mundo. En teoría, es capaz de hacer más de 1.000 billones de cálculos por segundo cuando funciona a su velocidad máxima.

Expertos del país calculan que el “Tianhe-1″ puede completar en un día los cálculos que un ordenador personal con procesador “dual-core” tardaría 160 años en terminar.

Equipado con 6.144 CPUs Intel y 5.120 unidades procesadoras de gráficos (GPU, siglas en inglés) de AMD, el “Tianhe-1″ tiene capacidad para almacenar hasta cuatro veces el contenido de los 27 millones de libros de la Biblioteca Nacional de China.

El supercomputador comenzó a funcionar parcialmente en fase de pruebas en la municipalidad septentrional de Tianjin. Hasta ahora, se ha probado con éxito el primer paquete de sus equipos, por lo que se ha pasado ya a la etapa de pruebas de los clientes.

En la actualidad, de acuerdo con los funcionarios, la capacidad operativa de la primera partida de equipos equivale a una décima parte de la capacidad total del “Tianhe-1″, y se espera que la instalación de los elementos restantes esté completada antes de finales de este año.

Via | @zuargo

Written by Jp Neira in: Computación / Internet, Tecnología |
Mar
11
2010
0

¡Feliz cumpleaños Chuck Norris!

verdades sobre Chuck Norris

Wow, que rápido pasa el tiempo, afortunadamente no para Chuck Norris, que aunque nació hace 70 años, eso no es problema para él porque su inmortalidad está asegurada, más allá de ser un actor estadounidense, campeón de kickboxing y fundador de una asociación de karate, Chuck Norris se ha convertido en un hito en la web, los geeks/frikis lo han adoptado casi como a un dios, en la wikipedia describen una serie hechos como chistes, los famosisimos Chuck Norris Facts.

Los Chuck Norris Facts nacieron por allá en el 2005 y se han esparcido como un virus, sólo por mencionar algunas de estas verdades:

  • Chuck Norris no lleva reloj, él decide que hora es.
  • Chuck Norris puede dividir entre ceros.
  • Chuck Norris embarazo a una chica por teléfono.
  • Chuck Norris vio todos los videos de youtube… 4 veces.
  • Chuck Norris puede ver con los ojos cerrados.
  • Chuck Norris perdio la virginidad antes que su padre.
  • Chuck Norris nunca pierde en buscaminas.
  • El mar muerto está muerto, porque Chuck Norris lo mató.
  • Chuck Norris sabe como se llaman los padres de Timmy Turner.
  • Chuck Norris puede respirar bajo el agua, y bajo el fuego.
  • Chuck Norris puede rascarase el codo derecho con la mano derecha.
  • Chuck Norris puede oir el silencio.
  • Chuck Norris suda en el polo norte estando desnudo.
  • Chuck Norris puede rebobinar un DVD.
  • Chuck Norris puede mezclar el agua y el aceite con la mirada.
  • Chuck Norris ha visto la parte superior de los padres de vaca y pollito.
  • Chuck Norris no envejece, no le ve utilidad.
  • Chuck Norris usa papel de lija como servilleta.
  • Chuck Norris puede mentir diciendo la verdad.
  • Chuck Norris sabe el final de LOST.
  • Las uñas de Chuck Norris pueden rayar un diamante.
  • Chuck Norris puede embarazarte cuando lees esto.
  • A Chuck Norris nunca se le lagea Windows Vista.
  • Chuck Norris puede tomar la sopa con el tenedor.
  • Chuck Norris va a Burger King, pide una BigMac y se la dan.
  • Chuck Norris vende su orina con el nombre de Redbull.
  • Chuck Norris hace programas usando Paint.
  • Chuck Norris rompe una guia telefónica con una uña.
  • Cuando Chuck Norris escupe se le llama Tsunami.
  • Chuck Norris puede hablar en Braile.
  • Las lágrimas de Chuck Norris curan el cancer, pero el nunca llora.
  • Chuck Norris no lo considera sexo si la mujer sobrevive.
  • Chuck Norris instala Call of Dutty 4 en un disquete.
  • Chuck Norris tocó la canción de DragonForce en hard, en el guita hero 3 sin fallar una nota.C
  • Cuando Chuck Norris mira el horizonte puede ver su propia nuca.
  • Chuck Norris puede quemar una hormiga con una lupa… de noche.
  • Chuck Norris guarda sus MP3s en un vinilo.
  • Chuck Norris va a 100000000km/h cuando está quieto.
  • Chuck Norris escapó de prision break por la puerta principal.
  • Chuck Norris puede revivir una persona y volverla a matar.
  • Chuck Norris ha contado hasta el número infinito… dos veces.
  • Chuck Norris no lee libros, los mira fijamente hasta que consigue la información que quiere.
  • Chuck Norris es la razón por la que Wally se esconde.

Y para los que quieran, un Chuck Norris de papel.

Ah bueno, quiero mostrar la biografia de Chuck que hace la Inciclopedia:
Macho residente en Texas (no confundir con George W. Bush), se dedica a pegar patadas giratorias a tíos con sombreros y nachos. Es bien conocida su manía de no pasar en la calle más de cinco minutos seguidos sin armarla. Fue presidente de España desde el 2005 hasta el 2008 (porque, según los españoles, “tiene un buen par”). Aspiró a la presidencia de México solo para estar en un compló contra el Peje, pero como se aburrió, dejó en su lugar a Lord Farquaad. Espera ansiosamente su venganza final hacia Carod Rovira, que acontecerá el día que este lleve sombrero tejano.

Via | Mundo Geek

Written by Jp Neira in: Computación / Internet, Humor |
Mar
10
2010
0

TypeWith.me: Alternativa a Google Wave

En muchos casos, escribir un documento o un artículo es trabajo de una sola persona, que a su vez también puede encargarse de su posterior revisión y corrección. Sin embargo, hay situaciones en las que un documento debe ser creado a partir de la colaboración de dos o más personas. Gracias a Internet, todas las ediciones pueden hacerse en simultáneo, discutirse por canales de chat, compararse con versiones anteriores y exportar el resultado final a un formato de distribución común como por ejemplo el PDF. Esto es exactamente lo que ofrece TypeWith.me. No es necesario registrarse ni crear un usuario. Sólo debes ingresar al sitio y comenzar a trabajar en tu documento. A la hora de compartir el acceso al documento con tus colegas o colaboradores, lo único que tienes que enviarles es el enlace URL para que se unan a la edición.

La interfaz de TypeWith.me es sencilla y extremadamente funcional
La interfaz de TypeWith.me es sencilla y extremadamente funcional

TypeWith.me es considerado un clon del sistema de edición EtherPad, que fue comprado en diciembre de 2009 por Google para ser integrado a Google Wave. Esto causó mucho descontento entre la gran cantidad de usuarios de EtherPad, pero aportó algo positivo: El código de EtherPad fue liberado, entregando a muchos desarrolladores la posibilidad de crear sus propias aplicaciones colaborativas en línea. TypeWith.me es una de ellas, y a decir verdad, funciona muy bien. Su interfaz es muy simple, y el acceso al canal de chat es inmediato (para discutir cualquier modificación sobre el documento). También es posible importar documentos en formato HTML, RTF y DOC, algo especialmente útil si se comienza a trabajar localmente, para luego trasladar el documento y compartirlo con el resto de los colaboradores.

TypeWith.me importa tres formatos, y exporta seis, incluyendo PDF y DOC
TypeWith.me importa tres formatos, y exporta seis, incluyendo PDF y DOC

He tenido la posibilidad de acceder a Google Wave, pero debo reconocer que TypeWith.me logra menos con más. El acceso al chat es inmediato, cosa que en Google Wave no sucede (esos híbridos entre correos electrónicos y notificaciones no puede considerarse un chat verdadero), mientras que la sensación de “exceso de complejidad” que transmite Google Wave es innegable. TypeWith.me es más simple, y cumple con su objetivo. A la hora de ser productivos, los usuarios no pueden darse el lujo de extraviarse entre opciones y listas de contactos. Todo se reduce a entrar, editar el documento todo lo que sea necesario, verificar, corregir, exportar y salir. Con TypeWith.me obtendrás todo eso, pero si por alguna razón necesitás más, puede que algún otro clon del EtherPad te ofrezca lo que buscas.

Written by Jp Neira in: Computación / Internet |
Feb
22
2010
0

La FSF pide a Google la liberación del codec VP8 y su integración en YouTube

En una carta abierta a Google la Fundación por el Software Libre – FSF en sus siglas en ingles – esta exigiendo la liberación del codec VP8 que Google adquirió recientemente, además de utilizarlo en el popular sitio de videos YouTube, esto tendría como fin acabar con el dominio de otras tecnologías propietarias como Flash o H.264.

Antes de continuar debemos detenernos en analizar la petición de FSF; ¿Qué es VP8? Es un codec de video libre que según sus creadores tiene un rendimiento superior a H.264 en cuanto a calidad/bitrate, ésta tecnología pertenecía a la compañía On2 que fue adquirida recientemente por Google, a su vez la patente de VP8 pasó a sus manos.

… Liberando el codec VP8 bajo una licencia irrevocable libre de royalty y facilitando su uso a los usuarios de Youtube, Uds pueden poner termino a la dependencia de la web a patentes de formatos de video y software propietario (Flash)

La FSF quiere que se hagan las cosas bien, sí se libera el codec VP8 pero no se ofrece a los usuarios de YouTube esto será una batalla perdida contra los codecs propietarios además de dañar navegadores libres como Firefox que impulsan estándares que no obligan a nadie a pagar un royalty por su uso, según la FSF esto último le hace mal a la web por lo que el futuro del mundo formato de video reinante en internet esta en las manos de Google. Miedo.

Link: Open letter to Google: free VP8, and use it on YouTube (FSF)

Via | CHW

Written by Jp Neira in: Computación / Internet |
Feb
17
2010
0

Las 10 leyes de Internet: de la Ley de Godwin a la Regla 34

Interesante artículo del Daily Telegraph, tanto por su contenido, como por el hecho de que un diario serio hable de la regla 34. Os dejo un pequeño resumen de las leyes en la lengua de Cervantes :)

  1. Ley de Godwin: La más famosa de las leyes de internet, enunciada por Mike Godwing en 1990. Estipula que

    A medida que una discusión en internet se alarga, la probabilidad de que aparezca una comparación en la que se mencione a Hitler o a los Nazis tiende a uno

    Y se cumple.

  2. Ley de Poe: Enunciada por Nathan Poe en 2005, durante una discusión sobre la evolución con fundamentalistas cristianos.

    Si no se utiliza un smiley, o alguna otra demostración obvia de la intención humorística del texto, es imposible crear una parodia del fundamentalismo que alguien no confunda con fundamentalismo de verdad.

  3. Regla 34: Una de las populares Reglas de Internet de 4chan. Esta regla en concreto dice que

    Si existe, hay porno sobre ello

    Películas, documentales, objetos cotidianos, … todos sucumben ante la Regla 34

  4. Ley de Skitt: Una ley con la que hay que tener cuidado. Atribuida a G Bryan Lord en 1998, respecto de un usuario de Usenet llamado Skitt, establece que

    Todo mensaje que corrija el mensaje de otro usuario contendrá a su vez al menos un error.

  5. Ley de Scopie: Trata sobre las páginas con teorías conspiranoicas y su uso en las discusiones web

    En cualquier discusión sobre ciencia o medicina, citar a Whale.to como fuente fiable equivaldrá a perder la discusión automáticamente, y a ser expulsado con sorna por el resto de usuarios

  6. Ley de Danth: Toma su nombre de un usuario de los foros de RPG.net.

    Si en una discusión de Internet tienes que insistir en que ganaste, es probable que hayas perdido de forma escandalosa

  7. Ley de Pommer: Propuesta por Rob Pommer en 2007, dicta que

    La opinión de una persona puede cambiar tras leer información al respecto en internet. La naturaleza del cambio es tal que se pasa de no tener opinión a tener una opinión equivocada

  8. Segunda Ley de DeMyer

    Cualquier persona cuyo argumento consista principalmente en citas enormes puede ser ignorado sin miedo, y se considera que perdió la discusión antes de haber empezado

  9. Ley de Cohen

    Cualquiera que recurra al argumento de que “cualquiera que recurra al argumento de que… pierde el debate automáticamente”, pierde el debate automáticamente

  10. Ley de la exclamación

    Cuantos más signos de exclamación contenga un correo electrónico (o cualquier otro mensaje en internet), más posibilidades hay de que sea todo mentira. Esto también se aplica para el exceso de letras mayúsculas

Visto en  | mundo Week

Written by Jp Neira in: Computación / Internet |
Feb
08
2010
0

Tutorial rápido de PHP

Este tutorial me sirvio mucho a la hora de editar las plantillas de mi theme de wordpress

Introducción

PHP es un lenguaje de script, multiplataforma, publicado bajo una licencia libre, que se suele utilizar del lado del servidor para crear páginas web dinámicas. A día de hoy es el tercer lenguaje más popular del mercado según el índice TIOBE, sólo por detrás de Java y C.

Creado por Rasmus Lerdorf en 1995, su nombre es (actualmente) un acrónimo recursivo de “PHP: Hypertext Preprocessor” (Preprocesador de Hipertexto PHP).

La última versión estable a la hora de escribir estas líneas, la cuál se puede descargar desde su página web, es la 5.3.1, de Noviembre de 2009.

Ya explicamos hace tiempo cómo instalar Apache, y cómo instalar PHP y MySQL en Windows. También es posible descargar aplicaciones que instalen las 3 herramientas rápida y fácilmente (no recomendado para entornos de producción), como WampServer o XAMPP.

Primer programa en PHP

Creemos una primera pequeña página web dinámica, que mostrará la fecha y hora actual.

  1. <html>
  2. <head><title>Fecha y hora</title></head>
  3. <body>
  4. <?php
  5. // Esto imprime la fecha
  6. echo “Hoy es ”, date(“d/n/Y”);
  7. echo “<br/>”;
  8. // Y esto la hora
  9. echo “Son las ”, date(“h:m:s”);
  10. ?>
  11. </body>
<html>
<head><title>Fecha y hora</title></head>
<body>
<?php
// Esto imprime la fecha
echo "Hoy es ", date("d/n/Y");
echo "<br/>";
// Y esto la hora
echo "Son las ", date("h:m:s");
?>
</body>

Además de usando la sintaxis anterior, <?php .... ?>, que es lo más común y recomendable, también se puede insertar código PHP en documentos HTML usando:

  • <script language="php"> .... </script>
  • <? .... ?> si está activada la opción short_open_tag en php.ini
  • <% .... %> si está activada la opción asp_tags en php.ini

Esto no es Python: cada instrucción termina con ‘;’ (no es necesario si es la última instrucción).

Para los comentarios se puede utilizar:

  1. /* varias
  2. lineas */
  3. // una linea
  4. # una linea
/* varias
   lineas */

// una linea

# una linea

Aunque no es una característica integrada en el lenguaje, para comentarios de documentación se suele utilizar PHPDoc, el equivalente al JavaDoc de Java en PHP.

  1. /**
  2. * Ejemplo de documentación de una función
  3. * @param int $foo un entero cualquiera
  4. */
/**
 * Ejemplo de documentación de una función
 * @param int $foo un entero cualquiera
 */

Para imprimir datos por pantalla se puede usar, entre otros, echo, print, printf o print_r.

A echo se le pasa una cadena que imprimirá. No es necesario utilizar paréntesis porque no es una función. También se le puede pasar varias cadenas, separadas por comas, y este las imprimirá todas unas detrás de otra, sin dejar espacios entre ellas:

  1. echo “Hola ”, “mundo ”, “en PHP”;
echo "Hola ", "mundo ", "en PHP";

print funciona de forma similar a echo, pero no puede tomar varios argumentos, y devuelve un valor de retorno. Debido a esto es algo más lento que echo.

  1. print “Hola mundo”;
print "Hola mundo";

A diferencia de echo y print, printf sí que es una función. Se comporta de manera similar a la función del mismo nombre de C, es decir, se pueden utilizar especificadores de formato. En el siguiente ejemplo $nombre y $edad serían variables con el nombre y la edad de una persona, y su valor se embebería en la cadena en las posiciones indicadas por %s (especificador de cadena) y %d (especificador de entero).

  1. printf(“%s tiene %d años”, $nombre, $edad);
printf("%s tiene %d años", $nombre, $edad);

print_r es una función que podemos utilizar para la depuración. Su función es la de imprimir variables de forma legible para las personas. Por ejemplo, si le pasáramos una matriz, imprimiría sus claves y valores

print_r($matriz);

Variables

El nombre de las variables debe comenzar siempre con ‘$’.

PHP tiene tipado dinámico: al crear una variable no se especifica el tipo, sino que el intérprete de PHP lo determina en tiempo de ejecución según el contexto.

  1. $texto = “Hola mundo”;
$texto = "Hola mundo";

En PHP tenemos como tipos simples los booleanos (boolean), números enteros (integer), números en coma flotante (float) y cadenas (string). Como tipos compuestos tenemos matrices (array) y objetos (object). Además tenemos un par de tipos especiales: resource, enteros que se usan para referenciar recursos; y NULL, el tipo nulo.

Para obtener el tipo de una variable se puede utilizar gettype($var)

  1. $texto = “Hola mundo”;
  2. echo gettype($texto);
$texto = "Hola mundo";
echo gettype($texto);

Para obtener el tipo y otra información sobre la variable, como los valores para un array o las propiedades de un objeto, se puede utilizar var_dump($var)

  1. $texto = “Hola mundo”;
  2. echo var_dump($texto);
$texto = "Hola mundo";
echo var_dump($texto);

El tipo de una variable puede cambiar según el valor que almacenemos en ella.

  1. $variable = “Hola mundo”;
  2. echo gettype($variable), “<br/>”;
  3. $variable = 22;
  4. echo gettype($variable);
$variable = "Hola mundo";
echo gettype($variable), "<br/>";
$variable = 22;
echo gettype($variable);

Además las variables tienen tipado débil, y su tipo puede cambiar según el uso que queramos hacer de ellas.

  1. $variable = “22″;
  2. echo $variable / 2;
$variable = "22";
echo $variable / 2;

Para comprobar si una variable es de un cierto tipo se pueden utilizar las funciones is_tipo, como is_bool($var), is_string($var), is_object($var), is_float($var)

Para comprobar si una variable tiene un valor asociado se puede utilizar la función isset($var).

Para crear constantes se usa la función define. Al no ser variables propiamente dichas, no se utiliza el caracter $ al principio.

  1. define(“PI”, 3.14159);
  2. echo “Pi es ”, PI;
define("PI", 3.14159);
echo "Pi es ", PI;

Como hay un carácter que identifica las variables, podemos introducirlas directamente en una cadena, y PHP la sustituirá por su valor. No tenemos por qué hacer algo como

  1. $usuario = “Juan”;
  2. echo “Hola ”, $usuario“;
$usuario = "Juan";
echo "Hola ", $usuario";

sino que podríamos hacer simplemente

  1. $usuario = “Juan”;
  2. echo “Hola $usuario”;
$usuario = "Juan";
echo "Hola $usuario";

Si necesitamos indicar el final del nombre de la variable explícitamente se pueden utilizar llaves. En el siguiente código, por ejemplo, si no utilizáramos llaves el intérprete buscaría una variable de nombre $productos.

  1. $producto = “Donut”;
  2. echo “Le gustan los {$producto}s”;
$producto = "Donut";
echo "Le gustan los {$producto}s";

También se puede utilizar la misma sintaxis para hacer cosas más complejas, como llamar a funciones dentro de la cadena:

  1. echo “Ha comprado {$objeto.contar()} platos”;
echo "Ha comprado {$objeto.contar()} platos";

Operadores

Los operadores aritméticos son la suma (+), resta (-), multiplicación (*), división (/) y módulo (%).

Operadores de comparación

Operador Descripción
== true si ambos operandos son iguales
!= true si ambos operandos son distintos
=== true si ambos operandos son iguales, no sólo en valor, sino también en tipo
!== true si ambos operandos son distintos, en valor o tipo
< true si el primer operando es menor que el segundo
> true si el primer operando es mayor que el segundo
<= true si el primer operando es menor o igual que el segundo
>= true si el primer operando es mayor o igual que el segundo

Operadores lógicos

Operador Descripción
and / && true si se cumplen ambas condiciones
or / || true si se cumple una de las condiciones
xor true si se cumple sólo una de las condiciones
! true si no se cumple la condición

Booleanos

Las variables de tipo booleano pueden tener como valor true o false. Son equivalentes a false el 0, una cadena vacía, un array vacío y NULL.

Arrays

Para crear un array se utiliza la función del mismo nombre.

  1. $codigos = array(0 => “España”, 1 => “Italia”);
$codigos = array(0 => "España", 1 => "Italia");

Como clave se pueden usar números, como una matriz normal, o cadenas, para crear un diccionario o array asociativo.

  1. $codigos = array(“ES” => “España”, “IT” => “Italia”);
$codigos = array("ES" => "España", "IT" => "Italia");

Si no se especifica una clave se usa el último índice + 1, o bien 0 si no se ha especificado ningún índice aún:

  1. $codigos = array(“España”, “Italia”);
  2. $dias = array(1 => “Lunes”, “Martes”, “Miércoles”);
$codigos = array("España", "Italia");
$dias = array(1 => "Lunes", "Martes", "Miércoles");

También se puede crear una matriz usando los corchetes, elemento por elemento:

  1. $matriz[0] = “Hola ”;
  2. $matriz[1] = “mundo”;
$matriz[0] = "Hola ";
$matriz[1] = "mundo";

Si no se especifica la clave ocurre lo mismo que con la función array; se usa el último índice + 1, o 0 si no se ha especificado ningún índice todavía:

  1. $matriz[] = “Hola ”;
  2. $matriz[] = “mundo”;
$matriz[] = "Hola ";
$matriz[] = "mundo";

Para modificar un valor, también se usan los corchetes:

  1. $matriz[0] = “Hello ”;
$matriz[0] = "Hello ";

Para eliminar un par clave-valor se puede usar la función unset($var)

unset($matriz[0]);

unset es una función que sirve para eliminar una variable dada, así que podríamos eliminar la propia matriz haciendo

unset($matriz);

Para contar el número de elementos en el array se puede usar la función count($var), que también se puede usar con los objetos para contar el número de propiedades que tiene.

Para ordenar los elementos de la matriz se puede usar

  • sort($array)
  • rsort($array), ordena en orden inverso
  • array_multisort($array), para arrays multidimensionales
  • asort($array), ordena manteniendo la asociación de índices
  • arsort($array), ordena en orden inverso, manteniendo la asociación de índices
  • ksort($array), ordena por clave
  • krsort($array), ordena por clave en orden inverso
  • natsort($array), ordena usando un algoritmo de “orden natural”
  • uasort($array), ordena usando una función definida por el usuario, mateniendo la asociación de índices
  • uksort($array), ordena usando una función definida por el usuario usando las claves
  • usort($array), ordena usando una función definida por el usuario

Para comprobar si un determinado elemento está dentro de un array se usa in_array. PHP indexa todos los valores de los arrays, así que es mucho más rápido usar esta función que un bucle que compruebe uno por uno.

  1. in_array(“pepe”, $usuarios);
in_array("pepe", $usuarios);

Cadenas

Las cadenas se pueden delimitar de 4 formas. Con dobles comillas, en cuyo caso se pueden utilizar caracteres especiales, como \n o \t, y se sustituyen las variables por sus valores:

  1. $usuario = “Juan”;
  2. $mensaje = “<pre>Hola\n$usuario</pre>”;
  3. echo $mensaje;
$usuario = "Juan";
$mensaje = "<pre>Hola\n$usuario</pre>";
echo $mensaje;

comillas simples, en las que se NO se pueden utilizar caracteres especiales, ni se sustituyen las variables por sus valores. Debido a esto dan un rendimiento marginalmente mejor que las dobles comillas:

  1. $usuario = “Juan”;
  2. $mensaje = ‘<pre>Hola\n$usuario</pre>’;
  3. echo $mensaje;
$usuario = "Juan";
$mensaje = '<pre>Hola\n$usuario</pre>';
echo $mensaje;

sintaxis heredoc, en las que, como en las dobles comillas, se pueden utilizar caracteres especiales y se sustituyen las variables por sus valores. No se necesitan escapar las comillas si queremos imprimirlas, y se puede escribir el texto en varias líneas:

  1. $mensaje = <<< IDENTIFICADOR
  2. Ejemplo de cadena
  3. que ocupa
  4. varias líneas
  5. IDENTIFICADOR;
  6. echo $mensaje;
$mensaje = <<< IDENTIFICADOR
Ejemplo de cadena
que ocupa
varias líneas
IDENTIFICADOR;
echo $mensaje;

sintaxis nowdoc, similar a heredoc, pero no se sustituyen las variables por sus valores:

  1. $mensaje = <<< ‘IDENTIFICADOR’
  2. Ejemplo de cadena
  3. que ocupa
  4. varias líneas
  5. IDENTIFICADOR;
  6. echo $mensaje;
$mensaje = <<< 'IDENTIFICADOR'
Ejemplo de cadena
que ocupa
varias líneas
IDENTIFICADOR;
echo $mensaje;

Una vez creada se puede acceder a posiciones de la cadena como si de una matriz se tratara

  1. $cadena = “Hola mundo”;
  2. echo $cadena[5];
$cadena = "Hola mundo";
echo $cadena[5];

e incluso modificar posiciones de igual forma

  1. $cadena = “Hola amigo”;
  2. $cadena[9] = “a”;
  3. echo $cadena;
$cadena = "Hola amigo";
$cadena[9] = "a";
echo $cadena;

Se pueden concatenar cadenas con el operador ‘.’:

  1. $conc = “Hola ” . “mundo”;
  2. echo $conc;
$conc = "Hola " . "mundo";
echo $conc;

Para obtener el número de caracteres que tiene una cadena se utiliza la función strlen($cadena).

Para obtener parte de una cadena se utiliza la función substr($cadena, $inicio, $tamanyo)

  1. $cadena = “Hola mundo”;
  2. echo substr($cadena, 5, 3);
$cadena = "Hola mundo";
echo substr($cadena, 5, 3);

Para reemplazar una subcadena por otra se puede utilizar substr_replace($cadena, $reemplazo, $inicio, $tamanyo)

  1. $cadena = “Hola mundo”;
  2. echo substr_replace($cadena, “Arman”, 5, 3);
$cadena = "Hola mundo";
echo substr_replace($cadena, "Arman", 5, 3);

Para reemplazar todas las ocurrencias de una cadena por otra se puede utilizar la función str_replace($subcadena, $reemplazo, $cadena, &$ocurrencias)

  1. $cadena = “Hola mundo”;
  2. echo str_replace(“o”, “a”, $cadena);
$cadena = "Hola mundo";
echo str_replace("o", "a", $cadena);

Se puede dividir una cadena en partes utilizando un cierto delimitador con la función explode($delimitador, $cadena, $limite)

  1. $cadena = “Hola mundo”;
  2. $palabras = explode(“ ”, $cadena);
  3. print_r($palabras);
$cadena = "Hola mundo";
$palabras = explode(" ", $cadena);
print_r($palabras);

Para buscar una subcadena dentro de la cadena se puede utilizar la función strpos($cadena, $subcadena, $offset)

  1. $cadena = “Hola mundo”;
  2. $subcadena = “m”;
  3. $posicion = strpos($cadena, $subcadena);
$cadena = "Hola mundo";
$subcadena = "m";
$posicion = strpos($cadena, $subcadena);

Control de flujo

Condicionales

  1. if ($condicion) {
  2. echo “Se cumple la primera condición”;
  3. elseif ($condicion2) {
  4. echo “No se cumple la primera condición, pero sí la segunda”;
  5. else {
  6. echo “No se cumple ninguna de las 2 condiciones”;
  7. }
if ($condicion) {
    echo "Se cumple la primera condición";
} elseif ($condicion2) {
    echo "No se cumple la primera condición, pero sí la segunda";
else {
    echo "No se cumple ninguna de las 2 condiciones";
}
  1. switch($usuario) {
  2. case “admin”:
  3. echo “Bienvenido Dr. Falken”;
  4. break;
  5. case “zootropo”:
  6. echo “Hola Raúl”;
  7. break;
  8. default:
  9. echo “Lo siento Dave, me temo que no puedo hacer eso”;
  10. break;
  11. }
switch($usuario) {
    case "admin":
        echo "Bienvenido Dr. Falken";
        break;
    case "zootropo":
        echo "Hola Raúl";
        break;
    default:
        echo "Lo siento Dave, me temo que no puedo hacer eso";
        break;
}

Bucles

  1. for ($contador = 0; $contador < 10; $contador++) {
  2. echo “Contador vale $contador<br/>”;
  3. }
for ($contador = 0; $contador < 10; $contador++) {
    echo "Contador vale $contador<br/>";
}

Para recorrer los valores de un array es útil la construcción foreach, que recorre cada valor de la matriz uno por uno, incluidos los valores cuya clave asociada no es un número

  1. foreach ($_SERVER as $var){
  2. echo “$var<br/><br/>”;
  3. }
foreach ($_SERVER as $var){
    echo "$var<br/><br/>";
}

También se puede hacer que nos de tanto la clave como el valor:

  1. foreach ($_SERVER as $key => $var){
  2. echo “<strong>$key</strong> = $var<br/><br/>”;
  3. }
foreach ($_SERVER as $key => $var){
    echo "<strong>$key</strong> = $var<br/><br/>";
}
  1. $contador = 0;
  2. while ($contador <= 10) {
  3. echo “Contador vale $contador<br/>”;
  4. $contador++;
  5. }
$contador = 0;
while ($contador <= 10) {
    echo "Contador vale $contador<br/>";
    $contador++;
}
  1. $contador = -1;
  2. do {
  3. echo “Contador vale $contador<br/>”;
  4. $contador++;
  5. while ($contador <= 10);
$contador = -1;
do {
    echo "Contador vale $contador<br/>";
    $contador++;
} while ($contador <= 10);

Se puede usar continue para continuar con la próxima iteración del bucle y break para salir del bucle. Una curiosidad es que se puede usar break 2, por ejemplo, y eso haría que se saliera de dos bucles que estuvieran uno dentro del otro.

Funciones

La palabra clave para definir una función en PHP es function.

  1. function saludar() {
  2. echo “Hola”;
  3. }
function saludar() {
  echo "Hola";
}

Para devolver un valor se utiliza return

  1. function obtenerCuadrado($numero) {
  2. return $numero * $numero;
  3. }
function obtenerCuadrado($numero) {
  return $numero * $numero;
}

Por defecto los parámetros de la función se pasan por valor. Para pasarlos por referencia se añade & antes del nombre de la variable en la lista de argumentos:

  1. function obtenerCuadrado(&$numero) {
  2. $numero = $numero * $numero;
  3. }
  4. $valor = 4;
  5. obtenerCuadrado($valor);
  6. echo $valor;
function obtenerCuadrado(&$numero) {
    $numero = $numero * $numero;
}

$valor = 4;
obtenerCuadrado($valor);
echo $valor;

Se puede especificar valores por defecto para argumentos con la sintaxis:

  1. function saludar($nombre=“Raul”) {
  2. echo “Hola $nombre”;
  3. }
function saludar($nombre="Raul") {
    echo "Hola $nombre";
}

Para crear funciones con un número de parámetros variable se deja la lista de argumentos vacía y se usan las funciones func_get_args() para obtener una lista de los parámetros pasados, func_num_args() para obtener el número de parámetros y func_get_arg($num_argumento) para obtener un parámetro a partir de su índice.

  1. function sumar() {
  2. $suma = 0;
  3. foreach(func_get_args() as $param)
  4. $suma += $param;
  5. return $suma;
  6. }
function sumar() {
    $suma = 0;
    foreach(func_get_args() as $param)
        $suma += $param;
    return $suma;
}

PHP posee características de los lenguajes funcionales: se puede utilizar las funciones como si de otro tipo de variable cualquiera se tratara.

También se pueden crear funciones anónimas:

  1. $lambda = function($num1, $num2){ return $num1 + $num2;};
  2. echo $lambda(1, 2);
$lambda = function($num1, $num2){ return $num1 + $num2;};
echo $lambda(1, 2);

Orientación a objetos

Una clase se declara con la palabra clave class seguida del nombre de la clase.

class MiClase {
}

El constructor es una función con nombre __construct(), y el destructor, __destruct.

  1. class MiClase {
  2. function __construct() {
  3. echo “Estamos creando un objeto de tipo MiClase<br/>”;
  4. }
  5. }
class MiClase {
  function __construct() {
    echo "Estamos creando un objeto de tipo MiClase<br/>";
  }
}

Para instanciar un nuevo objeto a partir de una clase se usa la sentencia new.

  1. $objeto = new MiClase();
  2. $objeto2 = new MiClase;
$objeto = new MiClase();
$objeto2 = new MiClase;

Para acceder a las propiedades y métodos se usa “->” en lugar del típico “.”

  1. class MiClase {
  2. function __construct() {
  3. echo “Dentro del constructor<br/>”;
  4. }
  5. function saludar() {
  6. echo “Hola<br/>”;
  7. }
  8. }
  9. $objeto = new MiClase();
  10. $objeto->saludar();
class MiClase {
  function __construct() {
    echo "Dentro del constructor<br/>";
  }

  function saludar() {
    echo "Hola<br/>";
  }
}
$objeto = new MiClase();
$objeto->saludar();

Hay 3 modificadores de acceso: public (por defecto), protected y private.

$this es el equivalente al this de Java o el self de Python.

  1. class Persona {
  2. function __construct($nombre) {
  3. $this->nombre = $nombre;
  4. }
  5. }
  6. $persona = new Persona(“Juan”);
  7. echo $persona->nombre;
class Persona {
    function __construct($nombre) {
        $this->nombre = $nombre;
    }
}

$persona = new Persona("Juan");
echo $persona->nombre;

Las propiedades y métodos estáticos se crean con la palabra clave static. Una peculiaridad es que para acceder a los miembros estáticos se utiliza la sintaxis $objeto::$miembro, y no $objeto->miembro. Además se utiliza self en lugar de $this.

  1. class Persona {
  2. public static $contador = 0;
  3. function __construct($nombre) {
  4. $this->nombre = $nombre;
  5. self::$contador++;
  6. }
  7. }
  8. $persona = new Persona(“Juan”);
  9. echo $persona::$contador, “<br/>”;
  10. $persona = new Persona(“Pepe”);
  11. echo $persona::$contador, “<br/>”;
  12. echo Persona::$contador, “<br/>”;
class Persona {
  public static $contador = 0;

  function __construct($nombre) {
      $this->nombre = $nombre;
      self::$contador++;
  }
}
$persona = new Persona("Juan");
echo $persona::$contador, "<br/>";

$persona = new Persona("Pepe");
echo $persona::$contador, "<br/>";

echo Persona::$contador, "<br/>";

Para heredar de otra clase se usa la palabra clave extends. PHP no soporta la herencia múltiple.

  1. class Empleado extends Persona {
  2. }
class Empleado extends Persona {
}

Tratamiento de errores

En PHP hay dos sistemas de notificación de errores: excepciones, como en Java o Python, y el sistema de reporte de errores del lenguaje. No es muy común ver el uso de excepciones en el codigo PHP, sólo se utiliza en el código más moderno que hace uso de la orientación a objetos.

La captura de excepciones tiene este aspecto:

  1. function dividir($num1, $num2) {
  2. if($num2 == 0)
  3. throw new Exception(‘No se puede dividir entre 0′);
  4. else
  5. return $num1 / $num2;
  6. }
  7. try {
  8. dividir(5, 0);
  9. } catch (Exception $e) {
  10. echo ‘Ocurrió una excepción: ’, $e->getMessage(), “\n”;
  11. }
function dividir($num1, $num2) {
  if($num2 == 0)
    throw new Exception('No se puede dividir entre 0');
  else
    return $num1 / $num2;
}

try {
    dividir(5, 0);
} catch (Exception $e) {
    echo 'Ocurrió una excepción: ',  $e->getMessage(), "\n";
}

En el caso de los errores, podemos lanzar los nuestros propios usando la función trigger_error($mensaje, $tipo). El tipo de error puede ser E_USER_ERROR, E_USER_WARNING o E_USER_NOTICE

  1. trigger_error(“No se pudo conectar a la base de datos”, E_USER_ERROR);
trigger_error("No se pudo conectar a la base de datos", E_USER_ERROR);

También podemos definir nuestro propio manejador para tratar nosotros mismos los errores, en lugar de PHP, utilizando la función set_error_handler.

En desarrollo nos interesa mostrar los errores y avisos de PHP en pantalla. En producción se debería modificar la opción display_errors de php.ini y ponerla a Off para deshabilitarlo. La opción error_reporting permite configurar qué tipo de errores queremos mostrar.

Existe un operador que permite que una cierta sentencia de código no genere errores, @, aunque su uso no está aconsejado.

PHP y MySQL

La mejor forma de utilizar MySQL desde PHP es mediante la interfaz orientada a objetos de la extensión mysqli. Si no estamos seguros de si vamos a tener que cambiar de base de datos también podemos utilizar la extensión PDO (PHP Data Objects), una capa de abstracción incluida por defecto desde PHP 5.1

Primero creamos el objeto correspondiente con new mysqli($host, $usuario, $password, $bbdd)

  1. $mysqli = new mysqli(“localhost”, “root”, “mipassword”, “mibbdd”);
$mysqli = new mysqli("localhost", "root", "mipassword", "mibbdd");

Una vez hecho esto podemos comprobar si ha habido algún error mediante la propiedad connect_error. Este propiedad contiene una cadena describiendo el error que se ha producido, o una cadena vacía si no hubo ningún error.

  1. if (mysqli_connect_errno())
  2. exit(“Se produjo un error: ”, mysqli_connect_error());
if (mysqli_connect_errno())
    exit("Se produjo un error: ", mysqli_connect_error());

Una vez abierta la conexión podemos comenzar a realizar consultas utilizando el método query. Este devuelve true si se llevó a cabo la consulta correctamente.

  1. if ($mysqli->query(“CREATE TABLE Personas(id int, nombre varchar(30))”)) {
  2. echo “Tabla personas creada”;
  3. else {
  4. echo “Error al crear la tabla personas”;
  5. }
if ($mysqli->query("CREATE TABLE Personas(id int, nombre varchar(30))")) {
    echo "Tabla personas creada";
} else {
  echo "Error al crear la tabla personas";
}

En las consultas que modifican tuplas el número de tuplas afectadas se almacena en la propiedad affected_rows

  1. $mysqli->query(“UPDATE Empleados SET prima=2000 WHERE ventas > 5000″);
  2. echo “Primas modificadas: ”, $mysqli->affected_rows;
$mysqli->query("UPDATE Empleados SET prima=2000 WHERE ventas > 5000");
echo "Primas modificadas: ", $mysqli->affected_rows;

Para recorrer las tuplas devueltas por un SELECT haríamos algo así

  1. if ($resultado = $mysqli->query(“SELECT * FROM Empleados”)) {
  2. while($empleado = $resultado->fetch_object()) {
  3. printf(“%s %s<br/>”, $empleado->Nombre, $empleado->Apellidos);
  4. }
  5. }
if ($resultado = $mysqli->query("SELECT * FROM Empleados")) {
  while($empleado = $resultado->fetch_object()) {
    printf("%s %s<br/>", $empleado->Nombre, $empleado->Apellidos);
  }
}

Al finalizar se debe cerrar la conexión utilizando el método close()

$mysqli->close()

Para evitar ciertos ataques de SQL injection es conveniente pasar las cadenas que vengan del usuario por el método mysqli::escape_string($cadena), para escapar los caracteres especiales, o bien utilizar prepared staments.

Para crear prepared staments se utilizar el método mysqli->prepare($consulta), después se llama al método bind_param del objeto stament creado, para introducir los valores correspondientes en los placeholders y, después, execute() para ejecutar la consulta. Por último se llama al método close para cerar el stament

  1. if ($consulta = $mysqli->prepare(“SELECT a FROM b”)) {
  2. $consulta->bind_param($campo, $tabla);
  3. $consulta->execute();
  4. $consulta->close();
  5. }
if ($consulta = $mysqli->prepare("SELECT a FROM b")) {
  $consulta->bind_param($campo, $tabla);
  $consulta->execute();
  $consulta->close();
}

Si necesitas más información sobre MySQL en sí, puedes consultar nuestro Tutorial de MySQL.

Formularios

Al enviar un formulario, si se utiliza el método POST, el valor de cada campo rellenado por el usuario se guardará en una matriz asociativa de nombre $_POST. Si se utiliza GET, se almacenará en la matriz $_GET. Las claves de esta matriz asociativa se tomarán del atributo name de cada campo del formulario.

Si no nos importa el origen de la petición, también se puede usar $_REQUEST["nombre"], que es una mezcla de la información de $_GET, $_POST y $_COOKIE (efectivamente, un array con los valores de las cookies)

Para un select, que tiene varios valores, el valor del atributo name debe acabar con [], como una matriz. PHP creará una matriz con este nombre, que contendrá los valores de los atributos name de las opciones seleccionadas.

  1. <select name=“languages[]“>
  2. <input name=“c”>C</input>
  3. <input name=“c++”>C++</input>
  4. <input name=“php”>PHP</input>
  5. <input name=“perl”>Perl</input>
  6. </select>
<select name="languages[]">
    <input name="c">C</input>
    <input name="c++">C++</input>
    <input name="php">PHP</input>
    <input name="perl">Perl</input>
</select>

$_SERVER['PHP_SELF'] contiene la URL del script actual. Puede ser útil como valor para el atributo action del formulario.

Si la entrada del usuario se va a mostrar en algún lugar del sitio, para evitar vulnerabilidades de XSS, este texto debería pasar antes por la función htmlspecialchars($cadena), que convierte a sus entidades HTML correspondientes los caracteres especiales “, <, >, & y, opcionalmente, ‘, si pasamos como segundo argumento a la función la constante ENT_QUOTES.

  1. echo ‘Hola ’, htmlspecialchars($_POST['usuario']);
echo 'Hola ', htmlspecialchars($_POST['usuario']);

Si el texto se va a utilizar en un atributo de una etiqueta HTML hay que asegurarse de que los valores de los atributos estén entre comillas, y que el tipo de comillas utilizado esté codificado como entidades HTML en la cadena.

También hay que tener cuidado con la codificación de caracteres. Si el atacante utilizara un texto codificado en UTF-7, htmlspecialchars no reemplazaría nada, y si no especificamos la codificación del documento, y el atacante engaña al navegador para hacerle pensar que UTF-7 es la verdadera codificación del archivo, nuestro filtrado no habrá servido de nada. Podemos especificar la codificación de caracteres con una etiqueta meta o usando la cabecera Content-Type:

  1. header(‘Content-Type: text/html; charset=UTF-8′);
header('Content-Type: text/html; charset=UTF-8');

Cookies

Para crear cookies usamos setcookie($nombre, $valor, $expiracion, $ruta, $host, $https)

  1. // Expira 3600 segundos después de haberse creado
  2. setcookie(‘usuario’, ‘raul’, time() + 3600);
  3. setcookie(‘fondo’, ‘#000000′);
// Expira 3600 segundos después de haberse creado
setcookie('usuario', 'raul', time() + 3600);
setcookie('fondo', '#000000');

A las cookies se accede a través de la matriz superglobal $_COOKIE:

  1. echo ‘Bienvenido ’, $_COOKIE['usuario'];
echo 'Bienvenido ', $_COOKIE['usuario'];

Sesiones

Para crear una sesión se llama a la función session_start(), que debe ser la primera sentencia PHP de la página.

Para almacenar datos en la sesión se puede utilizar la matriz superglobal $_SESSION directamente:

  1. $_SESSION['usuario'] = ‘raul’;
$_SESSION['usuario'] = 'raul';

Para acceder a los datos que hemos guardado en la sesión se utiliza el mismo array asociativo:

  1. echo ‘Bienvenido ’, $_SESSION['usuario'];

Visto en | Mundo Geek

echo 'Bienvenido ', $_SESSION['usuario'];
Written by Jp Neira in: Computación / Internet |
Feb
08
2010
0

Lo que Google sabe de ti

El 1 de Febrero pasado Google anunció una inversión de US$5.7 Millones en proyectos de investigación en 4 áreas clave para la empresa. Entre ellas, uno de los temas que más ha dado que hablar a la prensa internacional fue la privacidad de los datos personales. La FTC (Federal Trade Comission de EE.UU.) ha organizado una serie de reuniones con expertos de la academia y del mundo privado para entender qué debería ser materia de regulación y qué no, específicamente en relación con el “Marketing Conductual” (mi mala traducción de Behavioral advertising). Uno de los principales candidatos a culpable por la enorme cantidad de datos personales que maneja, y por el poco o nulo control que entrega a cada persona sobre estos datos: Google.

La respuesta de Google ha sido cauta. Mal que mal, el negocio de Google es precisamente ese: recolectar información de cada persona y ofrecer servicios personalizados a terceros sobre un “destilado” de esa información. Todos los “servicios personales” de Google (Gmail, Calendar, Blogger, Docs) más los “servicios a negocios” (AdSense, AdWords, commercial sites) se basan en la recolección de datos, su almacenamiento y (lo más importante) en su búsqueda y recuperación. Esto se usa, entre otras cosas, para el avisaje y marketing de sitios, ofreciendo productos y servicios “relevantes” para el usuario.

Uno podría creer que el tracking que Google realiza se restringe sólo a las personas que deciden usar sus servicios, pero en Diciembre pasado Google anunció que comenzó a colocar cookies anónimas en los computadores de personas que no tuvieran cuentas para rastrear también sus búsquedas y ofrecer mejores servicios. “Nuestro objetivo es proveer resultados de búsqueda relevantes. Los beneficios que hemos visto para usuarios conectados han sido tan grandes que queremos extender esos mismos beneficios a todos”, dijo Nathan Tyler, un vocero de Google.

Una de las respuestas de Google a las críticas que ha recibido en EE.UU. ha sido generar un “Dashboard” (www.google.com/dashboard), un “punto único para ver todos los datos sobre ti en los variados productos” que Google ofrece a personas, según Shuman Ghosemajumder (business product manager for trust and safety). El dashboard fue anunciado en Noviembre pasado en una conferencia en Europa, y (en mi opinión) no es más que un mal resumen de lo que realmente Google sabe de uno.

Mientras tanto, en Europa el problema para Google es un poco peor, porque posee un porcentaje mayor del “mercado” de las búsquedas a través de Internet (80%) comparado con EE.UU. (65%), y la regulación sobre privacidad en Europa es mucho más restrictiva que en EE.UU. El gobierno de Silvio Berlusconi está proponiendo una ley con la cual los servicios de video online (e.g., YouTube) son punibles en términos de violaciones a la privacidad de las personas, y Google está entablando una demanda por copyright de parte de la empresa de la familia de Berlusconi (Mediaset). En Berlín, manifestantes han salido a la calle con “pulpos gigantes” para protestar contra empresas como Google.

Siempre me han gustado los servicios de Google. Creo que Gmail es el mejor servicio de email gratuito disponible actualmente, y me he acostumbrado tanto a Calendar y a los diferentes gadgets que Google ofrece que me costaría mucho trabajo encontrar un sustituto para lo que actualmente hago con Google. Sin embargo, a pesar de que en este sentido soy bastante práctico (no soy un fundamentalista de la privacidad, en el sentido definido por Alan Westin), lo cierto es que Google maneja una cantidad escabrosa de datos acerca mío: todas las conversaciones que mantengo y con quién las mantengo, tanto en lo personal como en lo profesional (Gmail); todas las reuniones presenciales y todas las clases y charlas a las que asisto (Calendar); todas mis búsquedas en Internet, y muchos de los sitios que visito a diario (Google + Toolbar); todos los links que guardo para visitar frecuentemente, y con qué frecuencia los visito (Bookmarks); todos los lugares que busco porque no sé como llegar a ellos (Maps); e incluso algunos de los grupos de personas que frecuento para objetivos específicos (Groups). Si subiera fotos a Picasa, o me informara a través de Google News, o llevara mis notas a través de Google Netbook, Google sabría incluso más de mí.

Images: dannysullivan @Flickr (CC), y fuente propia.

Autor: Cristian Bravo-Lillo

Via | Manzana Mecanica

Copyrigth 2010 El Blog de Jp | Theme: Cosmology by Jp Neira | Powered by WordPress

Theme by: |