Blog de Daniel Zegarra Rotating Header Image

PHP

Las VM2 y VM1 de Flash Player mantienen sesiones HTTP

Tal vez era obvio para alguien que sabe del tema pero yo quería demostrarlo.

Dejo los archivos de ejemplo: Descargar Compartiendo sesiones HTTP entre VM1 y VM2 de Flash Player

Nota: Esto es la continuacion de un post pasado.

Compatibilizando AMFPHP1.9beta2 con Zend Framework

La verdad es simple.

Primero, incluir el directorio donde se encuentra los archivos de Zend Framework entre las rutas a cargar archivos por defecto. Esto puede hacerse de dos formar:

  • Definiendolo en php.ini
    La clave a cambiar tiene el nombre de include_path. Esta es una cadena con rutas separadas por un caracter especial. Este puede diferir de acuerdo al SO siendo los dos puntos “:” para Linux o la barra oblicua “\” para Windows.
  • Agregando la siguiente línea en globals.php
    //El siguiente método define un directorio más a la lista de
    //rutas por defecto al usar include o require
    //Cambia ZendLibrary por el directorio donde tengas la libreria.
    //Ejm: /../../ZendLib
    set_include_path( realpath(dirname(__FILE__)) . '/ZendLibrary'
    . PATH_SEPARATOR . get_include_path() );
    

Luego, agregar un par de líneas al bootstrap de AMFPHP para que cargue la clase Zend_Loader y asi nuestros servicios puedan usar otras clases/servicios sin tener que cargarlos al inicio (Y asi te ahorras de estar escribiendo tanto require_once).

Agrega las siguientes líneas al final del archivo globals.php

include 'Zend/Loader.php';
Zend_Loader::registerAutoload();

Por ultimo, debes configurar AMFPHP para que convierta los puntos que describen las rutas de tus clases en undelines (_). Zend Framework incluye en los nombres de sus clases la ruta completa donde esta se encuentra y mantenendo el nombre estandar como nombre de archivo.

Esto evita la redundancia de clases (al menos hasta que lleguen los namespaces con php 5.3) y te sirve para que Zend_Loader pueda cargar las clases de forma dinámica.

Normalmente AMFPHP convierte los puntos en barras diagonales “/” y el ultimo elemento lo toma como nombre del servicio/clase. Hay que hacer que como nombre de la clase use la ruta completa pero cambiando las barras diagonales por underlines. Para esto debes cambiar una sola linea de codigo en el archivo core\amf\app\Actions.php ubicado en tu instalacion de AMFPHP. Te recomiendo hacer una copia de este mismo antes de realizar un cambio.

//Linea 122 (aproximadamente)
//Esto hará que el nombre de la clase sea ahora la ruta
//completa con guiones bajos mas el nombre del servicio
$classname = str_replace('.', '_', $trunced);

Eso es todo. No te olvides de recodificar los nombres de tus clases si es que ya has empezado algunas. Asi mismo, si tus clases usaban a su vez otras, tambien debes actualizar estas llamadas o tu script se detendrá sin entregar error alguno a flash.

Aqui tienes un servicio de prueba y el código en AS2 y AS3 para probarlo.

PHP service:

class System_Prueba {
public function test(){
return 'Prueba exitosa';
}
}

ActionScript 2:

import mx.remoting.*;
import mx.rpc.*;
var service = new Service('http://testserver/amfphp/gateway.php'
, null, 'System.Prueba');
var pc:PendingCall = service.test();
pc.responder = new RelayResponder(this, 'onRespond', 'onFault');
function onRespond(re:ResultEvent){
trace(re.result);
}
function onFault(fault:FaultEvent){
trace('Error');
}

ActionScript 3:

import flash.net.*;
var rs:NetConnection = new NetConnection();
rs.connect('http://testserver/amfphp/gateway.php');
rs.call('System.Prueba.test', new Responder(onRespond, onFault));
function onRespond(re:Object){
trace(re);
}
function onFault(fault:Object){
trace('Error: '+fault.description);
}

Actualización: Encuentro en el blog de Enrique Place el aviso de un cambio importante con el uso de la clase Zend_Loader en la última versión de ZendFramework 1.8 y futuras versiones. Es una buena idea revisar este post.

Primeros pasos con AMF y Zend Framework

Ahora que estoy de vacas tuve tiempo para leer la documentacion del framework de Zend para su PHP y esta bueno. 

Decidi aprenderlo de una vez y empezar a usarlo en mis proyectos. 

Una de las primeras cosas que busqué fue su compatibilidad con AMF puesto que estoy acostumbrado a usar AMFPHP para casi todo. Zend Framework viene con clases para trabajar con AMF y son clases muy buenas. 

En 15 minutos arme mi gateway AMF en PHP con tan solo 7 lineas de codigo y cree un flash simple para probar mi servidor. 

A este servidor solo le falta agregarle la autenticación y Zend Framework trae clases para eso tambien. 

Puedes descargarte el Gateway + Service y Flash de ejemplo en el siguiente enlace.

Descargar Gateway AMF usando ZF + Service y Flash de ejemplo

Necesita tener las librerìas de Zend Framework junto al ejemplo.

Bug en cache para RSS en WordPress 2.7

Luego de actualizar mi instalación de WordPress me di cuenta que los estados de Twitter no se actualizaban. No se realmente si este error se deba a actualizar WordPress porque no me fije en ello hasta ayer.

Yo uso el plugin Twitter for WordPress porque es mas rápido que los otros. Este plugin utiliza la función de wordpress fetch_rss(url) para leer los estados de una cuenta de Twitter. El problema es que esta función carga el contenido de una caché desactualizada.

La caché es muy útil para evitar descargar de Internet lo mismo una y otra vez sabiendo que el contenido (texto, imagenes,videos, etc) no ha cambiado. Como el contenido de Internet es dinámico la cache debe contar con algoritmos para que esta información sea periódicamente actualizada.

Por alguna extraña razón WordPress 2.7 no actualiza su caché.

La solución: Desactivar el uso de la cache para contenido RSS.
Simplemente debes cambiar el valor de la contante MAGPIE_CACHE_ON. Esta contante es definida en archivo rss.php ubicado en /raiz_de_wp/wp-includes/ línea 624.
La línea 624 dice asi:
define(‘MAGPIE_CACHE_ON’, 1); //Definiendo la contante con el valor “1″
Cambia el “1″ por “0″ (cero) y guarda el archivo.

Eso es todo.

Instalar un Web Server sobre openSUSE 11

En junio, si no me equivoco, se liberó la versión estable 11 de openSUSE, una de las mejores distribuciónes de Linux. Mi experiencia con Linux es muy limitada, pero he llegado a aprender algunas cosas (a la fuerza) gracias a la practica y a la ayuda de un compañero de trabajo.

Te mostraré los pasos para instalar tu propio servidor LAMP en openSUSE 11, pero no te alegres tanto, porque si bien al final de este tuto tu servidor estara funcionando, no seria recomendable que lo coloques en la zona pública aún. Para ello debes hacerle un hardening a su servidor y yo no estoy capacitado para eso.

Paso 1: Consigue el instalador de openSUSE 11

Lo puedes descargar desde http://software.opensuse.org/. Es un archivo en formato ISO de 4.3Gb. Este archivo debes volcarlo a un disco DVD. Eso lo puedes hacer con un software como Nero o MagicISO. Puedes buscarte uno gratuito por aquí.

Una vez que hayas quemado la imagen en el dvd empiezas con la instalación.

Paso 2: Empezar a instalar

El disco grabado es booteable, solo asegurate que tu bios busca archivos de inicio en el CDRom antes que en tu disco duro.

Una vez que lo encuentre veras la siguiente pantalla.

openSUSE Install Arranque desde el disco de instalacion

openSUSE Install Arranque desde el disco de instalacion

Eliges Installation para empezar con el proceso. No te preocupes por el ingles, luego lo puedes cambiar.

Una vez iniciada la instalación y continuado con la bienvenida verás esto.

openSUSE Install Modo de instalacion

openSUSE Install Modo de instalacion

Yo elijo la primera opcion porque es lo que quiero hacer, no me interesa lo que actualmente tengo en mi disco duro.

openSUSE Install Zona horaria

openSUSE Install Zona horaria

Luego elijo mi zona horaria y verifico que la hora mostrada sea correcta.

En la siguiente pantalla debo decidir que escritorio gráfico usaré.

openSUSE Install Seleccion de escritorio

openSUSE Install Seleccion de escritorio

Yo elijo el KDE4, pero tu puedes elegir el que mas te guste. Si ya has usado ubuntu alguna vez, entonces debes conocer a Gnome. KDE4 es una nueva version de KDE que trae consigo buenas mejoras gráficas entre otras cosas. En este ejemplo no utilizaras el entorno gráfico.

openSUSE Install Propuesta de particionamiento

openSUSE Install Propuesta de particionamiento

En la siguiente pantalla debes elegir las particiones que deseas crear. Mi amigo me dice que es mejor hacerlo de forma manual, hay unos pasos a seguir. Pero como él esta ocupado dejaré que suse decida. Este no será un servidor de producción, no necesito que todo sea perfecto.

En la ultima parte de la preparación te pregunta por la identidad del servidor. En “Nombre completo” puedes escribir tu nombre. En el siguiente campo te pide el nombre de usuario. Coloca ahi tu nick (no debe tener espacios ni caracteres especiales). Y en los dos ultimos campos tu contraseña (una que elijas). Asegurate de marcar la opcion de “Utilizar esta contraseña para el administrador” (osea, el usuario root).

Una vez que ya he contestado a varias preguntas me muestra el resumen de lo que va a hacer.

openSUSE Install Configuracion de la instalacion

openSUSE Install Configuracion de la instalacion

Yo decido cambiar algunas cosas como el software que va a instalar, no me interesan los juegos o los efectos de pantalla, lo que harán sera ocuparme espacio y memoria.

openSUSE Install Eligiendo los paquetes a instalar

openSUSE Install Eligiendo los paquetes a instalar

Otra cosa a cambiar es el tipo de inicio del sistema. Por defecto inicia en el estado 5 que es el modo gráfico. Como este será un servidor la intención es no gastar memoria en cargar cosas imnecesarias. Por lo tanto, le decimos que inicie en el modo 3.
Te da tres modos:

  • 1: Modo de consola sin red
  • 3: Modo de consola con red (recomendado)
  • 5: Modo gráfico con red

Si inicias por defecto en modo gráfico no hay problema. Puedes usar la consola en cualquier momento.

Conforme empiezas con la instalación, lo primero que hará será preparar el disco duro, lo particionará y formateará de acuerdo a lo decidido anteriormente.

openSUSE Install Preparando el disco duro

openSUSE Install Preparando el disco duro

Luego continuar con la instalación de los paquetes.

openSUSE Install Instalacion de paquetes

openSUSE Install Instalacion de paquetes

openSUSE Install Terminando la instalacion basica

openSUSE Install Terminando la instalacion basica

Una vez haya terminado te pedirá reiniciar. Si dejas el disco de instalación, dentro de la compu, no importa, la primera opcion del menu booteable es “Iniciar desde el disco duro”.

openSUSE Install Configuracion automatica

openSUSE Install Configuracion automatica

De manera automática vuelve al programa de instalacion para configurar los paquetes instalados.

Paso 3: La configuracion de tu LAMP (Linux, Apache, MySQL y PHP)

Una vez que hayas terminado con la instalación empieza lo divertido, la configuración. Depende a el tipo de inicio que hayas elegido puedes seguir de dos maneras:

Si elegiste usar el modo grafico por defecto

Si elegiste iniciar por defecto en modo gráfico has lo siguiente:

Una vez el escritorio este cargado, dale un clic a la iguana verde ubicada en la esquina inferior irquierda y luego escribe la palabra “terminal” en el campo de busqueda ubicado en la parte superior del menu emergente. Dale un clic sobre el primer resultado.

openSUSE Install Abriendo el terminal en KDE4
openSUSE Install Abriendo el terminal en KDE4

Una vez abierto el terminal escribes:

su -

Luego la contraseña que elegiste previamente tal como se muestra en la siguiente imagen. Esto te da los privilegios del usuario root (administrador).

openSUSE Install Ejecutar comandos como root desde la terminal

Te recomiendo que maximices la ventana del terminar porque necesitaras espacio para lo que sigue. El boton de maximixar se encuentra exactamente debajo del cursor (ver última imagen).

Si elegiste el modo de consola por defecto

Entonces una vez que el servidor termine de iniciar te pedira inicies tu sesión. Escribe root como nombre de usuario y luego la contraseña que hayas elegido previamente.

De aqui en adelante los pasos son comunes.

Una vez que te hayas logeado tipeas:

yast

Ahora debes tener al administrador Yast2 en pantalla. Con Yast puedes realizar varios cambios en tu servidor sin necesitad de estar editando archivos de configuración. Te ayuda sobretodo si eres un principiante como yo.

Usa las flechas direccionales para moverte y la tecla <TAB> para saltar de un cuadro a otro o entre los botones.

Paso 3.1: Configurando con Yast

En Network Devices / Network Settings puedes configurar tu tarjeta de red: IP, Nombre, etc. Por defecto usaras DHCP.

openSUSE Install Configurando con Yast

openSUSE Install Configurando con Yast

Ve a Network Services y elige HTTP Server. Luego, asegurate que el puerto de escucha esa el 80 y que Open port in Firewall este seleccionado. Puedes seleccionar y deseleccionar usando la barra espaciadora. No olvides que puedes saltar entre los campos activos usando <TAB>. Vas a la siguiente pagina y activas lo que necesites: PHP5, Perl, etc… Sigues avanzando y veras que este asistente te ofrece varias opciones. Si desearas cambiar algo luego puedes volver a entrar aqui. Recuerda el DocumentRoot, es ahi donde se deben encontrar los archivos que seran visibles desde la web. Usualmente se encuentra en <RAIZ>\srv\www\htdocs.
En la última pantalla te da dos opciones:

  • Start apache2 server when booting
  • Start apache2 server manually

Te recomiendo la primera opción, asi apache2 iniciará de forma automatica al arrancar openSUSE.

Bien, ahora que Apache esta configurado pasamos a mySQL.

Salimos de yast, puedes ir saltando con <TAB> hasta llegar al boton Quit o presional simplemente <F9>. Asi como hecho que el servicio apache2 se inicie automaticamente al arrancar nuestro servidor debemos hacer lo mismo con mySQL. Para ver si el servicio mysql esta configurado para un inicio automatico escribimos lo siguiente:

chkconfig –list | grep mysql

Como resultado tendremos:

openSUSE Install Estado del inicio automatico de un servicio

Te resumo que significa esto: Estos numeros del 0 al 6 representan tipos de inicio del sistema operativo. 3 inicio en modo de consola y 5 el inicio en modo gráfico. Como ves en la imagen el servicio mysql no se iniciará automaticamente en ningun tipo de inicio. Debemos hacer el “off” del estado 3 y 5 se convierta en “on“. Para esto escribimos lo siguiente:

chkconfig mysql on

Asi de simple. Si deseas puedes ejecutar otra vez el comando que te informa del estado del servicio para verificar que realmente en los estados 3 y 5 el servicio mysql a pasado a “on“.

Tambien puedes ejecutar: chkconfig –list | grep apache2 para asegurarte que apache2 este en “on” en los tipos 3 y 5.

Habiendo hecho debes reiniciar tu servidor, para ello ejecuta el comado:

init 6

Con esto ya tienes corriendo tu servidor Apache con PHP y mySQL.

Te dejo algunos comandos que te pueden ser útiles:

init 0 : Apagar el servidor.
init 6 : Reiniciar el servidor.
service apache2 status : Para conocer el estado de un servicio. Puedes cambiar apache2 por el servicio que quieras.
service apache2 start : Para iniciar un servicio. Asimismo, en vez de mysql puede ser apache, sshd, etc.
service apache2 stop : Para detener un servicio.
service apache restart : detiene y vuelve a iniciar un servicio.
ifconfig : Muestra la configuracion de las tarjetas de red.
man nombre_cualquiera : Muestra la ayuda del comando nombre_cualquiera.
ping nombre_host : Hace un ping a un nombre de host o direccion IP, igual que el comando ping de windows. A diferencia que este no se detendra hasta presionar las teclas <CRTL> + <C>.
top : Muestra el estado de los procesos en ejecucion asi como su uso en memoria y procesador. De la misma manera, presiona <CRTL> + <C> para salir.

Si elegiste iniciar en modo consola por defecto y tambien elegiste instalar el escritorio KDE durante la instalación y ahora quieres probarlo, puedes ejecutar el comando startx. Esto iniciará el escritorio KDE usando el usuario actual. Para volver a la línea de comandos simplemente cierra sesión desde el entorno gráfico.

Si por algún motivo la aplicacion con la que tabajases se congelara, puedes reiniciar tu servidor saltando a otro escritorio. Para saltar entre escritorios presiona la tecla <ALT> + <del F1 al F6>. Tienes seis escritorios en modo de consola disponibles. El escritorio gráfico usa el siete. Para saltar del escritorio de comandos al grafico lo puedes hacer con <ALT>+<F7>, y para pasar del escritorio gráfico al de comandos lo debes hacer con <CRTL>+<ALT>+<del F1 al F6>. Recuerda usar las teclas <CRTL> y <ALT> de la izquierda de tu teclado.