biblia de flash y php

468
1 Biblia de Flash ®  y PHP Matthew Keefe 

Upload: jonas-jonas

Post on 31-Oct-2015

80 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 1/467

1

Biblia de

Flash® y PHP

Matthew Keefe 

Page 2: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 2/467

2

Biblia de Flash® y PHP

Publicado por Wiley Editorial, Inc.10475 Crosspoint Boulevard Indianapolis, IN 46256www.wiley.comCopyright © 2008 Publicado por Wiley Editorial, Inc., Indianápolis, IndianaPublicado simultáneamente en Canadá

ISBN: 978-0-470-25824-8Fabricado en los Estados Unidos de América10 9 8 7 6 5 4 3 2 1Ninguna parte de esta publicación puede ser reproducida, almacenada en un sistema de recuperación otransmitida en cualquier forma o cualquier medio, sea electrónico, mecánico, fotocopia, grabación, el escaneoo de otro modo, excepto según lo permitido en las Secciones 107 y 108 de la Ley Derechos de Autor EstadosUnidos 1976, sin que el previo por escrito de la editorial, o a través del pago de la tasa por copiacorrespondiente al Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax(978) 646-8600. Pida a la Editorial para autorización deberán dirigirse al Departamento Jurídico, Wiley Editorial,Inc., 10475 Crosspoint Blvd., Indianápolis, IN 46256, (317) 572-3447, fax (317) 572-4355, o en línea enhttp://www.wiley.com/go/permissions.

LIMITE DE RESPONSABILIDAD/RENUNCIA DE GARANTIA: EL EDITORIAL Y EL AUTOR NO HACEN NINGUNADECLARACION O GARANTÍA CON RESPECTO A LA PRECISIÓN O INTEGRIDAD DEL CONTENIDO DE ESTE TRABAJOY EXPRESAMENTE DECLINA CUALQUIER GARANTÍA, INCLUYENDO SIN LIMITACIÓN, LAS GARANTÍAS DEIDONEIDAD PARA UN PROPOSITO PARTICULAR. NINGUNA GARANTÍA SE PUEDE CREAR O AMPLIAR PARAVENTAS O MATERIAL PROMOCIONAL. EL ASESORAMIENTO Y LAS ESTRATEGIAS CONTENIDAS EN ESTE SITIO NOPUEDE SER ADECUADO PARA CADA SITUACIÓN. ESTA OBRA SE VENDE CON EL ENTENDIMIENTO QUE EL EDITORES QUE NO SE DEDICA A PROMOCIONAR SERVICIOS LEGALES, CONTABLES, U OTROS SERVICIOSPROFESIONALES. SI LA AYUDA PROFESIONAL ES REQUERIDA, LOS SERVICIOS DE UN PROFESIONALCOMPETENTE DEBE BUSCARSE. NI LOS EDITORES NI EL AUTOR SERÁN RESPONSABLES POR DAÑOSDERIVADOSDE AQUÍ. EL HECHO DE QUE UN SITIO WEB U ORGANIZACIÓN SE HACE REFERENCIA EN ESTE

TRABAJO COMO UNA CITACIÓN Y/O UNA FUENTE POTENCIAL DE NUEVA INFORMACIÓN DE LA ORGANIZACIÓNWEB O PUEDA PROPORCIONAR O RECOMENDACIONES QUE PUEDA HACER. ADEMAS, LOS LECTORES DEBENSER CONSCIENTES DE QUE INTERNET SITIOS WEB QUE APARECEN EN ESTE TRABAJO HAN CAMBIADO ODESAPARECIDO ENTRE CUANDO ESTA OBRA FUE ESCRITA Y CUANDO SE LEE. 

Para información general sobre nuestros productos y servicios o para obtener apoyo técnico, por favorcontacte a nuestro Departamento de Atención al Cliente dentro de los EE.UU. al (800) 762-2974, fuera de losEE.UU al (317) 572-3993 o por fax (317) 572-4002.

Biblioteca del Congreso Número Control: 2008925780Marcas: Wiley, y el logo de Wiley, y marcas relacionada con el comercio son marcas comerciales o marcascomerciales registradas de John Wiley & Sons, Inc. y/o sus afiliadas, en los Estados Unidos y otros países, y no

puede ser utilizada sin permiso por escrito.Flash es una marca registrada de Adobe Systems Incorporated en los Estados Unidos y/u otros países. Todas lasdemás marcas son propiedad de sus respectivos propietarios. Wiley Editorial, Inc., no está asociado con ningúnproducto o proveedor mencionado en este libro.Wiley también publica sus libros en una variedad de formatos electrónicos. Parte del contenido que aparece enla impresión pueden no estar disponibles en los libros electrónicos.

Page 3: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 3/467

3

Acerca del Autor

Matthew Keefe es un nuevo diseñador de medios y desarrollador, con una sólida experiencia en el desarrollode aplicaciones para la web y fuera de línea. Originalmente era una artista de tiempo completo gráfico, seencontró que gran parte de la programación relacionada con su trabajo de diseño estaba subcontratado. Mattaprendió rápidamente la programación para la web y descubrió una habilidad valiosa, pero poco conocido-

puesto en esta industria, que la inteligencia es la capacidad para construir un sitio y también la capacidad defuerza diseñarlo. Este fue preferido por los clientes, ya que podría hacer todo el proyecto con un estudio.Matt ha trabajado con empresas como Delphi, PhotoshopCafe, Kineticz Interactive, y las organizaciones Studiospara nombrar unos pocos. Su trabajo ha sido publicado en Cómo Wow con Flash (Peachpit Press) para que élcontribuyera como autor y el editor técnico. Matt también ha finalizado recientemente un puesto de trabajocomo el editor técnico de primera de ActionScript 3 (Adobe Dev Library).

Ejemplos de su obra se puede encontrar en su expediente personal en mkeefe.com. 

Page 4: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 4/467

4

A mi padre amoroso. Creditos 

Senior Acquisitions EditorStephanie McCombProject Editor

Beth TaylorTechnical EditorNavid MitchellCopy EditorKim HeuselEditorial ManagerRobyn SieskyBusiness ManagerAmy KniesSr. Marketing ManagerSandy SmithVice President and Executive Group Publisher

Richard SwadleyVice President and Executive PublisherBob IpsenVice President and PublisherBarry PruettProject CoordinatorErin SmithGraphics and Production SpecialistsClaudia BellJennifer MayberryRonald Terry

Quality Control TechnicianSusan MoritzMedia Development Project ManagerLaura Moss-HollisterMedia Development CoordinatorJenny SwisherAssociate ProducerShawn PatrickProofreadingChristine SabooniIndexingBroccoli Information Management

Page 5: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 5/467

5

PrólogoMacromedia. . . error Adobe Flash es manos abajo de uno de las más impresionantes y poderosas herramientaspara cualquier diseñador, cuando se trata de llevar una experiencia para el usuario. Y como Flash sigueevolucionando no sólo para web, para lo cual es popular, pero también para usuarios fuera de línea con la

evolución de la plataforma, como Adobe AIR y la amplia gama de herramientas de terceros que pueden serutilizados.

Sin embargo, para un desarrollador de Flash hardcore ha tenido una mala reputación. Debido principalmente alhecho de que el 1.0 es un idioma torpe, desgarbado, e inmaduro. En comparación con otros lenguajespopulares, cuando se introdujo como 1,0, que no era algo que se toma en serio en los ojos de un desarrolladory con razón. Pero entonces, si Flash es tan obstaculizar, ¿por qué estoy incluso la lectura de un prólogo para unlibro sobre el tema?

Las cosas han cambiado, cambiado drásticamente. AS 3.0 ya está aquí y es uno de los mejores lenguajes entodo, si se entiende. AS 2.0 fue un paso en la dirección correcta, pero como 3.0 ha superado los sueños detodos los desarrolladores de Flash. Archivos de pequeño tamaño, desempeño muy sólido, e incluso algunos demanejo de datos de los rivales de Java, así que realmente no existe un desarrollador que puede decir que ya noes un lenguaje concreto. 

Y con AS 3.0 una nueva era de tratamiento de los datos se introducen en Flash. Y no sólo con Flash, perocuando empiezas a mezclar en PHP5, MySQL 5, ASP, AMFPHP, y otros métodos de manipulación de datos, lasposibilidades que se abren en una nueva esfera. Los datos está en juego en AS 3.0, y es sólo una cuestión deleer un libro como este para aplicarla. Sockets, XML, servicios web y otras fuentes de datos externas permitenun desarrollador de Flash para conseguir realmente sucio en una fuente de datos y actualizar el contenido sintocar los archivos Flash de nuevo. La ventaja es que permite más tiempo para desarrollar una experiencia deusuario atractivas sin preocuparse de las ediciones de repetición, el presupuesto futuro de un cliente, etc. enrealidad permite a los desarrolladores de Flash graves a seguir trabajando con las fuentes de datos a medida

que se desarrollan y se concentran en los beneficios de matizar el contenido en sí, en lugar de lo que elcontenido es en el momento de desarrollo que pueden cambiar en el capricho de un cliente más adelante. 

Atrás han quedado los días en que usted se basaría sitio web de un cliente, tiene una tonelada de fondossoberanos más grandes, sólo para que ellos necesitan constantemente actualizaciones para las fotos, la copia,artículos del catálogo, etc. En este libro leerás como utilizar los métodos mencionados para ampliar sucomprensión de sacar la última restricción para conocer Flash de gran alcance, la actualización sin publicar, laapertura de un FLA, o preocuparse de si el cliente te ha enviado la copia de la derecha, imagen, o de otrosactivos.

Deshacerse de la idea de que un proyecto de Flash está plagada de cada vez que cambia de modo fla y abrazar

la idea de ejecutar la generación de contenidos en tiempo. 

Michael MinorDirector de medios interactivosinvertedCreative.com

Page 6: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 6/467

6

AgradecimientosMe gustaría dar las gracias a Laura Sinise por ayudarme a empezar.Este libro no habría sido posible sin las siguientes personas:

Adquisiciones Editor Senior, Stephanie McComb; Project Editor, BethTaylor; Copy Editor, Kim Heusel Technical Editor, Navid Mitchell yMary Keefe. También me gustaría agradecer a mis amigos de Colin, Felipe,Brooke, Frank, Jimmy, y Daz y mi primo Teisha por su enormecantidad de apoyo. Y, por último, me gustaría agradecer a mi familiapor su comprensión y paciencia mientras yo estaba encerrado en mioficina durante todas las horas de la noche. 

Page 7: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 7/467

7

ContenidoAcerca del Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vPrólogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viiAgradecimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ix

Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

Parte I: Entender los Conceptos Básicos 1

Capitulo 1: Introducción con Flash y PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Agregar Apache a un Servidor Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

Instalación de Apache para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4

Instalación de Apache para UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

Modificación de Apache para Windows y UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

Instalación de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14

Instalación de MySQL para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14

Instalación de MySQL para UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Protección de MySQL . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Configuración de PHP en el Servidor Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Instalación de PHP para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Instalación de PHP para UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 

Capitulo 2: Explorando Flash y PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Introducción al Servidor Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 37

Trabajar con archivos .htaccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37

Protección de su contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Recopilación de información acerca de Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Utilización de documentos de error personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Explorando lo básico de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Entender las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Trabajar con funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49

Entender las estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Uso de la comprobación de tipos en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Explorarando lo Básico de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Uso de declaraciones o sentencias (stantemets)  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Condiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58Explorarando Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . 59

Flash IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

Editores alternativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

Flash-Dispositivos habilitados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62

Un Paso Adelante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62

Page 8: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 8/467

8

Capitulo 3: Como realizar la conexión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63Entender Comunicaciones en Flash ..........................................................................................63

Determinar el estado de PHP ........................................................................................64Trabajar con distintos tipos de conexión ...….................................................................65

Conexión de Flash a PHP...........................................................................................................69Conexión de PHP a MySQL…......................................................................................................73

Determinar el estado de MySQL....................................................................................73Conectar a MySQL..........................................................................................................74Acercar todo junto……....................................................................................................77

Resumen……...............................................................................................................................84  

Capitulo 4: Trabajar con Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85Cargar datos en Flash.................................................................................................................85

Comprender las clases utilizadas para cargar los datos.................................................86Poner todo junto…….......................................................................................................87

Controlar carga de datos……………..............................................................................................88

Una-vía de carga……….....................................................................................................88Dos-manera de carga .....................................................................................................88Cargar XML en Flash…….............................................................................................................89Trabajar con XML en PHP...........................................................................................................92

Carga de XML……….........................................................................................................92Envío de XML..................................................................................................................93

Cargar imágenes usando PHP……...............................................................................................95Configurar cargador de la imagen..................................................................................96

Resumen………............................................................................................................................98  

Capitulo 5: Interactuar con el Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Desarrollo de un formulario usando Flash.................................................................................99Creación de un formulario de contacto....................................................................................101

Llamar el PHP………........................................................................................................103Controladores de evento en formulario de contacto...................................................103Correo en PHP…….........................................................................................................105

Módulo de login en Flash.........................................................................................................106Código esqueleto .........................................................................................................106Controladores de eventos en login………………..............................................................107Integración del Servidor para el módulo de inicio de sesión .......................................110

Resumen…………........................................................................................................................111  

Capitulo 6: Trabajar con Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113Cargar Cookies..........................................................................................................................113

Uso de cookies con PHP……...........................................................................................114Uso de cookies en Flash ...............................................................................................118Descubrir los beneficios del uso de cookies en PHP ....................................................122 

Resumen………..........................................................................................................................124  

Page 9: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 9/467

9

Parte II: Desarrollo de contenido interactivo 125

Capitulo 7: Mantenimiento de Seguridad al trabajar con la entrada de usuario. . . .127Precaución con el uso de entrada de usuario..........................................................................127

Forma adecuada de manejar la carga de archivos.......................................................128Comprobación de la entrada valida..............................................................................131

Limpiar de datos de usuario.....................................................................................................132Desinfección de los datos.............................................................................................133Limpieza adecuada de datos HTML..............................................................................136

Almacenamiento de datos.......................................................................................................136Escribir de forma segura a un archivo..........................................................................137Crear y guardar una contraseña segura usando PHP ...................................................141

Retornar datos .........................................................................................................................143Retornar datos de forma segura ..................................................................................143Utilizando un enfoque más seguro para el retorno de datos ......................................144

Comprender la seguridad Flash de Sandbox............................................................................145

Configurar el tipo de sandbox......................................................................................145Uso de la propiedad sandboxType...............................................................................145Determinar el activo sandbox ......................................................................................147Garantizar una aplicación no puede ser compartida....................................................151

Resumen...................................................................................................................................152

Capitulo 8: Uso de Sockets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153Comprender los Sockets...........................................................................................................153

Seguridad en sockets....................................................................................................154Implementación de un servidor socket........................................................................154

Entender la conexión del socket...................................................................................154Trabajar con Sockets en PHP....................................................................................................154Buscando la versión de línea de comandos de PHP.....................................................155Construir un servidor socket………................................................................................156Probar el servidor de socket.........................................................................................158Crear un persistente servidor socket............................................................................160

Trabajar con Sockets en Flash..................................................................................................161Inicialización de una conexión de socket......................................................................161Controladores de eventos (Event handlers)................................................................162Conexiones remota de socket......................................................................................163Uso de una clase para conexiones de socket...............................................................164

Creación de un cliente de Chat con Sockets Usando Flash y PHP............................................167Servidor socket PHP para el cliente de chat.................................................................167Conectar al servidor socket…………...............................................................................175Crear el cliente en Flash……..........................................................................................177

Resumen………..........................................................................................................................188

Page 10: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 10/467

10

Parte III: Ampliación de Flash y PHP 189

Capitulo 9: Trabajar con bibliotecas de terceros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Repasando bibliotecas de terceros..........................................................................................191

Otros tipos de bibliotecas de terceros.........................................................................192Bibliotecas en PHP........................................................................................................193

Instalación de bibliotecas de terceros.....................................................................................193Instalación de bibliotecas en Flash CS3........................................................................193Instalación de bibliotecas en PHP................................................................................195

Uso de bibliotecas de terceros................................................................................................196Trabajar con bibliotecas en Flash CS3..........................................................................196Trabajar con bibliotecas en PHP................................................................................197

Echando un vistazo a AMFPHP..................................................................................................198AMFPHP para AS3 y desarrolladores de PHP..............................................................198Pruebas AMFPHP con un servicio personalizado.........................................................201Uso de AMFPHP en Flash..........................................................................................205

Construcción de u mundo real de la Aplicación Usando AMFPHP............................................210Servicios de AMFPHP....................................................................................................210Integración de ActionScript para AMFPHP..............................................................216

Resumen..........................................................................................................................218

Capitulo 10: Uso de programación orientada a objetos. . . . . . . . . . . . . . . . . . . . . . . 219Entender la programación orientada a objetos (OOP)...........................................................219

Información general de las prácticas de OOP..............................................................220Uso de Clases en PHP........................................................................................................225

Importación de clases en PHP.......................................................................................226Instanciación............................................................................................................226Clases múltiples......................................................................................................228

Uso de Clases en Flash......................................................................................................229Importación................................................................................................................229Clase de documento......................................................................................................229Biblioteca de clases.......................................................................................................230

Uso de Flash y PHP para construir clases personalizadas.........................................................231Resumen.........................................................................................................................235

Parte IV: Desarrollo de Aplicaciones 237

Capitulo 11: Desarrollo de aplicaciones básicas. . . . . . . . . . . . . . . . . . 239Entender elementos de una aplicación.......................................................................239

Entender el diseño de la aplicación..........................................................................240Finalización de la etapa de planificación.....................................................................242

Desarrollo de un cliente de Chat............................................................................................242La porción de Flash....................................................................................................242PHP para la aplicación de chat...................................................................................252

Page 11: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 11/467

11

Uso de PHP para el desarrollo de una galería de fotos............................................................260El desarrollo de ActionScript....................................................................................261Navegación de galería de fotos..................................................................................266PHP para la galería de fotos........................................................................................270

Uso de PHP para desarrollar un lector RSS...............................................................................274Importación de clases....................................................................................................275

Cargando el PHP......................................................................................................275Uso de PHP, Flash, y MySQL para desarrollar de un banner dinámico......................................279

Abrir una ventana del navegador..................................................................................281Desarrollo Del PHP................................................................................................283Selección aleatoria....................................................................................................283

Uso de PHP para desarrollar un contador de visitas.................................................................285Contador de visitas lógico............................................................................................285Desarrollo de contador de visitas en Flash....................................................................286

Resumen..........................................................................................................................287

Capitulo 12: Desarrollo del mundo real de las aplicaciones. . . . . . . . . . . . . . . . . . . . 289Entender el mundo real de las aplicaciones.........................................................................289Uso de PayPal en Flash........................................................................................................290

Uso de POST data....................................................................................................293Uso de sendToURL....................................................................................................294Establecer una comunicación de PayPal......................................................................294

Uso de Flash y PHP para construir un Cart................................................................................295Diseño de la cesta (cart) de compras............................................................................296Construcción del PHP....................................................................................................306

Uso de PHP y Flash para construir una aplicación de búsqueda del Amazon..........................317Uso del servicio web de Amazon..............................................................................317

Simplificación de la respuesta XML..............................................................................319Desarrollo de una galería de fotos usando flickr......................................................................326

Interfaz con el servicio Web..............................................................................331Construir un documento XML personalizado...............................................................332

Resumen..........................................................................................................................333  

Capítulo 13: Uso avanzado del mundo real de las aplicaciones. . . . . . . . . . . . . . . . . 335Construcción de una aplicación de dibujo en in Flash..............................................................335

API de dibujo en Flash..............................................................................................336Uso de la librería GD en PHP..................................................................................................341

Generación de una imagen en la librería GD................................................................343Recolección de datos de pixeles en Flash......................................................................345

Uso de Flash para desarrollar un monitor del sitio web...........................................................347Desarrollo de PHP para el monitor del sitio web.........................................................347Uso de PHP a e-mail del administrador....................................................................349Desarrollo del ActionScript para el monitor del sitio web.............................................351

Uso de Flash para desarrollar un reproductor de video...........................................................359Desarrollo de una aplicación de encuesta................................................................................364

Page 12: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 12/467

12

Creando el PHP y MySQL..................................................................................364Desarrollo de ActionScript para la encuesta.................................................................368

Construcción de un simple editor de archivos..........................................................................373Resumen.........................................................................................................................380

Capitulo 14: Depurar aplicaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 381

Uso de informe de error en PHP..........................................................................................381Mostrando los errores para depurar.............................................................................383Entender los niveles de error................................................................................383

Depurar en Flash..........................................................................................................385Uso de una alternativa Trace................................................................................................389Resumen..........................................................................................................................392

Parte V: Mantenimiento de servidor, aplicación y de base de datos 393

Capítulo 15: Mantenimiento de una aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395Comentando código............................................................................................................395

Entender los estilos para comentar código............................................................396Eliminación de comentarios y depurar ayuda..............................................................399

Gestion de un cambio de registro............................................................................................399Seguimiento de errores................................................................................................399Usos adicionales........................................................................................................400Creación dinámica de cambios..................................................................................400

Administración de múltiples versiones.....................................................................................401Aplicación de control de versiones...............................................................................401Apoyar el control de versión de CS3.............................................................................401Configuración de control de versiones..........................................................................402

Uso de librerías personalizadas................................................................................................403Uso de librerías personalizadas con el control de versión............................................403Publicación de SWC..................................................................................................404

Resumen.........................................................................................................................404

Capítulo 16: Mantenimiento de un servidor escalable y más eficiente. . . . . . . . . . . 405Ejecutando un servidor actualizado.........................................................................................405

Uso de actualizaciones automáticas.............................................................................406Plataforma Zend.........................................................................................................406

Trabajar con Development Installs ..................................................................................406Construcción de otra versión de Apache en el mismo sistema.....................................406Trabajar con tecnología de punta..................................................................407Dependencias..........................................................................................................407

Almacenamiento en cache y optimización...............................................................................408Optimización de PHP....................................................................................................408Optimización de Apache...............................................................................................412

Optimización de MySQL................................................................................................413Almacenamiento en cache............................................................................................416

Page 13: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 13/467

13

Instalación de memcached en Linux.............................................................................416Instalación de memcached en Windows.......................................................................418Terminando la instalación para Linux y Windows..................................................418Gestión de servidores....................................................................................................420

Manejo de copias de seguridad (Backup).................................................................................421Administración de archivos...........................................................................................421

Administración copias de seguridad..............................................................................421Uso de PHP para copia de seguridad de base de datos.................................................424

Resumen..........................................................................................................................427

Capítulo 17: Construcción complete de aplicaciones avanzadas. . . . . . . . . . . . . . . . 429Construir un reproductor de video básico...............................................................................429Construir un reproductor de Video en Flash y PHP..................................................................432

Como empezar........................................................................................................432Integración remota..............................................................................................437Desarrollar un reproductor de video avanzado............................................................446

Construit la clase VideoListItem..............................................................................456Trabajar con seguimiento de video..........................................................................................461Actualización de la clase de video.................................................................................462Método updateVideoTracking..................................................................................463

Construcción de un componente de inicio de sesión de usuario en Flash................................465Desarrollo de la clase LoginWindow........................................................................466Prueba del componente de inicio de sesión.................................................................473Creando la clase del gestor de inicio de sesión en PHP................................................476Agregar remoto al componente de inicio de sesión.....................................................478

Finalizando el reproductor de video........................................................................................481Uso de una biblioteca externa......................................................................................482

Agregar el componente de inicio de sesión (login)......................................................482Resumen..........................................................................................................................486  

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

Page 14: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 14/467

14

IntroducciónEste libro es una exploración de varias partes en Flash y PHP. Flash se ha utilizado para todo, desde losanuncios de banner a las aplicaciones básicas completamente funcionales a través de la web y de escritorio.

A menudo se puede encontrar la información necesaria para escribir aplicaciones asombrosas de Flash o lacontraparte del lado del servidor pero rara vez ambos. Este libro se basa tanto en los aspectos y explica elproceso de trabajar con PHP en sus proyectos de Flash.

La primera parte del libro es un paso a paso del proceso de instalación y configuración de PHP y todos loscomponentes necesarios. Una vez instalados los componentes, el paso siguiente es un resumen de PHP y unaguía de qué características y técnicas encontrará en el libro como de continuar a través de los capítulos.Cada capítulo comienza con una descripción básica y después se traslada rápidamente a la informaciónpertinente, dejando de lado cualquier pelusa para asegurar que está recibiendo toda la información importantede inmediato.

Parte II se centra en la importancia y las mejores prácticas de hacer sus aplicaciones más seguras, manteniendola funcionalidad. El tema de la seguridad se repite en los diversos ejemplos en este libro, pero esta parte enparticular, es donde se encuentra la mayoría de la información de seguridad.

La parte III se extiende Flash y PHP, trabajando con varias aplicaciones de terceros y las bibliotecas.Este capítulo finaliza con una visión general de AMFPHP para construir más avanzado y más fácil de manteneraplicaciones.

Parte IV tiene toda la información anterior y le guía por el proceso de construcción completo de aplicacionesdel mundo real en Flash y PHP. Estas aplicaciones del mundo real le ayudarán a construir sus versionespersonalizadas y en última instancia, le permiten crear aplicaciones más avanzadas y dinámicas.

Ejemplos y archivos fuentes

Usted puede encontrar todo el código fuente y los archivos de arranque de los ejemplos en este libro en elsiguiente sitio web.

www.wiley.com/go/flashandphpbible 

Page 15: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 15/467

15

Introducción

Lo que usted Necesitará

El ActionScript utilizado en este libro no es avanzado, pero un conocimiento básico de los fundamentos que lepermiten comprender mejor los ejemplos. La Biblia Flash es un complemento perfecto para este libro y lo

recomiendo.

Una comprensión básica de las prácticas de programación orientada a objetos le ayudaría en la segunda partedel libro, pero no es necesario para entender los ejemplos en general. Es posible que desee tomar un librosobre prácticas avanzadas de programación orientada a objetos para obtener un entendimiento más profundodel tema de.

El PHP utilizado en este libro está asumiendo un conocimiento muy básico de la materia. Esto significa queusted no sólo aprenderá los temas avanzados, pero cómo llegar allí desde el principio. PHP también le permitedesarrollarse en un formato basado en la clase, de forma que se utilizarán en la plena aplicación de loscapítulos para asegurarse de que están construyendo una aplicación más completa y actualizable.

La última cosa que necesita es una conexión a Internet para descargar el código para el libro y trabajar conalgunos de los servicios de terceros. Esto no se usa en todo el libro, pero para obtener la experiencia completade la conexión a Internet será necesario.

Eso es todo lo que usted necesita. Ahora es el momento de saltar adentro del capítulo 1 en sólo unas pocaspáginas de distancia.

Page 16: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 16/467

16

Parte I

Entender los conceptos

 básicos

Page 17: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 17/467

17

Capitulo 1

Introducción con Flash y PHP 

El proceso de empezar incluye la instalación y configuración de Apache, MySQL y PHP. Los ejemplos en estelibro asumen la instalación que se llevará a cabo a nivel local, sin embargo, puede modificar las rutas de accesoy direcciones URL, si desea utilizar un servidor remoto.

El orden en que instalar estos programas es importante, ya que utilizan rutas de acceso y las variables de losdemás, lo que resulta en el entorno de desarrollo completo.

Esta guía de instalación cubre los sistemas Windows y UNIX. Si usted ha decidido trabajar en el libro en unservidor existente, puede saltar al capítulo 2. Sin embargo, hay cierta seguridad y la información de

configuración dentro de este capítulo, usted puede encontrar útil. 

Agregar Apache a un servidor web 

El primer paso para trabajar con Flash y PHP es para instalar los componentes necesarios. El proceso deinstalación se define por la instalación de Apache, MySQL, PHP y, por último. Esta orden es necesario porquePHP necesita caminos para Apache y MySQL para proporcionar ese apoyo. 

Usted puede volver a compilar (build) cualquiera de estos componentes en el futuro. 

Sin embargo, si usted sigue este orden de instalación que significará menos trabajo y rehacer en el futuro.  

Los componentes que se instalen cambiar de vez en cuando, pero el proceso de instalación en general sigue

siendo bastante constante. Esto significa que usted puede descargar los archivos más recientes de susrespectivos sitios de los proyectos, o para asegurar que todos los componentes trabajan juntos, usted puedeobtener estos archivos desde la página del libro. 

Usted debe tener un conocimiento básico del sistema en el que va a instalar. Es importante para ejecutar unsistema de desarrollo en una ubicación segura. La mejor configuración es un equipo detrás de un firewall físicoo en una red interna. Si esto no es posible, simplemente configurar el Apache no permitir las conexionesremotas y se puede cambiar el número de puerto para ocultarlo en la red.  

NOTA desarrollo de sistemas puede requerir una configuración más avanzada en función de cómo se hancreado. Usted puede encontrar los problemas comunes se explica en el sitio Web del libro. 

Instalación de Apache para Windows Una vez que determine que el sistema está instalando el sistema de desarrollo puede empezar a descargar loscomponentes necesarios. Se recomienda que utilice los archivos proporcionados con el libro. Tambiénproporcionan los lugares necesarios para descargar los archivos más recientes. 

La última versión de acceso desde el sitio Web de Apache. Es más fácil de instalar desde la versión delinstalador binario en lugar de compilar el código fuente. Sin embargo, la compilación de código fuente, seofrecen un mayor nivel de personalización y permite entender lo que se está ejecutando bajo el capó.  

Page 18: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 18/467

18

PRECAUCIÓN construcción de la fuente no es para el principiante. Se requiere un cierto nivel de experiencia ysólo se recomienda a aquellos que realmente sienten el desafío. 

Los últimos archivos binarios para Windows de instalación de Apache se puede encontrar en 

www.apache.org/dyn/closer.cgi/httpd/binaries/win32/. 

Instalación

Iniciar el proceso de instalación abriendo el archivo de instalación de Windows que era o bien descargarse de lapágina de libros o directamente desde el sitio Web de Apache. 

Esta instalación será principalmente visual, porque el instalador de Windows es una instalación gráfica. La clavepara una correcta instalación sigue de cerca y la lectura de las pantallas de todo el proceso de instalación. Laprimera pantalla, como se muestra en la Figura 1.1, no requiere ninguna modificación. 

Las siguientes dos pantallas son el acuerdo de licencia, que puede tomar el tiempo para leer o simplementehaga clic en Siguiente, ya que la información es bastante estándar. 

Después de eso, usted encontrará una introducción a Apache, que le da un buen panorama de lo que Apachetiene para ofrecer, como se muestra en la Figura 1.2. La pantalla también se ofrecen enlaces a recursos muyvaliosos que rodean la comunidad de Apache. 

FIGURA 1.1

La primera pantalla que no requiere ninguna modificación del usuario. Simplemente haga clic en Siguiente paracontinuar el proceso de instalación. 

Page 19: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 19/467

19

FIGURA 1.2La información del servidor de un sistema de desarrollo no tiene por qué ser real, ya que muestra la figura. 

Page 20: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 20/467

20

La instalación del servidor es donde se define la configuración específica para su entorno. Si usted se deinstalar Apache en un sistema real, usted podría llenar en esta página con la información correcta, de locontrario no sería Apache pide la ruta correcta. Puede aceptar las opciones por defecto para una configuraciónde desarrollo, como esta.

Siendo que la instalación está en un servidor de desarrollo no tienen que rellenar la pantalla con los datosreales, a menos que utilice esta guía para instalar en un servidor en vivo. 

La instalación de Apache HTTP Server 2.0 y accesos directos para los programas: La opción es cuando sedesea instalar Apache para que sólo el usuario actual puede acceder a él. Si desea que todos los usuariospuedan acceder a Apache, a continuación, tendrá que instalarlo como un servicio. 

El proceso de instalación de Apache se puede hacer de dos maneras, como se muestra en la Figura 1.3. Laprimera opción es aceptar todas las configuraciones por defecto, que resulta en una instalación más rápida,pero no es siempre la mejor opción.

La opción más común es la segunda alternativa personalizada en la que le dicen a Apache qué herramientas ybibliotecas que desea instalar. De vez en cuando al instalar una aplicación que puede experimentar unaescasez de espacio en disco duro. 

 Apache, por otra parte, es tan pequeño, con todas las herramientas adicional instalado que no debería haber unproblema de instalarlo. 

FIGURA 1.3

Page 21: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 21/467

21

La opción Personalizar se determina para asegurar todas las herramientas de desarrollo están instalados, comola biblioteca y la capacidad de construcción de módulo. 

Para los ejemplos en este libro, lo mejor es aceptar la instalación personalizada y asegúrese de que todas lasbibliotecas y las extensiones están instalados. Por ejemplo, algunos de los módulos utilizados para modificar lassolicitudes de los usuarios sólo están disponibles cuando se instala la versión completa. 

Dependiendo del sistema, puede tomar un tiempo para instalar Apache. Incluso si la barra de estado deje demoverse no se trate; algunos de los archivos tardan más que otros a la instalación. La aplicación le avisa si algosucede durante el proceso de instalación, que es muy raro. Apache actualizar la barra de progreso, como semuestra en la Figura 1.4, mientras que la instalación está ocurriendo. 

FIGURA 1.4

Page 22: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 22/467

22

Estado de la instalación de Apache 

La última pantalla que se ve es una nota que la instalación fue exitosa. Un símbolo de DOS puede aparecer quele notifica que el servicio de Apache está comenzando. También puede obtener una advertencia de Firewall, ytendrá que conceder el acceso de Apache pide. 

Pruebas

Felicidades. Si todo ha ido bien debería tener ahora Apache instalado en su máquina Windows. Para probar lainstalación, abra un navegador Web y el punto en el servidor Web Apache locales, que también es conocidocomo localhost. 

http://localhost/

Usted debe ser presentado con una pantalla similar a lo que se ve en la figura 1.5, que básicamente se leinforma de que Apache se ha instalado correctamente y está listo para comenzar a cumplir el contenido. 

Dependiendo del proceso de instalación, puede modificar esta situación, que a veces es necesario cuando seinstala en un servidor remoto. Usted no sería capaz de acceder al servidor web Apache en la direcciónlocalhost. En su lugar, desea señalar a la dirección IP o el nombre de dominio de su sitio Web.  

FIGURA 1.5

Page 23: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 23/467

23

La pantalla de bienvenida por defecto de Apache 

Con Apache instalado, puede modificar la página predeterminada para ver realmente cómo funciona el Apache.Los archivos de Internet que sirve de Apache se encuentran en la raíz del documento. Esto es similar a lapublic_html o www que usted ha visto muy probablemente en un servidor Web remoto. A diferencia de unservidor Web remoto, los permisos de estos archivos son a menudo inaccesibles para los demás usuarios nover desde su propio ordenador personal. 

La ubicación de este directorio Web en Windows utilizando una instalación por defecto es: 

C:\Program Files\Apache Group\Apache2\htdocs

Usted verá muchos ficheros en este directorio, tales como los archivos del mismo índice en varios idiomas.Usted no desea modificar cualquiera de estos archivos, ya que podría estropear el núcleo de Apache ointroducir errores que serían muy difíciles de rastrear, por tanto, crear un nuevo archivo. 

Usando su editor de texto favorito, crear una página HTML muy simples, tales como las siguientes: 

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”><html xmlns=”http://www.w3.org/1999/xhtml” lang=”en”><head><title>My Custom Page</title><body><h1>Welcome to my custom page</h1><p>This is a test of the customization of Apache!</p><p>Pretty cool huh?</p>

Page 24: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 24/467

24

</body></html>

Guardar este nuevo archivo en el directorio de la Web Apache y el nombre que myPage.html. Después deguardar el archivo, abra en el navegador Web para presenciar la flexibilidad en Apache. 

Este no es el ejemplo más avanzado, pero se le debería dar la idea básica de cómo modificar y trabajar con elservidor web Apache. Ahora es el momento de crear ejemplos más útiles, porque tiene lo básico. 

En este punto, con Apache instalado y probado, puede pasar a la instalación y configuración de PHP, o puedesir adelante con el proceso de configuración de Apache. 

 Alternativamente, se puede leer a través de la instalación de Apache en UNIX, que se trata en la siguientesección.

La instalación de Apache en UNIX estaría más cerca de trabajar con un servidor remoto, ya que encontrará quela mayoría de los servidores Web se basan en Linux. Esto no significa que usted nunca se encontrará unservidor basado en Windows Web en vivo, pero ciertamente no es tan común. 

Instalación de Apache para UNIX 

El proceso de instalación en UNIX es más avanzada que la instalación de Windows. Sin embargo, la instalaciónde UNIX a menudo es el escenario más común para un servidor en vivo. 

El primer paso para instalar Apache es la descarga de la fuente. Esta fuente puede ser descargado desde elsitio del libro, o directamente desde el sitio Web de Apache. Uso de la fuente proporcionada en el sitio web dellibro asegura que se está ejecutando un sistema casi idéntico al utilizado para escribir este libro. Va a encontrar la fuente, como se muestra en la Figura 1.6, directamente desde Apache en la siguiente URL:  

http://httpd.apache.org/download.cgi.

FIGURA 1.6

Page 25: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 25/467

25

 Aquí está una lista de las posibles versiones del código fuente para su descarga desde el servidor Apache. 

Después de descargar el código fuente de Apache, puede comenzar el proceso de instalación.  

Preinstalación

 Antes de la instalación puede comenzar, la fuente debe ser extraído del archivo descargado. Esto se hacesimplemente descomprimir el archivo tarball y desempaquetar el archivo sin comprimir. 

$ gzip -d httpd-2.2.6.tar.gz$ tar xvf httpd-2.2.6.tar 

Una vez que los dos últimos procesos se completa, se quedan con un nuevo directorio que contiene el códigofuente.

 Antes de continuar, cambiar de directorio, lo que significa que estará en el directorio del código fuente seencuentra en.

$ cd httpd-2.2.6/

Instalación

Page 26: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 26/467

26

Cuando se extrae el código fuente, usted puede comenzar el proceso de instalación. Apache instalar con supropio conjunto de opciones, pero usted tiene la posibilidad de modificar estos. Si desea configurar Apache conlos valores predeterminados, simplemente escriba ./configure.Sin embargo, es una mejor práctica para adaptar el proceso de instalación de su entorno. 

Una de las opciones más importantes que puede definir es el --prefix, que es donde Apache se instalará. Estaopción se utiliza en toda la aplicación y también se utiliza más tarde durante la instalación de PHP y en lasección de configuración. 

Para simplificar un proceso de configuración se utiliza parcialmente modificada, pero no dude en mirar a travésde la documentación de Apache para obtener una mejor comprensión de lo que la configuración se puedecambiar. 

$ ./configure --prefix=/usr/local/apache--enable-rewrite=shared \--enable-spelling=shared

Una vez que comienza el proceso de configuración, puede tomar unos minutos para completar. La mayoría delas veces podrás ver el proceso de impresión en la ventana de terminal, pero incluso si no lo es, se estáejecutando. 

Después de configurar el comando se haya completado, puede ejecutar make para construir el paquete de Apache. 

$ make

Una vez más, este proceso puede llevar tiempo dependiendo de su sistema, así que por favor sea paciente.Una vez que el comando make se ha completado, el último comando para ejecutar instala el paquete, paraterminar la parte de la instalación. 

$ make install

Pruebas

Con Apache instalado, usted puede iniciar y ponerlo a prueba en el navegador. 

 Apache se instala una herramienta muy útil, apachectl, que se puede encontrar en el directorio bin/ de laubicación de instalación. Usando el camino elegido para esta instalación, la aplicación apachectl se encuentranaquí. 

$ usr/local/apache/bin/apachectl

Utilice el comando siguiente para iniciar el servidor Apache: 

$ usr/local/apache/bin/apachectl start

Utilice este comando para detener el servidor Apache: 

$ usr/local/apache/bin/apachectl stop

Para reiniciar el servidor Apache, utilice este comando: 

$ usr/local/apache/bin/apachectl restart

Probando el servidor se realiza haciendo una llamada a localhost desde el navegador web en  http://localhost/.Como usted puede ver, la instalación fue un éxito. A fin de probar y entender mejor cómo modificar los archivosde Apache sirve, HMTL crear un nuevo archivo y guardarlo en la raíz de la Web Apache. 

Page 27: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 27/467

27

Usando su editor de texto favorito, que en UNIX más probable es que vi, crear este nuevo archivo HTML.Los siguientes comandos asumen que se está usando vi.

Crear un Nuevo archivo:

$ vi /usr/local/apache/htdocs/sampleFile.html

Con el fin de comenzar a introducir el código HTML, usted necesita decirle a vi entrar en modo de inserción, quese realiza pulsando I. Presione ESC para salir del modo de inserción. 

Pegue o escriba el siguiente ejemplo de código HTML:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”><html xmlns=”http://www.w3.org/1999/xhtml” lang=”en”><head><title>My Custom Page</title><body><h1>Welcome to my custom page</h1><p>This is a test of the customization of Apache!</p>

<p>Pretty cool huh?</p></body></html>

Una vez que el archivo es creado, pulse ESC y escriba el siguiente comando para guardar y cerrar el editor. Tenga en cuenta, el : es parte del comando.

:wq

 Algunos archivos de agregar o modificar requieren que reinicie Apache, sin embargo, los archivos de base deInternet no entran en esa categoría. Ahora puede mostrar la nueva página, añadiendo el nombre del archivo ala llamada localhost en 

http://localhost/sampleFile.html.

Como se puede ver, el servidor de Apache ha sido instalado correctamente y se haya podido añadir un archivopersonalizado que Apache adecuadamente sirve. En este punto, usted debe tener un conocimiento básico decómo funciona el Apache. La siguiente sección (independiente de la plataforma) entra en más detalles acercade cómo se puede modificar Apache. 

Page 28: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 28/467

28

Modificación de Apache para Windows y UNIX 

Los siguientes consejos, trucos y ajustes se pueden realizar en las instalaciones de Windows o UNIX. Esto sedebe a que son específicas de Apache y no el medio ambiente que puede correr. 

Cuando se trabaja en el desarrollo de sistemas no es raro que requieren más de una instalación de Apache.Esto podría poner a prueba sangrante código de vanguardia, un apoyo más plug-ins, o simplemente para

garantizar un proyecto se ejecuta en un clon del sistema en vivo. 

El proceso de instalación de Apache se mantiene más o menos igual. Sólo tienes que cambiar la opción deprefijo apuntando a una nueva ubicación/diferente. Usted puede ejecutar varias versiones de Apache, sinembargo, requieren de ubicaciones de instalación independiente. Ejecutar varias versiones de Apache, almismo tiempo utilizando sólo las opciones por defecto de instalación no es posible. Esto se debe a Apache quese creó para escuchar las peticiones en el puerto 80 por defecto. 

Usted puede modificar el puerto que escucha en el Apache editando el archivo de configuración. Los archivosde configuración se encuentran en el directorio conf/, que se encuentra en el directorio que usted designedurante la instalación de Apache. 

Por ejemplo, puede cambiar el puerto que funciona en Apache. Comience por abrir el fichero de configuración. 

Para abrir el archivo de configuración en UNIX, use vi.

$ vi /usr/local/apache/conf/httpd.conf

Para abrir el archivo de configuración de Windows, navegue hasta el directorio de instalación y abrir el archivohttpd.conf en su editor de texto favorito.

C:\Program Files\Apache Group\Apache2\conf\httpd.conf 

Cuando el archivo está abierto, desplácese hacia abajo o de búsqueda de la directiva Listen, que tendrá unaspecto similar a la siguiente:

## Listen: Allows you to bind Apache to specific IP addresses and/or# ports, instead of the default. See also the <VirtualHost># directive.#Listen 80 

NOTA Apache sólo se verá en este archivo durante el inicio. Cuando haya terminado la edición, asegúrese dereiniciar el servidor Apache. 

Cambio de un valor que le permite ejecutar varias copias de Apache. Sin embargo, ejecutar varias instancias de Apache puede ser intensivo del procesador, así que asegúrese de que sólo se ejecutan como muchos casos,

según sea necesario. En la mayoría de los casos, se ejecutará sólo una instancia en un servidor en vivo.  

Page 29: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 29/467

29

Instalación de MySQL 

 Ahora que está instalado Apache, el siguiente componente a instalar es MySQL. Esta sería la base de datosque el contenido de su aplicación se almacenan y se gestione por medio de PHP.  

Instalación de MySQL para Windows 

 Al igual que el proceso de instalación de Apache, MySQL tiene un instalador de Windows que hace que todo elproceso mucho más fácil. Las guías de instalación a través del proceso de instalación de la base de datosbásicos y los componentes adicionales que necesita. Para esta instalación, la instalación por defecto se utiliza,pero no dude en personalizar, que es una muy buena manera de aprender. 

Descargar

El primer paso para la instalación de MySQL es descargar la última instalar los archivos. Puede utilizar losarchivos proporcionados en el sitio Web del libro para garantizar la compatibilidad o puede visitar el sitio Web deMySQL en http://dev.mysql.com/downloads/mysql/5.0.html#win32 para obtener la última versión estable eneste momento. 

Seleccione el programa de instalación de Win32 con el programa de instalación para que el proceso deinstalación en general más fácil. Esto le permite utilizar la interfaz gráfica de usuario en lugar del comandotradicional línea de proceso de las versiones anteriores. 

Instalación

Después de descargar y abrir el instalador de una página de bienvenida, seguida por otras páginas quecomponen el proceso de instalación, como se muestra en la Figura 1.7. Similar a la instalación de Apache,MySQL también tiene varias opciones de configuración que necesitan ser modificados. Repasa atentamente lospasos siguientes para asegurar su base de datos funcionará correctamente. 

Elija la opción de instalación Típica, que instala los componentes básicos necesarios para operar y mantener una base de datos MySQL. Haga clic en Siguiente para pasar al siguiente paso. 

En este punto, MySQL ha sido instalado. La última página le da la opción de iniciar la sección de configuraciónal hacer clic en Siguiente. 

 Asegúrese de seleccionar esta opción. Si accidentalmente cerca de esta página usted puede volver a ejecutar oabrir la aplicación de configuración en el directorio mysql/ en archivos de programa.

La instalación de MySQL no ofrecen casi nada en la modificación. Esto es porque el apoyo a la aplicación Asistente para la configuración se ocupa de todas las opciones de configuración necesarios.

Seleccione la opción de configuración detallada, como se muestra en la Figura 1.8. Esto le permite ajustar laconfiguración de MySQL en lugar de utilizar todos los valores predeterminados. Haga clic en Next paracontinuar .

Page 30: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 30/467

30

FIGURA 1.7Esta página es el proceso de instalación. La instalación puede durar varios minutos, dependiendo del sistema.

Si selecciona la opción de configuración estándar se le presenta con una pequeña lista de las pantallas deconfiguración. Esto acelera el proceso de configuración, pero no le permiten personalizar la funcionalidad deMySQL y podría resultar en un sistema menos eficiente. 

Page 31: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 31/467

31

FIGURA 1.8Seleccione el tipo de configuración.

El tipo de servidor determina la memoria, disco duro, y el uso de la CPU. Esto ha sido instalado en su equipo dedesarrollo de modo que quieren asegurarse de que MySQL no llegar a ser excesivamente procesador orecursos. Selección de la opción Máquina de Desarrollo garantiza esto no suceda. 

Las otras dos opciones son para los servidores dedicados. La opción de la máquina del servidor se utilizacuando se instala MySQL en la misma máquina del servidor Web, como Apache, se está ejecutando. Esto está

bien para un medio en el sitio de la trata, pero usted puede encontrar un aumento en el uso de recursos que elsitio se vuelve más activa. 

Cuando esto sucede, tendrá que introducir una máquina dedicada a ejecutar su base de datos MySQL, que eneste momento es que seleccione la opción Dedicado MySQL Server Machine. Esta opción le dice a MySQL seinstala en una máquina dedicada y utilizar todos los recursos y la memoria que se presente. 

NOTA Asegúrese de que usted nunca accidentalmente seleccione la opción dedicado MySQL Server Machinecuando se instala en un servidor Web. Su sistema no será capaz de gestionar adecuadamente los recursos y,eventualmente, podría fallar. 

MySQL constantemente tratan de asignar toda la memoria libre, siempre que esté disponible, lo que significaque el servidor Web cierra una conexión rancio, MySQL podría robar la memoria libre hasta que no haya más

espacio para la conexión disponible. 

After you select an option (in this example Dedicated Machine), click Next (see Figure 1.9).

Page 32: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 32/467

32

FIGURA 1.9Después de seleccionar una opción (en este ejemplo máquina dedicada), haga clic en Siguiente (ver Figura1.9). 

Seleccione la opción multifuncional de base de datos como el tipo de uso de base de datos para permitir lamáxima capacidad de expansión del sistema. Esto permite a MySQL para optimizar tanto para los motores dealmacenamiento InnoDB y MyISAM. Si esta es la primera vez que la instalación de MySQL, que es muy posible,porque muchos sistemas del buque con ella ya está instalado, usted puede preguntarse cómo se usan las otrasdos opciones. 

La base de datos transaccional opción Sólo se usa cuando va a correr una gran cantidad de consultastransactionbased. Esto significa que se ajuste un montón de preguntas (UPDATE, SELECT, DELETE, INSERT)en una carrera para asegurar que todos los cuadros adecuados y los datos son modificados. Pero si algo vamal en una de esas modificaciones que podría arruinar los datos restantes. 

Esto significaría una gran cantidad de edición de datos innecesarios y en algunos casos podría resultar endatos incorrectos. Una transacción busca un error o un disparo y si se encuentran todas las modificacionesintroducidas durante el inicio de la transacción se deshacen y vuelve a su estado no modificados. 

He aquí un ejemplo simple de una transacción basada en MySQL, que modifica dos partes separadas de losdatos en la misma mesa.

START TRANSACTION;

UPDATE users SET credits = credits - 100 WHERE id = 3002;UPDATE users SET credits = credits + 100 WHERE id = 3002;

COMMIT;

Durante el proceso de una operación de las anotaciones se hagan disponibles para otras sesiones paragarantizar que los datos no pueden ser leídos o modificados, mientras que una transacción se está realizando.

Page 33: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 33/467

33

Usted puede pensar en este proceso como algo similar a dar vuelta a la alimentación en su casa a que alguienno puede querer darle al interruptor de luz mientras está trabajando en algo.La base de datos no transaccionales Sólo se selecciona la opción cuando usted sabe que nunca tendrá lacapacidad de transacción. Esto sólo se permite que el motor de almacenamiento MyISAM, que puedenproporcionar mejores resultados, pero también limita la funcionalidad en general.

Frecuentemente usted encontrará la opción de base de datos multifuncional, como se muestra en la figura 1.10,

en la mejor opción, pero también es bueno saber la oferta de otras opciones .

FIGURA 1.10La opción multifuncional de base de datos es seleccionado como el tipo de almacenamiento de base de datos.

La siguiente página le permite personalizar el sistema de almacenamiento InnoDB, pero lo mejor es dejarlacomo esta con la configuración predeterminada.

En algunos casos, puede que quiera elegir una ubicación distinta, que puede hacer haciendo clic en el botónExaminar a la derecha del cuadro de instalación. Elegir un lugar diferente sólo es necesario cuando el anuncioDrive Info en la parte inferior de la ventana de informes de una pequeña cantidad de espacio libre en disco, loque significa que su base de datos podría consumir el resto de sus recursos.

PRECAUCIÓN Asegúrese de que nunca elegir una unidad extraíble, como la ubicación de almacenamiento, ya

que podría perjudicar a la base de datos si la unidad no está conectada en todo momento.

Como se dijo anteriormente, con mayor frecuencia es mejor dejar esta opción en su opción por defecto, comose muestra en la figura 1.11, para garantizar las funciones de su base de datos correctamente.

Page 34: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 34/467

34

FIGURA1.11Configuración de tablas InnoDB 

La siguiente opción es una aproximación de conexiones simultáneas que su base de datos MySQL que hacer.Debido a que esta instalación se realiza en un servidor de desarrollo, una estimación de no más de 25 es unsupuesto realista. En realidad, no sería raro tener más de 5, pero el 25 es un número de buena base.

Seleccione el procesamiento de transacciones online (OLTP) en la opción "Decisión de Apoyo ", la partidacuando se está desarrollando una aplicación Web para que el público tiene acceso. Esto es porque realmente

no tienen idea de cuántas personas pueden tratar de acceder al sistema en cualquier momento dado. A medidaque su aplicación sigue creciendo incluso puede ser necesario a la cadena de múltiples bases de datos asícomo para manejar la carga, pero por ahora una base de datos es suficiente, especialmente considerando queesta instalación se está realizando en el sistema local.

Seleccione la opción de ajuste manual cuando se desea especificar un número exacto. Esto sólo es necesariocuando se desea tener un control total sobre la aplicación Web. Muchas veces se ve este número manualestablecida en 300 viven en las aplicaciones Web. Esto parece ser un buena medio con la capacidad demanejar múltiples conexiones.

Tenga cuidado de no establecer la opción de conexiones simultáneas, como se muestra en la Figura 1.12,demasiado alto porque el sistema sólo tendrá tantos recursos que pueden ser divididos y compartidos por cadaconexión. Si agrega más memoria a su solicitud, usted puede aumentar este número, pero que no siemprepuede ser la mejor opción.

Page 35: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 35/467

35

FIGURA 1.12Establezca el número aproximado de conexiones simultáneas.

Las opciones de red de determinar si las bases de datos MySQL será visible a otros sistemas, más allá de laconfiguración local. Para la garantía definitiva, deshabilitar el TCP/IP. Si usted tiene varias máquinas dedesarrollo, puede habilitar y elija un puerto no estándar .

Para esta instalación, la red está habilitada, como se muestra en la figura 1.13, y el puerto por defecto se utilizaporque no tienen la intención de permitir que otras personas se conectan, pero mi servidor web está ubicado

detrás de un firewall de hardware para mayor seguridad.

Elija un número de puerto no estándar si instala otra versión de MySQL en el mismo sistema.Esto no es muy común, pero a veces hay que desplegar hacia atrás entornos compatibles para probar el códigoen diversas configuraciones. Esta es una alternativa rentable a la construcción y el mantenimiento de unamáquina física para manejar el proceso de pruebas.

 Asegúrese de seleccionar la opción Habilitar el modo estricto para garantizar las funciones de su servidor debase de datos correctamente.

Page 36: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 36/467

36

FIGURA 1.13Configuración de las opciones de red 

En la siguiente página se puede seleccionar el juego de caracteres predeterminado utilizado en su base dedatos. El juego de caracteres estándar se selecciona la opción para este ejemplo (ver Figura 1.14), peromuchas veces esto no es la mejor opción, ya que no permite la compatibilidad con la mayoría de los sistemasexistentes o permitir la expansión en el tiempo. Para este ejemplo va a funcionar bien porque no tienen ningúncarácter avanzado se utiliza.

Usted puede, por supuesto, seleccione cualquier opción que mejor se adapte a su uso, pero prefiero el mejor apoyo para la opción de Multilingüismo. Esta opción permite una mayor expansión y es altamenterecomendable cuando el almacenamiento de texto en muchos idiomas diferentes.

Seleccione el carácter seleccionado por defecto Manual Set/ opción de gestión de las raras ocasiones en quedesea especificar un cierto carácter configurado para utilizar en lugar de elegir una selección de ellos. Ustedprobablemente nunca utilice esta opción porque es demasiado específica, pero está disponible si es necesario.

Si usted piensa que va a utilizar varios idiomas, le recomiendo la segunda opción, el mejor apoyo almultilingüismo, para asegurar sus aplicaciones será capaz de expandirse, y también le permitirá experimentar con diferentes opciones después.

La página Opciones de Windows (vea la Figura 1.15) determina cómo se inicializa MySQL. Por ejemplo, siusted elige para ejecutar MySQL como un servicio que se inicia o detiene de forma automática, controlada por el sistema operativo. Si usted tiene instalada una versión anterior de MySQL, usted tendrá que elegir un nombrede servicio diferente. Esto es para garantizar el servicio existente no colisionar con este .

Seleccione el lanzamiento del servidor MySQL automáticamente opción para asegurar la base de datos estádisponible cuando se inicia el sistema. Esto no es obligatorio, pero si lo hace de modo que no tienen que iniciar el servicio manualmente cada vez que reinicie su máquina. Puede, por supuesto, la solicitud de acceso a losservicios en su sistema y modificar esta opción en cualquier momento, así como desactivar el servicio hasta lapróxima vez que la máquina arranca.

Page 37: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 37/467

37

FIGURA 1.14Selección de un juego de caracteres predeterminado 

El directorio Incluye Bin en Windows opción PATH, cuando se selecciona, incluye soporte para MySQL desde lalínea de comandos, simplemente escribiendo MySQL. Esto significa que cualquier símbolo del sistema lepermitirá un acceso rápido a la base de datos MySQL. Puede consultar las instrucciones de su sistemaoperativo para modificar esta variable PATH.

También puede añadir PHP y Apache para esta variable mismo camino, que los expondría a la línea decomandos también. De hecho, cuando se instala PHP algunos materiales de instrucción para llevar a cabo estamodificación se ofrece.

Page 38: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 38/467

38

FIGURA 1.15Las opciones de Windows determina cómo MySQL se inicia y se accede.

La configuración final se utiliza para establecer una contraseña de root, como se muestra en la figura 1.16. Elusuario root tiene permisos globales sobre sus bases de datos, así que puede imaginarse lo importante que esasegurar este usuario.Usted no tiene que elegir una contraseña, pero por defecto, MySQL se instala sin contraseña de root, lo quesignifica que nadie tiene acceso a sus bases de datos.

Lo mejor es elegir una difícil de adivinar la contraseña, vuelva a escribir una vez más, y asegúrese de que elacceso a la raíz de la opción Habilitar el control remoto de máquinas no se ha seleccionado para deshabilitar lacapacidad para administrar las bases de datos de forma remota. Puede parecer esta opción permitiría unamejor facilidad de uso, pero hay algunas excepciones, una de las cuales es la seguridad general de un sistema.

 A pesar de que esta configuración se realiza en un servidor de desarrollo, es mejor mantener la seguridad en lavanguardia del proceso de instalación. Si lo hace, asegúrese de seguir las precauciones necesarias al realizar una instalación similar en una configuración remota.

Si la seguridad no es una preocupación, usted tiene la opción de crear una cuenta anónima. Sin embargo, lacreación de dicha cuenta es casi idéntico a un nombre de usuario root sin contraseña y tienen las mismaspreocupaciones por la seguridad global.

Page 39: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 39/467

39

FIGURA 1.16Opciones de seguridad para MySQL 

La última página, como se muestra en la figura 1.17, es para la transformación de la configuración de losvalores establecidos en las páginas anteriores. Si por alguna razón se detecta un error, MySQL le notificará.

La mayoría de las veces podrás ver cada viñeta con una marca aplicada de completarse.

Cuando se termina el proceso, se le presentará con un aviso informándole de la configuración se ha

completado y MySQL está listo para usar .

 Ahora ha instalado correctamente y configurado MySQL para ser utilizados por el resto de este libro. Haga clicen Finalizar para cerrar la página de configuración y comenzar a probar la instalación.

Page 40: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 40/467

40

FIGURA 1.17Pantalla de configuración de transformación con avisos adecuados, ya que cada tarea se ha completado.

Pruebas

Después de instalar MySQL puedes probarlo. Puede ver el estado del servicio usando el monitor de MySQL,que determina si el servidor de base de datos está en marcha. Usted puede utilizar la línea de comandos pararegistrar e investigar en la base de datos MySQL igual que lo haría en un servidor remoto.

Para abrir un nuevo símbolo del sistema, como se muestra en la Figura 1.18, presione la tecla Windows + R.Cuando el tipo de sistema abierto, el siguiente comando para iniciar sesión:

$ mysql -uroot -p

NOTA Si aparece "command not found", tendrá que añadir MySQL a la variable PATH.  

Un aviso Introduzca Contraseña. Escriba la contraseña establecida en el proceso de configuración.

NOTA Cuando se escribe una contraseña, el sistema no mostrará las actualizaciones de texto.

Page 41: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 41/467

41

FIGURA 1.18El símbolo del sistema con el comando entró para iniciar sesión en el servidor de base de datos MySQL 

Si la conexión es exitosa, un aviso que describe el servidor MySQL. La notificación contiene la versión deMySQL que está actualmente en ejecución. El siguiente es un ejemplo de la Comunicación:

Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.0T.45-community-nt MySQL Community Edition(GPL) 

Una vez que se conecte a MySQL, el símbolo del sistema cambia a mysql>. A partir de este momento, hasta

que salga, todos los comandos se dirigen al servidor de base de datos.

Por ejemplo, para ver qué bases de datos están disponibles, escriba el comando siguiente:

mysql> show databases;

Para probar la instalación de bases de datos, crear una nueva base de datos:

mysql> create database flashphp;

Cuando se crea la base de datos, se puede seleccionar con el siguiente comando:

mysql> use flashphp;

Incluso puede pasar en el nombre de base de datos durante la fase de inicio de sesión, como el:

$ mysql -uroot -p flashphp 

En este punto, MySQL debe ser instalado correctamente en el servidor de desarrollo de Windows. La siguientesección explica cómo instalar MySQL para UNIX y sistemas similares a UNIX. El proceso de instalación de PHPestá directamente siguiendo las instrucciones de UNIX. Siéntase libre para ir por delante si sólo desea centrarseen un sistema Windows.

Page 42: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 42/467

42

Instalación de MySQL para UNIX 

Usted puede instalar MySQL en su sistema UNIX, utilizando el código fuente proporcionado en el sitio del libro,o usted puede descargar los archivos más recientes de MySQL directamente en http://dev.mysql.com/downloads/mysql/5.0.html#linux.

NOTA La versión de descarga depende del entorno en el que está instalando. 

Consulte la siguiente guía para más información:http://dev.mysql.com/doc/refman/5.0/en/which-version.html. 

Después de descargar los archivos de instalación es necesario, puede comenzar la preparación para el procesode instalación. El primer paso es agregar el usuario y grupo mysql para que MySQL Ejecutar como. El comandosiguiente crea el grupo mysql y añade un usuario de MySQL a ese grupo nuevo:

$ groupadd mysql$ useradd -g mysql mysql

Elija el directorio en el que desea instalar MySQL. Usted puede elegir el mismo lugar donde se instaló Apachepara mantener todos sus componentes de desarrollo en el mismo lugar .

$ cd /usr/local

NOTA Puede que tenga que realizar la instalación de MySQL como root si se protege el directorio.  

Descomprima el paquete de distribución y crear un vínculo simbólico a ese directorio.

$ gunzip < /usr/local/mysql-5.0.45-linux-i686-glibc23.tar.gz | tar xvf -$ ln -s /usr/local/ mysql-5.0.45-linux-i686-glibc23 mysql

Cuando el comando se ha completado el desembalaje, el cambio en el directorio de instalación.

$ cd mysql

Cambiar la propiedad de los archivos a MySQL ejecutando un comando de la propiedad recursiva. El primer comando cambia la propiedad y el segundo cambia el atributo de grupo .

$ chown -R mysql$ chgrp -R mysql

Si no tiene instalada una versión anterior de MySQL en este equipo, debe crear el directorio de datos MySQL ytablas de permisos.

scripts/mysql_install_db --user=mysql

Si quiere que MySQL se ejecute automáticamente cuando la máquina empieza, puede copiar el archivomysql.server situado en el apoyo o directorio a la ubicación donde el sistema tiene sus archivos de arranque.Para obtener más información sobre la ubicación del directorio que las preocupaciones y otros sistemasespecíficos, vaya a http://dev.mysql.com/doc/refman/5.0/en/UNIX-postinstallation.html#automatic-start. 

Cuando todo está bien expandido e instalado, puede empezar a probar .

Para iniciar el servidor MySQL, ejecute el comando siguiente desde el directorio de instalación de MySQL:

$ bin/mysqld_safe -- user=mysql &

Page 43: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 43/467

43

Utilice el siguiente comando para verificar que el servidor está funcionando realmente:

$ bin/mysqladmin version$ bin/mysqladmin variables

La salida de mysqladmin version varía dependiendo de la versión instalada. Esta es una muestra que regresaese comando:

mysqladmin Ver 14.12 Distrib 5.0.54, for pc-linux-gnu on i686Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult

ABThis software comes with ABSOLUTELY NO WARRANTY. This is free

software,and you are welcome to modify and redistribute it under the GPL

license

Server version 5.0.54Protocol version 10Connection Localhost via UNIX socketUNIX socket /var/lib/mysql/mysql.sockUptime: 0 days 2 hours 2 min 07 sec

Threads: 1 Questions: 323 Slow queries: 0Opens: 0 Flush tables: 1 Open tables: 7Queries per second avg: 0.000 

Protección de MySQL 

Es importante que usted proteja a los usuarios de MySQL de la actividad maliciosa. Por defecto, MySQL seinstala la raíz y los usuarios anónimos, sin contraseñas, que es lo mismo que usar un valor predeterminadoglobal. Es una práctica muy buena para asignar contraseñas de inmediato y en algunos casos, eliminar por completo los usuarios anónimos.

Configurar un contraseña en Windows

La contraseña para la cuenta root se le dio una contraseña cuando se ejecutó el programa de instalación. Sinembargo, si por alguna razón usted desea cambiarla, simplemente ejecute el siguiente comando,NEW_PASSWORD sustituyendo con la contraseña real que desea utilizar :

$ mysql -urootmysql> SET PASSWORD FOR „root‟@‟localhost‟ =PASSWORD(NEW_PASSWORD);mysql> SET PASSWORD FOR „root‟@‟%‟ = PASSWORD(NEW_PASSWORD);

Configurar un contraseña en UNIX

La instalación de MySQL en Unix deja el login de root sin contraseña, a diferencia de la instalación de Windows.Es muy importante asignar una contraseña inmediatamente:

$ mysql -urootmysql> SET PASSWORD FOR „root‟@‟localhost‟ =PASSWORD(NEW_PASSWORD);mysql> SET PASSWORD FOR „root‟@‟host_name‟ =PASSWORD(NEW_PASSWORD); 

Page 44: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 44/467

44

Se debe reemplazar host_name con el nombre de host del servidor. Si usted no conoce la máquina del servidor,ejecute este comando mientras está conectado a MySQL para determinar la información:

SELECT Host, User FROM mysql.user;

Para eliminar la cuenta anónima, acceda a MySQL y emitir el siguiente comando:

DROP USER „‟;

PRECAUCIÓN Tenga cuidado al eliminar un usuario y revise la ortografía del nombre del usuario antes deemitir esa orden.

Configuración de PHP en el Servidor Web 

PHP es el último componente para instalar a fin de completar el proceso de construcción del sistema dedesarrollo. El proceso de instalación de PHP es sencillo, pero requiere un poco de personalización.

NOTA Al instalar el soporte para XML y las bibliotecas de GD, el sistema puede requerir de las bibliotecas y decomponentes adicionales.

Instalación de PHP para Windows 

Instalación de PHP para Windows es en realidad bastante simple. Gran parte del proceso de instalaciónconsiste en mover archivos de un lado y edición de archivos existentes. Usted puede encontrar los archivos deinstalación de PHP en el sitio Web del libro o puede descargar la última archivos directamente desde el sitio enphp.org www.php.net/downloads.php. 

Instalación

Para empezar el proceso de instalación de PHP, ejecute el instalador de la aplicación que ha descargado. Lapágina de bienvenida para el asistente de configuración, como se muestra en la figura 1.19. 

La carpeta de destino, como se muestra en la figura 1.20, es donde se instala PHP. Por defecto, se eligió unaruta de directorio de Archivos de programa dentro de ella. Esto puede causar problemas en algunos servidores.Una ruta común es C:\php o C:\php5 si va a instalar varias copias de PHP.

Page 45: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 45/467

45

FIGURA 1.19La página de bienvenida de instalación de PHP  

Page 46: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 46/467

46

FIGURA 1.20Seleccione la carpeta de destino.

El programa de instalación de PHP está construido para configurar PHP y Apache para trabajar juntos. Estoincluye la edición de los archivos de configuración de Apache.

En la página de configuración de servidor Web, como se muestra en la Figura 1.21, seleccione la versión de Apache que había instalado previamente. Si no está seguro de qué versión está instalada, puede ejecutar elsiguiente comando en el símbolo del sistema:

/usr/local/apache2/bin/httpd –v

El siguiente es un ejemplo de salida de la orden anterior :

Server version: Apache/2.0.59

Server built: Aug 31 2007 01:58:43 

Page 47: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 47/467

47

FIGURA 1.21La página web de configuración del Instalador de PHP 

En la siguiente página, ver la Figura 1.22, es donde se informará a la instalación de la ubicación del directoriode configuración de Apache. Por ejemplo, si has seguido la guía de instalación de Apache en el comienzo deeste capítulo, el camino sería el siguiente:

C:\Program Files\Apache Group\Apache2\conf\

En la siguiente página que usted elija las extensiones adicionales necesarios para este libro (vea la Figura1.23). Dichas extensiones son GD2, EXIF, MySQL, y PEAR. También puede elegir instalar cualquier otra queusted piensa que puede ser útil.

Page 48: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 48/467

48

FIGURA 1.22Directorio de configuración de Apache 

Page 49: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 49/467

49

FIGURA 1.23Elija las extensiones que desea instalar, además de PHP.

Toda la configuración se establece en este momento, y usted puede hacer clic en Instalar para comenzar elproceso de instalación de PHP. Cuando haya finalizado la instalación de una página aparece Completo.

Usted puede abrir el directorio en el que PHP está instalado y ver los diferentes archivos. También puede editar el archivo php.ini para satisfacer sus necesidades específicas.

C:\php5\php.ini

La configuración por defecto de la php.ini debe trabajar para una configuración de desarrollo con la excepciónque debe permitir a display_errors. Habilitación de la visualización de los errores le dice a PHP para imprimir cualquier error en la pantalla. En una instalación de producción que podría ser considerado un problema deseguridad. Un servidor de desarrollo es generalmente sólo visto por los televidentes autorizados, lo que significaque permite esta opción no es un problema.

 Abra el archivo php.ini y busque la sección relativa a error_reporting.

display_errors = Off

Cambia el valor a On.

display_errors = On

Page 50: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 50/467

50

NOTA Los cambios en el archivo php.ini no son visibles hasta que se reinicie el servidor .

 Asegúrese de reiniciar el servidor web Apache antes de continuar porque usted ha hecho algunasmodificaciones en la configuración de Apache.

Pruebas

Después de instalar PHP puede crear una muestra del archivo PHP a probarlo. Un archivo de ejemplo comúnes el archivo phpinfo, lo que le permite ver las variables de configuración para la instalación de PHP en elservidor .

Usted puede utilizar el Bloc de notas o cualquier otro editor de texto para crear este archivo de ejemplo. Siinstala la suite completa Web de Adobe, puede utilizar Dreamweaver para escribir archivos de PHP (ver Figura1.24).

Esta es la sintaxis para el archivo phpinfo.

<?phpphpinfo();

?>

Guardar este archivo como info.php en la raíz de documentos de la instalación de Apache. Por ejemplo, siinstala Apache en la ubicación predeterminada, el archivo PHP se guarda en:

C:\Program Files\Apache Group\Apache2\htdocs\info.php

Page 51: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 51/467

51

FIGURA 1.24La muestra del archivo PHP como se ve en Dreamweaver CS3

 Ahora puede abrir este archivo en el explorador Web, como se observa en la Figura 1.25.

http://localhost/info.php

Si lo prefiere, puede crear un archivo PHP para probar si PHP está funcionando correctamente, como lossiguientes:

<?phpprint “Hello, World! This is PHP.”;?>

 Al ejecutar este archivo en el navegador, debería ver el mensaje aparece.

Page 52: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 52/467

52

FIGURA 1.25Información PHP muestra en un explorador Web 

Instalación de PHP para UNIX 

Instalación de PHP para UNIX es más detallado y requiere más configuración. Esto es cierto para la mayoría deconfiguraciones de instalación de comandos de línea. Usted puede descargar el instalador de archivos desde elsitio Web del libro o de uno de los sitios Web oficiales de PHP.

Después de obtener los archivos de instalación de PHP, usted puede comenzar el proceso de instalación. Antesde comenzar la instalación, es una buena idea dejar de Apache para asegurarse que ninguno de los archivos secorrompe.

/usr/local/apache/bin/apachectl stop

Para iniciar la instalación, cree el directorio en donde PHP se instalará.

mkdir /usr/local/php5

Puede sustituir simplemente PHP5 para php. Sin embargo, añadiendo el número de versión hace que sea másfácil disponer de múltiples instalaciones y será más fácil de manejar en el futuro.

cd /usr/local/php5

Page 53: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 53/467

53

Descomprimir los archivos y escriba el directorio de instalación:

gunzip php-5.2.5.tar.gztar -xvf php-5.2.5.tarcd php-5.2.5

Configuración de parametros de construcción

El siguiente paso es la construcción de la línea de configuración. Este contendrá todas las extensionesnecesarias y las características que desea incluir en la instalación. Por ejemplo, es necesario incluir la base dedatos y soporte de imágenes para completar algunos de los capítulos de este libro, entre otros. Cada opciónestá contenida dentro de un conjunto de comillas simples ( ') e incluirá la ruta si es necesario.

./configure‟ „--prefix=/usr/local/php5‟ „--withapxs=/usr/local/apache/bin/apxs‟ „--with-gd‟ „--enable-exif‟„--with-mysql=shared,/usr/local/php5‟ „--withmysqli=shared,/usr/local/php5/bin/mysql_config‟ „--withlibxml-dir=shared,/usr/local/php5‟ „--withxsl=shared,/usr/local/php5‟ „--with-jpeg-dir=/usr/local/php5‟„--with-png-dir=/usr/local/php5‟ „--enable-gd-native-ttf‟ „--

with-freetype-dir=/usr/local/php5‟ „--withgettext=shared,/usr/local/php5‟ 

Cuando el proceso de configuración es completa (que puede tardar un tiempo dependiendo del sistema), crear y ejecutar el instalador :

makemake install

Después de que el hacer el comando de instalación se ha completado, PHP debe ser instalado.

Configuración

Unas raciones de PHP necesita ser configurado para asegurarse de que funciona a la perfección con Apache ysu sistema de desarrollo global. Modificación de este proceso es bastante fácil de completar, pero incorrectapuede resultar en un sistema roto. Además, al modificar los archivos de configuración, lo mejor es hacer unaprimera copia de seguridad.

El primer paso es mover el archivo php.ini a una ubicación central que PHP usará cuando se inicia.

cp php.ini.recommended /usr/local/lib/php.ini

Con el fin que Apache cargue los archivos de PHP, añadir módulo de referencias necesarias:

LoadModule php5_module modules/libphp5.so

AddType application/x-httpd-php .php .phtmlAddType application/x-httpd-php-source .phps

Reinicia Apache que estos cambios surtan efecto. Cada vez que usted modifique los valores en PHP o Apache,debe reiniciar el servidor .

/usr/local/apache/bin/apachectl start

Con todo correctamente instalado, puede probar la configuración mediante la ejecución de una muestra dearchivos de PHP:

Page 54: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 54/467

54

<?phpphpinfo();?>

Resumen 

En este capítulo, usted fue a través de los pasos necesarios para instalar el sistema de desarrollo completo.Este proceso incluyó la instalación de Apache, PHP y MySQL en Windows o UNIX servidor Web. El siguientecapítulo le guía por el proceso de hacer esta configuración de desarrollo más seguro. Esto incluye la obtenciónde los archivos en el servidor, así como la configuración general del servidor a través del archivo deconfiguración httpd.conf .

Page 55: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 55/467

55

Capitulo 2

Explorando Flash y PHP 

Si ha instalado todos los componentes en el servidor, puede configurar el programa de instalación para ser másseguro. Después se explica la seguridad, el siguiente paso es configurar los controladores de error apropiado ybuscar la manera de crear una configuración más fácil de usar para el usuario final.

Después de la seguridad y la configuración del servidor Web se completa, que se verá en una visión general dePHP para entender mejor cómo funciona todo.El uso de MySQL y la integración básica con PHP se explican utilizando varios ejemplos con las descripciones yexplicaciones.

La última sección explora Flash, incluyendo la configuración de clase y una explicación general de IDE.

Introducción al Servidor Web 

En el Capítulo 1, aprendió a configurar un servidor de desarrollo, que incluyó la instalación de PHP, MySQL y Apache. Esta sección es una visión general de cómo el servidor Web está configurado, así como la forma dehacer que el sistema sea más seguro.

Trabajar con archivos .htaccess 

El archivo .htaccess se utiliza para modificar la forma de las funciones de Apache para un directorio específico.Este archivo es similar al archivo httpd.conf en la configuración global de Apache, con la excepción de que noes necesario y puede ser a nivel mundial con discapacidad, siempre que el administrador modifica la

configuración del servidor Web.

La sintaxis de este archivo no es muy avanzada. Se trata básicamente de un archivo de texto que informa alservidor Web de modificaciones específicas.

Por ejemplo, ¿ha notado un sitio Web que se ha especializado extensiones de archivo, como anfitrión de laWeb MediaTemple, que tiene el siguiente formato? 

http://www.mediatemple.net/contact. mt 

Observe cómo la url tiene la extensión .mt. Esta extensión no es una extensión de archivo estándar. Estamodificación puede conseguirse utilizando el archivo .htaccess:

# use custom file extensions AddType application/x-httpd-php .me

Esta modificación también se puede hacer utilizando el archivo httpd.conf, si usted prefiere que el servidor Webpodrá utilizar esta extensión de archivo personalizado.

 Apache maneja muchas peticiones por defecto y puede ofrecer aún más con módulos adicionales instalados.Un módulo en particular, le permite tener las URL personalizadas, también conocido comúnmente como limpiar las URL.

Page 56: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 56/467

56

Las posibilidades .htaccess son variados y dependen totalmente de su aplicación. Uno de los usos máscomunes de. Htaccess es redirigir www y sin www las solicitudes en la misma ubicación.Esto no sólo limita enlaces redundantes, pero también proporciona una mejor optimización del motor debúsqueda.

Un ejemplo de esta conversión, utilizando el dominio de example.org, sería algo similar a lo siguiente:

# Force www.domain.com to domain.comRewriteCond %{HTTP_HOST} ^www.example.org [NC]RewriteRule ^(.*)$ http://example.org/$1 [R=301,L] 

Protección de su contenido 

Usted puede proteger su contenido en un número de maneras. Usted puede construir un sistema deautenticación personalizada o utilizar la autenticación básica que está empaquetado con Apache .

La autenticación básica se establece en dos fases. El primer paso es crear la contraseña y usuario.

Utiliza el archivo htpasswd para crear el archivo de contraseñas. Esta contraseña la creación de comandos seencuentra en el directorio bin/ en la que instaló Apache. Por ejemplo, lo más probable es encontrar el archivo enla ubicación siguiente, suponiendo que utiliza la ruta de instalación se sugiere en el capítulo 1 .

$ /usr/local/apache/bin/htpasswd

La primera vez que crear un usuario, es necesario informar a la contraseña de solicitud de creación para crear un archivo de la nueva contraseña. Desde ese momento se omite la opción-c.

PRECAUCIÓN Error para quitar la opción-c después de la instalación del primer usuario se traducirá en unnuevo archivo de contraseñas y eliminar cualquier información a los usuarios existentes.

 Aunque no es obligatorio, es una buena práctica periódicamente copias de seguridad de esta y cualquier otrosarchivos importantes en caso de que su sistema se encuentra con un accidente inesperado o corrupción dedatos.

El comando para crear una contraseña es simplemente una llamada a la aplicación de contraseña con elnombre de usuario se añade al final.

$ cd /usr/local/apache/bin/$ htpasswd -c /usr/local/apache/passwd/passwords USERNAME

 Asegúrese de sustituir USERNAME por el nombre de usuario real que usted desea agregar .

La aplicación htpasswd le pedirá la contraseña que desea asignar y, a continuación, pedirá que escriba lamisma contraseña de nuevo para confirmar .

El archivo generado es la contraseña cifrada. Sin embargo, aún debe guardarlo en un lugar seguro.Bajo ninguna circunstancia debe este archivo ser almacenado en el directorio público, ya que podríacomprometer la integridad de su sistema.

Esto no es tan importante en un sistema de desarrollo, pero es una buena práctica a seguir todas las medidasde seguridad adecuadas, incluso en una configuración de desarrollo, para familiarizarse con ellos. A medida

Page 57: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 57/467

57

que continúe trabajando en los servidores, la seguridad se convertirá en una segunda naturaleza. Nunca debecolocar apagado para ahorrar tiempo.

Después de crear el archivo de contraseñas, añadir el control de seguridad en .htaccess en cualquier lugar quese desea proteger con contraseña. Por ejemplo, vamos a añadir la autenticación al servidor entero porque unservidor de desarrollo y que no quiere que nadie viéndolo.

 Agregue lo siguiente a un nuevo archivo .htaccess en la raíz del directorio Web.

AuthType BasicAuthName “Authorization Required”AuthUserFile /usr/local/apache/passwd/passwordsRequire valid-user

Esto informa a Apache que cualquier solicitud en este directorio y por debajo requiere autorización. La últimalínea permite a cualquier usuario en el archivo de contraseñas para poder iniciar sesión.

Require valid-user

También puede agregar un nombre de usuario específico, pero esto es más difícil de mantener .

Esta es la autenticación básica por lo que tiene varias limitaciones. Por ejemplo, usted no puede modificar elcuadro de diálogo que aparece en el navegador del usuario. No se puede modificar la etiqueta de valores juntoa los cuadros de entrada y, lo más importante, no se puede permitir que el usuario salga.

Si su aplicación requiere un sistema de acceso más personalizado e integrado, que puede ser mejor paraconstruir una instalación personalizado PHP/ MySQL, dependiendo de tus necesidades.

Recopilación de información acerca de Apache 

A medida que continúe trabajando con Apache, hay algunos comandos y herramientas que pueden resultar en

más tiempo para desarrollar una aplicación en lugar de microgestión en el servidor.

Iniciar y Detener Apache

A veces, Apache puede actuar justo como cualquier otra pieza de software o hardware en su sistema.A menudo, cuando esto ocurre, un simple reinicio se soluciona el problema. Por ejemplo, como más archivosde los usuarios petición de Apache, puede comenzar a llenar la memoria interna y los archivos temporales.

Para reiniciar Apache sólo tiene que llamar al siguiente comando en UNIX desde la línea de comandos oreiniciar el servicio en Windows:

$ /usr/local/apache/bin/apachectl restart

NOTA La ruta de acceso a la aplicación apachectl puede variar dependiendo de la instalación de Apache.

Si desea detener Apache y no tener reiniciar, utilice el siguiente comando. Lo más probable es que hacercuando la instalación de nuevos módulos o la actualización de Apache en sí.

$ /usr/local/apache/bin/apachectl stop

Page 58: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 58/467

58

Para iniciar el servidor de nuevo después de completar la actualización, basta con utilizar la opción dearranque:

$ /usr/local/apache/bin/apachectl start

Determinar la versión de Apache

En ocasiones, cuando la instalación de nuevo software, lo que necesita saber qué versión de Apache estáejecutando actualmente. Por ejemplo, al instalar PHP, es necesario saber qué versión de Apache se estáutilizando. Esto se encuentra ejecutando un simple comando interruptor.

$ /usr/local/apache/bin/httpd -V

El resultado de este comando sería algo similar a la Figura 2.1.

Determar que modulos están instalados en Apache

Usted puede fácilmente determinar qué módulos están instalados actualmente en Apache con el comandosiguientes indicadores de la línea en UNIX.

$ /usr/local/apache/bin/apachectl -t -D DUMP_MODULES

Para determinar los módulos de Windows, se debe ejecutar el siguiente comando:

httpd -t -D DUMP_MODULES

Page 59: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 59/467

59

FIGURA 2.1Viendo la actual versión de Apache 

Una respuesta de ejemplo de este comando es algo similar a lo siguiente:

Loaded Modules:core_module (static)mpm_worker_module (static)http_module (static)so_module (static)include_module (shared)deflate_module (shared)log_config_module (shared)env_module (shared)expires_module (shared)headers_module (shared)setenvif_module (shared)ssl_module (shared)mime_module (shared)status_module (shared)autoindex_module (shared)info_module (shared) 

Page 60: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 60/467

60

vhost_alias_module (shared)negotiation_module (shared)dir_module (shared)imagemap_module (shared)actions_module (shared)userdir_module (shared)alias_module (shared)

rewrite_module (shared)...Syntax OK

Si se omite la marca -D DUMP_MODULES D-DUMP_MODULES sólo verá la respuesta de sintaxis. Se le informasi algo está mal o le dice que todo está bien.

$ /usr/local/apache/bin/apachectl –t

Para Windows el commando sería

httpd -t

Utilización de documentos de error personalizados 

Cuando ve una URL de un sitio Web, Apache sirve una página para usted basado en su petición. Por defecto, si Apache se le pide para servir a un archivo que no puede encontrar, devuelve una fea página 404 que no es muyinformativo y de hecho provoca una preocupación potencial para la seguridad.

Como se puede ver en la Figura 2.2, Apache ha publicado la información del servidor para que el mundo vea. Ahora bien, este no es un problema de seguridad enorme, pero cada pieza de información puede añadir hastaun grave problema.

FIGURA 2.2

Página de error por defecto de Apache

Una cuestión más importante con el uso de las páginas de error estándar es el hecho de que el usuario sepresenta con una página inútil. Por ejemplo, el usuario ya sabe que el archivo no existe, pero no tiene a dóndeir, ni idea de lo que podría ser el problema. Por extraño que parezca, si un usuario se muestra una página 404que él o ella no suele durar, y eso significa que un usuario abandonado por su sitio.

Page 61: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 61/467

61

Modificar Apache

Por suerte, Apache le permite modificar esta página de error por defecto. Algunos hosts permiten modificar elarchivo usando el panel de control que incluye instalado cuando adquirió el servidor. En este caso, sinembargo, el servidor de desarrollo requiere que configurar manualmente la mayoría de ella.

La utilización de documentos de error personalizado es tan simple como añadir la modificación de un archivo.htaccess. Este archivo se almacena normalmente en la raíz de documentos para asegurar que todos losarchivos se vea el archivo.

El código siguiente es la sintaxis necesaria para modificar el documento de error.

# Customized Error HandlerErrorDocument 204 /error.htmlErrorDocument 301 /error.htmlErrorDocument 302 /error.htmlErrorDocument 400 /error.htmlErrorDocument 401 /error.html

ErrorDocument 403 /error.htmlErrorDocument 404 /error.htmlErrorDocument 500 /error.htmlErrorDocument 501 /error.htmlErrorDocument 502 /error.htmlErrorDocument 503 /error.html

Como puede ver, los documentos de error será sustituido por un archivo. Usted puede, por supuesto, apuntar aun archivo separado para cada error detectado. Si no asigna una página de error específico, Apache vuelve asu forma predeterminada. La lista anterior es un registro sólido de los códigos de error posible, pero no escompletar una.

Documento de error dinámico

Utilizando PHP, usted puede crear un error de manejo dinámico del sistema. La idea es llamar a una páginacomo lo hizo en el ejemplo anterior, con la excepción de que una variable se pasará a notificar a esa página deque se detectó el error .

Usted comienza por modificar el controlador de errores en el archivo .htaccess, tales como:

# Error Handler, request is sent to a php fileErrorDocument 204 /errorHandler.php?e=204ErrorDocument 301 /errorHandler.php?e=301ErrorDocument 302 /errorHandler.php?e=302

ErrorDocument 400 /errorHandler.php?e=400ErrorDocument 401 /errorHandler.php?e=401ErrorDocument 403 /errorHandler.php?e=403ErrorDocument 404 /errorHandler.php?e=404ErrorDocument 500 /errorHandler.php?e=500ErrorDocument 501 /errorHandler.php?e=501ErrorDocument 502 /errorHandler.php?e=502ErrorDocument 503 /errorHandler.php?e=503

Page 62: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 62/467

62

Este código le dice a Apache para redirigir los errores en el fichero de errorHandler.php, pasando en el códigode error. El siguiente paso es crear el archivo PHP que se encargará de los códigos de error. Este PHP esperaun argumento y será lo suficientemente inteligente como para devolver una respuesta válida si no hay error sepasa en.

La primera parte del archivo captura el código de error e inicializa una variable para almacenar la cadena deerror.

<?php$errorCode = $_GET[„e‟];$errorString = “”;...?>

Cuando un código de error se encuentra, un control para asegurarse de que es un número válido que se hagapara mantener la aplicación segura.

<?php$errorCode = $_GET[„e‟];

$errorString = “”;if(!is_numeric($errorCode)){$errorCode = -1;}...?> 

Un cambio de base se utiliza para determinar el código de error se encontró. Los interruptores se explica en lasección "Explorando los fundamentos de PHP" más adelante en este capítulo.

<?php

$errorCode = $_GET[„e‟];$errorString = “”;if(!is_numeric($errorCode)){$errorCode = -1;} 

switch($errorCode){case 204: // Sin Contenido (Documento vacío)$errorString = “Sin Contenido (Documento vacío)”;

 break;

case 301: // Movido Permanentemente$errorString = “ Movido Permanentemente”;

 break;case 400: // Solicitud Incorrecta$errorString = “Solicitud Incorrecta”;

 break;case 401: // Usuario no autorizado$errorString = “Usuario no autorizado”;

 break;case 403: // Prohibido

Page 63: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 63/467

63

$errorString = “Prohibido”; break;case 404: // Documento No Encontrado$errorString = “Documento No Encontrado”;

 break;case 500: // Error Interno del Servidor$errorString = “Error Interno del Servidor”;

 break;case 503: // Fuera de los Recursos$errorString = “Fuera de los Recursos”;

 break;case -1: // Error Desconocido$errorString = “Error Desconocido”;} ?> 

El último paso es para mostrar la cadena de error al usuario, que completa el error habitual de manipulación desecuencia de comandos. Usted notará que algunos de los códigos de error se omitieron en el interruptor parademostrar el hecho de que el guión se mueve en silencio sobre si se muestra un código de error no válido.

<?php$errorCode = $_GET[„e‟];$errorString = “”;if(!is_numeric($errorCode)){$errorCode = -1;}

switch($errorCode){case 204: // Sin Contenido (Documento vacío)$errorString = “Sin Contenido (Documento vacío)”;break;case 301: // Movido Permanentemente$errorString = “Movido Permanentemente”;break;case 400: // Solicitud Incorrecta$errorString = “Solicitud Incorrecta”;break;case 401: // Usuario no autorizado$errorString = “Usuario no autorizado”;break;case 403: // Prohibido$errorString = “Prohibido”;

break;case 404: // Documento No Encontrado$errorString = “Documento No Encontrado”;break;case 500: // Error Interno del Servidor$errorString = “Error Interno del Servidor”;break;case 503: // Fuera de los Recursos$errorString = “Fuera de los Recursos”;

Page 64: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 64/467

64

break;case -1: // Error Desconocido$errorString = “Error Desconocido”;}?> 

 <h2>Se produjo un error al procesar su solicitud</h2> 

 <h3><?=$errorString?></h3>  

La variable $errorString se imprime en la pantalla, informando al usuario que ha ocurrido un error .

Este controlador de errores personalizado presenta un error mucho mejor para el usuario. Algunos sitios webincluyen enlaces relevantes de interés o utilidad de la consulta (si se trataba de una búsqueda) para devolver lainformación pertinente. Es lamentable que un usuario podría ver una página de error, pero es más común comolos cambios de tecnología y los sistemas se actualizan.

Es una buena idea para mantener vínculos permanentes, porque los motores de búsqueda vínculos caché. Enel futuro, será beneficioso para su tráfico en caso de que el vínculo todavía trabajaba.

Como un bono a la secuencia de comandos anterior, que se encuentra en el sitio Web para este libro, hay unerror completo sistema de manejo que incluye los errores localizados (se puede adaptar a otro idioma) y utilizaplantillas PHP y CSS personalizado archivo modificar el estilo.

Page 65: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 65/467

65

Explorando lo básico de PHP 

PHP (Hypertext Pre-Processor) es un servidor de secuencias de comandos de lenguaje que se ejecuta en Apache u otras aplicaciones similares de servidor Web. PHP es uno de los servidores más populares lenguajesde secuencias de comandos, ya que es bastante sencillo para empezar y puede manejar aplicaciones robustas.

La estructura de codificación se basa en C y puede ser escrito en un procedimiento (paso a paso) o laestructura de Classbased (objetos, propiedades, métodos, y así sucesivamente). Una vez que entienda losconceptos básicos de PHP, usted realmente puede comenzar a ver el verdadero poder .

Este libro está basado en PHP 5, pero muchos de los siguientes consejos, técnicas y estilos se explica en estasección puede ser utilizada para PHP 4 y PHP 5, que las versiones son bastante similares.

Entender las variables 

Variables, también conocido comúnmente como vars o propiedades (cuando se trabaja con clases), sonprobablemente el elemento más utilizado en la programación. Se utilizan para asignar un valor a un lugar quepuede ser llamado en otra parte del código. El uso de variables no es sólo un ahorro de tiempo, sino que

también hace el programa más estructurado y de fácil mantenimiento.

 Aquí hay un ejemplo muy simple de una definición de variable en PHP:

$myVar = “hello world”;

El ejemplo anterior asigna la cadena "Hello World" a la variable $myvar .

Hay algunas cosas a tener en cuenta cuando se trabaja con variables.

  Debe estar precedida por un simbolo dolar ($) (al menos en una Clase).  Se debe finalizar con punto y coma (;).

Las variables pueden aceptar muchos tipos de datos, incluyendo pero no limitado a, String, Boolean, y Array,cada uno de los que se discute en las siguientes secciones.

Cadenas

Las variables de cadena (String) contienen texto, tales como:

“Hello, World!”

También se puede construir cadenas utilizando las técnicas de concatenación, como:

$var = “Hello”;$var .= “, World!”;print $var; // Outputs: Hello, World!

Page 66: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 66/467

66

Booleans

Booleanos son variables especiales que pueden ser uno de los dos valores posibles: verdadero o falso. Seutilizan sobre todo en caso de declaraciones y otras formas de control condicional, como:

$loggedIn = false;if($loggedIn == false)

{print “Sorry, you are not logged in!”;}

Arrays

Las matrices son estructuras complejas de datos que consiste en un grupo de elementos que se accede por laindexación. En PHP, este índice puede ser un valor numérico o una cadena.

 Aquí hay un ejemplo de una matriz y las dos formas de acceder a los datos:

<?php$fruit = array(“Orange”,“Apple”,“Strawberry”,“Grape”);print $fruit[1]; // Apple$fruit = array(“orange” => “Orange”,“apple” => “Apple”,“strawberry” => “Strawberry”,

“grape” => “Grape”);print $fruit[„orange‟]; // Orange?>

Objectos

Clases en PHP describir un objeto o la definición de un objeto. Se componen de auto-definirse los métodos ypropiedades, que le permite crear una funcionalidad personalizada.

 Aquí hay un ejemplo muy básico de una clase en PHP con una llamada de ejemplo en la parte inferior delejemplo:

<?phpclass Animals{function Animal(){}public function speak($word){

Page 67: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 67/467

67

print $word;}}class Dog extends Animals{function Dog($word){

Animals::speak($word);}}// Create a new Dog$dog = new Dog(“Hello.. Woof!”);?>

Trabajar con funciones 

En el desarrollo de aplicaciones que tienden a repetir las diversas tareas. Constantemente tener que escribir estas medidas puede ser un proceso largo. Más importante aún, el código de repetición hace que unaaplicación sea menos eficiente.

Funciones le permiten colocar las tareas repetitivas en un recipiente pequeño y agradable que usted puedellamar en cualquier momento siempre y cuando la función es accesible.

Esta es una función de ejemplo que agrega dos números y devuelve la suma:

function addNumbers($num1, $num2){// return the sum of the two numbersreturn ($num1 + $num2);}

Usted llama a una función por referencia al nombre de función y de pasarle cualquier argumento que la funciónrequiere. Este ejemplo devuelve 10 como la suma.

Un argumento es un valor que se pasa a la función y más tarde utilizados en la función como una variable local.

addNumbers(4, 6); // outputs 10

Funciones en PHP puede tener un argumento predeterminado asignado, lo que significa queno será necesario que el argumento se apruebe en, como:

function addNumbers($num1, $num2, $print=true){if($print){print “Sum is: “ . ($num1 + $num2);}else{return ($num1 + $num2);}}

Page 68: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 68/467

68

Esta función imprime el resultado directamente a la pantalla o devolver el valor si la variable $print es falso, quees por defecto. No se puede excluir un argumento en el medio de la definición de otros argumentos. Por ejemplo, la siguiente llamada de función no sería válido:

function say($upperCase=false, $string){

if($upperCase){return strtoupper($string);}else{return $string;}}say(“Hello, World!”); 

Que se asignaría el pasado-en cadena en el valor de $upperCase y hacer caso omiso de la variable $string.

Dado que PHP no se preocupa de qué tipo de valor se pasa, se produce un error en la línea donde se devuelvela cadena.

Las clases también tienen funciones, llamados métodos. Los métodos pueden mantener las característicasespeciales que las funciones estándar no pueden.

Entender las estructuras de control 

Mayoría de los lenguajes de programación tienen estructuras de control que los fragmentos de código de laoferta global y proporcionar una ruta más dinámico para una aplicación. Las siguientes son algunas de lasestructuras de control más comunes, incluyendo las usadas en la mayoría de este libro.

if 

El construcción if se encuentra en cualquier lenguaje de programación popular, incluido PHP. Permite laejecución condicional de fragmentos de código. Un ejemplo de una declaración if es:

$admin = getAdminStatus();if($admin == true){ print “Admin logged in, show admin controls”;}

Puede anidar sentencias if con otros estados, si una cantidad ilimitada de veces. Un uso más realista de las

declaraciones if de anidación es una aplicación de inicio de sesión que ha variado de los niveles deautenticación.

$loggedIn = true;$admin = true;$editable = true;if($loggedIn){if($admin)

Page 69: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 69/467

69

{if($editable){// allow the page to be// edited because a valid// administrator is logged in}

}}

else

Suponga que desea mostrar un mensaje de error a los usuarios no registrados y en el panel de controladecuado, si el usuario está conectado. Esto se hace con una declaración más, que se ejecuta si la condiciónelse no se cumpla.

$loggedIn = false;if($loggedIn){

// display control panel}else{// display login form and error message}

Una cosa no es necesaria y se coloca después de todos los otros controles condicional, como elseif, que estáen la siguiente sección.

elseif 

El elseif es la combinación de un if y un else. Esta declaración se coloca después de un if, y permite que el

código coincida con otra condición, que puede ser completamente diferente a si antes de ejecutar .

NOTA Un else o else..if sólo se evaluarán si la anterior condición no se cumple.

$loggedIn = false;$colorOfSky = “blue”;if($loggedIn){// user logged in}elseif($ColorOfSky == “blue”){

// color of sky is blue, log user in??}

while

El while es un tipo de bucle. El código dentro de las llaves {} se ejecuta "mientras" se cumple la condición.Una vez que la condición ya no es válida, el bucle se detiene.

Page 70: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 70/467

70

PRECAUCIÓN bucles en PHP puede correr para siempre si no programado correctamente. Tenga cuidado altrabajar con loops y siempre verifique los datos válidos primero.

while($x < 50){print “x=” . $x . “<br />”;$x++;

for

Un bucle es el circuito más complejos en PHP. Aquí hay un ejemplo:

for($x=0; $x < 10; $x++){print “x=” . $x . “<br />”;}

La primera expresión ($x = 0) se ejecuta de manera incondicional una vez al comienzo del bucle. La segunda

expresión ($x <10;) se evalúa en cada paso y el ciclo continuará hasta que esta condición se cumple o que elbucle se detiene con una pausa. En cada paso, la tercera expresión ($x + +) es ejecutado.En este ejemplo, incrementos de $x en cada paso.

Puede anidar los bucles e incluso definir las variables múltiples en la primera expresión. Esto puede hacer queel código sea más rápido, pero más difícil de leer .

foreach

El bucle foreach se utiliza para iterar sobre un arreglo. Se asigna la variable de bucle al conjunto deseado, y encada paso el valor se almacena en la variable de bucle.

$fruits = array(“Orange”, “Apple”, “Banana”, “Grapefruit”);foreach($fruits as $fruit){print “Fruit: “ . $fruit;}

NOTA La variable $fruit seguirán existiendo una vez al bucle foreach se ha completado, por lo que es unabuena idea de destruir el uso de la variable unset (), como unset (($fruit).

break

La ruptura de control finaliza la ejecución de un bucle, sin importar si la condición se cumple o no. Puedecolocar un valor numérico opcional informar a PHP de cuántos niveles debe romper. Esto es útil cuando setiene un ciclo anidado que tiene que decirle a los padres a la salida si se produce un error .

for($i=0; $i < count($users); $i++){

for($j=0; $j < 5; $j++){

if($users[$i][$j][„valid‟] == false){

Page 71: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 71/467

71

// found invalid user, group is compromised// exit both loopsbreak 2;

}}

}

continue

 A diferencia de break, continue saldrá de la iteración actual de un bucle, pero permitirá que las iteracionesrestantes a continuar en.

Esto es útil cuando se recorre un montón de datos y sólo desea actuar en datos válidos.

for($i=0; $i < count($users); $i++){if($users[$i][„valid‟] == false){// invalid user, continue with remaining list

continue;}// more code logic here}

Al igual que break, continue también acepta un argumento numérico diciendo que el número de niveles deencerrar bucles para saltar sobre.

switch

Un switch es similar a una serie de sentencias if utilizando la misma expresión (variable). Por lo general seutiliza un switch cuando se quiere probar una variable en contra de muchas de las condiciones.

switch($userLevel){case „ADMIN‟:print “User is an admin”;break;case „MODERATOR‟:print “User is a mod”;break;case „MEMBER‟:print “User is an member”;break;case „GUEST‟:print “User is an guest”;break;}

Un break se utiliza para garantizar los controles restantes no se ejecutará, de hecho, si quita los break s, cadacondición se comprobará, que pueden causar problemas si la intención de hacer una validación de variosniveles.

Page 72: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 72/467

72

require

La declaración require () intenta cargar un archivo y se cerrará el programa con un error grave si el archivo nose encuentra. Esta función comprueba el archivo en contra de included_path actual, así como el directorio elarchivo se ejecuta en.

require(“importantFile.php”);

El error que se muestra (ver figura 2.3) a veces puede causar un problema de seguridad potencial en que semostrará la ruta del archivo salido adelante. Una mejor manera de manejar esto es crear un cheque por elprimer archivo y un limpiador de pantalla, un mensaje menos crucial para el usuario.

if(!file_exists(“importantFile.php”)){$error = “Sorry, one of the core components could not beloaded”;exit($error); // display clean error and exit remaining script}require(“importantFile.php”); // never runs, if file doesn‟texist

Page 73: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 73/467

73

FIGURE 2.3PHP require() error as seen in the browser

include

La sentencia include () es similar a la requiere, con la excepción que mostrará un error pero no detener laejecución de la secuencia de comandos.

include(“optionalFile.php”);

require_once

La declaración require_once comporta de manera similar a require, con la excepción de que si el archivo actual

ya está cargado, no intentará cargar de nuevo. Esto es más útil a medida que continuamos construyendoaplicaciones de gran tamaño que a veces comparten muchos archivos. Esto asegura que se ha cargado ningúncódigo redundante.

require_once(“requiredFile.php”);// ... other code hererequire_once(“requiredFile.php”);

El segundo require_once no funcionará porque el archivo ya se ha cargado en la parte anterior del código.

Page 74: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 74/467

74

include_once

El include_once () es similar a la require_once con la excepción de que si el archivo no se encuentra, sólo semuestra un simple error.

Uso de la comprobación de tipos en PHP 

A diferencia de la mayoría de lenguajes de programación, PHP no requiere la tipificación estricta de lasvariables. Esto significa que usted no tiene que definir qué tipo de datos de una variable llevará a cabo.

Esto puede parecer una buena cosa porque las variables se pueden compartir. Sin embargo, la desventajapotencial de este enfoque es que una variable que espera ser una cadena que podría aparecer como unamatriz. Lo más probable es romper el código o provocar una porción de código de explotación. Imagine uncódigo similar al siguiente:

$id = -1;if(isset($id)){

// sql call here, set id to a string, for some reason$id = “user id”;}// more logic hereif($id == -1){// user not logged in}else{// user logged in}

Este es un ejemplo muy dramático, porque está lleno de las peores situaciones, pero se puede ver cómo lasvariables sin tipo pueden causar dolores de cabeza.

Funciones de verificación de Tipos

PHP ofrece algunas funciones especiales que le permiten comprobar el tipo de una variable, pero esto noimpide que otro código deba sobrescribir las variables.

Un ejemplo de una de estas funciones se is_string, que comprueba si el passed-in el contenido de las variablesde cadena.

$saying = “Hello, World!”;if(is_string($saying)){print “$saying is a string”;}

PHP ofrece la capacidad de prueba para las matrices, los números, las cadenas, y los valores vacíos.

Page 75: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 75/467

75

Soporte para versions futuras

Se ha mencionado que las futuras versiones de PHP podría incluir la comprobación de tipos estricta, pero porahora, estas funciones, cuando sea necesario, proporcionará un mayor nivel de integridad para su aplicación Ithas been mentioned that future versions of PHP could include strict type checking, but for now, thesefunctions, when needed, will provide a higher level of integrity for your application.

Explorando lo básico de MySQL 

MySQL es la aplicación de almacenamiento usadas con PHP para crear una aplicación dinámica. Puedealmacenar casi cualquier tipo de datos en una base de datos MySQL y tienen la capacidad de compartir esainformación con otras aplicaciones y sistemas. A menudo, una base de datos se utiliza cuando la búsqueda sedebe hacer o si los datos está cambiando con frecuencia y mucha gente va a pedir estos datos actualizados.

La alternativa a una base de datos es un archivo (archivo de texto) que tiene muchas limitaciones, las másdevastadoras que el hecho de que sólo muchos casos en que el archivo puede ser utilizado una sola vez. Otralimitación es la capacidad de indexar y buscar rápidamente un archivo de texto.

Uso de declaraciones o sentencias (stantements) 

El contenido en una base de datos MySQL son almacenadas en tablas. Estas tablas se almacenan en bases dedatos que componen el sistema de MySQL. Los datos almacenados en estos cuadros se accede utilizandodiversas declaraciones y condiciones, que se llaman las consultas.Hay muchas declaraciones que se pueden utilizar en las consultas SQL.

SELECT

La sentencia SELECT es la declaración más común, lo que le dice a MySQL qué contenidos (columnas) que desea

obtener de una tabla.

SELECT id,name,ip, bio FROM users WHERE id=3

Usted puede seleccionar los datos de varias tablas con comas (,) para separar la columna de la tabla y losnombres.

SELECT users.id, users.name, members.posts, members.subs FROMusers, members WHERE members.userID=users.id AND users.id=3

INSERT

La sentencia INSERT se utiliza para añadir nuevas filas a una tabla existente. Hay múltiples maneras de definirun INSERT.

Si sólo desea actualizar algunas columnas que usted necesita para definir las columnas.

INSERT INTO members (name, bio, ip) VALUES ($name, $bio, $ip);

Un acceso directo se utiliza para excluir a las definiciones de columna. Sin embargo, esto sólo es posible cuando todos los valores se

actualizan o se han asignado los valores por defecto cuando se crea la tabla .

Page 76: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 76/467

76

INSERT INTO members ($name, $bio, $ip);

Después de un INSERT, ha concluido, usted puede hacer una llamada a mysql_insert_id (), que devolverá el IDde la inserción exitosa última.

$result = mysql_query(“INSERT INTO members (“ .

$name . “, “ .$bio . “, “ .$ip . “)”);$rowID = mysql_insert_id($result);

DELETE

La sentencia DELETE se utiliza para eliminar una o más filas de una tabla. Al igual que las demás declaraciones,puede crear una condición utilizando, WHERE, AND, OR, y así sucesivamente.

DELETE FROM users WHERE id=3

También puede eliminar todos los registros en una base de datos, omitiendo la condición:

DELETE FROM users

PRECAUCIÓN La sentencia DELETE es muy poderosa que se debe utilizar con extrema precaución.

Condiciones 

Las condiciones en MySQL se utilizan para limitar la cantidad de datos que se devuelve. Por ejemplo, unaconsulta SQL como la siguiente devuelve todos los usuarios en la base de datos:

SELECT * FROM users

WHEREEsto estaría bien si eso es lo que desea que se produzca. Es probable que sólo quieren regresar a ciertosusuarios o incluso a un usuario específico. Esto se haría usando la condición WHERE.

SELECT * FROM users WHERE id=3

AND

La condición AND se utiliza cuando se necesita para que coincida con más de una condición. Un ejemplo sería

que desea devolver una base de datos de los miembros que se han registrado y tienen una cuenta válida.

SELECT * FROM users WHERE active=1 AND registered=”yes”

Usted puede utilizar cualquier combinación de las sentencias condicionales, con la excepción de que sólo debehaber uno en el pliego.

Page 77: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 77/467

77

OR

En la declaración OR se utiliza cuando se desea sólo una condición para que coincida. Por ejemplo, desea quelos usuarios que tengan un nivel de administrador o mod. Piense en esto como if..else para SQL.

SELECT * FROM users WHERE level=‟admin‟ OR level=‟mod‟

Las condiciones en MySQL puede ser útil cuando se trata de desglosar los datos, especialmente cuando se iniciala combinación de ellos. No es raro para crear sentencias SQL muy complejo en cuestión de minutos.

Explorando Flash 

Flash no es sólo una tecnología, es también el nombre de una herramienta de desarrollo de Adobe, que seutiliza para crear contenido Flash activado. Este contenido puede ser desde un simple anuncio publicitario atodo el camino a una completa base de datos impulsada sitio web con video y la interacción del usuario.

Flash IDE 

Flash IDE (Integrated Development Environment), como se muestra en la Figura 2.4, es una herramienta dedesarrollo robusta con muchas características útiles.

Page 78: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 78/467

78

FIGURE 2.4Flash CS3 IDE with default layout

Una de las herramientas de actualización es el editor de código, también conocido como el panel deActionScript. Este panel, como se ve en la figura 2.5, es donde se escribe el código ActionScript para lasaplicaciones de Flash. La última versión se ha completado de código robusto, depuración avanzada, así como elresaltado de sintaxis para mi algunas de las nuevas características.

Page 79: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 79/467

79

FIGURE 2.5Panel ActionScript en Flash CS3

Aquí es donde la mayoría de su vida el desarrollo se gasta. El panel no es el único editor, usted puede creararchivos completos de ActionScript, como se muestra en la Figura 2.6, y los incluyen en su aplicación.

Para crear un archivo AS, seleccione ArchivoNuevo. Elija ActionScript 3 Archivo de la columna del medio. Guarde el archivo como Sample.as a su escritorio. 

Page 80: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 80/467

80

FIGURE 2.6External ActionScript editor included with Flash CS3

Editores Alternativos 

Encontrarás muchos editores de ActionScript en el mercado. Mi favorito es FDT de Powerflasher enhttp://fdt.powerflasher.com/. Este editor ofrece la mayor cantidad de personalización y se basa en el editor deEclipse, que muchas otras empresas dependen.

Crear un nuevo archivo FLA y guardarlo en su escritorio también. Ahora abra el editor de código y agregue elsiguiente código:

#include “Sample.as”

Esa línea de código incluye el contenido de Sample.as en su aplicación. Esto significa que usted puede escribirtodo el código ActionScript en el archivo externo y Flash sabrá incluirlo cuando se prueba o construir laaplicación.

Page 81: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 81/467

81

Flash-dispositivos habilitados 

Flash ya no es una simple herramienta de animación para crear gráficos llamativos para la Web. Ahora puedeencontrar Flash instalado en una gran variedad de productos tales como teléfonos celulares, reproductores demedios, e incluso en algunas cámaras. La tecnología del teléfono celular es especialmente interesante porqueestos dispositivos suelen tener conexiones a Internet activa, lo que significa que usted puede desarrollar

aplicaciones dinámicas de Internet (RIA) para dispositivos móviles, así como el escritorio.

Un paso adelante 

Ahora debe tener un conocimiento básico de lo que Flash es y cómo se ha avanzado en la última versión. Eneste libro se explican los distintos aspectos de Flash y ActionScript en cuanto a trabajar con PHP y gestión dedatos.

Sin embargo, para una guía más detallada sobre Flash CS3, le recomiendo el Adobe Flash CS3 ProfessionalBiblia, publicado por John Wiley & Sons, Inc..

Resumen 

En este capítulo, usted aprendió sobre el servidor Web y cómo modificar los archivos de configuración paraconfigurar su desarrollo a medida o el medio ambiente en vivo. Esta información incluye páginas de errorpersonalizadas, la aplicación de módulos específicos, y mejores prácticas para la protección de su contenido.

Después de entender los conceptos básicos de trabajo con el servidor Web, el siguiente paso fue aprender atrabajar con PHP. El estudio abarcó los aspectos básicos de PHP, así como detalles de los capítulos de este libro.

La segunda mitad del capítulo incluye información sobre MySQL y cómo trabajar con los datos en su base dedatos.

La última parte fue una visión general de Flash y cómo trabajar con el entorno de desarrollo. Para una visiónmás detallada, se dieron algunas referencias.

Page 82: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 82/467

82

Capitulo 3

Cómo realizar la Conexión 

Cómo conseguir una conexión es una frase usada para describir el proceso de conexión a diversas fuentes dedatos. En este capítulo, es el proceso de conexión de ActionScript (Flash), PHP, MySQL y de diversas maneras.Esta información puede ser un sitio Web simple o una base de datos impulsada por el sistema de gestión decontenido de Flash, que se convierte en el front-end de visualización.

Si estos tres componentes no están instalados, consulte el Capítulo 1 antes de continuar con este capítulo.

La primera parte de cada sección se centra en lo que cada tipo de conexión tiene que ofrecer y se avanza haciaejemplos para proporcionar una visión completa del resultado final.

Entender Comunicaciones en Flash 

Desarrollo de aplicaciones autónomo carece de ciertas funciones, principalmente la capacidad de trabajar condatos dinámicos. En pequeñas aplicaciones que puede utilizar archivos planos, como los archivos XML, pero losque plantearía un problema como un proyecto sigue creciendo.

Archivo de texto simple basado en aplicaciones también sufren el bloqueo de archivos, lo que puede ocurrir sihay demasiadas personas accediendo al archivo. Cuando esto ocurre, Apache y/o PHP puede lanzar un errorque no da lugar a los usuarios para utilizar el sitio.

Determinar el estado de PHP 

El primer paso para establecer una conexión con PHP en Flash es determinar si PHP está correctamenteinstalado y en funcionamiento. Esto se hace mediante la creación de un archivo PHP simple de las salidas de laconfiguración actual de la versión de PHP instalada.

La función de PHP phpinfo() muestra la información de configuración mediante la creación de una páginapersonalizada de HTML, como se muestra en la Figura 3.1.

ADVERTENCIA Dejar el archivo phpinfo en su servidor puede ser un riesgo de seguridad. Lo mejor es que sólodebe subir cuando lo necesite para mirar, y luego borrarlo.

El siguiente es un archivo de información que muestra que hace una llamada a la función phpinfo().

<?php// output php configuration settingsphpinfo();?>

Page 83: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 83/467

83

FIGURA 3.1Aquí está la salida de la función phpinfo, que muestra la configuración actual de configuración de PHP.

Si se le presenta con el archivo phpinfo, que generalmente es de color morado y se inicia con la versión de PHPinstalada, entonces todo está instalado correctamente.

Sin embargo, si usted ve un cuadro de diálogo para descargar el archivo PHP, esto significa que Apache esconfigurado incorrectamente o no se ha habilitado para el apoyo de PHP. Este nivel de configuración se trataen el capítulo 1 y en los archivos de ayuda que se suministran con Apache. En raras ocasiones puedepresentarse con un servidor no se encuentra la página, lo que podría significar Apache no está instalado ocorriendo.

Suponiendo que PHP y Apache están funcionando correctamente, puede seguir adelante con el proceso deconexión de Flash a PHP.

Trabajar con distintos tipos de conexión 

Flash ofrece muchos tipos diferentes de opciones de comunicación. La determinación de que la comunicación autilizar en el proyecto se lleva a cabo mediante la característica intencional de la aplicación específica.

Page 84: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 84/467

84

Una-vía de comunicación

Una comunicación bidireccional en Flash es el proceso de envío de datos a un servidor web y no buscar o por elcuidado si una respuesta vuelve. Esto es principalmente usado para abrir un URL, pero también podríautilizarse para actualizar un archivo con la intención de manipular el resultado. Este tipo de comunicación seutiliza a menudo por el simple hecho de mandar un evento o si lleva algún tipo de sistema de limpieza.

Por ejemplo, si su sitio necesita limpieza periódica de archivo (borrar, renombrar, mover), es una buena ideapara unir esta al frente del sistema final, porque los recursos del servidor sólo se utilizarán cuando las mismasya proporcionar contenido para el usuario . Este se habría iniciado por una comunicación bidireccional entreescenas.

NOTA La actualización de visualización concepto no debe ser utilizado para soluciones de copia de seguridadporque una visión lento podría dar lugar a falta de copias de seguridad.

He aquí un ejemplo de la comunicación unidireccional en Flash:

var serverFile:String = “http://localhost/callLink.php”;

var urlRequest:URLRequest = new URLRequest(serverFile);navigateToURL(urlRequest);

La función navigateToURL acepta dos parámetros. El primer parámetro es la instancia del URLRequest, y elsegundo parámetro es la ventana o el de destino. Por defecto, la ventana es _self, lo que significa la nuevapágina se cargará en el navegador actual, si existe.

Sin embargo, en algunos casos, puede que desee abrir una nueva ventana del navegador, que se puede hacerañadiendo el segundo parámetro.

var serverFile:String = “http://localhost/callLink.php”;var urlRequest:URLRequest = new URLRequest(serverFile);

navigateToURL(urlRequest, “ _blank”);

El parámetro de la ventana puede aceptar una de las siguientes cadenas, como se muestra en la Tabla 3.1.

TABLE 3.1Window Targets para enlaces

“_self” Marco actual de la ventana actual “_blank” Nueva ventana

“_parent” Parent del marco actual“_top” Marco de alto nivel en la ventana actual

El parámetro ventana también puede aceptar un nombre personalizado, como el nombre de un marco oventana específica. Por ejemplo, suponiendo que usted desea enviar un vínculo a la ventana llamada"childWindowBox", el código se vería como el siguiente bloque:

var serverFile:String = “http://localhost/callLink.php”;var urlRequest:URLRequest = new URLRequest(serverFile);

Page 85: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 85/467

85

navigateToURL(urlRequest, “childWindowBox”);

Usted sustiye los nombres de las ventanas precompilados y añade su nombre personalizado. Aunque este es unpequeño cambio, ofrece algunas grandes funcionalidades añadidas.

Abrir una ventana nueva o existente es sólo una de las posibilidades de conexión con otros datos.

Otro tipo de comunicación unidireccional en Flash se puede realizar mediante el uso de sendToURL().

El sendToURL () se utiliza para comunicarse en silencio con un guión. Comunicación silenciosa es una forma decomunicación unidireccional que no carga una página Web por separado. Esta forma de comunicación ofrece laposibilidad de enviar datos a un servidor sin interferir con la experiencia de navegación del usuario.

Aquí está el ejemplo anterior, con la nueva función añadida, junto con algún error de manipulación de basepara gestionar las solicitudes no válidas y no está disponible.

var serverFile:String = “http://localhost/callLink.php”;var urlRequest:URLRequest = new URLRequest(serverFile);

try{sendToURL(urlRequest);}catch (e:Error){// handle error here}

Envío de datos al servidor

Puede haber ocasiones en las que desea no sólo en silencio solicita una dirección URL, sino también enviar los

datos a lo largo de la misma. Esto se hace utilizando la clase URLVariables, que le permite crear un objeto depares nombre/valor. Estos serían los mismos que los que se encuentran en una solicitud de HTML estándar.

var serverFile:String = “http://localhost/callLink.php”;var variables:URLVariables = new URLVariables();variables.id = 1004;variables.user = “James”; var urlRequest:URLRequest = new URLRequest(serverFile);urlRequest.data = variables;try{sendToURL(urlRequest);

}catch (e:Error){// handle error here}

Otro ejemplo de una vía de comunicación es a ciegas enviar datos POST a un servidor. Esto añade la seguridadun poco más a su aplicación mediante la eliminación de los parámetros de la URL, y se realiza mediante lainclusión de los parámetros dentro de la petición.

Page 86: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 86/467

86

El código de la solicitud de datos POST es simplemente asignar un valor a la propiedad método de la instanciaURLRequest. ActionScript tiene una variable estática en la clase URLRequestMethod que se asigna a la variablemétodo.

var serverFile:String = “http://localhost/callLink.php”;var variables:URLVariables = new URLVariables();

variables.id = 1004;variables.user = “James”;var urlRequest:URLRequest = new URLRequest(serverFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;try{sendToURL(urlRequest);}catch (e:Error){// handle error here

}

Aquí está una muestra de que se enviarán al servidor. Como puede ver, el contenido y los elementos POSTtienen la información que se envió. Las partes restantes de la solicitud son los atributos de datos estándar y noson específicas para este ejemplo.

POST /callLink.php HTTP/1.1Accept-Language: enAccept-Encoding: gzip, deflateCookie: login=usernames;session-id=120670lReferer: http://www.example.org/User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en)

AppleWebKit/522.11.1 (KHTML, like Gecko) Version/3.0.3Safari/522.12.1Content: id=1004%2Fuser=JamesContent-Type: application/x-www-form-urlencodedAccept: text/xml, text/html;q=0.9,text/plain;q=0.8,image/pngPragma: no-cacheContent-Length: 327Connection: keep-aliveHost: www.example.org

Dos-vías de comunicación

En algunos casos, usted desea recibir una respuesta cuando envía los datos. Una de ellas sería cuando seintenta cargar los datos de un usuario específico de una base de datos. Usted podría pasar el identificador deusuario y espera recibir algún tipo de datos que contienen información de ese usuario.

La respuesta de una comunicación de dos vías se controla mediante la asignación de un detector de eventos yla asignación de una función de controlador.

var serverFile:String = “http://localhost/callLink.php”;var variables:URLVariables = new URLVariables();

Page 87: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 87/467

87

variables.id = 1004;variables.user = “James”;var urlRequest:URLRequest = new URLRequest(serverFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, userResponseHandler); 

try {urlLoader.load(urlRequest);} catch (e:Error) {//handle error here}// handler functionfunction userResponseHandler(e:Event):void {var urlLoader:URLLoader = URLLoader(e.target);var args:URLVariables = new URLVariables(urlLoader.data);trace(“User Data: “ + args.response);}

La función de respuesta se pasa una referencia al evento. Las instancias URLLoader y URLVariables manejar elproceso separando la respuesta y volver sólo los datos que fue enviado de vuelta. La respuesta viene de nuevocon otros valores y parámetros, pero la mayoría de las veces sólo estará interesado en la propiedad de datosde la instancia de URLLoader.

Más aplicaciones completas a menudo regresan formato XML, que está cubierto en el capítulo 3 con otrosdatos de diferentes ejemplos de carga.

Ahora que sabe cómo trabajar con un solo sentido y comunicación de dos vías, la siguiente sección se expandesobre estas prácticas mediante la conexión a PHP.

Conexión de Flash a PHP 

El proceso de conexión de flash PHP se realiza mediante las clases de pre-compilados que se introdujeron en lasección anterior. Si usted no tiene instalado PHP en este momento, consulte el Capítulo 1 para comprender einstalar PHP.

Para iniciar este ejemplo, abra el archivo de partida que se incluye en los archivos de libro de origen. Losarchivos de código fuente se puede encontrar en el sitio Web del libro. El archivo de partida para este ejemplotiene el diseño y componentes que han añadido, como se muestra en la Figura 3.2, que le permite centrarse enel código que hace que todo funcione.

La primera parte de este ejemplo es para definir la variable de que el archivo PHP se encuentra en el servidorlocal o remoto.

var phpFile:String =“http://localhost/connecting/exampleConn.php”;Una vez definida la ubicación del script PHP, el siguiente paso escrear la función que se llama cuando se pulsa el botón.function callServer(e:MouseEvent):void{

Page 88: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 88/467

88

var urlRequest:URLRequest = new URLRequest(phpFile);var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, serverResponse);loader.load(urlRequest);}

FIGURA 3.2

Aquí está el diseño completo de la aplicación de ejemplo que va a trabajar con el.

Esta función crea instancias URLLoader y URLRequest. El phpfile se pasa a la URLRequest para crear el objeto.Por último, el detector de eventos se adjunta a la variable de gestor para hacer referencia a serverResponse,que es la función que se llama cuando se carga los datos.

function serverResponse(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);timeTxt.text = variables.returnValue;}

El controlador de función serverResponse () del servidor se encarga de capturar los datos que se pasa de nuevodesde el archivo PHP. Después de que los datos se ha cargado correctamente, se pasa a la clase URLVariablespara generar un objeto dinámico.

Page 89: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 89/467

89

Este objeto contiene los datos dinámicos de respuesta pasados del servidor, por lo que una llamada a un objetosimple es todo lo que se necesita para cargar los datos de la muestra. En este ejemplo, los datos de la muestraserá el timestamp UNIX capturado y devuelto por PHP.

La última parte es un controlador simple botón que llama a la función callServer cuando un usuario hace clic enel botón.

callBtn.addEventListener(MouseEvent.CLICK, callServer);

El código PHP para este ejemplo es muy simple una declaración de impresión. La función time() se utiliza paraagarrar el timestamp UNIX actual. La variable returnValue situado en la cadena es una definición de variablepersonalizada, de modo Flash sabe cómo llamar una vez que se carguen los datos.

Esta variable se puede nombrar cualquier número de cosas e incluso puede ser una serie de estos:

<?phpprint “returnValue=Hello from PHP, time is: “ . time();?>

Concatenación de datos

El .= se utiliza para concatenar o unirse a múltiples variables utilizadas en una cadena larga. En este caso, seestá construyendo en la línea anterior para crear la cadena de datos de usuario que le será devuelto a Flash.

<?php$userData = “username=James”;$userData .= “&id=1004”;$userData .= “&level=Reader”;print $userData;?>

El resultado que se pasará de nuevo a Flash se verá algo similar a lo siguiente:

username=James&id=1004&level=Reader

Usted puede notar que el nombre de relación entre el valor es muy similar a la forma en que se envíen losdatos POST. Sin embargo todo lo que necesita saber para trabajar con estos datos en Flash son los nombres delas variables.

Múltiples piezas de datos

Tome la función actual serverResponse () y modificarlo para incluir estas nuevas variables que se envían desdeel código PHP. El ejemplo siguiente es regresar no modificable valores, sin embargo, en una aplicación real, quelos datos lo más probable es venir de una fuente de datos dinámicos.

Como aprendimos en la sección anterior, el formato de datos de Flash se convierte en una muy simple y fácilde usar, conjunto de objetos.

function serverResponse(e:Event):void{

Page 90: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 90/467

90

var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);userTxt.text = “Welcome back, “ + variables.username;levelTxt.text = “Your current level is: “ + variables.level; }

Una limitación de la función anterior es las variables var sólo es accesible dentro de esa función.

Para asegurar los datos devueltos sea accesible por toda la aplicación, es una buena idea guardar los datos enuna variable externa.

Por ejemplo, este ejemplo se basará en el código anterior, añadiendo la nueva variable de asignación ydefinición. El primer cambio consiste en crear una variable de objeto que almacenará los datos.

var phpFile:String =“http://localhost/connecting/exampleConn.php”;var storedResult:Object;function callServer(e:MouseEvent):void{...

}function serverResponse(e:Event):void{...}callBtn.addEventListener(MouseEvent.CLICK, callServer);

Después de la variable de objeto es definida por new, el siguiente paso es modificar la función serverResponsepara almacenar los datos cargados en la variable de la recién creada.

function serverResponse(e:Event):void{

var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);// check for valid dataif(uint(variables.itemLength) > 0){storedResult = variables;} userTxt.text = “Welcome back, “ + variables.username;levelTxt.text = “Your current level is: “ + variables.level;}

Los datos objeto cargado se almacena en el objeto storedResult, pero sólo si se encuentra una itemLengthválida. La variable itemLength también es devuelto por el PHP y validado mediante una simple sentencia if.

Con esta nueva incorporación al código que se puede compartir los datos cargados con otras variables ysecciones dentro de esta misma solicitud.

NOTA Los datos almacenados no son accesible hasta que el proceso de carga se complete.

El último paso es modificar el PHP para devolver la variable nueva creada itemLength, que se hace con otraadición a la cadena $userData.

Page 91: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 91/467

91

<?php$userData = “username=James”;$userData .= “&id=1004”;$userData .= “&level=Reader”;$userData .= “&itemLength=3”;print $userData;?>

Ahora que tiene una comprensión de cómo cargar los datos estáticos de PHP en Flash, la siguiente sección seamplía en este formato de datos estáticos y presenta una base de datos MySQL.

Conexión de PHP a MySQL 

Cargando datos en Flash de un archivo PHP estático es una gran manera de aprender el proceso. Sin embargo,una aplicación RealWorld probablemente no va a utilizar ese formato. Los datos siempre están cambiando ynadie quiere actualizar los archivos PHP con la mano.

Determinar el estado de MySQL 

Antes de la conexión con MySQL esté establecido, asegúrese de que MySQL está instalado y funcionandocorrectamente.

NOTA La instalación por defecto de MySQL deja la contraseña en blanco. Esto está bien para un sitio depruebas, pero la contraseña no debe dejarse en blanco en un servidor en vivo.

La instalación más comun para el uso de MySQL en PHP es mediante la inclusión de la biblioteca de MySQLdurante el proceso de instalación de PHP. Esto significa que la información de MySQL será mostrado enphphinfo, que se explica en la sección anterior.

Comprobación de MySQL se hace simplemente mediante la creación de un archivo de prueba phpinfo yfuncionando en tu navegador, como se muestra en la Figura 3.3.

<?phpphpinfo();?>

Este resultado es una página HTML masiva que muestra toda la información relativa a la instalación actual dePHP. Para determinar el estado de MySQL, la búsqueda de "MySQL". Tenga en cuenta que podría haber más deuno.

Page 92: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 92/467

92

FIGURA 3.3Aquí está la parte del archivo phpinfo que explica la instalación de MySQL disponible.

NOTA La sección de MySQL en el archivo phpinfo no será visible a todos si no se instala.

Suponiendo que MySQL está correctamente instalado y en funcionamiento, puede pasar a la siguiente sección,que explica cómo conectar PHP a una base de datos MySQL.

Conectar a MySQL 

El proceso de conectar a MySQL de PHP es bastante simple. El primer paso es obtener la información deconexión de su administración del servidor o, si usted acaba de instalar, los datos de acceso serían los valorespredeterminados.

Aquí está el muy básico, no hay código volantes para conectarse a una base de datos MySQL.

<?php$host = “localhost”;$user = “”;$pass = “”;$link = mysql_connect($host, $user, $pass);?>

Page 93: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 93/467

93

La función mysql_connect acepta tres argumentos. El nombre de host es el primer argumento, que casisiempre se establece en "localhost". El segundo es el nombre de usuario que se eligió al instalar MySQL, y, porúltimo, la contraseña de su base de datos MySQL, que es blanco para la configuración por defecto.

La función mysql_connect retorna un ID de recursos, que es una referencia a la conexión de MySQL actual. EsteID se puede utilizar en el futuro las llamadas SQL, como mysql_query, y muchas otras funciones. Si le sucedeque imprimir esta variable $link podrás ver un código de recursos. El ejemplo siguiente devuelve código

identificador de recurso:

<?php$link = mysql_connect(“localhost”, “root”, “”);print “Response: “ . $link;?>

El bloque de código anterior produce una respuesta, como:

Response: Resource id #32 

Conexión persistente

La función mysql_connect estandar cerrará la conexión una vez finalizada la ejecución del script.Sin embargo, hay algunos casos en los que se desea mantener una conexión que no se cierra una vez que elguión está finalizado.

La función mysql_pconnect es exactamente lo que hace esto posible. Esta función mantiene una conexióndespués de que el script se ejecuta. La ventaja de mysql_pconnect es que elimina la necesidad de una nuevaconexión. Sin embargo, la desventaja es que las conexiones persistentes se almacenan en una piscina y no segarantiza la misma conexión cada vez, que puede producir resultados inesperados.

He aquí un ejemplo de una conexión persistente, donde el único cambio es pa delante de la palabra "conectar"

en la función de conexión.

<?php$link = mysql_pconnect(“localhost”, “root”, “”);print “Persistent Resource ID: “ . $link;?>

Cerrar la conexión

Después de que el SQL finalice la ejecución, una buena práctica es eliminar la conexión a liberar recursos ymemoria. Esto se hace simplemente haciendo un llamado a mysql_close(), que cierra la conexión.

Cierre de la conexión no es siempre necesaria, ya que se cerrará automáticamente cuando la secuencia decomandos detenga su ejecución. Dicho esto, en una aplicación más grande es mejor liberar recursos tan prontocomo sea posible para mantener un uso responsable.

Aquí está el anterior mysql_connect() ejemplo, con la adición cerrar.

<?php$link = mysql_connect(“localhost”, “root”, “”);print “Response: “ . $link;

Page 94: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 94/467

94

// close connectionmysql_close($link);?> 

La función mysql_close puede aceptar una referencia de recursos de identificación, que viene muy bien cuandousted tiene múltiples conexiones. Este argumento no es obligatorio, por defecto la última conexión se cerrará.

NOTA Una conexión persistente creado por mysql_pconnect() no puede cerrar con mysql_close().

Seleccionar la base de datos

Después de establecer la conexión MySQL, usted puede seleccionar una base de datos. Usted no será capaz deconsultar la base de datos hasta una conexión adecuada y de la base de datos son los elegidos. La funciónmysql_select_db le permite seleccionar la base de datos para consulta. También puede utilizar esta funciónpara cambiar las bases de datos.

NOTA De una conexión activa sólo puede tener una base de datos conectada a la vez.

La función mysql_select_db acepta dos parámetros. El primer parámetro es el nombre de base de datos.El segundo parámetro (opcional) es un enlace al recurso de conexión activa. Esto es importante para usarcuando usted tiene pocas conexiones diferentes o si desea seguir correctamente la conexión activa.

Aquí hay un ejemplo utilizando el código anterior para la conexión y seleccionar una base de datos:

<?php$link = mysql_connect(“localhost”, “root”, “”);mysql_select_db(“db_name”, $link);// close connectionmysql_close($link);?>

Acercar todo junto 

Usted puede usar su comprensión de cómo conectar a MySQL desde PHP para ampliar este concepto y crearuna aplicación completa. 

La primera parte del proceso de desarrollo es crear la base de datos y tablas, y rellenar con los datos.En este ejemplo será el comienzo de un sitio de una lista de CD donde el usuario solicita se devuelve unacategoría de género y los álbumes especificos.

Comience por crear dos tablas de MySQL para este ejemplo. El primer cuadro corresponde a los géneros y la

segunda tabla es la lista de álbumes.

CREATE TABLE genre (id int(11) NOT NULL auto_increment,name varchar(100) default „‟,dateAdded int(11) default „0‟,PRIMARY KEY (id)) ENGINE=MyISAM;CREATE TABLE albums (id int(11) NOT NULL auto_increment,

Page 95: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 95/467

95

genreID int(11) NOT NULL default „0‟,artist varchar(200) NOT NULL default „‟,albumName varchar(200) NOT NULL default „‟,PRIMARY KEY (id)) ENGINE=MyISAM;

Utilizando cualquier navegador o editor que desee, crear una base de datos de música y añadir los dos cuadros

para empezar. Después de crear las tablas, se puede llenar con los datos predefinidos para este ejemplo, quese lleva a cabo mediante la ejecución de una serie de declaraciones de INSERT MySQL.

INSERT INTO genre (name, dateAdded) VALUES („Blues‟, 1197090235);INSERT INTO genre (name, dateAdded) VALUES („Country‟,1197090146);INSERT INTO genre (name, dateAdded) VALUES („Jazz‟, 1197090525);INSERT INTO genre (name, dateAdded) VALUES („Rock‟, 1197090230);INSERT INTO albums (genreID, artist, albumName) VALUES (4, „RobThermo‟, „Rob\‟s Rock Mix‟);INSERT INTO albums (genreID, artist, albumName) VALUES (4, „BillDato‟, „Rock Out Live‟);

INSERT INTO albums (genreID, artist, albumName) VALUES (4, „JimLimb‟, „Woodward 37th‟);INSERT INTO albums (genreID, artist, albumName) VALUES (4, „JasonAlex‟, „Guitar Mashup‟);INSERT INTO albums (genreID, artist, albumName) VALUES (4, „SamRiley‟, „The Live Ones‟);

Con la base de datos creada y las mesas asignadas y lleno de datos de ejemplo, puede continuar con la parte dePHP de la aplicación.

Conectar el PHP

El código PHP se inicia mediante la conexión a la base de datos recién creado usando las técnicas aprendidas enla sección anterior.

<?php$link = mysql_connect(“localhost”, “username”, “password”);

mysql_select_db(“music”, $link);

Cuando se establece una conexión, puede crear la consulta que se ocupa de la carga de los datos del álbum. Enprimer lugar, crear el género para buscar mediante el establecimiento de una variable estática. En unaaplicación más completa, la variable más probable es que se pasa a través de URL o de alguna otra forma deuna llamada.

$genreID = 4;$query = “SELECT g.name, a.artist, a.albumName”;$query .= “ FROM albums a, genre g”;$query .= “ WHERE a.genreID=g.id”;$query .= “ AND g.id=” . $genreID;

Una llamada a mysql_query () se hace, que es responsable de ejecutar la consulta SQL anterior.Esta función devuelve un identificador de recurso que se utilizará en el resto de las llamadas de SQL.

Page 96: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 96/467

96

$result = mysql_query($query);

Este álbum cargado de datos se almacenarán en un nombre o cadena de valor de la simplicidad, sino unejemplo del mundo más real-lo más probable es utilizar XML u otro tipo de datos estructurados.

$response = “resp=loaded\n”;

CROSS--REF El uso de datos XML se explica en el capítulo 3. Esto incluye la carga y el ahorro de XML cuando setrabaja con PHP/MySQL objetos de datos.

En este punto, la conexión a MySQL y la llamada debe ser creado, pero aún no puede probar el código, porqueno emitirá nada. La siguiente sección explica el dar salida de los datos mediante un bucle while común pararecorrer los datos devueltos por las tablas de la base de datos de música.

Los datos se devuelven en un formato de lista de base, pero tiene que haber una forma de diferenciar losdatos.Esto se hace mediante la creación de un identificador único en cada instancia de los resultados y la asignación a

el valor del nombre.

$index = 0;

La siguiente parte es la carne de la solicitud, que es el bucle while.

while($row = mysql_fetch_array($result)){...}

El contenido del bucle while construye la respuesta de cadena.

while($row = mysql_fetch_array($result)){$response .= “&artist” . $index . “=” . $row[„artist‟];$response .= “&album” . $index . “=” . $row[„albumName‟];$response .= “&genre” . $index . “=” . $row[„name‟]. “\n”;$index++; }

Usted se dará cuenta de la variable $ respuesta se le asigna un nombre y el valor de cada pieza individual de losdatos devueltos por la base de datos. Los datos devueltos por la función mysql_fetch_array entra como unamatriz multidimensional. La variable $row almacena cada fila de datos, y utiliza el nombre de la columna para

acceder a la pieza específica de datos, tales como:

$response .= “&artist” . $index . “=” . $row[„artist‟];

Este proceso se repite para cada pieza de datos que desea capturar. Los datos que está disponible para estecircuito, mientras que se determina en la consulta SQL que se definió en la sección anterior.

Page 97: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 97/467

97

Usted puede haber notado que la consulta SQL se vio obligado a incluir sólo las columnas necesarias. Esto sehace para limitar la cantidad de datos y utilizar menos memoria, lo que se suma como un sistema siguecreciendo.

Si usted necesita todas las columnas de las tablas, se puede utilizar un asterisco (*), que modifica la llamadaanterior de SQL para buscar algo como:

$query = “SELECT g.*, a.*”;$query .= “ FROM albums a, genre g”;$query .= “ WHERE a.genreID=g.id”;$query .= “ AND g.id=” . $genreID;

Dos letras se asignan asteriscos (*) porque son referencias a las dos tablas necesarias para este ejemplo.Uso de múltiples tablas en una llamada de SQL es muy común en mantener la relación de los datos conocidos,y ello permite que los datos que se almacenan en las pequeñas, trozos más manejables.

La última parte de PHP crea un "total" de valor que indica a Flash la cantidad de datos que se devuelven.Esto es necesario porque los datos están en formato de cadena. Cuando se utiliza un tipo de datos XML o

matrices, no necesitará esta variable adicional.

El índice creado por cada fila de datos se hace el recuento, ya que sólo se incrementa cuando se encuentra unanueva fila de datos, lo que significa que está en sincronía con la cantidad de datos en la cadena.

$response .= “&total=” . $index;

La última parte es la declaración de impresión, que expone estos datos para Flash o una aplicación Web paracargar.

print $response;

 Aquí hay un ejemplo de respuesta:

resp=loaded&artist0=Rob Thermo&album0=Rob‟s Rock Mix&genre0=Rock&artist1=Bill Dato&album1=Rock Out Live&genre1=Rock&artist2=Jim Limb&album2=Woodward 37th&genre2=Rock&artist3=Jason Alex&album3=Guitar Mashup&genre3=Rock&artist4=Sam Riley&album4=The Live Ones&genre4=Rock&total=5

Esa es la aplicación completa, que carga en un bloque de datos del álbum usando el género como la clave.

Aquí está todo el código PHP en una lista para copiar/pegar o para examinar de cerca y comprender mejorcómo es que trabajan todos juntos.

<?php$link = mysql_connect(“localhost”, “username”, “password”);mysql_select_db(“music”, $link);$genreID = 4;$query = “SELECT g.name, a.artist, a.albumName”;$query .= “ FROM albums a, genre g”;

Page 98: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 98/467

98

$query .= “ WHERE a.genreID=g.id”;$query .= “ AND g.id=” . $genreID;$result = mysql_query($query);$response = “resp=loaded\n”;$index = 0;while($row = mysql_fetch_array($result)){

$response .= “&artist” . $index . “=” . $row[„artist‟];$response .= “&album” . $index . “=” . $row[„albumName‟];$response .= “&genre” . $index . “=” . $row[„name‟]. “\n”;$index++;}$response .= “&total=” . $index;print $response;?>

Construir el Flash

La porción de Flash de esta aplicación es responsable de cargar los datos y recorre a imprimir cada álbum. Para

simplificar, esta aplicación es ActionScript, lo que significa la presentación de los datos se hace en el panelSalida.

Una aplicación más completa que tomar estos datos cargados y mostrarlos en una lista o de otro componentede datos personalizados.

El primer paso es definir el archivo PHP que se llama, que tendría un aspecto similar a este, dependiendo decómo su sistema está configurado:

var phpFile:String = “http://localhost/getAlbums.php”;

Cuando se define la variable de PHP, el siguiente paso es crear la función que se llama el servidor.

function loadHandler():void{...}

Esta función establece la primera instancia de URLRequest, pasando la variable de PHP como un argumento.

var urlRequest:URLRequest = new URLRequest( phpFile);

El URLLoader se utiliza para crear un detector de eventos y para iniciar el proceso de carga en la realización deesta función. La variable URLRequest se pasa a la función de carga de la instancia de clase URLLoader, que serequiere para cualquier tipo de carga de datos.

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, callServerHandler);urlLoader.load(urlRequest);

La siguiente función es la de definir callServerHandler, que se llama una vez que los datos son enviados desdeel archivo PHP escrito en la sección anterior. Esta función se pasa una referencia de evento que contiene losdatos cargados.

Page 99: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 99/467

99

function callServerHandler(e:Event):void{...}

El primer paso en esta función es la de crear la instancia de URLLoader, que se utiliza para capturar los datos

cargados. La instancia de eventos contiene una propiedad de destino, que se utiliza aquí pasando en un nuevoURLLoader.

El resultado se almacena en la variable de gestor local, que se utilizará en el resto de esta función,.

var loader:URLLoader = URLLoader(e.target);

Usted puede recordar de la sección de PHP de este ejemplo que los datos se devuelven en pares de nombre yobjeto de valor. Que los datos se almacenan en la propiedad de datos de la recién creada instancia de gestor.

Estos datos se pasa a una instancia de la clase URLVariables, que crea un objeto de ActionScript para otraspartes de la secuencia de comandos puede manejar los datos.

var dataObj:URLVariables = new URLVariables(loader.data);

Ahora que se carguen los datos, puede probar usando una simple declaración de seguimiento que debemostrar las entradas totales devueltos.

trace(“Total Albums: “ + dataObj.total);

Que la llamada trace debe mostrar lo siguiente en el panel Salida:

//Output: Total Albums: 5

Esto significa que el archivo PHP que se llama y los datos se carga correctamente desde la base de datosusando PHP como el controlador de datos en el medio.

Usted podría terminar el script de aquí, ya que todas las obras, pero para seguir usando el bucle for.. paramostrar la información de cada álbum utilizando una serie de trace las llamadas por la simplicidad.

El bucle for.. se establece con la propiedad total de la dataObj para determinar cuántas veces el bucle debeejecutarse.

for(var i:uint = 0; i < dataObj.total; i++){

...}

La primera huella (trace) en el bucle for.. muestra el álbum actual que se muestra. El número actual álbum escreado utilizando la variable i del bucle 1 agregado. La razón de esto es que la variable i comienza en cero, ypara fines de presentación del primer disco debe ser de 1.

trace(“Album “ + (i + 1));

Page 100: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 100/467

100

La siguiente sentencia trace está configurado para mostrar el artista actual. El valor se recupera de la instanciade objetos dataObj utilizando una referencia de objeto dinámico. El nombre "artista" se adjunta a la variable i,que crea un nombre de instancia.

trace(“ Artist: “ + dataObj[„artist‟ + i]);

El resto de las instrucciones de seguimiento (trace) son duplicados de la anterior, con el nombre de instancia y

en la descripción ligeramente modificada.

trace(“ Album: “ + dataObj[„album‟ + i]);trace(“ Genre: “ + dataObj[„genre‟ + i]);

En este punto, el ciclo se completa y también lo es la aplicación de ejemplo completa. Ahora puede probar elejemplo y debería ver las instrucciones de seguimiento de muestra en el panel Salida, como se muestra en laFigura 3.4.

FIGURA 3.4Aquí hay un ejemplo de los datos del álbum aparece en el panel Salida.

Page 101: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 101/467

101

La porción de ActionScript completo de esta aplicación sigue:

var phpFile:String = “http://localhost/getAlbums.php”;function loadHandler():void{var urlRequest:URLRequest = new URLRequest(phpFile);var urlLoader:URLLoader = new URLLoader();

urlLoader.addEventListener(Event.COMPLETE, callServerHandler);urlLoader.load(urlRequest);}function callServerHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var dataObj:URLVariables = new URLVariables(loader.data);// Simple trace for examplefor(var i:uint = 0; i < dataObj.total; i++){trace(“Album “ + (i + 1));trace(“ Artist: “ + dataObj[„artist‟ + i]);

trace(“ Album: “ + dataObj[„album‟ + i]);trace(“ Genre: “ + dataObj[„genre‟ + i]);}}loadHandler();loadHandler(); 

Resumen 

El ejemplo anterior debería haber dado una comprensión bastante buena de trabajar con una base de datosMySQL en Flash usando PHP como la secuencia de comandos en el medio. Puede ampliar este ejemplo paracrear una aplicación más robusta ya que esta muestra se utilizó para ilustrar el concepto, y no centrarse enpantalla o la propia apicación.

De datos de MySQL es sólo un ejemplo de los datos que se pueden mostrar en Flash.

El siguiente capítulo se amplía en este ejemplo y presenta objetos de datos más avanzadas, tales como XML, junto con otras formas de datos, tales como imágenes y archivos de texto.

Page 102: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 102/467

102

Capitulo 4

Trabajar con Datos 

Trabajar con datos es el proceso de enviar y cargar información para ActionScript de interpretar. Hay dos tiposde datos que pueden ser utilizados en ActionScript. Estos serían estáticas y dinámicas.En los casos más comunes, el proceso dinámico que se prefiere a la estática. Principalmente porque los datosdinámicos a menudo incluye un componente de base de datos.

En este capítulo se trata de trabajar con datos dinámicos en Flash y PHP. Usted comienza por la carga dearchivos de texto simple, a continuación, pasar a XML y la carga más avanzados. El capítulo concluye con unaaplicación de ejemplo completa que carga los datos de imagen para mostrar una imagen en miniatura y laimagen de tamaño normal.

Cargar datos en Flash Cargando datos en Flash es una práctica muy común. En casi todos los proyectos, que desea tener algunosdinámicos (actualizables) de las porciones. El propósito de los datos dinámicos es la de limitar el importe de laactualización necesaria. Por ejemplo, si nos fijamos en un sitio de noticias, verás que la mayoría del contenidoexterno no cambia (logotipos, navegación, etc.) Esto también es válido para una aplicación Flash en la que lomás probable es que sólo tienen una cierta parte que en realidad necesita ser actualizado. Esta sección le guíapor el proceso de carga de datos XML de todas las forma de imágenes y sonido.

El proceso de carga de datos en Flash se familiariza con bastante rapidez como la mayoría de los tipos de datosque se carga tienen requisitos similares.

Empiece por buscar un ejemplo sencillo que cargar un archivo de texto. En este ejemplo se buscará el archivode texto en un par de lugares diferentes dependiendo de donde la aplicación se está ejecutando. Si se ejecutaeste código en el IDE de Flash se verá en el mismo lugar de la FLA se guarda o en el directorio temp del usuariosi el archivo no se ha guardado. Si el código es compilado en un archivo SWF, el archivo de texto se cargandesde el mismo directorio que el SWF se almacena en.

var txtFile:String = “sample.txt”;var urlRequest:URLRequst = new URLRequest(txtFile);var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, loadHandler);loader.load(urlRequest);

function loadHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);trace(“Loaded Data: “ + loader.data);}

El anterior ejemplo, carga un archivo "sample.txt" y todos los rastros de su contenido en el panel Salida deFlash, que se abre automáticamente. Otra forma de abrir o cerrar el panel de salida es por la elección de laventana salida.

Page 103: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 103/467

103

Comprender las clases utilizadas para cargar los datos 

De ActionScript en Flash tiene una serie de clases prefabricadas que se utilizan para cargar los datos. Lasiguiente sección explica la función de cada una de esas clases.

URLRequest

Esta clase se utiliza para configurar el archivo que se carga. Se puede asignar de manera directa a una variable,o para mantener el código general más compacto, asignar directamente dentro de load() de la URLLoader.De hecho, se puede aplicar este proceso a muchas de las clases. Esto no tiene ningún impacto en lafuncionalidad de la clase y no es un paso necesario.

...loader.load(new URLRequest(txtFile));

URLLoader

Como se indica en el Docs Live Adobe, "La clase URLLoader descarga datos desde una URL como texto, datosbinarios o variables con codificación URL. Es útil para la descarga de archivos de texto, XML, o cualquier otrainformación que se utilizará en una dinámica, basada en datos de aplicación.”

El URLLoader sirve a dos propósitos al enviar y cargar datos en ActionScript. El primer objetivo de la URLLoaderes configurar el controlador completo. El otro propósito es capturar los datos cargados en el controladorcompleto. Una diferencia notable de la segunda finalidad es el hecho de la URLLoader no tiene una nuevapalabra clave antes de que.

Configurar el callback

El último paso en la creación de un gestor de datos es la devolución de llamada. La devolución de llamada es

otro nombre para el “controlador” de la función que se llama cuando los datos se ha cargado completamente.Esta función se asigna al evento Event.COMPLETE en la clase URLLoader.

var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, loadHandler);

Esta función de devolución de llamada requiere un argumento del tipo de evento, que se pasaautomáticamente en cuando se llama al ActionScript. Este argumento es que el contenido de los datoscargados se almacenan.

NOTA Si usted se olvide de incluir el argumento en el controlador de eventos obtendrá un argumento de error

de recuento de desfase.

ArgumentError: Error #1063: Argument count mismatch onsendtophp_fla::MainTimeline/serverResponse(). Expected 0,got 1.at flash.events::EventDispatcher/dispatchEventFunction()at flash.events::EventDispatcher/dispatchEvent()at flash.net::URLLoader/onComplete()

Page 104: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 104/467

104

Poner todo junto 

Ahora que tiene una comprensión de cómo el código para cargar los datos con ActionScript funciona, puedespasar a ejemplos más concretos de envío y de carga. En este ejemplo, usted puede experimentar y construir apartir de la clase URLLoader porque tiene mucho más que justo el simple evento COMPLETE que usted utiliza.Por ejemplo, hay un evento IOError que se llama cuando se carga o por un error de envío. El código para

diversos eventos es casi lo mismo, para su ejemplo IOError se vería como este:

var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE,ioHandler);function ioHandler(e:Event):void{trace(“File loading was terminated”);

Usted notará rápidamente que lo único que cambia es la cadena de eventos y la función de controlador.Eventos múltiples también pueden ser asignados, y es a menudo una buena idea mantener un alto nivel decompatibilidad. También son capaces para depurar código rápidamente si configura los eventos adecuados.

Asignar múltiples eventos

Suponga que desea manejar el IOError y el evento completo para la instancia del cargador. Usted puede entraren cada controlador de eventos, sin embargo, esto puede convertirse en un largo proceso cuando se trabajacon cargadores múltiples. Una forma de lograr el resultado pretendido es utilizar una función para asignar loscontroladores.Es, básicamente, pasan en la meta como un argumento y asignar dinámicamente los controladores de suevento.

var txtFile:String = “sample.txt”;

var urlRequest:URLRequest = new URLRequest(txtFile);var loader:URLLoader = new URLLoader();assignHandlers(loader);loader.load(urlRequest);function assignHandlers(target:*):void{target[“addEventListener”](Event.COMPLETE, completeHandler);target[“addEventListener”](IOErrorEvent.IO_ERROR,ioErrorHandler);}

function completeHandler(e:Event):void

{...}

function ioErrorHandler(e:Event):void{...}

Page 105: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 105/467

105

Un nuevo concepto introducido en esta función es la forma dinámica de la asignación de detectores deeventos. El [] se utilizan para definir una cadena dentro de ellos como una variable. En este caso, la cadena"addEventListener" es en realidad el método para invocar y los valores con los () son los argumentos para pasaral método.El uso de este ejemplo para la escucha de un solo evento es una especie de exageración, pero si usted estátrabajando con varios eventos que se convierte rápidamente en beneficios.

Manipular carga de datos 

Después de usar los pasos anteriores para cargar los datos, tendrá que utilizar estos datos de alguna manera.Sin embargo, antes de que te sumerjas en el trabajo con los datos cargados se necesita una comprensión de loque se pasa de nuevo y cómo trabajar con él. En las siguientes secciones, aprenderá a manejar los datos que seha cargado. Una vez que haya completado esta sección se entenderá por completo la manera de cargar losdatos y cómo trabajar con los datos cargados.

Una-vía de carga 

Carga de un archivo de texto o la imagen es considerada una forma de carga, sobre todo porque no se pasa a lolargo de las normas o medidas para el archivo cargado. Una llamada a cargar una imagen se esperaría unaimagen que se volvió y nada más. Este tipo de proceso de carga es más comúnmente entendido, si nos fijamosen un sitio Web. El logo en ese sitio se solicita y se carga, sin datos adicionales se las arregló para lograr esto.

Dos-vía de carga 

Dos formas de carga es el proceso de carga de datos al pasar a lo largo de los argumentos de que el procesosolicitado se encargará. Por ejemplo, una llamada a un servidor de publicidad pasaría a lo largo de la cuenta deello y posiblemente de algún otro tipo de información para determinar qué anuncios se debe mostrar.

Cuando se trabaja con aplicaciones de PHP o scripts dinámicos de otros es muy probable que pase a lo largo delos parámetros de trabajar. Aún más importante es el hecho de que usted puede obtener diferentes tipos dedatos de vuelta.Por ejemplo, usted puede esperar que un objeto, obtenga un código de error. El propósito de esta sección esdesarrollar una forma en la que se pueda manejar este caso. 

var phpFile:String = “sample.php”;var urlRequest:URLRequest = new URLRequest(phpFile);var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, serverHandler);loader.load(urlRequest);function serverHandler(e:Event):void

{var loader:URLLoader = URLLoader(e.target);var vars:URLVariables = new URLVariables(loader.data);if(vars.response == „ERROR‟){trace(“An Error occurred, response not loaded”);}else{trace(“Server Response: “ + vars.response);

Page 106: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 106/467

106

}}

Este controlador es muy similar a los ejemplos anteriores, con la excepción de que la variable de respuesta seha dado una definición sin tipo. Esto permite que varios tipos de datos que se almacenen en ella, como unacadena para un error y un objeto para la respuesta esperada.

NOTA Tenga cuidado al establecer una variable como untyped (sin tipo). Esto elimina la comprobación deerrores y hace que sea difícil saber lo que contiene una variable.

Cargar XML en Flash 

Es más que probable que usted se encontrará trabajando con gran cantidad de datos. Lo ideal sería que estainformación será devuelto en formato XML. XML es un estándar de la industria, después de empezar a trabajarcon él rápidamente entender por qué. Se basa en las etiquetas para definir los objetos de datos, similar a unamatriz multidimensional. El promotor se le permite definir etiquetas personalizadas, con tanta facilidad laconstrucción de un estilo de XML es muy útil sin dolor.

Usar E4X con XML

Una importante actualización a ActionScript 3 es la capacidad para analizar XML utilizando E4X. Esto nospermite obtener rápidamente los datos ocultos en lo profundo de un archivo XML con el código y muchomenos de lo necesario en las versiones anteriores.

Por ejemplo, usted puede comenzar con un archivo XML como este:

<store><item><name>Book</name>

<section>Learning</section><price>19.95</price><inStock>yes</inStock></item><item><name>Football</name><section>Sports</section><price>4.99</price><inStock>no</inStock></item><item><name>Bike</name>

<section>Sports</section><price>89.95</price><inStock>yes</inStock></item><item><name>Basketball</name><section>Sports</section><price>8.95</price><inStock>no</inStock></item>

Page 107: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 107/467

107

<item><name>Magazine</name><section>Periodicals</section><price>5.95</price><inStock>yes</inStock></item></store>

Ahora quieres cargar este archivo y mostrar sólo los artículos que están en stock. Uso E4X Esta será una tareamuy sencilla.

Usted puede comenzar con la secuencia de carga estándar que se ha visto en ejemplos anteriores. El caminohacia el archivo XML que queremos cargar en este ejemplo es “storeItems.xml”.

var xmlFile:String = “storeItems.xml”;loadXML();function loadXML():void{var urlRequest:URLRequest = new URLRequest(xmlFile);

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, xmlHandler);urlLoader.load(urlRequest);}

Después de que el archivo XML se cargue completamente la función de xmlHandler se llama. Esta función estáen el archivo XML que se lee y el punto donde se utiliza E4X.

Esta función es un poco más avanzada que la que hemos visto en los ejemplos de código anteriores, de modoque la función se divide en piezas más manejables.

function xmlHandler(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);// Loop through all items, ONLY show items in stockfor each(var item in xml..item){if(String(item..inStock) == „yes‟){trace(“Product: “ + item.name);trace(“\tSection: “ + item.section);trace(“\tPrice: “ + item.price);}

}} 

El primer paso en esta función es tomar los datos cargados y pasar a la clase XML, que asegura que usted va atrabajar con objetos XML válido en las siguientes secciones.

var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

Page 108: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 108/467

108

Un for..each se utiliza en cada bucle para caminar por el archivo XML y buscar elementos que están en stock.Este bucle también tiene un operador especial .. "Descendiente de acceso", que está buscando para cadaelemento en el objeto XML. El "descendiente de acceso" se introdujo en ActionScript 3 para acceder a losdescendientes o hijos y los hijos en los niños. Esto se hace utilizando dos operadores en la sucesión de puntos(..) seguido por el nombre del elemento descendiente.

for each(var item in xml..item ) { ... }

Este es un avance enorme de ActionScript 2, donde se establecería bucles anidados y atravesar todo eldocumento XML. Sin embargo, una cosa para notar es que el descendiente de acceso es sensible a mayúsculaspor lo que es mejor utilizar una convención de nomenclatura coherente.

<items><item><objectName>Example</objectName></item></items>

La convención de nombres más comunes para los nombres de nodo cuando se trabaja con XML es camel-caso.Camel-case está comenzando la primera palabra con un carácter en minúscula y luego la primera letra de cadapalabra en mayúscula.

firstSecondThird

Ahora que el general for..each para cada bucle define el siguiente paso añadir en la verificación real de losartículos instock. Esto se logra mediante la creación de una sentencia condicional para ir dentro del bucle.

var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);for each(var item in xml..item)

{if(String(item..inStock) == „yes‟){trace(“Product: “ + item.name);trace(“\tSection: “ + item.section);trace(“\tPrice: “ + item.price);}}

Esta parte se ve en cada elemento en el circuito, y utilizando el descendiente de acceso, busca la variable deinstock. La variable instock bien se establecerá en sí o no, si la variable se establece en sí, entoncessimplemente imprimir los datos del artículo. En un ejemplo más avanzado de estos datos lo más probable es

que se pasa a una función de visualización o, posiblemente, un componente DataGrid.

Eso es todo lo que hay que buscar rápidamente a través de un archivo XML y la comprobación de los valoresespecíficos del nodo.Puede ampliar este ejemplo para buscar múltiples tipos y utilizar los resultados para construir una mini-tiendaque sólo debe mostrar los elementos que están en stock.

Page 109: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 109/467

109

NOTA Al trabajar con XML es una buena idea mantener un formato coherente. Esto le permite trabajar convarios archivos sin tener que reconstruir la lógica del programa en general. También es una buena idea paraque pueda trabajar con otros desarrolladores en el mismo proyecto.

Trabajar con XML en PHP 

En la siguiente sección usted aprenderá cómo cargar y administrar los datos XML utilizando PHP. Esto lepermitirá desarrollar aplicaciones de forma más dinámica.

Carga de XML 

El proceso de cargar el código XML en PHP se puede lograr en un par de maneras diferentes. Usted puedetomar rápidamente un vistazo a usar PHP para cargar XML porque este proceso es bastante sencillo. Acontinuación, buscar la forma de crear dinámicamente y enviar datos XML. Este proceso se puede lograr en unpar de maneras diferentes.

Old-fashioned Dom XML

Dom XML es la vieja manera de trabajar con XML. En cierto modo es muy similar a trabajar con XML enversiones anteriores de ActionScript. Usted necesita utilizar una serie de bucles para encontrar los nodos, yesto simplemente requiere un código mucho más de lo necesario.

<?php$doc = domxml_open_file(„sample.xml‟);$node = $doc->document_element()->first_child();while($node){if(($node->node_name() == „sampleNode‟) &&($node->node_type() == XML_ELEMENT_NODE))

{$content = $node->first_child();print $content->node_value();break;}$node = $node->next_sibling();}?>

NOTA El código domxml requiere PHP 4.3, o bien debe tener PECL instalado por separado. Usted puedeencontrar más información en el sitio Web de PHP (http://us.php.net/manual/en/ref.domxml.php).

El anterior ejemplo, se carga en el archivo XML y el uso de Dom XML analiza a través de ella para encontrar elsampleNode. Trabajo en el bucle, que busca el nodo seleccionado, y cuando ese nodo se encuentra imprimir elcontenido en la pantalla. No es un ejemplo muy elaborado, pero muestra el proceso general que se encuentraen un ejemplo más avanzado.

Page 110: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 110/467

110

Simple XML

Trabajar con XML sencillo rápidamente muestra lo fácil que se puede cargar el código XML. Este bloque decódigo es lograr el mismo resultado que antes, pero con muchas menos líneas de código. Dos líneas de códigoen lugar de 13 es una mejora considerable.

<?php$xml = simplexml_load_file(„sample.xml‟);print $xml->sampleNode;?>

Envío de XML 

El proceso de envío de XML de PHP en Flash se explica en la sección siguiente. En general, el código para estoes muy similar a la carga de XML.

Imprimir dinamicamente XML

 A menudo tendrá que trabajar con XML dinámico. Normalmente, cuando se trata de una base de datos se convierte en una práctica

mucho más común. El proceso de creación de XML dinámico es muy simple: Se establece el tipo correcto de encabezado dearchivo e imprimir el XML primas. El siguiente bloque de código es un ejemplo de cómo alcanzar esto.

<?phpheader(“content-type: text/xml”);$xmlData = “”;$xmlData .= “<store>\n”;$xmlData .= “ <item>\n”;$xmlData .= “ <name>Book</name>\n”;$xmlData .= “ <section>Learning</section>\n”;$xmlData .= “ <price>19.95</price>\n”;$xmlData .= “ <inStock>yes</inStock>\n”;

$xmlData .= “ </item>\n”;$xmlData .= “ <item>\n”;$xmlData .= “ <name>Football</name>\n”;$xmlData .= “ <section>Sports</section>\n”;$xmlData .= “ <price>4.99</price>\n”;$xmlData .= “ <inStock>no</inStock>\n”;$xmlData .= “ </item>\n”;$xmlData .= “ <item>\n”;$xmlData .= “ <name>Bike</name>\n”;$xmlData .= “ <section>Sports</section>\n”;$xmlData .= “ <price>89.95</price>\n”;$xmlData .= “ <inStock>yes</inStock>\n”;$xmlData .= “ </item>\n”;// add more „item‟s here$xmlData .= “</store>\n”;print “response=” . $xmlData;?>

La línea de la magia en este ejemplo sería la función de impresión que envía el XML en el búfer de salida y,finalmente, pasa a lo largo de Flash. Como puede ver, este es un ejemplo bastante simple.

Page 111: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 111/467

111

Dinamica de XML desde la base de datos

Supongamos que quiere crear el XML de una llamada de base de datos MySQL. Una base de datos es unenfoque más común al desarrollar una aplicación, porque los datos es a menudo dinámico. Imprime estática enel caso no sería muy fácil de mantener. Aquí está el código, que se desglosan y se ha ido a través de.

<?phpheader(“content-type: text/xml”);$query = “SELECT * FROM store WHERE inStock=yes”;$link = mysql_connect(“localhost”, “user”, “pass”);$result = mysql_query($query, $link);$xmlData = “”;$xmlData .= “<store>\n”;while($row = mysql_fetch_array($result)){$xmlData .= “ <item> \n”;$xmlData .= “ <name>” . $row[„name‟] . “</name> \n”;$xmlData .= “ <section>” . $row[„section‟] . “</section> \n”;$xmlData .= “ <price>” . $row[„price‟] . “</price> \n”;

$xmlData .= “ <inStock>” . $row[„inStock‟] . “</inStock> \n”;$xmlData .= “ </item> \n”;}$xmlData .= “</store>\n”;print “response=” . $xmlData;?>

Usted miró a cargar el contenido de una base de datos en el capítulo 2, y en su mayor parte es el mismoproceso. En realidad, la única diferencia se encuentra dentro del bucle while. Este es el punto en el queconstruir la estructura de árbol XML y, finalmente, la impresión de la respuesta de vuelta a Flash.

Ahí lo tienen formas múltiples para enviar y cargar datos XML en PHP y Flash. Usted puede tomar estos

ejemplos sencillos y construir aplicaciones completas. De hecho, usted será sobre la base de este ejemplo en elcapítulo 11 para el ejercicio de la Mini cesta de compras.

Cargar imagenes usando PHP 

ActionScript puede cargar mucho más que simple texto y archivos XML. Un concepto más avanzado es cargarlas imágenes, pero usted tendrá que un paso más y las imágenes de carga determinada por un archivo PHP.

Cargue el archivo de arranque que se puede encontrar en los libros de sitio Web. Este archivo tiene unUILoader y un TileList vertical para mantener las imágenes, como se muestra en la Figura 4.1. El contenido deeste archivo no son particularmente importantes para este ejemplo, pero usted puede experimentar con otroscomponentes para construir aplicaciones más avanzadas.

Page 112: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 112/467

112

FIGURE 4.1

Mostrando la solicitud completa con imágenes cargadas 

Configurar cargador de la imagen 

El primer paso para construir el cargador de la imagen es la construcción de la parte de ActionScript de lasolicitud, que se muestra aquí. El siguiente código asume que el thumbSP ScrollPane ya se encuentra en laetapa.

var xmlFile:String = “http://localhost/ch03/loadImages.php”;var imageDir:String = “images/”;function callServer(e:MouseEvent):void{var urlRequest:URLRequest = new URLRequest(xmlFile);

var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, xmlLoaded);loader.load(urlRequest);}function xmlLoaded(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);var thumbContainer:TileList = thumbSP;thumbContainer.removeAll();

Page 113: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 113/467

113

thumbContainer.sourceFunction = sourceHandler;thumbContainer.addEventListener(Event.CHANGE, loadMainImage);for each(var item:XML in xml..product){var smImage:String = item.smImage.toString();var lgImage:String = item.lgImage.toString();thumbContainer.addItem({source:{sm:smImage, lg:lgImage}});

}}function sourceHandler(item:Object):String{return imageDir + item.source.sm;}function loadMainImage(e:Event):void{imageUI.source = imageDir + e.target.selectedItem.source.lg;}callBtn.addEventListener(MouseEvent.CLICK, callServer);

Este ejemplo tiene un código exclusivamente para trabajar con los componentes, que no es necesario paraentender en este punto. Sin embargo, la función de cargador de xmlLoaded es el foco. El primero, xmlLoaded,se utiliza para caminar por el archivo XML cargado y las imágenes en miniatura en el componente TileList.

Notará que el XML uso E4X para encontrar los nodos de la imagen. Este ejemplo asume que los nodos a serllamado producto, que es donde la imagen de las fuentes pequeñas y grandes se pueden encontrar.

Se utiliza el método addItem para pasar en un objeto que contiene la imagen de las fuentes pequeñas ygrandes. Esto ahorra tiempo al escribir la lógica de hacer clic en una miniatura. Los incendios TileList fuera unevento de cambio cuando se hace clic en un tema. Esto se utiliza para conectar el controlador, que carga laimagen grande.

thumbContainer.addEventListener(Event.CHANGE, loadMainImage);function loadMainImage(e:Event):void{imageUI.source = imageDir + e.target.selectedItem.source.lg;}

El controlador de sourceFunction se utiliza para agregar en la ruta de acceso a las imágenes. Esta función sellama cada vez que un elemento se agrega a la TileList.

thumbContainer.sourceFunction = sourceHandler;function sourceHandler(item:Object):String{return imageDir + item.source.sm;}

Page 114: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 114/467

114

Resumen 

En este capítulo usted aprendió cómo enviar y cargar datos usando PHP y Flash que luego se amplió a estemediante el envío y carga de datos XML, que le ha permitido desarrollar una aplicación más dinámica .

Ahora debe tener un buen entendimiento de cómo trabajar con datos en Flash y PHP. También aprendió

algunas de las razones diferentes por las cuales usted debe usar una forma específica de datos en la aplicación.

Page 115: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 115/467

115

Capitulo 5

Interactuar con el Usuario 

La aplicación muchas veces tienen algún nivel de interacción con el usuario final para enriquecer la experienciade aplicación general. Esto es más común de un contacto o algún otro tipo de formulario, que permite que eldueño del sitio, para permitir la comunicación sin dar una dirección de correo electrónico o que requieren queel usuario tenga un cliente de correo electrónico. Otra forma que usted encontraría en una aplicación es unaforma de acceso, que le permite limitar el acceso a determinados aspectos o partes de su aplicación.

En este capítulo se explicará el proceso de construcción de formulario en Flash y cómo hacerlas interactivasusando PHP. También obtendrá una visión general de envío de datos mediante Flash, sin embargo, terecomiendo leer el capítulo 4 para entender completamente el proceso de envío y carga de datos.

Desarrollo de un Formulario usando Flash 

Los formularios generalmente consisten en cuadros de entrada, botones, cuadros de lista y botones de radio,como se muestra en la Figura 5.1. Cada uno de estos elementos está disponible como un componente de Flash.Puedes acceder al panel de componentes eligiendo Window Componentes. Usando uno de estoscomponentes precompilados es tan simple como hacer clic y arrastrándolo a una capa en el documento deFlash.

FIGURA 5.1Ejemplo de formulario construido usando los componentes por defecto que vienen con Flash

NOTA Si el componente no aparece en el escenario, garantizar la capa no muestra un icono de llave en la listade capas.

Si ejecutó esta película Flash, se verían algunos componentes frescos en el escenario, pero no seríanfuncionales. El proceso de su utilización es muy sencilla. Se asigna un nombre de instancia del componente y elnombre de referencia en el código ActionScript.

Page 116: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 116/467

116

Por ejemplo, si usted tenía un TextInput y quería que cebado, debe agregar el siguiente:

textInstance.text = “please enter your name”;

Tan útil como el código es, también debe capturar la entrada del usuario. Esto se logra mediante la adición deun componente de botón Enviar al escenario.

userName.text = “please enter your name”;submitBtn.addEventListener(MouseEvent.CLICK, submitHandler);function submitHandler(e:MouseEvent):void {trace(“User input: “ + userName.text);}

Puede ampliar este ejemplo para añadir la comprobación de errores y hacer cumplir los campos obligatorios:

function submitHandler(e:MouseEvent):void{if(userName.text.length == 0)

{trace(“Please enter a name!”);}}

Muy a menudo, usted querrá obtener información de un visor de su sitio. Esto se logra mediante la adición deun formulario de contacto, que generalmente consta de un formulario de Flash que las conversaciones en unarchivo PHP.

Creación de un formulario de contacto 

Para esta sección, usted va a utilizar el archivo de inicio que se incluye en el sitio Web del libro. Este archivotiene todos los componentes situados en el MovieClip contactMC ya en el escenario y se le ha asignado losnombres de instancia que va a utilizar en el código ActionScript.

Aquí está el ActionScript completo del formulario de contacto:

var phpFile:String = “http://localhost/ch04/contact.php”;var form:MovieClip = contactMC;function sendMessage(e:MouseEvent):void{// first check the fieldsvar nameStr:String = form.nameTxt.text;var subjectStr:String = form.subjectTxt.text;var messageStr:String = form.msgTxt.text;var allFields:Boolean = true;// check nameif(nameStr.length < 2){allFields = false;}// check subject

Page 117: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 117/467

117

if(subjectStr.length < 2){allFields = false;}// check messageif(messageStr.length < 2){

allFields = false;}if(!allFields){trace(“All required fields not filled in!”);form.statusTxt.htmlText = “<font color=\”#FF0000\”>”+“All required fields not filled in!</font>”;return;}var variables:URLVariables = new URLVariables();variables.name = nameStr;variables.subject = subjectStr;

variables.msg = messageStr;var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, sendHandler);loader.load(urlRequest); }function sendHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);if(variables.resultCode == “SENT”)

{// message sentform.statusTxt.htmlText = “<font color=\”#009933\”>Email”+“ sent, thank you.</font>”;}else if(variables.resultCode == “ERROR”){// message not sentform.statusTxt.htmlText = “<font color=\”#FF0000\”>Email”+“ not sent, please try again.</font>”;}else

{// unknown responseform.statusTxt.htmlText = “<font color=\”#FF0000\”>Unknown”+ “ ERROR</font>”;}}form.sendBtn.addEventListener(MouseEvent.CLICK, sendMessage);

Page 118: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 118/467

118

El enfoque de esta sección estará en las funciones sendMessage y sendHandler. La función sendMessage asignalas variables que se pasan a la PHP, crea instancias de las clases necesarias, y establece el caso de oyentes(event listeners).

function sendMessage(e:MouseEvent):void{...

var variables:URLVariables = new URLVariables();variables.name = nameStr;variables.subject = subjectStr;variables.msg = messageStr;var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, sendHandler);loader.load(urlRequest); }

CROSS--REF Parte del código en la sección anterior se explica en mayor detalle en el capítulo 4.

LLamar el PHP 

La llamada a la PHP se divide en tres clases: la clase URLVariables, URLRequest y URLLoader, los trabajos de loscuales son la creación de un contenedor para los datos del formulario de contacto, hacer un objeto de solicitudy, finalmente, llamar al archivo PHP.

Las clase URLVariables tiendas de los datos de contacto del formulario en un formato de objeto nombre.valor,que luego se adjunta a la propiedad de los datos de la URLRequest. 

El URLRequest establece un método de petición mediante la propiedad POST estático de la claseURLRequestMethod, que indica a Flash si desea enviar los datos en formato GET o POST.

GET envía los datos a cabo adjunta al final de la URL:

file.php?var1=value1&var2=value2

POST envía los datos en la solicitud, que en la mayoría de los casos es más seguro.

La última clase utilizado en este formulario de contacto es URLLoader. Esta clase añade el detector de eventosque se llama cuando el PHP se ha cargado completamente y cualquier respuesta que se espera ha sidodevuelto. Esta clase también hace una llamada a la método load(), pasando por una referencia a laURLRequest. En última instancia, hace la llamada al PHP y pasa a lo largo de las variables de formulario decontacto que ha asignado.Eso es todo lo que se necesita para configurar y realizar la llamada al PHP.

Page 119: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 119/467

119

Controladores de evento en formulario de contacto 

El siguiente paso en el proceso es establecer el controlador de eventos que se llama cuando el PHP envía unarespuesta.

function sendHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data); if(variables.resultCode == “SENT”){form.statusTxt.htmlText = “<font color=\”#009933\”>Email”+“ sent, thank you.</font>”;}

else if(variables.resultCode == “ERROR”){form.statusTxt.htmlText = “<font color=\”#FF0000\”>Email”+“ not sent, please try again.</font>”;

}else{form.statusTxt.htmlText = “<font color=\”#FF0000\”>Unknown”+” ERROR</font>”;}}

Usted notará rápidamente que la clase URLLoader se utiliza de nuevo, pero esta vez para obtener la respuestade PHP. Este se coloca en la clase URLVariables para sacar el resultado de la respuesta global. El PHP estáconfigurada para simplemente responder con un mensaje SENT (enviado) o respuesta de error (ERRORresponse), sin embargo, también usar una instrucción más para atrapar cualquier respuestas desconocidas,

algunos de los cuales podrían incluir errores de red o de simples errores de análisis en el código PHP.

Un componente Label se encuentra en el formulario de contacto MovieClip, que es donde la respuesta se envíaal usuario a ver. En una escritura más avanzado que volvería más probable es que una serie de resultados ydejar el texto de respuesta en el Flash, lo que permitiría la capacidad de adaptar las respuestas a determinadosidiomas, también llamada localización.

Con la creación de ActionScript, puede pasar al código de PHP:

<?phperror_reporting(0); // disable all error reporting

set_time_limit(120); // let script run for no more than 2 minutes

$emailTo = “[email protected]”;

$name = $_POST[„name‟];$from = $_POST[„fromEmail‟];$subject = $_POST[„subject‟];$msg = $_POST[„msg‟]; 

if(!empty($_POST))

Page 120: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 120/467

120

{$headers = “”;$headers .= “”;$date = date(“F j, Y”, time()); // Grab todays date$email_info .= “Below is the visitors contact info andmessage.\n\n”;$email_info .= “Visitor‟s Info:\n”;

$email_info .= “-----------------------------------------\n”;$email_info .= “Name: “ . $from . “\n”;$email_info .= “Date Sent: “ . $date . “\n\n”;$email_info .= “Message\n”;$email_info .= “-----------------------------------------\n”;$email_info .= “” . $msg . “\n”;// Mail headers, do not alter$mailheaders = “From: “ . $from . “ <” . $name . “> \n”;$mailheaders .= “Reply-To: “ . $from . “\n\n”;

if( mail($emailTo, $subject, $email_info, $mailheaders)){

print “resultCode=SENT”;}else{print “resultCode=ERROR”;}}?>

Correo en PHP 

La mayor parte de este PHP es similar a lo que han estado trabajando en las secciones anteriores, con algunas

excepciones, por supuesto. La excepción más notable es la introducción de la función mail(), que tiene unaserie de argumentos:

mail($to, $subject, $emailBodyInfo, $emailHeaders);

Los dos primeros son el correo electrónico para enviar y de asunto del correo electrónico, que es bastanteestándar. Los dos últimos son los más importantes: $emailBodyInfo contiene el contenido de su e-mail, y$emailHeaders define el archivo como un e-mail. Esta variable contiene la información de enrutamiento, larespuesta a, y todos los otros variablese-mail specifican que un servidor de correo busca.

Globales

Asigna variables para contener los datos en el pasado de Flash, que se realiza mediante el global $_POST datosde matriz. Globales en PHP manejar la información general de los terrenos y los valores que cualquiersecuencia de comandos tiene acceso. Usted va más razones por las globales puede ser el enfoque equivocadoen el capítulo de seguridad.

Volviendo a tu programa de correo electrónico, el uso de la variable de los datos globales $_POST para accedera las variables pasadas desde Flash.

Page 121: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 121/467

121

$emailTo = “[email protected]”;$name = $_POST[„name‟];$from = $_POST[„fromEmail‟];$subject = $_POST[„subject‟];$msg = $_POST[„msg‟];

Eso es todo el código que se necesita para desarrollar un formulario de contacto completamente funcional

usando Flash y PHP.

Usted puede ampliar en este ejemplo y dar al formulario de contacto mucha más funcionalidad. Algunas cosaspara pensar en añadir sería un proceso de validación más robusta, más campos de formulario, y las respuestas,posiblemente, más informativo para el usuario.

Mantener la seguridad en mente

Un elemento muy importante tener en cuenta acerca de este ejemplo formulario de contacto es el código nohonra los procedimientos de seguridad y de hecho permite al usuario pasar los datos a PHP. Un ejemplo mássólido y directo exigiría un nivel mucho más fuerte de la seguridad, sin embargo, para fines de demostración

general de seguridad ha quedado fuera.

Módulo de Login en Flash 

Más a menudo que no se quiere tener una parte segura de un sitio Web. Un ejemplo muy popular de esto seríauna sección de repaso para un fotógrafo, cuando un cliente puede ingresar y ver las fotos.

La porción del formulario de esta aplicación es casi idéntica al formulario de contacto. Se necesita un nombrecuadro de usuario y de Contraseña y un botón Enviar a fuego fuera de la rutina de controlador de inicio desesión.

Aquí hay un diseño de muestra que se puede encontrar en el archivo de partida, o usted puede crear a partirde cero.

Los nombres de instancia para este ejemplo se muestran en la Tabla 5.1.

TABLA 5.1

Componentes de Formulario para el modulo de LoginusernameTxt Nombre de usuario para iniciar sesiónpasswordTxt Password to be attemptedresetBtn Boton de reinicio, limpiar los camposloginBtn Boton de inicio de sesion, encender el loginHandler

Ahora que tiene el formulario visual completo, puede pasar al ActionScript, lo que hace que el formulario seafuncional.

Código esqueleto 

En los ejemplos anteriores, usted miró todo el código en una sección larga, pero a veces puede serabrumadora. En cuanto a la estructura de código ofrece una manera rápida de evaluar las variables deprograma, las funciones, y otros elementos.

Page 122: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 122/467

122

Aquí está el esqueleto de código para el módulo de Login (inicio de sesión):

stop(); // stop the playhead

var phpFile:String = “http://localhost/ch04/login.php”;var form:MovieClip = loginMC;

var loggedIn:Boolean = false;

function loginHandler(e:MouseEvent):void {...}function resetHandler(e:MouseEvent):void {...}function clearIndicators():void {...}function sendHandler(e:Event):void {...}

form.usernameTxt.tabIndex = 1;form.passwordTxt.tabIndex = 2;form.resetBtn.tabIndex = 3;form.loginBtn.tabIndex = 4;

form.passwordTxt.displayAsPassword = true;form.resetBtn.addEventListener(MouseEvent.CLICK, resetHandler);form.loginBtn.addEventListener(MouseEvent.CLICK, loginHandler);

Controladores de eventos en Login 

Similar al ejemplo de formulario de contacto, es necesario asignar los controladores de eventos que manejan lainformación de acceso, la compensación, y los cambios de interfaz de usuario para el módulo de inicio desesión (login).

El primer controlador de eventos es loginHandler, que es responsable de llamar al servidor de datos ygarantizar la validez se pasa al servidor. Su última tarea es asignar el controlador para el evento resultado.

function loginHandler(e:MouseEvent):void{clearIndicators();

var user:String = form.usernameTxt.text;var pass:String = form.passwordTxt.text;var allFields:Boolean = true;

if(user.length < 2){allFields = false;form.userRequiredIndicator.alpha = 1.0;}

if(pass.length < 2){allFields = false;form.passRequiredIndicator.alpha = 1.0;}

Page 123: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 123/467

123

if(!allFields){form.statusTxt.htmlText= “<font color=\”#FF0000\”>Username”+ “ and Password required!</font>”;return;} 

var variables:URLVariables = new URLVariables();variables.user = user;variables.pass = pass;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;

var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, sendHandler);loader.load(urlRequest);}

Este controlador comienza por asignar el nombre de usuario y contraseña para campos variables internas.Estas nuevas variables, luego se comprueba la longitud válido, que si se establece correctamente la variableallFields.Esta variable allFields se utiliza para determinar si el mensaje de error se debe mostrar y la función se debeabandonar el mismo. Si allFields no se establece que puede continuar la creación de la llamada al servidor. Estaparte es idéntico al ejemplo de formulario de contacto. De hecho, pronto se dará cuenta de que ActionScripttiene un formato muy similar para todos los tipos de carga y el envío de datos.

El siguiente controlador se centrará en clearHandler, es la que se asigna al resetBtn.Su trabajo consiste en borrar todos los campos del formulario y hacer una llamada a la función clearIndicators,que se verá en un momento.

function resetHandler(e:MouseEvent):void{form.usernameTxt.text = “”;form.passwordTxt.text = “”;form.statusTxt.htmlText = “”;clearIndicators();}

La función clearIndicators cambia la opacidad alfa de los iconos que se pueden encontrar a la derecha de loscomponentes de TextInput nombre de usuario y contraseña en el archivo de arranque. Si está creando estemódulo desde el principio lo más probable es omitir esta función y la llamada a ella en el resetHandler.

function clearIndicators():void{form.userRequiredIndicator.alpha = 0;form.passRequiredIndicator.alpha = 0;}

El último controlador necesario para este módulo es el sendHandler, que se llama cuando el código PHP envíauna respuesta.

Page 124: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 124/467

124

function sendHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);if(variables.resultCode == “LOGGED_IN”){loggedIn = true;

gotoAndStop(2);}else if(variables.resultCode == “NOT_LOGGED_IN”){form.statusTxt.htmlText = “<font color=\”#FF0000\”>”+“Username/Password not correct.</font>”;}}

La respuesta que pasa de PHP es evaluada para determinar si el usuario es válido y si o no a la página seguradebe mostrarse.

if(variables.resultCode == “LOGGED_IN”){loggedIn = true; // user logged in,gotoAndStop(2); // sample has secure page on frame 2}else if(variables.resultCode == “NOT_LOGGED_IN”){form.statusTxt.htmlText = “<font color=\”#FF0000\”>”+“Username/Password not correct.</font>”;}

Suponiendo que el usuario está conectado, usted establece una variable de loggedIn y pasar al segundo

cuadro, que en el ejemplo de arriba es una sección secreta, como se muestra en la Figura 5.2. Su ejemplo másprobable es que tenga una razón más importante para estar conectado, pero tal vez no.

Page 125: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 125/467

125

FIGURA 5.2Ejemplo de página segura que sólo es visible si el usuario se registra

Integración del Servidor para el modulo de login 

El código PHP para el módulo de conexión es la siguiente parte en el proceso.

<?phperror_reporting(0); // deshabilitar todos los reports de error$user = $_POST[„user‟];

$pass = $_POST[„pass‟];// ejemplo de respuesta de contraseña, normalmente// se envia desde la base de datos$storedPassword = “83e4a96aed96436c621b9809e258b309”;if(!empty($_POST)){if($user == “guest” && md5($pass) == $storedPassword){print “resultCode=LOGGED_IN”;}else{

print “resultCode=NOT_LOGGED_IN”;}}?>

Su enfoque en esta sección está en los datos de $_POST y comprobar condicional para determinar si lacontraseña es correcta o no. Este resultado se envía de regreso a Flash en el que se utiliza para establecerregistrado en el estado y todo lo que un usuario válido a ver.

Page 126: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 126/467

126

Un ejemplo más sólido tendría el PHP se evaluará en una base de datos en lugar de una cuerda estática. Lavariable $storedPassword tiene una cadena md5() de hash. MD5 es un algoritmo de hash que está disponibleen muchos lenguajes de programación, uno de los cuales es PHP y es más frecuente al almacenar contraseñasen una base de datos. Usted va a mirar MD5 un poco más en profundidad en el capítulo de seguridad, pero porahora lo más importante a destacar es que la cadena de hash es su contraseña.

Ahora dispone de un módulo de inicio de sesión completo utilizando Flash y PHP. Desde aquí se puede ampliar

este ejemplo para incluir la integración de bases de datos y más importante, un nivel adicional de seguridad.

Resumen 

En este capítulo usted aprendió cómo construir formulario en Flash y cómo hacerlas interactivas usando PHP.Como un proyecto más avanzado que creó entonces un componente de inicio de sesión utilizando lainformación anterior, aprendió acerca del desarrollo de forma global.

Page 127: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 127/467

127

Capitulo 6

Trabajar con CookiesLas cookies son muy comunes en la navegación Web. De hecho, usted sería muy difícil de navegar la Interneten la forma en que estamos acostumbrados a las cookies, si dejó de funcionar. Este capítulo es cómo trabajarcon las cookies de Flash y PHP. Cubre la carga y el envío de cookies y se investiga cómo se elimina una cookie.

La segunda mitad del capítulo es acerca de compartir los objetos, que son las cookies de Flash. Actúan casi lomismo que las cookies del navegador estándar con algunas diferencias, que se investigue.

Una vez que haya completado este capítulo, entenderemos completamente la forma de trabajar con lascookies y por qué son importantes para una aplicación exitosa y la experiencia del usuario.

Cargar Cookies 

Una cookie es un archivo pequeño colocado en el ordenador del usuario por un servidor Web. Este archivo seenvía de nuevo al servidor sin cambios cada vez que el usuario accede al servidor. Mayoría de las veces unacookie contendrá el nombre de usuario para un sitio Web. Una cookie también puede ser utilizado paraguardar la configuración del usuario y de los demás pequeños de la información.

El proceso de carga de las cookies se explica en varias piezas para comprender mejor cómo funcionan. Ustednotará que el proceso de carga "cookies" es muy similar a la carga de otros tipos de datos.

Uso de cookies con PHP 

El uso de cookies con PHP es necesario para desarrollar una aplicación web usable. Usted encontrará muchasoportunidades para aplicar las cookies de sesión de usuario a los estilos y muchos otros usos. 

Al empezar a trabajar con datos dinámicos más a menudo se desea guardar partes de la máquina del usuario.Hacer esto permite que el programa de registro de un usuario de forma automática o modificar un estilobasado en la configuración del usuario. 

Las cookies se guardan por dominio y el directorio. Esto significa que cualquier página dentro del mismodominio o ruta de acceso puede leer que "cookie". Esto es muy útil cuando se construyen múltiples ejemplos ytambién significa otro sitio Web no puede leer las cookies de un sitio diferente.

NOTA La solución común para el intercambio de cookies a través de un dominio es crear un subdominio.Una cookie es sólo específico para el dominio global y simplemente hace caso omiso de caminos, parámetros, ysubdominios.

Cargar una cookie

Ahora que tiene una comprensión de lo que es una "cookie", echar un vistazo a cómo cargar y trabajar con unoen PHP: El código siguiente intenta cargar una "cookie" y mostrar la respuesta como se muestra en la Figura 6.1

Page 128: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 128/467

128

<?php$username = “Jimmy”;if (!isset($_COOKIE[„user‟])) {setcookie(“user”, $username);print “Welcome “ . $username;}else

{Print “Welcome back, “ . $_COOKIE[„user‟];}?>

Los controles de código anterior de la existencia de la cookie "usuario" en la matriz mundial de las cookies. Si seencuentra la cookie, el usuario es recibido de nuevo. Si la cookie no se encuentra, la cookie y el usuario esrecibido por primera vez.

La variable $_COOKIE es una matriz multidimensional que puede contener muchas cookies diferentes. Estavariable se llena automáticamente por PHP y no requiere que usted agregue a la misma.

FIGURA 6.1La declaración de impresión como se muestra en la ventana del navegador 

Page 129: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 129/467

129

Guardar un cookie

Establecer o guardar una cookie en PHP es muy simple: usted hace una llamada a la función setcookie. Elprimer argumento es el nombre de la cookie, el segundo argumento es el valor de la cookie. Por ejemplo,supongamos que desea establecer una cookie time_logged_in.

setcookie(“time_logged_in”, time());

Cada vez que desee guardar una cookie puede llamar a la función setcookie. Si la cookie existe, se actualiza, y sino existe, se crea.

NOTA La capacidad para guardar una cookie depende de si un usuario permite o no cookies.

La función setcookie acepta más de dos argumentos, pero en realidad sólo se requiere que el primer argumento, que es el name (nombre).

Caducidad de un Cookie

Por defecto, una cookie expira cuando termina el período de sesiones o el usuario cierra el navegador. Laforma en que la sesión termina, es por una cantidad de tiempo predefinido en el servidor. Por defecto, estacantidad es 0 segundos porque la sesión se termina cuando el navegador se cierra. Normalmente, eldesarrollador no necesita saber cuánto tiempo dura una sesión. Usted, por supuesto, estar más interesados enexiste o no la cookie.

En ocasiones, usted querrá asegurarse de que una cookie se borra después de una cierta cantidad de tiempo.Este es el caso cuando se trabaja con datos de seguridad o un sistema de gestión de contenidos. Supongamosque usted quiere que la cookie expire poco después de creada la cookie.

setcookie(“username”, “adminDave”, (time() + 7200));

Esto le dice el navegador del usuario para eliminar la cookie de 2 horas después de crear la cookie. La fecha decaducidad de una cookie es en segundos, así que para este ejemplo, 7200 es de 2 horas. Otra forma de verlo es (60 * 60 * 2).

¿Alguna vez has abierto tu navegador, visita un sitio, y se introdujeron al contenido personalizado que se habíasolicitado en una sesión anterior? Estos datos se determinó mediante una cookie guardado en su equipo queno se eliminan cuando finaliza el período de sesiones.

Mira un ejemplo de una cookie que no expira durante tres meses.

<?php

$secondsInDay = 86400;$daysBeforeExpiration = 90;setcookie(“userStylePref”, “blueTheme”, (time() + ($secondsInDay* $daysBeforeExpiration));?>

Se comienza con el número de segundos en un día—86400. Luego de configurar la variable$daysBeforeExpiration que es la celebración de días que desea que la "cookie" dure.

Page 130: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 130/467

130

El último paso es establecer la cookie. Multiplique el segundo por el día, añadir a la función time(), y esto seconvierte en su fecha de vencimiento.

Tres meses es sólo un ejemplo, puede establecer un cookie expire años más tarde. Sin embargo, los usuariostienen una tendencia a limpiar su almacenamiento de navegador. Por lo tanto, nunca debe permitir que unaaplicación se base en la existencia de una "cookie".

Eliminar una cookie

En algún momento de su aplicación, usted probablemente querrá eliminar una cookie. Sin embargo, elnavegador de Internet locales que el usuario está en no permitir que un servidor Web directamente eliminaruna cookie. En su lugar, establezca la fecha de caducidad tras la fecha actual y, básicamente, hacer que lacookie expire. Esto le indica al navegador Web para borrar la cookie, porque ya no está en uso.

setcookie(“time_logged_in”, “”, (time() - 300));

Asignar múltiples cookies

El proceso de asignación de cookies múltiples es bastante sencillo. Es, básicamente, hacer variasllamadas a la función setcookie para garantizar que cada cookie tienga un nombre único .

<?php$username = “jimmy”;$userID = 5;$loggedInTime = time();setcookie(“username”, $username);setcookie(“userid”, $userID);setcookie(“logged_in_since”, $loggedInTime);?>

El código anterior establece tres cookies haciendo tres llamadas a la función única setcookie.También puede realizar la llamada setcookie en una función personalizada si el código passed-in requiere másseguridad. Por ejemplo, puede crear una función saveCookie que garantice el dato está limpio

<?php

function saveCookie($name, $value, $expires=0){if($name == “”)

{print “Name not provided, cookie not saved”;

}if($value == “”)

{print “Value not provided, cookie not saved”;

}setcookie($name , $value, $expires);} 

$username = “jimmy”;

Page 131: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 131/467

131

$userID = 5;$loggedInTime = time();

saveCookie(“username”, $username);

saveCookie(“userid”, $userID);

saveCookie(“logged_in_since”, $loggedInTime);

?>

Su función saveCookie se utiliza como proxy para la función setcookie precompilados. Esto le permitecomprobar el pasado en los datos y asegurarse de que ha sido debidamente cumplimentado. En el ejemploanterior, se imprime un error si el nombre o el valor está vacío. Usted puede aprovechar esta seguridad simplecomprobar un paso más allá al asegurar que los datos es, de hecho, una cadena y no contiene ningún códigopotencialmente malicioso. Al empezar a desarrollar aplicaciones Web que va a aprender a seguir las normasrígidas en lo que se refiere a la seguridad.

Ahora que han visto cómo usar cookies en PHP, usted puede buscar en el uso de "cookies" en Flash. El procesode usar las cookies en Flash es muy similar, pero ofrece algunas ventajas que usted va a mirar.

Uso de cookies en Flash 

Las cookies de Flash en realidad se llaman objetos compartidos y compartimos atributos similares a las cookiesen PHP.Algunos de estos atributos incluyen la capacidad de almacenar pequeñas cantidades de datos a nivel local yrecuperarlos por cualquier archivo en el dominio básico. Al igual que las cookies en PHP, el usuario tiene laposibilidad de desactivarlas por sitio o el mundo. Sin embargo, tienen algunas diferencias. Una ventajaimportante a los objetos compartidos es la capacidad de unirse a ellos. Esto significa varias películas tienen lacapacidad de ver el expediente y recibir una alerta cuando se actualiza. Por ejemplo, supongamos que tiene un juego multijugador, y queremos que cada cliente para seguir la partitura en sincronía. Con los objetoscompartidos puede permitir que cada uno de los clientes de lectura/escritura de acceso y los otros actualizarán

los cambios de puntuación.

Cargar Objetos compartidos

El código siguiente intenta cargar un objeto compartido y crea uno si no existe. Como puede ver, cargar unobjeto compartido es bastante simple y sólo requiere una línea de código. Cookies en PHP no ofrecen laposibilidad de crear uno de forma nativa, si no existe, hay que comprobar la cookie y crear manualmente.

var so:SharedObject = SharedObject.getLocal(“sample”);trace(“Object is “ + so.size + “ bytes in size”); 

Guardar objetos compartidos

El proceso de guardar un objeto compartido es también sencillo. Comience por crear una nueva instancia de laclase SharedObject.

var so:SharedObject = SharedObject.getLocal(“sample”);

Después de que el objeto se crea, puede adjuntar los datos del objeto compartido para añadir elementos a losdatos del objeto, como:

Page 132: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 132/467

132

var so:SharedObject = SharedObject.getLocal(“sample”);so.data.user = “guest”;

Usted puede llamar y recordar que por encima de bloque de código y el valor no se guarda todavía. La razón esporque es necesario alertar a los objetos para escribirlo en el sistema de archivos local, llamando al métodoflush.

var so:SharedObject = SharedObject.getLocal(“sample”);so.data.user = “guest”;so.flush();

NOTA Al usar flush (), comprueba si el usuario tiene almacenamiento local deshabilitado mediante elAdministrador de configuración(www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html).

Si el objeto no existe, se crea uno. En algunos casos, usted querrá saber si el objeto compartido existe. Lamanera de lograrlo es mediante el control de la propiedad de tamaño.

var so:SharedObject = SharedObject.getLocal(“sample”);if(so.size == 0){// Shared object doesn‟t exist.trace(“Shared Object doesn‟t exist.”);}

Suponiendo que el tamaño de la prueba volvió igual a cero, usted sabrrá que el objeto compartido no existe.A continuación, puede tomar este resultado y sustituir la simple traza con el código para crear el objeto.

var so:SharedObject = SharedObject.getLocal(“sample”);

if(so.size == 0){// Shared object doesn‟t exist.so.d ata.user = “guest”;}

Eliminar objeto compartido

A diferencia de PHP, los objetos compartidos de forma explícita se puede eliminar del sistema dealmacenamiento local. Realizar una llamada al método clear() elimina el objeto compartido y sus datos, pero lareferencia al objeto permanecerá.

var so:SharedObject = SharedObject.getLocal(“sample”);so.data.user = “guest”;

trace(“Username is: “ + so.data.user); // guest

so.clear();

trace(“Username is: “ + so.data.user); // undefined

Page 133: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 133/467

133

El segundo trace devuelve indefinido debido a que la llamada anterior a clear() ha suprimido el valor.Ahora puede volver a asignar el valor. Sin embargo, no es necesario eliminar un objeto para reasignarlo. Ustedsimplemente puede volver a escribir a la misma.

Acercar a todos juntos

Ahora que usted ha mirado en cada concepto individual, llevar todo en un último ejemplo. En este ejemplo seva a crear, guardar, editar y borrar un objeto compartido.

Comience por abrir el archivo de partida que se pueden encontrar en el sitio Web del libro, que ha sido pre-compilados para este ejemplo.

Después de abrir el fichero en Flash, abra el panel de acciones (presionar la tecla F9 o Alt + F9) y añadir elcódigo ActionScript.

var soDomain:String = “sample”;var so:SharedObject = null;function loadObject():void

{so = SharedObject.getLocal(soDomain);trace(“Shared Object Loaded”);}

function addDataToObject(name:String, value:String):void{if(so == null){

trace(“You must first load the Shared Object”);}

so.data[name] = value;so.flush();

trace(“Value added: “ + so.data[name]);}

function deleteObject():void{if(so == null){trace(“You must first load the Shared Object”);}

so.clear();

trace(“Shared Object deleted”);}

function readObject(name:String):void{if(so == null){

Page 134: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 134/467

134

trace(“You must first load the Shared Object”);}else{trace(“Shared Object Value : “ + so.data[name]);}

}

function loadHandler(e:MouseEvent):void{loadObject();}function saveHandler(e:MouseEvent):void{addDataToObject(„test‟, valueTxt.text);}function deleteHandler(e:MouseEvent):void{

deleteObject();}function readHandler(e:MouseEvent):void{readObject(„test‟);}

loadBtn.addEventListener(MouseEvent.CLICK, loadHandler);saveBtn.addEventListener(MouseEvent.CLICK, saveHandler);deleteBtn.addEventListener(MouseEvent.CLICK, deleteHandler);readBtn.addEventListener(MouseEvent.CLICK, readHandler);

Las partes más importantes de este código es addDataToObject y la función de dos variables que sonreferencias a los objetos compartidos: nombre de la propiedad y el valor a la tienda.

var soDomain:String = “sample”;var so:SharedObject = null;

function addDataToObject(name:String, value:String):void{...}

La función addDataToObjectcomprueba para asegurarse de que el objeto compartido se ha cargadocorrectamente y los intentos de asignar el valor utilizando un objeto dinámico.

function addDataToObject(name:String, value:String):void{if(so == undefined){trace(“You must first load the Shared Object”);}

so.data[name] = value;

Page 135: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 135/467

135

so.flush();}

Después de llamar la función addDataToObject, se puede leer en el objeto compartido simplemente haciendoun llamado a los datos del objeto.

trace(“Shared Object Data: “ + so.data.test);

Eso es todo lo que hay que trabajar con objetos compartidos en Flash. Ahora ya sabe cómo cargar, guardar yeliminar los objetos compartidos y las cookies de Flash.

NOTA Los objetos compartidos también se pueden utilizar en un entorno remoto, pero requieren un sistemamás avanzado.

Descubrir los beneficios de cookies en PHP

Ahora que han estudiado el uso de cookies, tanto en PHP y Flash, veamos algunas razones por las que el uso decookies en PHP es una mejor opción. Cuando se trabaja en Flash, parece que los objetos compartidos son la

mejor opción, pero no siempre lo son.

Cookies en PHP ofrecen la posibilidad de compartirlos entre sitios HTML y Flash. Los objetos compartidos sóloson accesibles desde dentro de Flash, que pueden ser tanto buenos como malos. El lado bueno es que ningunaotra aplicación puede cambiar las cookies. En el lado malo, sino que también significa que no puede compartiry agregar un nivel de coherencia entre las aplicaciones.

Hay una solución bastante común a este problema, sin embargo, que es regular el uso de cookies en Flash,pasando a través de un intermediario de PHP.

En primer lugar, mirar el código PHP que hará llegar la información de la cookie de vuelta a Flash.

<?php

if(isset($_POST[„act‟]) && $_POST[„act‟] == „getcookie‟){if(isset($_COOKIE[$_POST[„cookieName‟]])){print “resp=” . $_COOKIE[$_POST[„cookieName‟]];}else{print “resp=” . “cookie_not_found”;}}

?> 

Este código garantiza los datos POST adecuados se envíen antes de continuar. Suponiendo que los datosválidos se pasa, el siguiente paso es determinar si la cookie, de hecho, existe. Utilice una prueba condicionalpara determinar si los datos de la cookie o un mensaje de error será enviado a Flash.

if(isset($_COOKIE[$_POST[„cookieName‟]]))

Page 136: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 136/467

136

{print “resp=” . $_COOKIE[$_POST[„cookieName‟]];}else{print “resp=” . “cookie_not_found”;}

De cualquier manera, la variable pasada a Flash "respectivamente". De esta manera usted puede programarfácilmente el código ActionScript para manejar la respuesta en consecuencia.

La razón por la que se utiliza isset() en el primer caso de declaración de PHP no es tan accidental puede enviarun aviso a Flash alertar a la variable no es enviado. Este tipo de aplicación es un muy buen candidato para XML,que se explica en profundidad en el capítulo 3. XML lo que hace es tan sólo devolver en el valor que usted estáinteresado. Para este ejemplo simple, se continuará con un retorno printbased estándar.

Ahora que tiene el PHP en su lugar se puede pasar al ActionScript. El ActionScript hace una llamada al PHP yespera una "cookie" o error que será devuelto.

var phpFile:String =“http://localhost/ch05/cookies/loadCookie.php”;

var variables:URLVariables = new URLVariables();variables.act = „getcookie‟;variables.cookieName = „sample‟;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;

var loader:URLLoader = new URLLoader();

loader.addEventListener(Event.COMPLETE, serverHandler);loader.load(urlRequest);

function serverHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);if(variables.resp == „cookie_not_found‟){trace(“Requested Cookie Not Found”);}else

{trace(“Cookie Data: “ + variables.resp);}}

El total de la llamada al servidor es similar a otras llamadas en este libro. El enfoque en esta convocatoria es delas variables pasadas al PHP y la respuesta. Se utiliza la clase URLVariables para asignar el acto y las variablescookieName. La variable de actuar le dice a PHP que su petición es válida, y la variable cookieName contiene elnombre de la cookie que usted está buscando.

Page 137: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 137/467

137

var variables:URLVariables = new URLVariables();variables.act = ‘getcookie’;

variables.cookieName = ‘sample’;

Al igual que los otros ejemplos cargador, tiene que asignar una función para manejar la respuesta del servidor.Esta es la función que se llama después de que el PHP pasa de nuevo bien la cookie o un mensaje de error.

Comience usando la clase URLLoader para obtener los datos que figuran en la respuesta. A continuación,realizar una llamada a la clase URLVariables, que devuelve un objeto de las variables de respuesta. En estecaso, se busca respectivamente la "propiedad". En primer lugar, compruebe si la respuesta es"cookie_not_found", que se explica por sí mismo. Es más que probable, la cookie que se establecerán y lasegunda sentencia trace podría ser llamado, pero la programación nunca es bueno para asumir esto. Por eso seañade la sentencia condicional.

function serverHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);

if(variables.resp == „cookie_not_found‟){trace(“Requested Cookie Not Found”);}else{trace(“Cookie Data: “ + variables.resp);} }

Usted puede tomar este ejemplo para el siguiente paso, estableciendo la cookie si uno no se encuentra, oincluso pasar a lo largo de una matriz o un objeto de los nombres de cookies para cargar rápidamente todas las

cookies de un sitio. AMFPHP, que usted va a mirar en el capítulo 8, sería una gran manera de la carga en variascookies.

Como usted puede ver, hay varias formas de trabajar con las cookies, tanto en PHP y Flash. Inclusodesarrollar una forma común en la que tanto PHP y Flash pueden compartir la misma cookie de datos.

NOTA Intercambio de información de la cookie todavía tiene la limitación de que el PHP tiene que estar en eldominio que va a cargar las cookies. Una cosa a tener en cuenta con este script es el hecho de que esteejemplo simple no es el control de la entrada pasa a la de PHP. Seguramente querría añadir en a una aplicaciónreal.

Resumen En este capítulo usted aprendió cómo cargar y trabajar con las cookies de Flash y PHP. Para iniciar aprendió acargar un cookie existente de la máquina del usuario y luego aprendió a modificar y actualizar esa cookie.

Ahora debió entender cómo trabajar con las cookies de Flash y PHP y entender por qué son importantescuando se desarrolla una aplicación.

Page 138: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 138/467

138

Parte II

Desarrollo de

Contenido Interactivo 

Page 139: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 139/467

139

Capitulo 7

Mantenimiento de Seguridad alTrabajar con la entrada de Uuario 

Trabajar con la entrada del usuario se centra en las mejores prácticas de almacenamiento y la devolución dedatos mientras se mantiene un alto nivel de seguridad.

Este capítulo está dividido en secciones que se centran en un aspecto específico del manejo de los datos deusuario. Esto no es un paso guía basada en el trabajo con los datos del usuario, que puede encontrarse en el

Capítulo 4. En su lugar, este capítulo se centra en los aspectos específicos de la seguridad al manejar los datos.

El subtema de este capítulo es trabajar con la comprensión y sandbox (caja de arena) en Flash. Básicamente, lacaja de arena es un contenedor que cada aplicación se ejecuta en el, pero la sección entra en más detalle yproporciona ejemplos visuales para explicar mejor la caja de arena y cómo afecta a sus aplicaciones.

Las prácticas previstas en este capítulo se puede adaptar a las aplicaciones futuras que se desarrollan. Elmantenimiento de una aplicación segura es casi tan importante como el bloqueo de la casa antes de salir. Unaaplicación técnicamente seguirá funcionando si no está seguro. Sin embargo, la vida útil de que la aplicación noes cierto. Hay muchos aspectos de la seguridad en una aplicación: datos esterilizado, inicios de sesión seguros,almacenamiento de archivos, y la posibilidad de aprovechamiento, para nombrar unos pocos. En este capítulo,el foco es la seguridad de la entrada del usuario. La entrada del usuario es cualquier pedazo de datos, el

usuario puede modificar.Esta lista incluye los datos de las cookies, los inicios de sesión, las sesiones y la carga de archivos.

Precaución con el uso de entrada de usuario 

Los datos del usuario se expande más allá de un sencillo cuadro de texto en un formulario de contacto. Ahoraque sabes qué datos se considera la entrada de usuario, te estás preguntando cómo algo tan inofensivo comoun sistema de carga de archivos representa un riesgo para la seguridad.

Como con la mayoría de seguridad, no es la tecnología o característica que tiene fallos, pero cómo seimplementa.

Forma adecuada de manejar carga de archivos 

Por ejemplo, supongamos que hay un archivo PHP de base que acepta la carga de archivos y almacena lainformación de los archivos cargados en una base de datos.

La primera cuestión a plantearse es ¿qué partes de esta sencilla aplicación son posibles problemas deseguridad? 

Page 140: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 140/467

140

  La forma en si?  El componente de base de datos?  El archive cargado?

Comprobar extensions de archivos válidos

El archivo subido sería el menos obvio de una violación de seguridad, pero mira en algún código de ejemploque explica cómo se puede fácilmente convertirse en un problema. Una muy común, pero el intento de inducira error a asegurar la carga de archivos proceso es comprobar que una prórroga válida, como la:

<?php$file = $_FILES[0];if(strpos($file[„name‟], „.jpg‟) !== false){if(!move_uploaded_file($file[„tmp_name‟], „storage/‟)){print “File uploaded”;}}?>

Como puede ver, el código está configurado para buscar el archivo con extensión .jpg. La función strpos seutiliza para devolver el índice o la colocación del valor facturado, que en este ejemplo es .jpg. A primera vistaesto parece bastante seguro y deben dejar de cargar maliciosos, pero no es así. Este código no importa dedonde la extensión del archivo es, por lo que podría haber imagename.jpg.php como el nombre del archivo yque será aprobado. Peor aún, si esto es para una galería de fotos de acceso público, ese archivo se puedeejecutar PHP libremente porque ya está en el servidor. La capacidad para ejecutar código intruso se convierteen una gran preocupación cuando el usuario malintencionado es capaz de colocar código directamente en unservidor de confiados.

Imagina una imagen que está siendo cargado que es en realidad un archivo PHP con el código como elsiguiente:

<?phperror_reporting(E_ALL);phpinfo();mysql_connect(„localhost‟, „anyuser‟, „anypass‟);?>

NOTA Presentación de informes de errores puede ser obligado a salir al deshabilitar la directiva display_errorsen el archivo php.ini. Esto asegura el informe de errores no puede querer dar marcha atrás en.

Cuando se accede a través del navegador, este código podría permitir a todos los errores para ser visible,mostrar la información del servidor vital, la fuerza de un intento fallido de la base de datos exponer elverdadero camino de archivo, como se puede ver en la Figura 7.1, y determinar si existe una base de datos.

Page 141: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 141/467

141

Uso de una mejor forma de comprobar las extensiones de archivo

Volviendo al ejemplo de una simple carga, vamos a añadir las medidas de seguridad más robusta. La principalmodificación del código es el caso de declaración de los controles de una extensión de archivo válido. En lugarde buscar la existencia de un tipo de archivo, se ve al final del nombre de archivo y recupera la extensióncorrecta reales.

if(strrpos( $file[„name‟], „.jpg‟) !== false){...}

FIGURA 7.1Mensaje de error devuelto cuando la base de datos es intencionalmente a fallar en la conexión 

A primera vista parece que nada ha cambiado, pero en realidad si. La función strpos ha sido sustituido por elstrrpos menos común, que busca el tipo de archivo a partir del final de la cadena y en movimiento hacia elfrente. Esto asegura que la extensión del archivo final se encuentra y no uno enterrado en el nombre.

Al igual que con el código, en general, la seguridad puede ser ampliado, y este ejemplo permite una granexpansión.Aquí hay un método más dinámico de la búsqueda de tipos de archivo válidos que se puede colocar fácilmenteen un proyecto existente o de una marca-nuevo proyecto.

Page 142: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 142/467

142

<?php

function checkForFileType($file, $type){

$fileTypePos = strrpos($file,‟.‟);if($fileTypePos === false)

{return “File not valid.”;}

if(substr($file, ($fileTypePos+1), strlen($file)) == $type){return “Valid file type”;}else{return “Invalid or malicious file type detected.”;}}

checkForFileType(“sample.jpg”, “jpg”);?>

El código anterior es una función personalizada que acepta dos argumentos. El primer argumento aborda elarchivo a validar, y la segunda es la extensión de reconocer. Esta solución ampliable devuelve una cadena dedeterminar si el tipo de archivo se encuentra o no. Menos frecuente es la tercera posibilidad, un partido válido.Un partido no válido: el passed-in el archivo no tiene un nombre de archivo válido en todos los.

Ahora que la parte de carga del código es seguro, el siguiente punto de la seguridad es la forma real de sí mismo. Esta parte lo más probable consistirá en la caja de carga de archivos y cajas de entrada de datosadicionales.

En general, un ataque automatizado (equipo configurado para explotar sitios web) es el tema de seguridad alos desarrolladores están más preocupados con, sino una forma de la entrada en Flash también puedensuponer un riesgo de seguridad.

Comprobación de la entrada válida 

Comprobación de la validez de las cajas de entrada es un buen comienzo. Un ejemplo de un control de entradaen ActionScript es algo como lo siguiente:

if(length(fileNameTxt.text) > 0){// file name is valid

}

Esto es simplemente el control de la variable de fileNameTxt para una longitud que es mayor que 0, es decir, elcuadro de entrada tiene una cierta cantidad de texto en él. Ahora que el cuadro de entrada se sabe que esválida, una llamada al servidor se hace y esto se traduce en el PHP que se llama. El PHP no seguros para unejemplo simple podría ser algo así.

<?php$name = $_POST[„fileName‟];

Page 143: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 143/467

143

// database info goes here...mysql_query(“INSERT INTO uploads (name) VALUES (“ . $name .“)”);?>

Esto es básicamente tomar el nombre de archivo y directamente insertarlo en la base de datos. Usted podríapreguntarse en este punto como si el nombre de archivo es válida en Flash esto podría ser una preocupación

de seguridad. El problema no está en los datos transmitidos desde Flash, pero lo más importante, el hecho deque el PHP podría ser llamado por otro método. Esta es una de las razones más importantes para asegurarcorrectamente todos los puntos de una aplicación.

Una alternativa más segura para el código anterior es 

<?php

$name = $_POST[„fileName‟];// database info goes here ...

if(!empty($name) && strlen($name) > 0)

{mysql_query(“INSERT INTO uploads (name) VALUES (“ . $name .“)”);}

?>

Este código no sólo comprueba un valor válido, sino también garantiza que el valor es de una longitud válido.

if(!empty($name) && strlen($name) > 0)

En una aplicación en el mundo real, probablemente sería de verificación, por un valor de al menos dos o tres

personajes, pero que todo depende del uso previsto. Esta pequeña actualización del código se asegura de queuna llamada de Flash o cualquier otro método se garantizará.

Validar códigos postales (ZIP codes)

Por supuesto, proteger los datos no se limita a los campos de formulario básico. Supongamos que hay unaparte de la aplicación que acepte un código postal de cinco dígitos cuando el usuario envía una imagen. Lamanera de garantizar un código postal válido es por las pruebas de un valor numérico y una longitud válida.

<?php$zipCode = $_POST[„zip‟];

if(is_numeric($zipCode) && strlen($zipCode) == 5){// valid zip code found}?>

La función is_numeric() acepta una variable como un argumento que se ha probado para determinar si esevalor es un número. Esta función devuelve una respuesta verdadera/falsa por lo que puede utilizarsefácilmente dentro de una sentencia if o puede asignar el resultado a una variable.

Page 144: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 144/467

144

Buscando tipos válidos

Si desea realizar esta misma validación básica en Flash, se usaría las funciones typeof y length (longitud). Lafunción typeof devuelve un valor de cadena que define lo que el tipo es del ítem passed-in. Esta función puedeser usado para algo más que la validación de número, pero funciona perfectamente para este ejemplo:

if(typeof(zipCode) == “number” && zipCode.toString().length == 5)

{// valid zip code found}

Limpiar datos de usuario 

Ahora que tiene una mejor comprensión de la seguridad en su aplicación, el siguiente paso es para desinfectaro limpiar los datos más avanzados antes de almacenarla.El proceso de almacenamiento de datos abarca tanto el uso de bases de datos y un enfoque más sencillo deutilizar archivos de texto estándar. La ventaja de los archivos de texto estándar es el hecho de que no necesitaacceder a la base de datos. La desventaja de este método es que es una solución menos robusta que los

resultados de las posibilidades de búsqueda mucho más lento. Mayoría de las veces se utiliza una base dedatos, a menos que la aplicación sea bastante pequeña que no necesita el potencial de escala para unaaplicación más grande.

Desinfeción de los datos 

El primer paso para la desinfección de los datos se tratan en la sección anterior, que es garantizar que al menoslos datos son válidos. Este proceso es necesario que las diversas funciones que interactúan con una base dedatos o sistema de archivos se creará errores muy importantes si se utilizan conjuntos de datos vacía.

El proceso de desinfección de los datos debe hacerse en el PHP, porque siempre es una buena práctica para

asumir cualquier passed-in los datos está sucio. Esto significa que aunque los datos fueron enviados desde suaplicación Flash que podría haber sido manipulados en el proceso de presentación.

CROSS--REF Los datos enviados desde Flash es fácil de ver utilizando Charles, que se discute en el capítulo 13.Charles se puede utilizar al 100 por ciento seguro de qué datos se están enviando desde Flash.

Hay un par de funciones muy útiles en PHP que puede ayudar en el proceso de desinfección de los datos antesde que se almacene. La primera función addslashes(), que caracteres de escape como cotizaciones y cortes enlos datos que le pasan. El siguiente fragmento de código muestra cómo addslashes desinfecta adecuadamentelos datos.

<?php

$quote = “I hope to finish the “coolest” Flash application ever.Which will use Flash and PHP”;

?>

Page 145: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 145/467

145

Crear consultas SQL seguras

Si ha ejecutado el código anterior, se generaría un error porque el procesador de PHP no permite citas dentrode las comillas. Con citas múltiples, no sería capaz de determinar dónde una cadena se inicia y otra termina.Supongamos que la variable $quote se llena dinámicamente por una llamada de Flash. La variable será llenadacorrectamente en tiempo de ejecución porque el compilador no valida el contenido sobre la marcha, sinembargo, entrar en que los datos en SQL se producirá un error. Aún peor, en algunos casos, la cadena puedeser introducido parcialmente. Aquí hay una consulta SQL del mundo real donde usted puede ver fácilmente elproblema con citas sin escape.

$sql = „UPDATE users SET business=Tom‟s Diner WHERE id=‟ . $ID;

Una vez más, la ejecución del código con el que ha introducido previamente en el PHP produce un error, peroque asumen esta cadena se construye con una petición de $_GET. Al principio, la petición parece seguro, peroel anuncio de consulta SQL comienza con una comilla simple (‘) y hay un apóstrofo en Tom's Diner. La llamadaSQL real se convertirá en:

$sql = „UPDATE users SET business=Tom

Básicamente, esto se pone cada nombre de la empresa en la solicitud a Tom, que no es probablemente elresultado previsto. También sería muy difícil de revertir si la solicitud hace copias de seguridad adecuada.Este ejemplo es bastante extrema, porque las comillas es más común para una llamada de SQL, perodefinitivamente se puede ver cómo datos no desinfectados podría causar un día muy malo para eladministrador del sistema. 

Ahora que sabes lo mal que datos no desinfectados pueden ser, volver a ese addslashes() y ver lo que lallamada se convierte en SQL:

$business = addslashes($_GET[„name‟]);$sql = „UPDATE users SET business=‟ . $business . „ WHERE id=‟ . $ID;

La llamada de SQL debidamente desinfectados ve algo como esto:

$sql = „UPDATE users SET business=Tom\‟s Diner WHERE id=‟ . $ID;

Mira a otra llamada SQL con formato incorrecto que tiene resultados drásticos. Esta se ocupa de la tala en unaparte segura de una página Web. Una llamada de SQL para la autorización sería algo como esto:

<?php$user = “admin”;$pass = “password here”;

$query = “SELECT * FROM staff WHERE user=‟” . $user . “„ ANDpass=‟” . $pass . “„“;?>

Observe cómo una vez más el SQL a ciegas acepta los valores. Esto realmente se convierte en un problemacuando un usuario introduce una contraseña, tales como 

$pass = “„ OR „‟=‟”;

Page 146: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 146/467

146

La llamada de SQL resultante es una contraseña vacía, porque las citas forzadas al SQL a su fin y la OR lepermite a la igualdad de sí mismo. Crea una contraseña vacía, lo que significa que sólo el nombre de usuario esdetener a alguien de iniciar la sesión, pero nueve de cada diez veces, de administración es un nombre deusuario válido.

SELECT * FROM staff WHERE user=‟admin‟ AND pass=‟‟ OR „‟=‟‟

Así de simple \ significa que la diferencia entre una llamada de SQL eficaz y muy peligroso. Esta función es sólouna forma posible de datos para desinfectar.

La siguiente función, cuando se trabaja con una base de datos, es mysql_real_escape_string, que desinfecta losdatos antes de entrar en la base de datos. Al usar esta función, primero debe realizar una conexión adecuada ala base de datos, de lo contrario recibirá un error.

La sintaxis para mysql_real_escape_string es casi lo mismo que addslashes(). Que se pasa en el valor que desealimpiar y un vínculo de MySQL opcional. Si un enlace no se pasa, se utiliza el enlace SQL última.

<?php

// connect to database, generate $link$business = mysql_real_escape_string($_GET[„name‟], $link);$sql = „UPDATE users SET business=‟ . $business . „ WHERE id=‟ .$ID;?>

La ventaja de utilizar esta función es que se encarga de todas las diversas escapar, que va más allá de comillassimples y dobles. El problema evidente es que requiere un enlace de MySQL, así que no se puede utilizar amenos que los datos serán almacenados en una base de datos. O, al menos, usted necesita tener acceso a unabase de datos. Un uso incorrecto de esta función tendrá como resultado un error, como se observa en la Figura7.2.

Page 147: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 147/467

147

FIGURA 7.2Mensaje de error aparece cuando un enlace de base de datos MySQL no está disponible 

Limpieza adecuada de datos HTML 

La función final que mirar es htmlentities(). Básicamente, esta función toma caracteres HTML y los convierte envalores numéricos. Estos son mejores porque cosas como "" se convierten&quot, y esto casi elimina lanecesidad de desinfección avanzado de datos.

<?php

$str = “The „red‟ fox <b>jumped</b>”;

// The &#039;red&#039; fox &lt;b&gt;jumped&lt;/b&gt;echo htmlentities($str, ENT_QUOTES);

?> 

El segundo argumento en la función htmlentities() determina si las dos comillas simples y dobles se conviertan,Los valores posibles para este segundo argumento se muestran en la Tabla 7.1.

Page 148: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 148/467

148

TABLA 7.1

Estilos de comillas disponiblesNombre de Constante DescripciónENT_COMPAT Convierte las comillas dobles; estilo de comillas solaENT_QUOTES Convierte tanto comillas dobles e individualesENT_NOQUOTES Deja a las dos comillas dobles e individuales convertidos

Es una buena idea ejecutar estas tres funciones para asegurar que sus datos es tan limpio como sea posible.Sólo se necesita la potencia de procesamiento un poco más, pero puede hacer la diferencia entre unaaplicación segura y una insegura.

Más importante aún, a medida que continúe la práctica estos conceptos de seguridad bien que pasarán menostiempo de parches y la depuración en el futuro.

Almacenamiento de datos 

La base de datos no es el método de almacenamiento sólo, como se explica en el comienzo de esta sección.

También puede utilizar archivos de texto simple para almacenar información, y la mayoría de los pasos dedesinfección que el trabajo aquí también. La única excepción es mysql_real_escape_string, que, como se dijoanteriormente, requiere un enlace SQL.

Escribir de forma segura a un archivo 

Un ejemplo simple de la escritura de forma segura a un archivo sería algo como esto. En primer lugar, validarlos datos antes de abrir el archivo. Esto garantiza que el archivo no puede verse accidentalmente por escrito a.

<?php

if($fileContents != “”)

{$handle = fopen(“sample.txt” , “w+”);fwrite($handle, $fileContents);}else{print “File content not written, invalid data”;}

?> 

Trabajar con datos en un orden lógico 

Es importante mantener un orden lógico cuando se trabaja con datos. Por ejemplo, si la función addslashes() seejecute antes de la sentencia if, la longitud del contenido podría ser expulsados y producir un resultado falso.Al mismo tiempo, si el archivo se abre antes de que los datos sean validados, un malintencionado podríaexplotar inyectar contenido en el archivo abierto. Piense en ello como las mismas precauciones que tomarcuando se inicia sesión en un sitio Web seguro en un lugar público.

Page 149: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 149/467

149

Crear una clase para manejar saneamiento 

En este punto usted debe entender completamente cómo desinfectar los datos que se pueden guardar en unabase de datos o un archivo de texto simple. Usted puede ampliar estas mejores prácticas para crear unconjunto de herramientas más reutilizables. Por ejemplo, podría crear una clase de saneamiento que se ocupaautomáticamente del proceso. Una clase básica sería algo similar a lo siguiente:

<?php

class Sanitization{

function cleanSQL($str){return mysql_real_escape_string($str);}function cleanHTML($str){return htmlentities($str, ENT_QUOTES);}

function cleanText($str){$s = $str;if(!ini_get(„magic_quotes_gpc‟)){$s = addslashes($s);}return $s;}

function checkLength($str, $acceptableLength){if(strlen($str) >= $acceptableLength){return true;}else{return false;}}}

?>

La clase define tres métodos, cada uno de ellos sea un sustituto de una técnica aprendida en la sección

anterior. Este enfoque ofrece la posibilidad de ser reutilizables a medida que continúe trabajando en másaplicaciones. La clase también contiene más lógica de lo que se usa porque addslashes agrega barras a barrasexistentes. El resultado será tres barras de escapar cada comilla.

NOTA Una doble barra hará una barra en la parte delantera de la cita, ya que le indica al compilador paraescapar de la barra y no pensar en ello como código.

The \\\’red\\\’ fox jumped.

Page 150: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 150/467

150

Trabajar con opciones de magic_quotes

Hay una configuración en PHP llamada magic_quotes_gpc, que es responsable para escapar de los datosautomáticamente, como se muestra en la Figura 7.3.

FIGURA 7.3Un valor de ejemplo de la propiedad magic_quotes_gpc como se ve en la función phpinfo () de la listas 

Desactivar magic_quotes

En menos de configuraciones de servidor común que esta característica no se puede apagar. Una prueba rápidapara determinar si se ha habilitado la opción asegura barras adicionales no se añadirá.

if(!ini_get(„magic_quotes_gpc‟)){$s = addslashes($s);}

Las otras dos funciones en la clase de saneamiento simplemente limpiar el passed-in los datos y devolverlo.

Page 151: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 151/467

151

Usar objetos compartidos

Al empezar a construir aplicaciones más completa se llega a un punto en el almacenamiento de algunaspequeñas cantidades de datos en la máquina del usuario sea necesario. Estas pequeñas piezas de informaciónen general, tienen un ID de usuario o período de sesiones que se asigna a una entrada de base de datos en elservidor en vivo. Una "cookie" Shared Object Flash se utiliza en este caso porque es una pequeña pieza deinformación almacenada en el ordenador del usuario, pero no es necesario para la aplicación se ejecute.

Cuando la aplicación que hace uso del objeto compartido se abra de nuevo, sería configurado para buscar estepequeño pedazo de datos y realizar una llamada a un servidor basado en el resultado. Sin embargo, al igual quelas cookies normales que el navegador utiliza un objeto compartido puede ser editado por el usuario final, quepuede tener resultados perjudiciales.

Como se indica en la sección anterior, es mejor no confiar en los datos que un usuario envía. Esta directrizcomún garantiza una aplicación más segura y, en general hace que sea más fácil trabajar con.

NOTA La mayoría de los agujeros en la solicitud son explotados por el usuario envíando los datos.

Imagine una aplicación de ejemplo, que se utiliza para trabajar con un objeto compartido. Esta solicitud puedeser configurado para abrir un objeto compartido y pasar los datos a un servidor remoto.

Una vez que el objeto compartido se ha cargado, una llamada al servidor remoto podría hacerse pasar por elpequeño pedazo de información de los objetos compartidos. En este ejemplo, la pequeña pieza de informaciónpodría ser un ID de usuario que se han guardado en un uso previo.

Uso de PHP para manejar datos de objetos compartidos 

El código PHP se encarga de cargar esta pieza de información y consulta de la base de datos.Sin embargo, antes de una llamada a la base de datos se hace, el ID de usuario se valida asegurándose de que

es un número válido y dentro del rango de.

<?php$userID = $_GET[„user_id‟];$idRange = 500;if(is_numeric($userID) && $userID > 0 && $userID < $idRange){// connect to database at this pointmysql_connect(“localhost”, “user”, “pass”);mysql_select_db(“db_name”);$r = mysql_query(“SELECT * FROM user WHERE userID=” . $userID);while($row = mysql_fetch_array($r))

{print “resp=success&username=” . $row[„username‟]. “&userlevel=” . $row[„user_level‟]. “&userstyle=” . $row[„user_style‟];}}else{print “resp=” . “User ID not found or is invalid”;}

Page 152: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 152/467

152

?>

Suponiendo que el id de usuario es válida, un bloque de información se pasa de nuevo en formato de textosimple. Estos datos se carga en una matriz y se utiliza en el resto de la aplicación. Si el ID de usuario no esválida, se devuelve una cadena que informa al usuario de que algo pasó y el período de sesiones existente nose puede cargar. En la mayoría de los casos, si la sesión existente no se puede cargar, la aplicación Flash sabeque empezar de nuevo en lugar de tratar de utilizar datos incompletos o erróneos.

NOTA ActionScript 3 corelib de Adobe (biblioteca externa) tiene una clase de MD5 que se puede utilizar enlugar de PHP.

Crear y guardar una contraseña segura usando PHP 

El proceso de modificación de una contraseña que se puede almacenar es bastante simple. En primer lugar,crear una conexión con el archivo PHP que pasa a lo largo de la contraseña en texto claro. Sin embargo, esteproceso no es el más seguro y que sería mejor para devolver una respuesta de MD5 de la contraseña cuando serealiza un intento de inicio de sesión.

Para explicar el proceso, aquí la opción de un ejemplo de lo simple (menos seguro):

var phpFile:String = “http://localhost/md5creator.php”;

var query:String = “?pass=” . “password”;var urlRequest:URLRequest = new URLRequest(phpFile + query);var urlLoader:URLLoader = new URLLoader();

urlLoader.addEventListener(Event.COMPLETE, response);urlLoader.load(urlRequest);

function response(e:Event):void

{var loader:URLLoader = URLLoader(e.target);var param:URLVariables = new URLVariables(loader.data);trace(“User Information Loaded”);trace(“\tUser: “ + param.username);trace(“\tLevel: “ + param. userlevel);trace(“\tStyle: “ + param.userstyle);}

Una llamada al PHP en el servidor se realiza utilizando un URLRequest básicos, que deberían ser familiares parausted a partir de ejemplos y capítulos anteriores. Una vez que el URLRequest se establece una función dedevolución de llamada es asignado para manejar la respuesta del servidor. En este ejemplo, tendrán que

contener un MD5 de cadena o de un error.El PHP simplemente controla una cadena válida y devuelve un valor hash MD5 (cadena cifrada). Si una cadenaincompleta o vacía se envía desde el Flash, PHP devuelve un mensaje de error.

<?php

$string = $_GET[„string‟];

if(strlen($string) == 0)

Page 153: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 153/467

153

{print “response=” . “String not provided.”;}else{$md5 = md5($string);print “response=” . $md5;

}

?>

Este sería un ejemplo bastante simple para crear un valor hash MD5. En el uso del mundo real que ustedquerría a las semillas de la encriptación md5 para dar la respuesta más original y más difícil de romper.Una semilla es un valor conocido que se utiliza en el proceso de MD5. Si desea crear una semillaverdaderamente al azar, usando el time() es una buena idea, ya que casi todas las llamadas produce unresultado diferente.

El hash para este ejemplo se debe poder verificar cuando el usuario intenta iniciar sesión. Para este ejemplo, elnombre de la aplicación utilizada será "securepass".

cfcd208495d565ef66e7dff9f98764da

La semilla (seed) se anexa a la cadena existente que será codificado, ya sea al comienzo o al final.

$md5 = md5($string + “securepass”);

La posición de la semilla debe ser coherente, ya que se re-crea cuando el usuario intenta iniciar sesión en lapróxima vez.

El código PHP con la semilla única aplicación se vería algo como esto:

<?php

$string = $_GET[„string‟];

if(strlen($string) == 0){print “response=” . “String not provided.”;}else{$md5 = md5($string + “securepass”);print “response=” . $md5;}

?>

En este punto, en la aplicación de la semilla es creado, y usted puede continuar con el proceso de almacenarese valor en un objeto compartido.

Page 154: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 154/467

154

Retornar datos 

Es seguro asumir que tendrá que ser la devolución de datos de vuelta a Flash en algún momento de suaplicación. La preocupación general de seguridad en este proceso es similar al envío de datos, con la excepciónde que más vulnerabilidades se trató sobre la devolución de los datos.

Retornar datos de forma segura 

La idea de pasar de forma segura los datos de vuelta a Flash es mucho menos habló de tema. Esto se debeprincipalmente al hecho de que Flash no tiene que ser seguro, sin embargo, todavía es una buena práctica paragarantizar que sea.

Si usted no puede validar los datos de volver a Flash puede abrir un agujero de seguridad que podría, porejemplo, permitir a un usuario para acceder a una sección privada de una aplicación. Aún peor, puede tenerefectos negativos sobre la experiencia del usuario, y sus usuarios pueden perder la fe en su aplicación.

Los datos de volver a Flash puede ser alterada de la misma forma los datos pueden salir. Para el ejemplo

anterior, una serie de datos se devuelven, pero nunca se comprueba para asegurarse de que los datos sonválidos.Vamos a ampliar el ejemplo anterior para añadir esta seguridad. La función de respuesta es la única sección decódigo que necesita ser modificado, porque la solicitud será el mismo.

function response(e:Event):void{var loader:URLLoader = URLLoader(e.target);var param:URLVariables = URLVariables(loader.data);

var username:String;var userLevel:uint;

var userStyle:String;var validData:Boolean = true;

if(param.username != “”){username = param.username;}else{validData = false;}

if(param.userlevel!= “”){userLevel = param.userlevel;}else{validData = false;}

if(param.userstyle != “”)

Page 155: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 155/467

155

{userStyle = param.userstyle;}else{validData = false;}

if(!validData){trace(“User data was not properly loaded”);}else{trace(“User Information Loaded”);trace(“\tUser: “ + param.username);trace(“\tLevel: “ + param. userlevel);trace(“\tStyle: “ + param.userstyle);}

}

Básicamente, este primer código inicializa variables para almacenar los datos del usuario y comprueba cadapassed-in el valor de una entrada válida. La variable de validación se asigna a cierto desde el principio, porquesi alguno de los estados, si no se cambiará a false. Este proceso se considera lógica inversa, pero funcionabastante bien para las rutinas de validación.

Utilizando un enfoque más seguro para el retorno de datos 

En el ejemplo anterior, aprendió cómo trabajar con seguridad con los datos devueltos. El problema con esteenfoque simplificado es que existen otras maneras de interceptar información pasa entre Flash y el servidor.

Usar respuesta unica

Hay varias opciones para crear una aplicación aún más seguro, que todo depende del tiempo y costo dedesarrollo. Es un pensamiento común a ignorar los costos de la seguridad en última instancia, pero estosimplemente no es posible todo el tiempo. Frecuentemente usted trabajar en un proyecto que llega a un"punto suficientemente bueno" y la aplicación a los buques de las cuestiones, lo cual es una desventaja para eldesarrollo de aplicaciones, pero muy común.

La mejor manera de mantener bajo el costo real es mirar todas sus opciones. Una opción es usar MD5 paracrear códigos de respuesta única y asegurar los datos son válidos, que trabajará, pero nada impide que el

"hacker" de descompilar el SWF y mirando directamente al código.

Proteger sus archivos

En versiones anteriores de ActionScript que fueron capaces de crear fondos soberanos ofuscado, lo que significa que la mayoría deaplicaciones no podía descompilación. Sin embargo, en el momento de escribir este documento no existe la herramienta para

aplicaciones de AS3.

Page 156: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 156/467

156

Comprender la seguridad de Sandbox en Flash

El recinto (sandbox) de seguridad en Flash determina qué archivos se puede acceder en función de dónde seencuentra el archivo SWF. Un funciones del archivo SWF de manera diferente cuando se ejecuta localmente enla máquina del usuario que lo hace en un servidor.

Por ejemplo, un archivo SWF en el recinto local no puede acceder a los objetos locales y remotos. Esto imponeun nivel de seguridad en la aplicación para asegurarse de fuentes no pueden cruzar entre sí.

Los archivos locales pueden ser colocados en una de las tres cajas de arena (sandboxes):

  local-with-filesystem: Esto asegura al usuario que el contenido local y no por casualidad puede serenviado a una red o compartirlo.

  local-with-networking-sandbox: Permite que los SWFs locales puedan acceder a objetos remotos, si seencuentra un archivo de política válida.

  local-trusted: Un archivo SWF en este recinto de seguridad puede tener acceso a datos desde cualquierlugar, tanto locales como remotos. Sólo los usuarios y administradores pueden mover un archivo SWF

a este recinto de seguridad.

The local-trusted sandbox cannot accidentally be set by a stand-alone SWF. This is done to ensure the level of security a user would expect.

Con el fin de permitir el acceso a un dominio remoto, primero debe agregar a la clase de seguridad, haciendoun llamado a allowDomain().

Security.allowDomain(“www.example.org”);

También puede utilizar un archivo de política de dominio que permite el acceso de determinados dominios otodos los dominios con un comodín (“”).

<allow-access-from-domain=”*” />

Configurar el tipo de sandbox 

Cuando se publica un archivo SWF, puede elegir el tipo de recinto de seguridad especificados en función de losrecursos necesarios para ese uso. Para establecer el tipo de recinto de seguridad, siga estos pasos:

1. Seleccione Configuración File.Publish (Choose File.Publish Settings).2. Haga clic en la ficha Flash.3. En la lista desplegable, haga clic en Reproducción de Seguridad.

4. Haga clic en Aceptar.

Uso de la propiedad sandboxType 

Un archivo SWF puede utilizar sólo la lectura estática y la propiedad Security.sandboxType para determinar quécajón de arena del reproductor de Flash ha asignado el SWF actual.

Page 157: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 157/467

157

En algunos casos, usted tendrá que usar el valor actual de la propiedad sandboxType en la programación paradeterminar cómo una aplicación debe interactuar. Uso de una declaración simple cambio, puede crear unafunción personalizada que se traza el tipo de recinto de seguridad actuales, como se muestra en la Figura 7.4.

FIGURA 7.4Ventana de resultados que muestra un resultado de ejemplo de la función de whichSandbox 

function whichSandbox():String{var str:String = “”;switch(Security.sandboxType){case Security.REMOTE:

str = “This SWF is from an Internet URL. “+ “It cannot access local files”;break;case Security.LOCAL_WITH_FILE:str = “This SWF is local, but not trusted by “+ “the user. It does not have access to “+ “remote files.”;break;case Security.LOCAL_WITH_NETWORK:str = “This SWF can communicate with remote “

Page 158: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 158/467

158

+ “files, but can with local files.”;break;case Security.LOCAL_TRUSTED:str = “This SWF has been trusted by the user. “+ “It can read both local and remote files.”;break;

}

return str;

}

trace(“Checking for current sandbox type.”);trace(whichSandbox());

Determinando el activo sandbox 

Determinar el tipo de recinto de seguridad actual no se limita a un simple seguimiento de respuesta. Usted

puede presentar al usuario una pantalla de advertencia le notifica que el SWF actual no puede tener acceso arecursos remotos, ya que se ejecuta localmente. También puede detener la fuerza de una película de correr siuna caja de arena local se encuentra, lo que significa que la película ya no se ejecuta desde su sitio Web. Porejemplo, una película ejecuta de forma local podría haber sido robado de su sitio, así que es una buena ideapara comprobar esto y actuar en consecuencia.

La ejecución de aplicaciones en el recinto (sandbox) de seguridad locales 

En este ejemplo se muestra en la Figura 7.5 comprueba el tipo de recinto de seguridad y muestra una cuentaregresiva, si la película se está ejecutando a nivel local.

Page 159: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 159/467

159

FIGURA 7.5Ejemplo de la aplicación completa que muestra una cuenta atrás de activos

Para empezar, abra el archivo de partida que se pueden encontrar en el sitio web de este libro.

Los activos de este ejemplo ya se han completado para que pueda centrarse en la programación.El primer paso es crear las variables necesarias.

var timer:Timer;var sandbox:String;var startingTime:uint = 5;

Después de las variables que están asignados, usted puede construir el init función inicial, que se llama tanpronto como comienza la película.

function init():void

{

timerMC.alpha = 0;sandbox = Security.sandboxType;

if(sandbox.indexOf(„local‟) == -1){startTimer();}}

Page 160: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 160/467

160

La parte principal de esta función es la sentencia if, que comprueba la presencia de la cadena "local" en el tipode recinto de seguridad. Esto incluye cualquiera de las versiones locales y determina que la película no se estáejecutando en el recinto de seguridad remotas. Si se detecta un recinto de seguridad local, una llamada astartTimer se hace, que se inicializa y se inicia el temporizador de cuenta regresiva.

if(sandbox.indexOf(„local‟) != -1){

startTimer();}

La función startTimer primero inicializa una instancia del nuevo temporizador y luego añade un detector deeventos, que se llama cada milisegundo. La última acción en esta función es mostrar el texto del temporizador,mediante el establecimiento de la propiedad alpha a 1.0 lo que la hace totalmente visible.

PRECAUCIÓN El uso de una actualización del temporizador de 1 milisegundo por un período largo de tiempopuede crear una película que no responde. Para una comprobación inmediata, como en este ejemplo, no esuna gran preocupación.

function startTimer():void{startingTime *= 1000;

timer = new Timer(1, 0);timer.addEventListener(TimerEvent.TIMER, tickHandler);timer.start();timerMC.alpha = 1.0;}

El controlador de eventos en la sección anterior le asigna una función para cada llamada al temporizador. Estafunción es del controlador. El argumento pasado es una referencia al objeto de temporizador. Usted también

puede hacer referencia al evento mundial, sin embargo, esto es más comprensible si regresa a este código enel futuro.

function tickHandler(e:TimerEvent):void{var time:Timer = e.target as Timer;

var milli:uint = (startingTime - getTimer());var sec:uint = Math.round(milli / 1000);

timerMC.timerTxt.text = String(sec)+ ((sec == 1) ? “ second” : “ seconds”);

if(sec == 0){timer.stop();stage.removeChildAt(0);}}

El objetivo del objeto de evento se presenta como temporizador. Una vez más, este paso no es obligatorio,pero es más fácil trabajar con el código.

Page 161: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 161/467

161

La idea es mostrar los segundos restantes, que se determina utilizando los milisegundos restantes.El milisegundos restantes se obtienen mediante la función getTimer(), que devuelve los milisegundos de lapelícula actual ha estado en ejecución. El startingTime se resta de este valor y el resultado es el total demilisegundos.

var milli:uint = (startingTime - getTimer());

NOTA La función getTimer()siempre devuelve el tiempo total de la película actual ha estado en ejecución. Estosignifica que si esta prueba se hace más adelante en el proceso de reproducción del valor no se muestrancorrectamente.

El milisegundos restantes se convierten entonces en segundos, usando un poco de matemáticas básicas. Elvalor actual de la variable de mili dividido por 1000 es igual a los segundos restantes.

var sec:uint = Math.round(milli / 1000);

Una vez determinados los segundos, que el valor es enviado al campo de texto timerTxt en el escenario. Para laexhibición gramatical correcta, la variable sec se utiliza para determinar si el segundo o segundos se debe

mostrar. Esa variable sec se prueba en cada ejecución de esta función para determinar cuando el cronómetrose detiene y para descargar la aplicación completa.

if(sec == 0){timer.stop();stage.removeChildAt(0);}

Descargar una aplicación

La acción de la descarga de toda la aplicación se realiza mediante una llamada a la removeChildAt en lainstancia del escenario. En este caso, toda la película debe ser eliminado, por lo que 0 es el sentido de pasar deíndice 0 y hacia abajo.

if(sec == 0){timer.stop();stage.removeChildAt(0); }

El último paso del código es para hacer una llamada a init, que se inicia el proceso.

init();

Esa es la aplicación completa, que se ejecutará si el recinto de seguridad actual es local. Usted puede cambiarla lógica general en la presente solicitud y agregarlo a su cuenta para asegurarse de que su película no es malejecutar.

Page 162: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 162/467

162

Aquí está el código completado:

var timer:Timer;var sandbox:String;var startingTime:uint = 5;function init():void{

timerMC.alpha = 0;sandbox = Security.sandboxType;if(sandbox.indexOf(„local‟) == -1){startTimer();}}function startTimer():void{startingTime *= 1000;timer = new Timer(1, 0);timer.addEventListener(TimerEvent.TIMER, tickHandler);

timer.start();timerMC.alpha = 1.0;}function tickHandler(e:TimerEvent):void{var time:Timer = e.target as Timer;var milli:uint = (startingTime - getTimer());var sec:uint = Math.round(milli / 1000);timerMC.timerTxt.text = String(sec)+ ((sec == 1) ? “ second” : “ seconds”);if(sec == 0){timer.stop();stage.removeChildAt(0);}}init();

En este punto, usted debe tener una buena comprensión de cómo el recinto de seguridad de Flash quefunciona y lo que es. Como puede ver, la caja de arena puede llegar a ser un problema en algunos casos, peroen general su objetivo es proteger al usuario. En el último ejemplo, el código se ha ampliado y ahora la caja dearena es capaz de proteger al propietario del contenido, así como del usuario.

Usted puede tomar las prácticas y técnicas aprendidas en esta sección y comenzar a adaptarlas a sus propias

aplicaciones.

Garantizar una aplicación no puede ser compartida 

Como un extra a esta sección, el último ejemplo será la de crear un estilo similar de verificación cajón de arena,pero esta vez con el objetivo de que una película no debe ser visible en cualquier otro sitio Web, excepto paralo que fue construido.

Page 163: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 163/467

163

Esto se logra mediante la propiedad url en el objeto loaderInfo. Esta propiedad es accesible en cualquier objetocargado. Para este ejemplo, el objeto cargado sería el escenario, porque es la raíz de objeto de visualización. Elcódigo para determinar la ubicación actual de una película se está ejecutando es:

stage.loaderInfo.url

Este código devuelve una cadena que muestra una película donde se está ejecutando. Un ejemplo de respuesta

de una película se ejecuta de forma local:

file:///MacPro%20HD/Library/Server/Documents/DomainCheck.swf

El uso de esta propiedad podría mostrar un mensaje de advertencia que se hizo en la prueba de caja de arena.Para fines de demostración, un dominio no válido se proporciona a causa de la película para ser removidoinmediatamente.

if(String(stage.loaderInfo.url).indexOf(„example.org‟) != -1){stage.removeChildAt(0);

}

Suponiendo que el código anterior se ejecuta en una película que no se encuentra en el dominio example.org,la película se elimina y la aplicación ya no es accesible. Para una aplicación más completa que sería deverificación de la www y sin www versión del sitio web. También se podría ampliar en este código y comprobarsi hay una lista de sitios válidos, lo que podría lograrse mediante un simple bucle y una serie de dominiospermitidos.

NOTA Esta comprobación no es 100 por ciento seguro debido a las limitaciones en la forma en una direcciónURL se puede acceder.

Ahora usted debería tener una comprensión de cómo asegurar su aplicación, y agregar un nivel de protección

para evitar que otros sitios y lugares de beneficiarse de su contenido sin autorización.

Resumen 

En este capítulo usted aprendió cómo limpiar adecuadamente los datos del usuario, aunque es consciente decómo puede afectar la funcionalidad de su aplicación. A continuación, aprendió a cargar correctamente ylimpiar los datos del usuario para garantizar el proceso de almacenamiento no se verán perjudicados. Elalmacenamiento de la seguridad de los datos se presenta a continuación con ejemplos de cómo simplesllamadas SQL pueden causar dolores de cabeza en las aplicaciones.

El siguiente paso que se introdujo fue el proceso de devolución de datos a Flash y el análisis de estos datos paraasegurarse de que estaba bien manejado.

La última sección es una introducción y una visión general de la caja de arena de Flash y cómo puede afectar alas aplicaciones. Como un bono que ha aprendido cómo crear una aplicación que se eliminará a sí misma si nose ejecuta en el dominio correcto.

Page 164: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 164/467

164

Capitulo 8

Uso de Sockets 

Cuando se trabaja con aplicaciones multiusuario, hay diferentes maneras de enviar y recibir datos. Puedeutilizar un formato XML basado en el método de entrega. Otra alternativa a la entrega estándar es construir un"tirón" (“pull”) de aplicación que comprueba si hay actualizaciones mediante un temporizador.

Sockets permite un método " push " (“empuje”) que deja fuera a los temporizadores y las actualizaciones sólocuando los nuevos datos se envían. El uso de sockets no se limita a simples datos, que realmente podríaconstruir una aplicación de dibujo multiusuario que pasar las coordenadas a través de los diversos que hainiciado sesión en los clientes.

Este capítulo se divide en dos partes. La primera parte explica sockets. La segunda parte es un Flash simplebasada en aplicación de chat usando sockets como la entrega de los mensajes.

Comprender los Sockets 

Un socket es un extremo de la comunicación o parte de una computadora de una red conectada a otro equipoen el mismo protocolo. La diferencia entre una conexión tradicional (Internet) y un conector es la capacidad dehacer una distinción entre las máquinas que usted está hablando.

Cuando usted solicita un sitio Web desde Internet, se obtiene la página solicitada, pero Internet no puedeobligar a los nuevos datos directamente a usted (el cliente) sin pedir una vez más.

Un conector proporciona esta comunicación directa, permitiendo la conexión principal para enviar datos de

nuevo a usted (el cliente). Esto es más comúnmente usado en aplicaciones de conexión directa, tales como lamensajería instantánea, aplicaciones de vídeo y entornos de colaboración en equipo.

Seguridad en sockets 

El uso de sockets requiere una conexión más directa, lo que significa que la seguridad es una preocupación másgrande.En general, cualquiera que sea la herramienta que está utilizando para implementar el cliente o el servidor desocket permite un nivel de seguridad directamente dentro de su propia biblioteca. Por ejemplo, Flash requiereuna confianza que se creará en un dominio diferente que permite a ambas partes a autorizar la conexión. Encambio, una simple conexión realizada por la línea de comando no tiene ningún tipo de seguridad implica más

allá de los límites de un protocolo estándar.

NOTA Sockets puede ser una mala elección cuando se aplique en determinados sistemas o configuraciones,debido a su naturaleza, la conexión directa.

Implementación de un servidor socket 

El maestro de servidor socket puede ser implementada utilizando muchos lenguajes de programación común.

Page 165: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 165/467

165

Para un socket persistentes o nivel de producción, lo más probable es ejecutarlo desde un servidor activo paragarantizar que otros usuarios puedan conectarse a él y limitar el riesgo de una conexión abierta en el sistemalocal.

Entender la conexión del socket 

La conexión de socket en el siguiente ejemplo se encarga de comunicarse con el usuario. Las siguientessecciones explican el proceso.

Partes de un socket

Una conexión de socket está formado por dos piezas. La primera parte es la conexión principal o servidor, y lasegunda parte es de los clientes que se conectan con el maestro. Los clientes pueden hablar directamente conel maestro, pero no puede hablar en general, a otros clientes. Si desea que los clientes hablen entre sí sepondría en práctica un sistema de intercomunicación con el maestro.

Que hay que cumplir (Binding)

El socket principal está ligada a una determinada dirección IP y el puerto. Esto significa que la conexiónprincipal se hace a este punto concreto para garantizar la conexión es única. Los clientes que quierencomunicarse con el servidor de socket debe conectarse a la misma dirección IP y puerto que el maestro.

Escuchar (Listening)

Esto es similar a la del servidor de Web estándar. Una vez que el servidor de socket se inicia, a la escucha declientes activos y los nuevos que se quiere conectar. Estos clientes se añaden a la cola y comenzar a recibir lascomunicaciones del grupo.

Trabajar con Sockets en PHP Construcción de un servidor de socket en PHP requiere alguna configuración previa. Un servidor de socket enPHP no se pueden ejecutar desde la versión gráfica estándar debido a su conexión persistente. Un navegadorWeb estándar basado en la conexión sería tiempo de espera, o posiblemente accidente de la máquina host.

Una conexión de socket se ejecuta con el comando nongraphic versión en línea de PHP (CLI). El primer pasopara trabajar con sockets en PHP es para determinar si usted tiene esta versión CLI de PHP instalada, ya quenormalmente no se incluyen en un paquete de servidor Web.

Buscando la version de línea de commando de PHP 

La versión de línea de comandos (CLI), si está instalado, es generalmente accesible directamente desde laTerminal en un Mac o el símbolo del sistema en un PC (ver figura 8.1).

Para determinar si usted tiene esta versión, simplemente abra la línea de comandos. En Windows, haga clic enInicio y luego en Ejecutar. Escriba cmd en el cuadro de diálogo Ejecutar y haga clic en Aceptar. Si estás usandoun Mac, abra el Finder, vaya a Aplicaciones/Utilidades, y abra el Terminal.

Page 166: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 166/467

166

FIGURA 8.1Ejemplo de un símbolo del sistema en Windows XP  

Con la línea de comandos Abrir, escriba lo siguiente:

$ php -v

Este comando le dice a PHP que informe la información de versión y sale. El resultado debería ser algo similar alo siguiente:

PHP 5.2.5 (cli) (built: Dec 20 2007 02:55:52)Copyright (c) 1997-2007 The PHP GroupZend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Si recibe una respuesta similar a la siguiente, significa que la versión de PHP puede ser instalado, pero no anivel mundial, accesible desde cualquier línea de comandos y se requiere una configuración.

-bash: php: command not found

Usted tendrá que localizar la versión de línea de comandos o instalar a continuar con este capítulo.

CROSS--REF Véase el Capítulo 1 para obtener información sobre cómo instalar la versión de línea de comandosde PHP.

Construir un servidor socket 

Para crear un servidor de socket sencillo usando PHP, empezar por crear un archivo y guardarlo en un lugar deacceso común. Este archivo no tiene por qué estar en su directorio web y probablemente sólo será más difíciltrabajar si lo es.

NOTA Usted quiere asegurarse el archivo socket no es visible en la Web, ya que podría causar que su PHP paraque no funcione correctamente si un usuario malintencionado intenta ejecutar el archivo.

Para entender mejor cómo trabaja el socket, empezar con un ejemplo muy simple socket de servidor.

Page 167: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 167/467

167

Simple PHP-servidor basado en socket 

La primera parte del servidor de socket es determinar la dirección IP del servidor y número de puerto. Si estáejecutando el servidor local no es necesario para determinar su dirección IP física. En su lugar, puede utilizar ladirección local.

<?php

$host = “127.0.0.1”;$port = “8888”;

El número de puerto no es específico, pero debe ser único en la misma máquina para asegurarse de que nochoquen con cualquier otra aplicación en su sistema o red (si se usa de forma remota).

Este script PHP necesidad de informar a seguir corriendo porque es necesario para buscar y administrar lasconexiones de forma indefinida. Esto se logra mediante la aprobación de la función set_time_limit un valor de0, lo que significa esta secuencia de comandos no debe parar hasta que salió bien.

set_time_limit(0);

Con la configuración del camino, usted puede crear la conexión de socket principal.

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

Los tres argumentos que se pasan en la función socket_create define qué tipo de conexión que es y sonconstantes PHP. Para este ejemplo, no son importantes, pero que se explica más adelante en el capítulo.

La variable $sock ahora contiene un recurso de socket activo de identificación. El siguiente paso es enlazar elconector para el puerto definido en la primera parte del código.

socket_bind($sock, $host, $port);

Después de que el socket está enlazado al puerto, usted puede empezar a escuchar las conexiones. El primerargumento es la variable $socket, que tiene el socket de recursos de identificación. El segundo argumento esuna variable de retraso que le dice a PHP la cantidad de mensajes que hacer cola antes de que un error se pasaal cliente. Esta variable es una sugerencia ya que algunos sistemas se definen o reemplazar este valor. Porejemplo, Windows establece esta basado en el proveedor de servicios de base y, básicamente, ignora cualquiervalor usersubmitted.

socket_listen($sock, 4);

En este punto, usted ha construido un servidor de socket que no hace nada. Esto básicamente significa que elservidor se inicia y espera las conexiones entrantes, pero no controla en modo alguno. El siguiente paso esconfigurar la parte del servidor de socket que maneja las conexiones de entrada.

Es necesario crear otro conector que se encarga de las conexiones de entrada, haciendo un llamado asocket_accept pasa en el recurso id $socket.

$childSocket = socket_accept($sock);

Page 168: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 168/467

168

Desde este punto la variable $childSocket se utiliza para controlar todas las comunicaciones del cliente. Losdatos enviados desde una conexión que se lee con la función socket_read.

$incomingData = socket_read($childSocket, 2048);

Esta función toma dos argumentos. El primer argumento es el controlador de socket de cliente, y el segundo

argumento es el número de bytes para leer desde el cliente. Esto puede ser útil al intentar ejecutar un servidorde sockets más eficiente. También es una buena idea para limitar la salida en el lado del cliente (si es posible).

La función socket_read continúa cargando información en la variable $incomingData hasta el límite de datos esgolpeado o uno de los personajes se encuentra la siguiente: retorno de carro (\n), tabulador (\t), o \0. PHP lastrata como al final de caracteres de entrada y se mueve a la línea siguiente en la secuencia de comandoscuando se encuentra uno.

Responder a la conexión del cliente

Después de cargar los datos, el siguiente paso es el de actuar en esos datos y en la mayoría de los casos

responde al cliente.Por ejemplo, la siguiente es una simple pregunta/respuesta demo que tenga PHP en respuesta a una pregunta:

if(substr($incomingData, 0, -2) == “are you hungry?”){$response = “Server Response > I could eat!\n”;socket_write($childSocket, $response, strlen($response));} 

La función socket_write toma tres argumentos. La primera es que el niño toma de ID de recursos, el segundoargumento es la respuesta que se envía al cliente. El tercer argumento, que es opcional, es la longitud del$response. Este ejemplo sólo envía una respuesta al cliente cuando se le pide PHP si tiene hambre. Como

puede ver, esto no es una aplicación muy práctica, pero no explican claramente cómo sockets se establecen ycómo interactuar con ellos.

El último paso para la aplicación de ejemplo, antes de la prueba, es el cierre de las dos conexiones de socketpara liberar los recursos y permitir las conexiones a que se hizo.

NOTA Si desea seguir recibiendo conexiones que sólo desea quitar la variable $childSocket.

socket_close($childSocket);socket_close($sock);

Los enchufes pueden cerrarse en cualquier orden, pero es una buena práctica para cerrar el último maestro encaso de tener que recorrer varias conexiones de cliente primero.

Probar el servidor socket 

Prueba del servidor de socket que se puede hacer mediante un simple sistema o terminal, como se muestra enla Figura 8.2.Con la línea de comando abierto, inicie la versión de línea de comandos de PHP, pasando en el archivo deejemplo utilizando la opción -f.

Page 169: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 169/467

169

$ /path/to/php -f /path/to/socket/sample/simpleSocket.php

FIGURA 8.2Servidor de socket simple se ejecuta en el símbolo del sistema 

Usted notará que el indicador del sistema desaparece y el archivo PHP informes no hay actualizaciones. Esto nopuede ser un resultado muy deseable porque nada es lo que le permite saber que el servidor se estáejecutando actualmente.Usted puede agregar una declaración de impresión muy simple a la parte superior del archivo, tales como:

<?php

$host = “127.0.0.1”;$port = “8888”;

set_time_limit(0);

 print “Starting Socket Server...\n”;

...

Si detiene e inicia el servidor de sockets debería ver el mensaje impreso, similar a la siguiente:

$ /usr/bin/php -f /path/to/simpleSocket.php

Starting Socket Server...

NOTA Si reinicia el servidor de socket a menudo puede ver una advertencia que indique que el puerto está enuso.Puede intentarlo de nuevo o elegir otro puerto para continuar con las pruebas.

Cuando el servidor de socket está funcionando correctamente puede abrir un nuevo sistema y tratar deconectar el cliente con el servidor de socket.

Page 170: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 170/467

170

$ telnet 127.0.0.1 8888

Después de una conexión, un mensaje similar al siguiente debería aparecer:

$ telnet 127.0.0.1 8888Trying 127.0.0.1...Connected to localhost.

Escape character is „^]‟.

Esta aplicación sólo acepta un mensaje para ser enviado antes de ser terminado. Si usted escriba nada que nosea "¿Tienes hambre?" (“are you hungry?”), No verá una respuesta, a menos que haya modificado la preguntaque se pide en la aplicación socket.

Aquí está el código completo de este ejemplo:

<?php$host = “127.0.0.1”;$port = “8888”;set_time_limit(0);print “Starting Socket Server...\n”;$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);socket_bind($sock, $host, $port);socket_listen($sock, 4);$childSocket = socket_accept($sock);$incomingData = socket_read($childSocket, 2048);if(substr($incomingData, 0, -2) == “are you hungry?”){$response = “Server Response > I could eat!\n”;socket_write($childSocket, $response, strlen($response));

}

socket_close($childSocket);socket_close($sock);?>

La conexión se termina automáticamente cuando el mensaje se devuelve porque no hay ningún sistema en ellugar para buscar mensajes adicionales. Una aplicación más realista sería suponer algún tipo de bucle en lugarde buscar más de un mensaje.

Crear un persistente servidor socket 

El servidor de socket persistentes sería muy similar al del ejemplo anterior, con la excepción de un control de

bucle de mensajes nuevos.

Bucles (loops) Recursivos

PHP no ofrece un sistema asíncrono (basado en eventos) como se debería encontrar en ActionScript, perousted puede crear un bucle para lograr el mismo resultado.

Por ejemplo, aquí hay una muy simple bucle while similar a la que se utilizará en el ejemplo de conexiónpersistente:

Page 171: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 171/467

171

x = 0;while(x < 50){x++;}

Gestionar conexiones múltiples

La clave para permitir a un usuario para enviar más de un mensaje por conexión es envolver el socket_readpide que se encargan de comprobar si hay mensajes nuevos en un bucle.

do{// look for new messages$incomingData = socket_read($childSocket, 2048);if(trim($incomingData) == “are you hungry?”){$response = “Server Response > I could eat!\n”;

socket_write($childSocket, $response, strlen($response));}else if(trim($incomingData) == “exit”){$response = “Goodbye!\n”;socket_write($childSocket, $response, strlen($response));socket_close($childSocket);

 break;}else{$response = strtoupper(trim($incomingData)) . “\n”;

socket_write($childSocket, $response, strlen($response));}}while(true);

Si prueba el ejemplo, la conexión permanece activa hasta que cierre el sistema o que escriba "exit" cuando seconecta a la aplicación, que informa al servidor de socket para cerrar la conexión. También puede escribir nada,además de " exit " o la pregunta anterior y la respuesta será su entrada en mayúsculas.

Este sencillo ejemplo no tiene soporte para varios clientes, por lo que una vez cerrado el cliente, el servidortermina también. En la segunda parte de este capítulo se construye un completo de sockets basados enmultiusuario aplicación de chat que, por definición, permite más de una conexión en un momento.

Ahora debe entender cómo funciona sockets en PHP, así como la forma de aplicar de maneras diferentes,dependiendo de la aplicación. La siguiente parte se explica cómo trabaja los sockets en Flash. Luego, en elcapítulo final, se combina Flash y PHP para mandar y recibir información a través de sockets.

Page 172: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 172/467

172

Trabajar con Sockets en Flash 

Flash es considerado el lado del cliente de una conexión de socket. Esto significa que no se puede implementarun servidor de sockets, directamente en Flash, ya que Flash es una aplicación cliente-lado. Ser capaz de usarFlash como un servidor de sockets, si era posible, no sería muy beneficioso debido al hecho de que Flash es unaaplicación gráfica. En esencia, sería un desperdicio de recursos a utilizar Flash en un entorno de línea de

comandos.

Dicho esto, Flash hace un excelente cliente de servidor de socket. Telnet se utilizó en la sección anterior, que esuna manera de inicializar una conexión de cliente a un servidor de socket. Flash permite que las conexionesTCP, que requieren más y más el código de instalación en el principio.

La mayoría del código de conexión en la siguiente sección se puede construir en una clase o una bibliotecacomún para reducir al mínimo la cantidad de código necesario para crear una conexión de socket.

Inicialización de una conexión socket 

La primera parte de la inicialización de una conexión de socket es definir el host y el puerto para conectar.

var host:String = “127.0.0.1”;var port:uint = 8888;

Estas dos variables tendrá que ser el mismo que el código PHP que escribió en la sección anterior.O, si usted está utilizando el código suministrado, puede mantener los valores de la muestra sólo se muestra.

Una vez definidas las variables, crear una instancia de la clase Socket. El constructor de esta clase acepta dosparámetros. El primero es el anfitrión, y el segundo es el puerto para conectar.

var socket:Socket = new Socket(host, port);

A medida que continúe trabajando con las fuentes de datos dinámica, a encontrar rápidamente que loscontroladores de eventos adecuado que sea más fácil de entender cómo algo que está funcionando. Estosignifica que los detectores de eventos añadir al proceso de socket es una buena idea. Iniciar la construcción delas llamadas, y luego crear los controladores de eventos más adelante.

socket.addEventListener(Event.CLOSE, closeHandler);socket.addEventListener(Event.CONNECT, connectHandler);socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);socket.addEventListener(ProgressEvent.SOCKET_DATA,socketDataHandler);

Controladores de eventos (Event handlers) 

Las funciones de controlador de eventos usado en esta aplicación de ejemplo de seguimiento de los errores ala ventana de salida.Una aplicación más realista consistiría en exigir alguna lógica para manejar estos errores y responder al usuarioen consecuencia.

Page 173: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 173/467

173

function closeHandler(event:Event):void{trace(“Connection to [“ + host + “] closed”);}function ioErrorHandler(event:IOErrorEvent):void{

trace(event.text);}function securityErrorHandler(event:SecurityErrorEvent):void{trace(event.toString());}

Controladores especiales (Special handlers)

Este ejemplo tiene dos controladores de eventos especiales. El primer controlador de eventos especiales quese llama cuando una conexión es satisfactoria, que le informa que los mensajes pueden ser enviados al servidorde socket. Los mensajes enviados antes de una conexión adecuada se podría dar lugar a errores o mensajes

perdidos.

function connectHandler(event:Event):void{trace(“Connected to [“ + host + “]”);}

La función connectHandler es el lugar ninguna llamada al servidor debe ser hecho. Sería un buen lugar paraañadir la llamada del mensaje de la muestra, tales como:

function connectHandler(event:Event):void{trace(“Connected to [“ + host + “]”);try{socket.writeUTFBytes((“are you hungry?\n”);}catch(e:IOError){trace(e);} }

El segundo controlador de eventos especiales se llama cuando una respuesta es totalmente reunidos desde el

servidor de socket.Esto se utiliza para garantizar que los mensajes parciales no son evaluados, ya que podría provocar errores deprogramación que sería difícil hacer un seguimiento.

function socketDataHandler(event:ProgressEvent):void{trace(“Socket Server Response Loaded”);}

Page 174: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 174/467

174

Esta es la función en la que todo el código responde debe colocarse, de forma similar a la siguiente:

function socketDataHandler(event:ProgressEvent):void{var str:String = socket.readUTFBytes(socket.bytesAvailable);trace(“Socket Server Response: “ + str); }

Como puede ver, el trabajo con sockets en Flash no es tan diferente de cualquier otro objeto de datos. Laconsistencia del código a través de diferentes paquetes es un aspecto muy grandes de ActionScript.

Conexión remota de socket 

El ejemplo anterior se conecta a un socket local (en la misma máquina), pero es más realista que su aplicaciónse conecta a un socket remoto. Esto significa que debe configurar una confianza entre el cliente y el servidorque ejecuta el servidor de aplicaciones sockets.

Confianza de seguridad

Un trust (confianza) utiliza el archivo crossdomain.xml con los puertos que están autorizados, tales como:

<?xml version=”1.0”?><!DOCTYPE cross-domain-policy SYSTEM“http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”><cross-domain-policy><allow-access-from domain=”*” to- ports=”8888” /></cross-domain-policy>

Este archivo de acceso es que permite a cualquier cliente para conectarse en el puerto 8888 y no otro. Tambiénpuede definir un dominio si esta aplicación socket sólo será accesible desde otro sitio Web, tales como.

<?xml version=”1.0”?><!DOCTYPE cross-domain-policy SYSTEM“http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”><cross-domain-policy><allow-access-from domain=”anothersite.com ” to-ports=”8888” /></cross-domain-policy> 

La segunda parte de la confianza de seguridad es una llamada a allowDomain en el archivo de Flash. Estemétodo de la clase de seguridad es responsable de definir un dominio que se le permite conectarse a estecliente. Esta conexión sólo se producirá si el sitio remoto tiene un buen archivo de crossdomain.

Security.allowDomain(“example.com”);

Cargar el achivo de política

En raros casos, el archivo de política de dominio no está en la ubicación predeterminada, por lo que unallamada a la loadPolicyFile se puede hacer para informar a Flash donde encontrar el archivo decrossdomain.xml.

Security.loadPolicyFile(“http://example.com/newloc/crossdomain.xml”);

Page 175: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 175/467

175

Ahora debe saber cómo configurar un cliente basado en conexión de socket en Flash. Como puede ver, lamayoría de los códigos utilizados en una conexión de socket está a cargo de Flash.

Como se señala en el comienzo de esta sección, el código utilizado para crear una conexión de socket puedenser reutilizados en sus proyectos.

Uso de una clase para conexiones de socket Para entender mejor las conexiones de socket en Flash, vamos a empezar por ejemplo la construcción de unzócalo de base.Entonces una vez que los fundamentos están en su lugar, la siguiente sección abarcará la construcción de unsocket completo de la aplicación de chat basado en la utilización de Flash y PHP.

Calse basica de socket

Esta es una clase básica de socket que fácilmente define los elementos personalizables. Sólo necesitará guardarel código en un archivo de ActionScript con el nombre de SimpleSocket en el mismo directorio que eldocumento de muestra de Flash.

package{import flash.errors.*;import flash.events.*;import flash.net.Socket;public class SimpleSocket extends Socket{public var host:String;public var port:uint;private var socket:Socket;public static var SOCK_CONNECTED:String = “onSockConnect”;public static var SOCK_IOERROR:String = “onSockIOError”;

function SimpleSocket(h:String, p:uint){host = h;port = p;socket = this;super(host, port);initListeners();}public function sendMessage(str:String):void{if(connected){socket.writeUTFBytes(str + “\n”);}else{trace(“Not connected, message not sent!”);}}public function readMessage():void{if(connected){var str:String =

Page 176: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 176/467

176

socket.readUTFBytes(socket.bytesAvailable);trace(“Socket Server Response: “ + str);}else{trace(“No message read, not connected!”);}}

private function initListeners():void{socket.addEventListener(Event.CLOSE, closeHandler);socket.addEventListener(Event.CONNECT, connectHandler);socket.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);}private function closeHandler(event:Event):void{trace(“Connection to [“ + host + “] closed”);}private function ioErrorHandler(event:IOErrorEvent):void{

dispatchEvent(new Event(SOCK_IOERROR));}private function connectHandler(event:Event):void{trace(“Connected to [“ + host + “]”);dispatchEvent(new Event(SOCK_CONNECTED));}private function socketDataHandler(event:ProgressEvent):void{readMessage();}}} // last two braces are lined up for printing purposes 

Usar la clase SimpleSocket

El proceso de utilizar la clase SimpleSocket es bastante simple. Comience por la creación de una nueva películade Flash. Esta película hace una llamada de importación, que es responsable de cargar la clase personalizada.

import SimpleSocket;

var sock:SimpleSocket;

Para crear una conexión de socket, comience por hacer una nueva instancia de la clase SimpleSocket, pasandoen el host y el puerto de información para conectarse al servidor socket que desea.

sock = new SimpleSocket(„127.0.0.1‟, 8888);

Cuando se termina la llamada conexión de socket, se le desea asignar a los oyentes a los eventospersonalizados.Esta clase simple sólo tiene eventos para una conexión exitosa y otra para cualquier error de conexión.Puede ampliar la clase y agregar más controladores de eventos, según sea necesario.

sock.addEventListener(SimpleSocket.SOCK_CONNECTED, connected);sock.addEventListener(SimpleSocket.SOCK_IOERROR, ioError);

Page 177: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 177/467

177

El último paso es definir las funciones de controlador de eventos, tales como:

function ioError(e:Event):void{trace(“Can‟t connect to “ + sock.host + “ on port “ +sock.port);}function connected(e:Event):void{sock.sendMessage(“are you hungry?”);}

Ahora puede ejecutar la película y debe ver la siguiente salida si se construyó o cargado el código del servidorde zócalo y el servidor se está ejecutando actualmente.

“Connected to [127.0.0.1] Socket Server Response: ARE YOU THERE?”

Esta clase puede ser ampliado para permitir a los requisitos más específicos, pero usted debe tener unconocimiento básico de cómo el sistema de socket trabaja en Flash. En este punto usted también debe sabercómo construir una clase personalizada para manejar la mayoría de la conexión de socket y comunicación de

proceso.

La última sección se centra en la construcción de un cliente de chat multiusuario personalizado utilizando lainformación adquirida en las secciones anteriores.

Crear un cliente de Chat con Sockets Usando Flash yPHP 

En las secciones anteriores, usted aprendió cómo construir un simple servidor PHP socket. A continuación,construyó un cliente de Flash básico para comunicarse con el servidor de socket de PHP. En esta sección, se

combinan los pasos en una aplicación real. La aplicación que será construido es un cliente de chat multi-usuarioque se ejecuta en Flash con un servidor de sockets de PHP para manejar las conexiones.

Esta aplicación de chat multiusuario permite múltiples conexiones de los clientes para hablar entre otros con eladministrador de poder enviar mensajes específicos sobre el estado y los detalles de conexión.

Servidor socket PHP para el cliente de chat 

La parte de PHP de la aplicación será de dos archivos: el real de la clase de servidor de zócalo y la página quellama a iniciar el servidor de zócalo.

El servidor socket de clase esqueleto parece en el siguiente bloque de código. Como puede ver, la clase Sockettiene muchos métodos. De partirlos en fácil de mantener las partes crearán un mejor producto en el final.

class ChatServer{...function ChatServer($ip=‟192.168.1.110‟, $port=8888) {}public function startServer() {}public function stopServer() {}private function initLoop() {}private function createMasterClient() {}

Page 178: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 178/467

178

private function notifyClient($sockID, $buffer) {}private function notifyClients($clients, $sock, $buffer,$admin) {}private function handleError($str, $err) {}private function endSocket($sockID=null) {}private function serverMessage($str) {}}

Propiedades del Chat

La primera parte para centrarse en la clase son las propiedades, que se encarga de almacenar los mensajes deerror diferentes, así como detalles de la conexión.

private $ipAddress = null;private $port = null;private $masterClient = null;private $clients;// Server Messagesprivate static $SOCKET_CREATE_FAIL = “socket_create() failed”;private static $SOCKET_BIND_FAIL = “socket_bind() failed”;private static $SOCKET_LISTEN_FAIL = “socket_listen() failed”; private static $SOCKET_ACCEPT_FAIL = “”;private $LINE_ENDING = “\n”;private static $SHOW_ERRORS = 1; // display errors (0=off, 1=on)

Estos métodos son los establecidos como privado para garantizar que no sea accidentalmente accesible a otrosscripts.Puede configurar métodos get y set si decide que desea compartir estas o cualquiera de las propiedades de unaclase.

PRECAUCIÓN Tenga cuidado cuando autorice a los métodos y propiedades para ser accesible a nivel mundial.La falta adecuada bloquea estos elementos puede resultar en fallas de seguridad.

El método constructor es responsable de almacenar el host y el puerto de la información. Este método tambiénse crea una nueva matriz que almacenará la información del cliente conectado. Usted se dará cuenta de losvalores más comunes en el constructor están predefinidos. Esto significa que, si no de host o puerto se definepor la secuencia de comandos llamada se utilizan estos valores por defecto:

function ChatServer($ip=‟127.0.0.1‟, $port=8888){$this->ipAddress = $ip;$this->port = $port;$this->clients = array();}

La siguiente función es llamada por el segundo archivo PHP y es donde la función de servidor maestro, así como la función de sistema de escucha se llaman desde. La función stopServer izquierda está vacío porque elservidor de socket se apaga cuando la relación termina. Usted puede agregar más lógica que podría permitir ladesviación a distancia o incluso de cierre en un momento determinado.

public function startServer(){$this->createMasterClient();$this->initLoop(); }

Page 179: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 179/467

179

public function stopServer() { /* empty */ }

La función de initLoop, que se llama cuando se inicia el servidor, es el núcleo del servidor de socket.Esta función es responsable de la inicialización de nuevas conexiones y la escucha de los mensajes enviadosdesde las conexiones existentes. Esta función abarca la mayor parte de esta aplicación. Usted va a mirar enpartes.

El primer paso de esta función es la de restablecer la variable $socketsChanged que contiene la lista modificadade conexiones de socket.

private function initLoop(){$socketsChanged = null; while(true){// connection and message loop}}

El contenido del bucle while es donde la mayoría de los clientes y control de mensaje aparece. La función

socket_select será responsable de modificar el estado de lectura de un socket de nuevos datos se encuentra,que lo señala, y añade al socket de la matriz de los sockets cambiado para ser doblada a través.Este es usado para limitar el control de los datos en los bucles foreach.

NOTA La función socket_select modifica la matriz. Es una buena idea hacer una primera copia.

...while{$socketsChanged = $this->clients;$write = NULL;$except = NULL;

socket_select($socketsChanged, $write, $except, NULL);foreach($socketsChanged as $socket){...} }

Se podría ampliar esta funcionalidad a múltiples métodos en la clase, pero es una buena idea guardar todos loscódigos pertinentes, junto.

El bucle foreach se ejecuta a través de cada conexión de socket activo. Se comprueba en el servidor maestro yluego se revisan para asegurarse de que existe un cliente activo. Si no hay cliente activo existe el script exits,porque algo ha ido mal y el código no será capaz de continuar.

foreach($socketsChanged as $socket){if($socket == $this->masterClient){if (($client = socket_accept($this->masterClient)) < 0){$this->handleError(ChatServer::SOCKET_ACCEPT_FAIL,„‟);continue;

Page 180: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 180/467

180

}else{array_push($this->clients, $client);}}else{

...}}

Si el cliente se ha agregado y la instancia del servidor principal existe, la otra parte del código se ejecute. Estaparte comprueba el búfer de mensaje para un mensaje válido. Si no se encuentra buffer válido, la conexión delcliente finaliza. Esta rutina de limpieza garantiza que los recursos no se están desperdiciando.

Excluyendo el servidor maestro de la comunicación 

Suponiendo que un mensaje válido se encuentra, el valor se almacena en una variable de cadena nueva y elservidor maestro se retira de la matriz. Esto se hace para garantizar todos los mensajes o el mantenimiento no

se producirá en la conexión principal. Por ejemplo, un mensaje de difusión de informar a los clientes delservicio no es algo que el servidor maestro tiene que recibir.

La función array_shift elimina el primer elemento y rekeys la matriz, básicamente cambiando todos loselementos de uno.

if($socket == $this->masterClient){...}else{$buffer = „‟; // filled by socket_recv (undocumented)$bytes = socket_recv($socket, $buffer, 2048, 0);if($bytes == 0){$this->endSocket($socket);}else{$allclients = $this->clients;array_shift($allclients); // remove master$specialString = $buffer;}...}

Parametros especiales del chat

Cuando se encuentra un mensaje válido, se comprueba de los parámetros especiales. Esto podría ser un simplepetición "exit" o una bandera de administración más avanzada que se utiliza para notificar a los clientes conmensajes de servicio.Los tipos de mensajes especiales son sólo un ejemplo de casos de uso. Usted puede cambiar, agregar o eliminarlos mensajes especiales, dependiendo de cómo configurar su cliente de chat.

Page 181: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 181/467

181

// look for admin beaconif(substr($specialString, 0, 7) == “[admin]”){$this->notifyClients($allclients,$socket, substr($buffer, 7), true);}

El mensaje "exit" es llamado por un cliente que quiere salir de chat. Si el usuario simplemente cierra la películade Flash, el servidor de socket quita el usuario de la lista en el siguiente bucle paso. Esto le da al usuario unaforma de dejar limpio el sistema y ver un mensaje "adiós" (“Goobye”) de que él o ella a salido.

else if(substr($specialString, 0, 4) == “exit”){$this->serverMessage(“Closing Connection: “ . $socket);$this->notifyClient($socket, “Goodbye”);$this->endSocket($socket);}

A más avanzada aplicación de chat probablemente habría documentación en el sitio Web. Este comando "help"te muestra otra forma de entregar los comandos más utilizados directamente a sus clientes conectados. Usted

se dará cuenta de este comando es muy similar al "hombre" de comandos que se encuentra en las terminalesUNIX.

else if(substr($specialString, 0, 4) == “help”){$this->notifyClient($socket, “Chat Help:\n”. “Type exit to leave chat”);}

Si no se encuentra ningún mensaje especial, simplemente transmitir el mensaje sin editar a todos los otrosclientes. Este sistema aún se mostrará su comentario a usted. Una aplicación más completa sería necesarioestablecer para excluir el autor del comentario que no se actualicen.

else{$this->notifyClients($allclients, $socket, $buffer);}

Como puede ver, el método initLoop tiene un montón de responsabilidades y maneja una buena parte de todoel servidor de socket.

Conexión cliente - maestro

El método createMasterClient se llama cuando se inicia el socket de servidor. Este método inicializa el servidorde socket y crea la conexión principal a la que todos los demás clientes se conectan.

private function createMasterClient(){if(($this->masterClient = socket_create(AF_INET, SOCK_STREAM,SOL_TCP)) < 0){$this->handleError(ChatServer::SOCKET_CREATE_FAIL,$this->masterClient);} 

Page 182: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 182/467

182

Las opciones de socket se establecen para permitir la reutilización de la dirección local, que informa de PHP desobrescribir la conexión existente está permitido. Usted establece este a false si quiere mantener una relaciónúnica.

socket_set_option($this->masterClient, SOL_SOCKET,SO_REUSEADDR,1);

Antes de la conexión inicial se puede hacer, debe asegurarse de que la dirección está disponible y no en usopor una aplicación existente.

if(($bindRes = socket_bind($this->masterClient,$this->ipAddress, $this->port)) < 0){$this->handleError(ChatServer::SOCKET_BIND_FAIL, $bindRes);}

Suponiendo que la dirección está disponible, se hace una llamada a socket_listen, lo que hace que el socketlisto para recibir peticiones de conexión. Una vez hecha la conexión, el cliente principal es añadido a la matrizdel cliente y el proceso de inicialización se ha completado.

if(($ret = socket_listen($this->masterClient, 5)) < 0){$this->handleError(ChatServer::SOCKET_LISTEN_FAIL, $ret);}$this->clients = array($this->masterClient);

El último paso en el método de createMasterClient es enviar un mensaje de servidor que informa al operadorde servidor que un nuevo servidor de chat se ha inicializado. En este ejemplo, el operador es que, por lo que sedará cuenta de una declaración de impresión en el sistema cuando se inicia el servidor.

$this->serverMessage(“Chat Server Started”);}

Notificar a un cliente específico

Hay dos tipos de notificaciones a clientes en esta aplicación de chat. El primer tipo es una notificación mundialy el segundo tipo es para un solo usuario. La sola notificación de usuario es más comúnmente utilizado paraenviar mensajes de estado a un cliente.

El único método de usuario acepta dos parámetros que definen el conector específico de identificación y elmensaje a enviar a ese cliente. Un bucle foreach es usado para encontrar el cliente específico, y si la encuentra,una llamada a socket_write que se haga, enviando el mensaje.

private function notifyClient($sockID, $buffer)

{foreach($this->clients as $client){if($client == $sockID){socket_write($client, $buffer . $this->LINE_ENDING);}}}

Page 183: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 183/467

183

Notificar a todos los clientes

La notificación global es similar al método de un solo usuario, con la excepción que comprueba si se envía elmensaje ha de ser marcado como un mensaje de administración. La bandera de administrador se puedeestablecer cuando se hace una llamada a notifyClients. El valor por defecto es falso, asegurando que losmensajes de cliente no pueden ser marcados como provenientes de la administración.

private function notifyClients($clients, $sock, $buffer, $admin){foreach($clients as $client){if($admin == true){socket_write($client, “ADMIN NOTICE: “ . $buffer);}else{socket_write($client, $sock . “ wrote: “ . $buffer);}}

}

Controlar errores

Como la aplicación sigue funcionando, está obligada a tener un error o dos. En lugar de tirar estos errores dedistancia, es una buena idea para capturarlos y al menos los mostrará en el servidor. Un ejemplo de uncontrolador de errores de base se puede ver aquí:

private function handleError($str, $err){if(ChatServer::SHOW_ERRORS){$this->serverMessage(($str . “: reason: “. $err) . $this->LINE_ENDING);} }

El método de handleError comprueba primero que los errores deben ser mostradas por el control de lapropiedad estática de SHOW_ERRORS, definido en la parte superior del archivo de clase. El passed-in elmensaje de error que se transmite al método serverMessage, que lo imprime.Usted puede llamar al método serverMessage directamente, pero utilizando este sistema de transmisión lepermite capturar los errores y mantener el código limpio. No tendría sentido tener la condición deSHOW_ERRORS en serverMessage porque un mensaje no siempre es un error.

Finalizar una conexiónLa conexión se termina cuando el cliente cierra el navegador o aplicación. Sin embargo, el usuario tambiénpuede cerrar la conexión mediante el envío de los parámetros especiales de "exit". Un método de terminaciónde conexión se utiliza para garantizar la matriz de conexiones activas está correctamente manejada. Estemétodo también eliminará el maestro de clientes activos, si no existe, en última instancia poner fin a laconexión con el servidor propio zócalo.

Page 184: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 184/467

184

La función array_search se utiliza para encontrar el socket id de cerrar. Esta función devuelve el id de la matriz.Esto se utiliza para eliminar la conexión de la lista y poner fin a la conexión de socket específico.

private function endSocket($sockID=null){// close master if no socket is defined if($sockID == null){$sockID = $this->masterClient;}$index = array_search($sockID, $this->clients);unset($this->clients[$index]);socket_close($sockID);}

Monitoriar servidor

El último método de la clase de chat se utiliza para imprimir los mensajes sobre el servidor directamente alsocket activos del sistema, por lo general se ejecutan en el servidor Web para que los clientes esténconectando.

private function serverMessage($str){ print $str . $this->LINE_ENDING;}

Conectar al servidor socket 

La conexión al chat de primera clase construido en la sección anterior es manejado por el segundo archivo PHP.Este archivo será el que podríamos llamar cuando quiere iniciar el servidor de chat. La construcción del sistemade esta manera le permite abandonar el chat de clase en su propio y duplicar la conexión sin modificar elcódigo.

Construir el archive de conexion

He aquí un ejemplo de conexión en el dominio localhost, también conocida comúnmente como la dirección debucle invertido de su máquina o el servidor.

#!/usr/bin/php -q<?phpinclude „ChatServer.php‟;

La primera línea se utiliza para definir el comando a la terminal. No es necesario, pero no significa que ustedpuede excluir a los interruptores, en este caso el -q que se utiliza para suprimir la producción de cabecera

HTTP, cuando se llama al script PHP. La próxima línea incluye la clase ChatServer, lo que le permite llamardesde ese punto.

Una vez que el archivo se incluye adecuadamente puede hacer un nuevo ejemplo chat, pasar en el host y elpuerto que le gustaría comenzar a escuchar. En este ejemplo, la máquina local se utiliza y está enlazado alpuerto 8888. El número de puerto no tiene por qué ser la misma, ya que sólo necesita ser abierto. Es unabuena idea escoger un número de puerto que no será utilizada por otras aplicaciones en su sistema.

$chatServer = new ChatServer(“127.0.0.1”, 8888);

Page 185: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 185/467

185

El último paso es iniciar el servidor y permitir que otros se conecten a ella. Para detener el servidor puedecerrar el terminal o pulse Ctrl + C, que en la mayoría de los terminales pondrá fin al proceso activo.

$chatServer->startServer();

Aquí está el código completo de este sencillo test:

#!/usr/bin/php -q<?phpinclude „ChatServer.php‟;$chatServer = new ChatServer(“127.0.0.1”, 8888);$chatServer->startServer();?>

Probar la conexión

Para la prueba simple, puede conectar al servidor de chat utilizando el método de telnet, como se muestra enla Figura 8.3, que se explicó al comienzo del capítulo. Este método representa una gráfica y la limitación de uso,por lo que la próxima sección es el proceso de desarrollo de la aplicación Flash que se conecta a este servidor

de sockets de PHP.

FIGURA 8.3Ejemplo de servidor de chat se ejecuta en el símbolo del sistema 

Page 186: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 186/467

186

Crear el cliente en Flash 

El cliente de chat Flash se utiliza para interactuar con el servidor de socket. Esta aplicación cliente se puedeusar en forma local o en un sitio web, dependiendo de cómo el servidor de socket está configurado. Para esteejemplo, el código asume que el servidor de socket se ejecuta localmente.

La parte de diseño del cliente de Flash se ha terminado para usted, como se muestra en la Figura 8.4. Estearchivo de arranque se encuentra en el sitio Web para este libro, junto con el código de todas las demássecciones.

La primera parte del código de Flash inicializa el host y el puerto de información, que se pasa a una nuevainstancia de la clase Socket.

var host:String = “127.0.0.1”;var port:uint = 8888;

var socket:Socket = new Socket(host, port);

FIGURA 8.4La aplicación completa, que puede encontrarse en el sitio Web del libro 

Page 187: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 187/467

187

Después de realizada la conexión, asignar los detectores de eventos, que será llamado cuando los nuevos datosse envían o se carga.

socket.addEventListener(Event.CLOSE, closeHandler);socket.addEventListener(Event.CONNECT, connectHandler);socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);socket.addEventListener(ProgressEvent.SOCKET_DATA, sockHandler);

El cliente de chat también necesita los controladores de eventos que serán asignados a la caja de mensajes detexto y botones de entrada de presentación, tales como:

msgTxt.addEventListener(Event.CHANGE, inputHandler);

clearBtn.addEventListener(MouseEvent.CLICK, clearButtonHandler);sendBtn.addEventListener(MouseEvent.CLICK, sendButtonHandler);

El último controlador de eventos se le asignará al teclado para permitir el uso de la tecla Intro para enviarmensajes. Esto no es un paso necesario, pero añade funcionalidad a la aplicación.

addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);

Funciones de control de eventos

Las funciones que se asignan a los controladores de eventos se puede ver en el siguiente código. Como puedever, estos controladores de eventos tienen la funcionalidad básica para este ejemplo, pero podría ampliarse enuna aplicación de mundo más real.

function closeHandler(event:Event):void{statusMessage(“Connection to [“ + host + “] closed”,

“#FF0000”);disableInterface();}function connectHandler(event:Event):void{statusMessage(“Connected to [“ + host + “]”, “#006600”);sendRequest();}function ioErrorHandler(event:IOErrorEvent):void{statusMessage(event.text, “#FF0000”);}function securityErrorHandler(event:SecurityErrorEvent):void{

statusMessage(event.toString(), “#FF0000”);}function sockHandler(event:ProgressEvent):void{readResponse();}

Page 188: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 188/467

188

Capturar pulsaciones de teclas

El controlador de eventos claves (Key) tiene un código especial. Esto atrapa caso de que el momento presionala tecla y el control para ver si es la tecla Enter. Para este ejemplo, la única clave para buscar es Enter. Si ustednecesita más de una, se podría definir en una matriz o utilizar un modificador de declaración switch..case.

Si el presionar la tecla Intro, se haga una llamada a dispatchEvent, obligando al hacer clic con el botón "Enviar".

function keyDownHandler(e:KeyboardEvent):void{if(e.keyCode == Keyboard.ENTER){sendBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));} }

Controlar envoi de mensajes

El controlador de clave hace una llamada al evento, haga clic en el botón "Enviar", que se asigna a la función

siguiente. Esta función comprueba la longitud del TextInput msgTxt y, si la longitud es mayor que cero, seprepara el mensaje y se envía.

El último paso de esta función es para desactivar la casilla de mensajes para garantizar el mismo mensaje queno está molesta.Se podría añadir el código de compensación en el controlador de estado. Esta claro que el campo una vez quesabe que el mensaje ha sido enviado. Esto le permite conservar el mensaje y evitar mensajes perdidos debido afallos en la red.

function sendButtonHandler(e:MouseEvent):void{if(msgTxt.text.length > 0)

{ writeLine(msgTxt.text);clearBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));}}

Borrar (Clearing) el mensaje de la entrada

La función clearButtonHandler es llamado cada vez que desea borrar el campo de entrada de texto ydeshabilitar el botón “Enviar” un mensaje nuevo hasta que se introduzca. Los botones se desactivarán cuandoel evento de cambio de envío en la siguiente sección.

function clearButtonHandler(e:MouseEvent):void{ msgTxt.text = “”; msgTxt.dispatchEvent(new Event(Event.CHANGE));}

Page 189: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 189/467

189

Checking the text input length

Cuando un mensaje nuevo se incluye o el cuadro de entrada se borra, una llamada a un cambio en el cuadro demsgTxt se hace. Este evento es responsable de comprobar la longitud del texto en el cuadro de entrada yactivar o desactivar los botones Enviar y borrar, como se muestra en la Figura 8.5, en función del resultado dela verificación de la longitud.

function inputHandler(e:Event):void{if(e.target.text.length > 0){clearBtn.enabled = true;sendBtn.enabled = true;}else{clearBtn.enabled = false;sendBtn.enabled = false;} }

FIGURA 8.5Resultados de la aplicación en el estado desactivado 

Page 190: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 190/467

190

Mantener una interfaz estable

Para crear una aplicación estable, la interfaz y los botones están desactivados cuando no hay una conexiónactual.

function enableInterface():void{

 msgTxt.enabled = true; bodyTxt.enabled = true;}function disableInterface():void{

 bodyTxt.editable = false; msgTxt.enabled = false;clearBtn.enabled = false;sendBtn.enabled = false;}

Estos habilitan y deshabilitan las funciones son llamadas de otras partes del código, en función del resultado de

la conexión activa. Por ejemplo, la función disableInterface se llama desde el closeHandler, que se distribuyecuando se termina una conexión activa.

function closeHandler(event:Event):void{...disableInterface();}

Enviar (Sending) la solicitud inicial

La función sendRequest se llama cuando se realiza una conexión. Esta función envía datos a la función de

estado y borra toda la información existente en la cola en la conexión del socket.function sendRequest():void{statusMessage(“Send initial request to [“ + host + “]”,“#006600”);socket.flush();enableInterface();}

Envío de mensajes en el servidor de socket 

El proceso de hecho envía los mensajes en el servidor de socket se maneja en la función writeLine. Esta función

se llama writeLine de la entrada y presentar los controladores, que se definen en la porción anterior del código.

function writeLine(str:String):void{...}

Page 191: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 191/467

191

La primera parte de la función es añadir una nueva línea en el mensaje, que puede tener en cuenta es el finaldel indicador de mensajes en PHP.

str += “\n”;

Esta función también hace uso de los try..catch el estilo de programación para garantizar los errores en elproceso de envío están correctamente capturados y oculta para el usuario. Para simplificar, el error se muestra

en la ventana de salida. En una aplicación más realista, usted desearía informar al usuario si el mensaje no fueenviado, así como almacenar el mensaje intenta enviar de nuevo más tarde.

try{socket.writeUTFBytes(str);}catch(e:IOError){trace(e);}

Controlar actualizaciones de estado

Esta aplicación posee un cuadro de situación, que se utiliza para notificar al usuario de la posible conexión oproblemas de mensaje. Todas estas actualizaciones de estado se envían a la función de statusMessage, que lasinserta en la casilla de estado y los colores en consecuencia.

function statusMessage(str:String, color:String=”#000000”):void{statusTxt.htmlText += “<font color=\””+ color + “\”>”+ str + “</font>”;}

Un color por defecto se aplica en caso de que la persona que llama se olvida de definir uno. La no inclusión deun color predeterminado podría resultar en el texto no se añade.

La última función en esta aplicación basado en socket de chat se llama cuando un nuevo mensaje se recibedesde el servidor de socket.

function readResponse():void{}

La primera parte de esta función recupera el mensaje nuevo de la clase socket y lo asigna a la variable str, quese utiliza en la parte restante de esta función.

var str:String = socket.readUTFBytes(socket.bytesAvailable);

Antes de que el mensaje se pueda visualizar, debe quitar todas las líneas extra nuevo que podría afectar acómo se muestra el texto. Esto se realiza mediante una función de subcadena muy básicas que devuelve elmensaje de exclusión de los dos últimos caracteres, que en este caso sería "\r\n".

// strip off line feedsif(str.substring((str.length-2), str.length) == “\r\n”)

Page 192: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 192/467

192

{trace(“found \\n\\r”);

str = str.substring(0, (str.length-2));}

Una vez que las nuevas líneas se han eliminado, el siguiente paso es determinar si este mensaje fue enviadopor un administrador. Este ejemplo permite a cualquier *usuario* a ser un administrador. En una aplicaciónmás completa, usted quiere exigir a ingresar antes una cuenta de administrador puede ser utilizado. Si elmensaje es de un administrador, el contenido del mensaje son de color rojo, para que los mensajes deadministración se resalten.

if(str.substring(0, 12) == “ADMIN NOTICE”){bodyTxt.htmlText += “<font color=\”#FF0000\”>” + str +“</font>”;}

Si el mensaje es estándar, entonces simplemente se agrega a el área de texto y la función termina, esperandoel siguiente mensaje para ser recuperado.

else{bodyTxt.htmlText += “<font color=\”#000000\”>” + str +“</font>”;}

Eso es todo lo que hay a la basada en Flash cliente de chat con un servidor de sockets en PHP. En este punto,usted puede iniciar el servidor de socket (a menos que ya se está ejecutando) y probar el cliente de chat, comose muestra en la Figura 8.6.Siendo que este sistema está pensado para múltiples conexiones, puede llamar a algunos de sus amigos y hacerque lo prueben.

O bien, puede modificar el código para permitir conexiones remotas y dejar a muchos usuarios conectarsemediante el envío de un enlace a la aplicación Flash.

Aquí está el código completo para el cliente de chat de ejemplo:

var host:String = “127.0.0.1”;var port:uint = 8888;

var socket:Socket = new Socket(host, port);

socket.addEventListener(Event.CLOSE, closeHandler);socket.addEventListener(Event.CONNECT, connectHandler);

socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);socket.addEventListener(ProgressEvent.SOCKET_DATA, sockHandler);msgTxt.addEventListener(Event.CHANGE, inputHandler);addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);clearBtn.addEventListener(MouseEvent.CLICK, clearButtonHandler);sendBtn.addEventListener(MouseEvent.CLICK, sendButtonHandler);

this.align = StageAlign.TOP_LEFT;

Page 193: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 193/467

193

this.scaleMode = StageScaleMode.NO_SCALE;

function writeLine(str:String):void{str += “\n”;try{socket.writeUTFBytes(str);

}catch(e:IOError){trace(e);}}

function sendRequest():void{statusMessage(“Send initial request to [“ + host + “]”,“#006600”);socket.flush();enableInterface();

}

function readResponse():void{var str:String = socket.readUTFBytes(socket.bytesAvailable);

// strip off line feedsif(str.substring((str.length-2), str.length) == “\r\n”){trace(“found \\n\\r”);str = str.substring(0, (str.length-2));}

if(str.substring(0, 12) == “ADMIN NOTICE”)

{bodyTxt.htmlText += “<font color=\”#FF0000\”>” + str +“</font>”;}else{bodyTxt.htmlText += “<font color=\”#000000\”>” + str +“</font>”;}}

function enableInterface():void{

msgTxt.enabled = true;bodyTxt.enabled = true;}function disableInterface():void{bodyTxt.editable = false;msgTxt.enabled = false;clearBtn.enabled = false;sendBtn.enabled = false;}

Page 194: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 194/467

194

function statusMessage(str:String, color:String=”#000000”):void{statusTxt.htmlText += “<font color=\”” + color + “\”>” + str +“</font>”;}

function clearButtonHandler(e:MouseEvent):void{

msgTxt.text = “”;msgTxt.dispatchEvent(new Event(Event.CHANGE));}

function sendButtonHandler(e:MouseEvent):void{if(msgTxt.text.length > 0){writeLine(msgTxt.text);clearBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));}}

function inputHandler(e:Event):void{if(e.target.text.length > 0){clearBtn.enabled = true;sendBtn.enabled = true;}else{clearBtn.enabled = false;sendBtn.enabled = false;}}

function closeHandler(event:Event):void{statusMessage(“Connection to [“ + host + “] closed”,“#FF0000”);disableInterface();}

function connectHandler(event:Event):void{statusMessage(“Connected to [“ + host + “]”, “#006600”);sendRequest();}

function ioErrorHandler(event:IOErrorEvent):void{statusMessage(event.text, “#FF0000”);}

function securityErrorHandler(event:SecurityErrorEvent):void{statusMessage(event.toString(), “#FF0000”);}

function sockHandler(event:ProgressEvent):void

Page 195: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 195/467

195

{readResponse();}

function keyDownHandler(e:KeyboardEvent):void{if(e.keyCode == Keyboard.ENTER){

sendBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));}}

// disable interface until connecteddisableInterface(); 

FIGURA 8.6

La aplicación Chat se ejecuta en el navegador  

Page 196: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 196/467

196

Resumen 

En este capítulo, usted ha aprendido lo que es un servidor de socket y cómo están construidos. A continuación,aprendieron a construir un servidor de socket sencillo y conectarse a él utilizando Flash. Una vez que había unacomprensión del Flash y PHP partes del proceso, el paso final es construir una aplicación multiusuario completade chat con un servidor de sockets en PHP corriendo detrás de las escenas.

Usted puede tomar la información aprendida en este capítulo y ampliarlo para crear una aplicación de chattotalmente funcional. Puede agregar características tales como la moderación, los miembros, temporizadores,salas de chat, y así sucesivamente. Es importante darse cuenta de que los sistemas de servidor de socket no selimitan a las aplicaciones de chat. Usted puede utilizar esta misma tecnología para construir una aplicación dedibujo multiusuario o incluso construir una arquitectura de monitoreo de servidor multipunto.

Como puede ver, sockets de corriente se puede utilizar en una variedad de maneras. Una vez que aprendas lobásico, su imaginación es el único límite a su desarrollo.

Page 197: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 197/467

197

Parte III

Ampliar Flash y PHP 

Page 198: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 198/467

198

Capitulo 9

Trabajar con Librerias de terceros El uso de bibliotecas de terceros sigue creciendo a medida que las aplicaciones más exigentes se estándesarrollando. Bibliotecas de terceros a menudo a resolver un problema o realizar una tarea común más fácilesde manejar, que permite al desarrollador centrarse en los aspectos más importantes de la aplicación de.

La primera parte de este capítulo está dedicado a explicar qué bibliotecas de terceros son, cómo usarlos, y loque se necesita para instalar una biblioteca.

La segunda parte de este capítulo se centra en el uso de AMFPHP en Flash.AMFPHP es básicamente una librería PHP que ofrece un vínculo común entre Flash y una base de datos, así como otros tipos de datos.

Repasando librerias de terceros

Una tercera parte es la colección de un paquete personalizado o un pedazo de código que es desarrollado poruna compañía u organización a trabajar con el producto de otra compañía. Por ejemplo, si nos fijamos en elnavegador Firefox, hay una serie de plug-ins y mejoras que son liberadas por los desarrolladores notrabajadores de Mozilla.

Los desarrolladores tienen distintas opiniones sobre bibliotecas de terceros, una de las preocupaciones másimportantes acerca de estas bibliotecas es la seguridad. Tienes que tener cuidado al trabajar con otras

porciones de código, especialmente si no tienen el tiempo o los conocimientos para investigar a fondo la formaen que funciona el código.

Los problemas de seguridad son aún más importantes cuando no se conoce a la parte que se desarrolló en labiblioteca o si la biblioteca está en contacto con algún aspecto de seguridad de su aplicación.

Por ejemplo, no es una buena idea usar una cookie o sesión en la biblioteca de un programador desconocido. Silo hace, puede introducir los agujeros de seguridad en su aplicación.

Hay algunas excepciones notables al trabajar con bibliotecas de terceros y aplicaciones seguras.Por ejemplo, si usted está construyendo una aplicación de tienda, es una suposición razonable de que ustedestará interactuando con algún tipo de sistema mercantil, como Authorize.net, Miva, o PayPal.

Estos sistemas ofrecen las bibliotecas de terceros que puede conectarse fácilmente a su solicitud y se sabe queson seguros porque se han probado completamente en diferentes entornos.

Page 199: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 199/467

199

Otros tipos de librerias de terceros 

Estas bibliotecas externas no se limitan a la seguridad o la manipulación de datos. Esto se debe al hecho de queFlash es un programa de diseño también. Hay muchos y excelentes bibliotecas de terceros disponibles paraacelerar el desarrollo y el proceso de diseño.

En algunos casos, estas librerías externas proporcionan una funcionalidad que no es posible, directamente enFlash/ActionScript.

Librerias comerciales Flash

Hay algunas bibliotecas que se está construyendo tienen licencias comerciales, lo que significa que tienen elcódigo más extensamente desarrollado. Usted no tendrá ningún problema para obtener soporte para estasbibliotecas.

Por ejemplo, gskinner.com tiene una robusta biblioteca de verificación y conjunto de componentes que estádisponible para su compra. Esta biblioteca le permite construir en tiempo real un motor de correcciónortográfico en su aplicación con sólo unas pocas líneas de código. Usted puede encontrar más información

acerca de la biblioteca gskinner el corrector ortográfico en el sitio Web de la empresa enwww.gskinner.com/products/spl/. 

Librerias Flash de código abierto

Usted también encontrará una amplia selección de las bibliotecas de código abierto libre para todos losaspectos del desarrollo y despliegue de aplicaciones. Un ejemplo de una biblioteca de código abierto esAMFPHP, que se examina en detalle en la sección "Echando un vistazo a AMFPHP".

Hay muchas otras bibliotecas de código abierto disponibles, como MCtweener, que es similar a la biblioteca deTween incluido con mayor funcionalidad. Además, la documentación del proyecto contiene una gran cantidad

de código de ejemplo.

Algunas otras bibliotecas de código abierto disponible para ayudar en su proceso de desarrollo se muestran enla tabla 9.1.

TABLA 9.1

Librerias de código abiertoRed5 Open Source Flash Server http://osflash.org/red5Papervision3D Open Source 3D engine http://code.google.com/p/papervision3d/as3corelib AS3 library for several http://code.google.com/p/as3corelib/

basic utilities

Esta es sólo una pequeña porción de la línea completa de las bibliotecas de código abierto disponible paraActionScript 3. Se le debería dar una buena idea de no sólo cómo ampliable ActionScript 3, sino también a losdesarrolladores de cómo muchos han pasado largas horas en desarrollo de estas herramientasimpresionante. Aún más sorprendente es el hecho de que estas bibliotecas son gratuitos, lo que significa quelos desarrolladores más, incluido usted, puede crear contenido más interesante y atractivo, sin costesadicionales.

Page 200: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 200/467

200

Librerias en PHP 

Hay también muchas bibliotecas disponibles para PHP, que incluyen la gestión de sesiones, la manipulación dela imagen, conectividad de bases de datos, y la gestión de servidores en general para nombrar unospocos. Básicamente, PHP se construye utilizando bibliotecas de terceros ya que PHP en sí mismo es unproyecto de código abierto. Esto significa que muchos desarrolladores de diferentes contribuir con código al

proyecto.

Algunas de las bibliotecas más comunes de PHP incluye la librería GD, que se discute el capítulo 12.Tabla 9.2 Las otras listas comunes de las bibliotecas de PHP que va a utilizar en su proceso de desarrollo.

TABLA 9.2

Common PHP LibrariesLibrería Descripción Source . Pear Una librería estructurada de http://pear.php.net/

código opensourceImageMagick Suite de software para crear, editar, www.imagemagick.org/

y componer imagenes de mapa de bits

PDF Library Librería de creación PDF para PHP www.php.net/pdf 

Instalar librerias de terceros 

Ahora debe tener una comprensión de lo bibliotecas de terceros están disponibles para su uso en el desarrollode ActionScript 3.

El proceso de instalación de estas bibliotecas de terceros es muy similar, no importa qué biblioteca es.

NOTA Compruebe los requisitos de la versión de las bibliotecas para asegurarse de que trabajará con

ActionScript 3 o la versión de PHP que se esté utilizando.

Instalar librerias en Flash CS3 

Después de seleccionar las bibliotecas de terceros que desea utilizar, el siguiente paso es la instalación deestos. El proceso de instalación de una biblioteca de código en CS3 depende de la clase específica.

Instalar como un archivo MXP

Una forma de una biblioteca o un conjunto de componentes puede ser distribuido para la portabilidad es en elformato MXP. Estos archivos se cargan en el Extension Manager que se incluye con Flash CS3 y muchas otras

aplicaciones de Adobe (ver Figura 9.1).

La ventaja de usar esta aplicación es incluir sus librerías para gestionar y se puede activar, desactivar oactualizar las librerías individuales en un agradable interfaz gráfica de usuario manejable. Esta aplicacióntambién contiene enlaces directos al sitio Web del desarrollador de apoyo o de documentación en línea.

Page 201: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 201/467

201

FIGURA 9.1Extensión de los buques Manager con Flash CS3 y otras aplicaciones de Adobe. 

Instalar como un paquete de clase estándar

El otro método de instalación más común es añadir manualmente las clases a la ruta de clases de FlashCS3. También necesita copiar la clase de archivos en los directorios de intercambio de que Flash sabe quebuscar en las bibliotecas de terceros.

Es una buena idea crear una nueva carpeta en una parte separada de su equipo para que accidentalmente nomodificar las clases por defecto que vienen con Flash CS3.

Crear una ruta de clases personalizadas

Con el fin de agregar una ruta de clase personalizado, primero debe crear un directorio en su computadorapara almacenar sus clases. Después de determinar que el directorio que va a utilizar, añadir esta nueva ruta deacceso a la ruta de listas de clases existentes.

Para añadir una nueva ruta de clases a la lista existente, siga estos pasos:

1. Seleccione EditarPreferencias (Windows). En un Mac, selecciona FlashPreferencias para abrir elcuadro de diálogo Preferencias.2. Haga clic en ActionScript en la lista Categoría y, a continuación, haga clic en Configuración deActionScript 3.0.3. Haga clic en Examinar con el Path, y busque el directorio que desee agregar. Haga clic en Aceptar.

Usted también puede agregar una ruta de clase para el proyecto específico de Flash mediante la modificaciónde la configuración de ActionScript en el cuadro de diálogo Configuración de publicación. Agregar la ruta de

Page 202: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 202/467

202

clase a un proyecto tiene la ventaja de que se moverá con la FLA, que significa que este archivo puede sercompartida y la rutas de clases global no deben ser modificados.

Ruta de clases (classpaths) por defecto

La ruta de clases por defecto de todos los documentos de Flash puede ser modificado para que no tenga queactualizar cada archivo Flash individuales. Los siguientes son los lugares donde Flash espera encontrar los

archivos de clases, basada en una instalación por defecto.Windows: Disco duro\Documents and Settings\user\Local Settings\Application Data\Adobe\Adobe FlashCS3\language\Configuration\Classes.

Macintosh: Disco duro/Users/user/Library/Application Support/Adobe/Adobe FlashCS3/language/Configuration/Classes.

NOTA No elimine la ruta de clases global absoluta. Flash utiliza esta ruta de clases de acceso integrado en lasclases. Si elimina esta ruta de clases puede volver a agregar mediante el siguiente trozo de código como unaruta nueva de clase: $(LocalData)/Classes.

Instalar librerias en PHP 

Bibliotecas de PHP se han compilado directamente en el proceso de instalación de PHP. Sin embargo, con eluso de PEAR y otros sistemas comunes de biblioteca estructurado, puede instalar nuevas bibliotecas tras lainstalación inicial que ha completado.

Un ejemplo de una biblioteca externa que se utiliza comúnmente y se puede agregar después de instalar PHPes la biblioteca de MySQL. Esta biblioteca se utiliza para comunicarse con una base de datos directamente enPHP.

El primer paso es abrir el archivo php.ini, elimine el archivo de biblioteca de mysql, y modificar la ubicación de

la ruta de MySQL y el conector de puerto si elige otro diferente cuando se instala MySQL.

NOTA Es necesario reiniciar el servidor Apache después de modificar el archivo php.ini.Si una vez que reinicie Apache, MySQL y todavía no está funcionando adecuadamente, entonces usted puedetener una versión antigua instalada. Esto significa que usted puede tener que volver a compilar PHP.

CROSS--REF Para obtener información acerca de volver a compilar PHP, véase el Capítulo 1.

Uso de librerias de terceros 

El primer paso para trabajar con bibliotecas de terceros es descargar los archivos de biblioteca en el sitio web

del desarrollador. Una vez que haya descargado los archivos de biblioteca de clases, el siguiente paso esinstalar y configurar la librería de terceros.

Normalmente, la biblioteca viene con un kit de prueba para asegurarse de que todo está funcionandocorrectamente. Este paso no es obligatorio, pero minimiza la depuración necesaria en su aplicación final.

Si la biblioteca no viene con un kit de prueba, usted puede crear rápidamente una, que se explica en lasiguiente sección.

Page 203: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 203/467

203

Trabajar con librerias en Flash CS3 

Para determinar si las clases se carga correctamente, puede crear una aplicación de prueba de una parteespecífica de una clase que figura en la librería.

Para este ejemplo, se utiliza la biblioteca as3CoreLib de Adobe. Esta clase contiene una serie de clases de

utilidad para todo, incluyendo la manipulación de imágenes todo el camino a la seguridad tales comoherramientas de creación de valor hash MD5.

Aquí está un ejemplo de aplicación utilizando la funcionalidad de MD5:

import com.adobe.crypto.MD5;

function createHash(e:MouseEvent):void{

responseTxt.text = MD5.hash(origStrTxt.text);

}

createBtn.addEventListener(MouseEvent.CLICK, createHash);

La primera parte de esta aplicación importa las clases necesarias. En este ejemplo, que sería la clase MD5 en elpaquete de cifrado.

La función se llama cuando se pulsa el botón. Una vez que se llama la función, el siguiente paso es crear unhash de nuevo llamando al método hash estático de la clase MD5. Por último, la cadena de nueva creación sedevuelve al componente TextInput responseTxt encontrada en la escena.

Esa es la aplicación completa. Se trata de un uso muy simple, pero le informa cuando las clases adecuadasestán instaladas y funcionan correctamente.

Trabajan en este tipo de unidad es muy común en el desarrollo porque si una aplicación se hace demasiadogrande es mucho más difícil de depurar y gestionar.

Trabajar con librerias en PHP 

Bibliotecas en PHP son muy similares a las porciones compiladas de PHP, pero aún debe probar que después deinstalar una nueva biblioteca. Normalmente, también tendrá que reiniciar Apache para que los nuevos cambiosde PHP para tener efecto. Muchas veces las instrucciones de instalación de una biblioteca se habla de esto,pero en cualquier caso hay que hacer.

Probar la librería MySQL

Para la prueba de apoyo de MySQL usted no tiene que crear un ejemplo elaborado, de hecho, puede crear unscript que garantiza que no funciona bien, pero le informará si MySQL se ha instalado correctamente o no.

Esto no es una práctica muy común, pero en el interés de la prueba rápida funciona muy bien.

NOTA Después de ejecutar el código que usted sabe que va a fallar es una buena idea para limpiar los registrosde errores para que no se confunda más adelante en el camino.

Page 204: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 204/467

204

Aquí está el código de la prueba simple.

<?php

// no password is sure to fail,// unless it is a default installation

mysql_connect(“localhost”, “root”, “”);

?>

Los intentos de sencilla aplicación para conectarse a la base de datos, y si se muestran de usuario no válido o labase de datos no seleccionada entonces usted sabe MySQL está instalado correctamente.

Sin embargo, si usted ve un error grave: función no encontrado ... significa que MySQL no ha sidoadecuadamente configurado o instalado para trabajar con PHP.

Usted puede crear un archivos phpinfo rápida para determinar si MySQL se ha instalado y para rastrear el errorespecífico.

Instalar la librería de MySQL

La biblioteca de MySQL se incluye normalmente con PHP, pero no viene activado por defecto. El primer paso esabrir el archivo php.ini para la versión de PHP que tiene instalado.

Usted encontrará una sección en el archivo php.ini con el título de “*mysql+”.Aquí es donde debe configurar lainstalación de MySQL.

Una vez finalizada la configuración, el siguiente paso es eliminar la línea en la lista de bibliotecas que tiene elnombre "mysql" dentro de ella.

En este punto, la configuración se ha completado, el último paso es reiniciar Apache y probar el script anterior,una vez más, que debería mostrar un error de conexión y no el error fatal de PHP.

Echando un vistazo a AMFPHP 

AMFPHP es una implementación de código abierto de la Action Message Format (AMF). AMF permite laserialización binaria de objetos de ActionScript para ser enviados al servidor de secuencias de comandos.

AMFPHP para desarrolladores de AS3 y PHP 

Los desarrolladores de PHP pueden aprovechar su experiencia en PHP mediante la conexión a datos, talescomo servicios Web y bases de datos. AMF permite tipos de datos nativos y la cartografía de objeto complejoentre el cliente y el servidor. AMFPHP es una de las más populares y de más rápido servidor de los protocolosde cliente de comunicación disponibles para los desarrolladores de Flash Player. Comunicación se organiza enformato binario, que generalmente es más compacta que otras representaciones.

Page 205: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 205/467

205

AMFPHP y ActionScript 3

ActionScript 3 permite la compresión de las comunicaciones, lo que significa la salida más rápida de lasllamadas y, en general un mejor rendimiento. Además, AMF3, que está disponible en ActionScript 3, tambiéncomprime la comunicación binaria para un mayor rendimiento.

Instalar AMFPHP

Instalación de AMFPHP es simple. Las secuencias de comandos requiere un servidor PHP y no necesitan losservicios adicionales o de las bibliotecas instaladas. Esto ofrece la ventaja de la configuración de casiinstantánea, que permite al desarrollador a concentrarse en la aplicación real en lugar de preocuparse por loque está ocurriendo detrás de las escenas.

Para instalar AMFPHP, primero descarga la última versión, que está disponible gratuitamente desde el sitioweb SourceForge en http://sourceforge.net/project/showfiles.php?group_id=72483#files.SourceForge es la mayor Web de código abierto de desarrollo del sitio Web que aloja una serie de diferentesproyectos como AMFPHP.

El contenido de los archivos descargados se colocan en la raíz de su servidor Web en un nuevo directorio comoflashservices o cualquier nombre que elija.

AMFPHP está casi listo para ir a la derecha de la caja. El único archivo que debe modificar es gateway.php, quese encuentra en la raíz del directorio de instalación. En este caso, el camino sería flashservices/gateway.php. Enalgunos casos, puede dejar todos los ajustes en el valor predeterminado, que es lo que se utiliza para esteejemplo.

Probar la instalación

Cuando todo está correctamente instalado, usted puede probar la instalación de AMFPHP mediante la apertura

de la gateway.php en su navegador Web. Por ejemplo, suponiendo que la instalación se realiza a nivel local, laURL sería http://localhost/flashservices/gateway.php. 

Una pantalla, como se muestra en la Figura 9.2, debe aparecer que le informa de que la instalación se realizócorrectamente. Si ocurre un error, un error de PHP o una serie de errores, parece que le ayudará a determinarlo que posiblemente fue mal.

Herramientas de depuración AMFPHP

Antes de comenzar cualquier desarrollo, vistazo a alguna depuración y herramientas de visualización que sesuministran con AMFPHP. Estas distintas herramientas se puede utilizar para depurar sus servicios.

PRECAUCIÓN Asegúrese de quitar estas herramientas de depuración en un servidor en vivo para reducir almínimo los problemas de seguridad.

Page 206: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 206/467

206

FIGURA 9.2Ejemplo del mensaje de bienvenida AMFPHP visto desde gateway.php llamando desde tu navegador Web

Navegador de servicios AMFPHP

El navegador de servicio AMFPHP, como se muestra en la Figura 9.3, es una aplicación basada en Flash que tepermite ver los distintos servicios y examinar de cerca sus métodos y propiedades. También puede utilizar elnavegador de servicio para probar el nuevo código antes de escribir el código ActionScript en Flash.

Usando estas herramientas de depuración añadidas le permite desarrollar aplicaciones más rápidamente yprueba de nuevos conceptos, con menos sobrecarga. También ayudan en la depuración de su código.

Depurar gateway de AMFPHP

La depuración de Gateway es script que se encuentra entre Flash y el gateway.php archivo para envolvererrores. Es una buena práctica de utilizar esta secuencia de comandos durante la depuración o el desarrollo anivel local. El único cambio en su código es para señalar a la debuggateway.php archivo en lugar de lagateway.php archivo estándar.

Page 207: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 207/467

207

FIGURA 9.3He aquí un ejemplo de servicio, visto desde el servicio de navegador de AMFPHP.

Los siguientes son algunos puntos importantes a tener en cuenta con el uso de este portal especializado:

  Las sesiones no funcionarán correctamente.  cURL deben estár habilitadas en PHP.  El servidor experimenta un descenso en el rendimiento.  Sólo se debe utilizar en un sistema de desarrollo.

Probar AMFPHP con un servicio personalizado 

Con AMFPHP correctamente instalado, puede probar un servicio muy sencillo con el navegador de servicios.

Más tarde, a construir una pequeña aplicación de búsqueda en Flash y PHP.

Un servicio de AMFPHP es un archivo estándar de PHP que se construye en un orden conocido. Por ejemplo, laprimera parte de un archivo de servicio es la tabla de métodos, que se utiliza para exponer los métodosdisponibles y definir las restricciones de acceso de ese servicio.

Un cuadro de métodos es una matriz multidimensional que contiene cada uno de los métodos. En esta tabla sedefine el método de muestreo del método getDate, que devuelve el timestamp UNIX actual de PHP. La tabla demétodos se encuentra en el constructor de la clase visto en la parte siguiente de código.

Page 208: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 208/467

208

$this->methodTable = array(“getDate” => array(“access” => “remote”,“description” => “Example, returns Unix timestamp”)

);

Siguiendo con este ejemplo, crearía la muestra de clase PHP, que se convertirá en el servicio de AMFPHP. Estaes la clase de muestra, que contiene un método y el constructor.

<?phpclass Example{function Example(){$this->methodTable = array(“getDate” => array

(“access” => “remote”,“description” => “Returns the current date.”)

);}/*** Returns Current Date*/function getDate(){// return current date

return “Current Date: “ . date(“F j, Y”, time());}} ?>

NOTA El comentario sobre la función getDate será visto por el servicio de navegador y lo mostrará acontinuación el método. Esto no es necesario, pero ayuda a entender lo que es un servicio no de un vistazo.

Guardar este archivo como Example.php en el directorio /services que se encuentran en la raíz del directoriode AMFPHP.

Aquí está la ubicación de este archivo si instala AMFPHP en la raíz de su servidor Web:

http://localhost/flashservices/services/Example.php.

Ahora que este servicio simple se crea que puede probar yendo al navegador de servicio. Usted podrá ver sunuevo servicio, ubicado en la lista del lado izquierdo junto con otros servicios ya instalados. Si usted no ve elservicio, haga clic en Actualizar o volver a cargar la página mediante la actualización de su navegador.

Para probar el servicio, haga clic en el nombre en la lista del lado izquierdo, que carga el servicio en el panel deexploración a la derecha. El nombre del método se encuentra en la ficha de prueba, que en este ejemplo sedenomina getDate.

Page 209: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 209/467

209

Haga clic en el botón de Call (llamada) para ejecutar el servicio. Verá la salida de los servicios en la fichaResultados se encuentra en la parte inferior del panel de exploración.

La salida del servicio del ejemplo debe ser la fecha actual en formato de cadena, tales como.

“Current Date: October 5, 2007”

Las otras pestañas son para ver los datos de servicio, que se utiliza para la depuración y el seguimiento generalde sus servicios.

Este ejemplo es bastante simple. No tiene parámetros y no crea ningún código real. Usted puede ampliar en elservicio anterior mediante la adición de otro método, que capitaliza la primera letra de cada palabra en lacadena. La parte de la capitalización del código se hace usando una función integrada de PHP llamadaucwords. Esta función acepta un parámetro y devuelve la cadena en mayúsculas.

<?php

class Example{

function Example(){

$this->methodTable = array(“getDate” => array(“access” => “remote”,“description” => “Returns the current date.”),

“upperCaseWords” => array(“access” => “remote”,“description” => “Converts arg to uppercase”));}

/*** Returns Current Date*/function getDate(){// return current datereturn “Current Date: “ . date(“F j, Y”, time());

}

function upperCaseWords($str){return ucwords($str);} 

}

?> 

Page 210: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 210/467

210

Después de que el nuevo método se añade que es visible en el navegador de servicio (después de unaactualización). Después de buscar en el navegador de servicio, usted se dará cuenta de una ventaja del métodoes que el cuadro AMFPHP agrega automáticamente cuadros de texto con el nombre de la variable para cadaargumento encontrado.

El nuevo método acepta un argumento tal como se define en el código de servicio. Si escribe algún texto en elcuadro de texto y ejecutar el método, se capitaliza la cadena.

Por ejemplo, si utiliza la cadena "hello world", verá la salida del siguiente:

“Hello World”

Servicios de AMFPHP puede, por supuesto, tienen más de un argumento en un método. Crear otro nuevométodo que tiene tres argumentos. El primer argumento es una cadena, el segundo una palabra a buscar, y latercera es la palabra de sustitución. Básicamente, usted está creando una búsqueda basada en PHP yreemplazar el método.

Comience por la actualización de la tabla de métodos.

$this->methodTable = array(“getDate” => array(“access” => “remote”,“description” => “Returns the current date.”),“upperCaseWords” => array(“access” => “remote”,“description” => “Converts arg to uppercase”),“searchAndReplace” => array

(“access” => “remote”,“description” => “Searches and replaces text”) );

Cuando se actualiza la tabla de métodos, se añade el nuevo método. Usted no está limitado al código en elmétodo. AMFPHP le permite llamar a otros métodos y propiedades de la misma clase o incluso incluir otrosficheros PHP para mayor funcionalidad.

/*** Searches and replaces text*/function searchAndReplace($haystack, $needle, $replacement){$string = str_replace($needle, $replacement, $haystack);return $this->upperCaseWords($string);}

NOTA Si crea un nuevo método, y no se añade en la tabla de métodos, no va a ser exportados para suremota. Esto es útil cuando se quiere disponer de métodos privados, tales como conectividad de bases dedatos, o capas de seguridad global.

Page 211: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 211/467

211

Después de que el nuevo método, se añade, se puede comprobar por actualización del navegador deservicios. Notificación de los métodos que se enumeran en orden alfabético. El nuevo método se encuentra enla mitad de la lista horizontal.

El navegador de servicio agrega un campo de texto para cada argumento, en este caso hay tres. Escriba unacadena en el primer campo de texto, elija una de las palabras de esa cadena como la aguja, a continuación, que

entrará en la segunda TextField. Por último, el tipo de reemplazo en el campo de texto de terceros. Después delos tres campos de texto se rellenan, puede hacer clic en el botón de llamada y ver el resultado en la fichaResultados.

Suponiendo que se utilice la cadena "hola mundo" con la aguja de "mundo" y la sustitución de la "tierra",debería ver el siguiente resultado. La palabra es reemplazada y la primera letra de cada palabra en mayúsculasutilizando el método de upperCaseWords.

“Hello Earth”

Ahora que ha probado a fondo los servicios de AMFPHP, puede pasar a la instalación de las clases necesarias

requeridas para Flash para realmente ser capaz de hacer uso de esta instalación. Ese proceso se explica en lasiguiente sección.

Uso de AMFPHP en Flash 

A diferencia de versiones anteriores, ActionScript 3 tiene todas las clases necesarias para la interacción remotae interactuar con AMFPHP ya instalado. Simplemente cargue las clases y escribir en el código ActionScript, quees todo bastante sencillo. Esta sección le guía a través del proceso de construcción de una aplicación Flashsimple para entender mejor el proceso de trabajo con AMFPHP en Flash.

Cargar clases remoting

El primer paso para trabajar con AMFPHP en Flash es para cargar las clases.Esto es necesario para cualquierproyecto AMFPHP a construir, ya que contiene el núcleo del sistema remoto.

import flash.net.*;

When the classes are loaded, you can define a variable that points to the AMFPHP gateway file.

var gatewayURL:String =“http://localhost/flashservices/gateway.php”;

El siguiente paso es crear la instancia de NetConnection, que se asigna a la variable de puerta de enlace. Eneste punto, también puede configurar el método de los acontecimientos que se llama cuando se hace clic en unbotón.

var gateway:NetConnection;

getDateBtn.addEventListener(MouseEvent.CLICK, getDate);searcBtn.addEventListener(MouseEvent.CLICK, searchAndReplace);upperCaseWordsBtn.addEventListener(MouseEvent.CLICK,upperCaseWords);debugTxt.wordWrap = false;

Page 212: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 212/467

212

Aquí está el esqueleto de los controladores de botón que se creará en la parte siguiente. Cada una de estasfunciones hace una llamada al servicio de AMFPHP.

function getDate(e:MouseEvent):void{...}

function searchAndReplace(e:MouseEvent):void{...}

function upperCaseWords(e:MouseEvent):void{...}

El primer método en el cual concentrarse es getDate, que hará una llamada al servidor sin argumentos y recibeuna cadena de la fecha actual. Responder a la clase se utiliza para controlar la respuesta de objeto para el éxito

y el fracaso tanto de la llama.var responder:Responder = new Responder(onResult, onFault);

La siguiente parte de la función asigna una nueva instancia de la clase NetConnection. Una llamada al métodoconnect se llama paso en la puerta de entrada variable url. Una vez establecida la conexión, se realiza unallamada cuando el primer argumento es el nombre del servicio y el método. La segunda variable es unareferencia a la instancia de clase Responder.

gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Example.getDate”, responder);

Esta es la función getDate completo la responsabilidad de establecer la conexión AMFPHP y llamando alservicio solicitado.

function getDate(e:MouseEvent):void{var responder:Responder = new Responder(onResult, onFault);gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Example.getDate”, responder);}

Las otras dos funciones son muy similares, con excepción del nombre del método y los argumentos pasados alservicio.

La función searchAndReplace acepta tres argumentos.

  arg1: La cadena (string) a buscar en  arg2: La palabra para buscar  arg3: La palabra a remplazar

Page 213: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 213/467

213

El servicio ubicado en la configuración de AMFPHP es responsable de ejecutar el método searchAndReplace,pero también hace una llamada al método de mayúsculas antes de regresar a la cadena.

function searchAndReplace(e:MouseEvent):void{var responder:Responder = new Responder(onResult, onFault);

gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Example.searchAndReplace”, responder,“hello world”,“world”,“earth”);}

La función final es upperCaseWords, que tiene un argumento y devuelve una nueva cadena con la primera letrade cada palabra en mayúsculas. El resto de la función es la misma que las dos anteriores. Este es un buenejemplo de AMFPHP ser capaz de lograr algo que no es nativo de ActionScript, que, por supuesto, es la parte enmayúsculas.

function upperCaseWords(e:MouseEvent):void{var responder:Responder = new Responder(onResult, onFault);

gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Example.upperCaseWords”, responder, “hello world ”);}

Una vez que las tres funciones de responsable de llamar a los servicios que están definidos, la siguiente partees el resultado de la depuración y funciones que son llamadas cuando el servicio devuelve una respuesta

válida.

La función onResult se llama cuando se recibe un mensaje de éxito. En este sencillo ejemplo, el contenido enbruto de la producción son enviados a la componente TextArea situado en el escenario. También puedereemplazar la porción de TextArea del código con simples trace() para los estados más rápidode la prueba.

function onResult(responds:Object):void{

debugTxt.text = “Response: “ + responds;

}

Si ocurre un error, la función onFault se llama, que contiene el error específico. Para ver mejor el error, elcontenido del objeto se ejecutan a través de una bucle for..in, que muestra cada elemento.Esta función también borra el área de texto para asegurar que los datos anteriores no se mezclen en el quepodría causar confusión al tratar de depurar una aplicación.

El método de appendText AS3 es la sustitución de la forma "+ =" de la concatenación de cadenas en lasversiones anteriores de ActionScript. Este método es mucho más rápido, lo que significa más rápida ejecuciónde código.

Page 214: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 214/467

214

function onFault(responds:Object):void{

debugTxt.text = “”;debugTxt.appendText(“Debug::Error\n”);for(var i in responds){

debugTxt.appendText(“ “ + responds[i] + “\n”);}

}

Figuras 9.4, 9.5, y 9.6 muestran ejemplos de las respuestas de las aplicaciones de muestra dentro deAMFPHP. Usted puede ampliar en estos ejemplos para construir una aplicación más completa, que se realiza enla siguiente sección.

El primer ejemplo se muestra la respuesta del método getDate de las clases de la muestra AMFPHP. Esteejemplo devolverá la fecha actual en el formato de cadenas.

FIGURA 9.4Aquí hay una respuesta del ejemplo a partir del primer método AMFPHP servicio.

Page 215: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 215/467

215

El segundo ejemplo acepta un argumento y reemplaza el texto. Todo esto es un ejemplo sencillo, mostrando elproceso de trabajo con los argumentos en AMFPHP.

FIGURA 9.5Aquí hay una respuesta del ejemplo a partir del segundo método AMFPHP servicio.

El tercer y último ejemplo es una respuesta de carbono. Básicamente se toma la cadena passed-in y devuelveexactamente como fue enviado.

Page 216: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 216/467

216

FIGURA 9.6Aquí hay una respuesta del ejemplo a partir del tercer método AMFPHP servicio.

Construir una aplicación del mundo real usandoAMFPHP 

Ahora que ha visto el uso del servicio AMFPHP y cómo aplicarla en Flash, se puede continuar la construcción deuna aplicación real. Un buen ejemplo de una aplicación en el mundo real es un Flash de aplicaciones basadasen lista de álbumes, que se explica en las siguientes secciones.

La base de datos utilizada para este ejemplo es la misma que se crea en el capítulo 2. Si usted no hacompletado el capítulo para este punto, recomiendo empezar por ahí.

Servicios de AMFPHP

Los servicios de AMFPHP necesarios para este ejemplo es responsable de consultar la base de datos basada enlos argumentos passed-in. Esto también requiere un sistema de conexión de base de datos que deben serseguras.Esto significa que los métodos no serán exportables o visible por AMFPHP.

Page 217: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 217/467

217

Para simplificar, toda esta funcionalidad se incluye en uno de servicios. Sin embargo, en una aplicación máscompleta, usted desea separar las clases en los diferentes servicios de una solución más portátil.Figura 9.7 muestra la aplicación completa.

FIGURA 9.7Aquí está la aplicación completa del ejemplo del mundo real.

La primera parte de la aplicación son los servicios de AMFPHP. Aquí está el esqueleto de clase para el serviciode álbum, que le da una mejor comprensión de la funcionalidad.

<?php

class Albums{

function Albums(){

...}

function connect(){...}

function getAlbumByGenreID($genreID){

Page 218: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 218/467

218

...}}

?>

El comienzo de cualquier proyecto AMFPHP debe ser la tabla de métodos ya sea incluido en el archivo de unmismo servicio o en un archivo separado que se incluye. La ventaja de usar el mismo archivo se puede crearrápidamente los cambios y no tienen que mantener un archivo diferente.

La tabla de método en este ejemplo se incluye en la función constructora de servicios. El método de conexiónes privado para garantizar un mayor nivel de seguridad.

function Albums(){

$this->methodTable = array(“connect” => array(

“access” => “private”),“getAlbumByGenreID” => array(“access” => “remote”)); 

}

El método de conexión comprueba en primer lugar para una conexión existente de limitar los recursos. Si unaconexión existente no se encuentra, una nueva se crea y almacena en la variable privada _connection.

/*** @access private* @desc Connect to database - **PRIVATE***/function connect(){

if($this->_connection == null){$this->_connection = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass);mysql_select_db($this->dbName, $this->_connection);}

}

Los parámetros de conexión se almacenan en las variables privadas dentro de la clase. Para un nivel adicionalde seguridad, las variables se hizo privado a prohibir el acceso exterior de la base de datos de las credencialessensibles.

Page 219: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 219/467

219

// Database infoprivate $dbHost = “localhost”;private $dbUser = “username”;private $dbPass = “password”;private $dbName = “database name”;

private $_connection = null;

El último método de la clase de servicio es la getAlbumByGenreID, que devuelve una matriz de datos de discobasado en el género ID pasa como un único argumento. La parte de la función establece una conexión con labase de datos con el sector privado método connect() definido en el paso anterior.

function getAlbumCatID($genreID){$this->connect();...}

Una vez establecida la conexión de base de datos, el siguiente paso es la construcción de la cadena $sql.

$sql = “SELECT g.name, a.artist, a.albumNameFROM albums a, genre gWHERE a.genreID=g.idAND g.id=” . $genreID;

La cadena $sql se pasa a mysql_query() con la conexión de base de datos como el segundo argumento .

$result = mysql_query($sql, $this->_connection);

El último paso de la función es la de crear la matriz asociativa de datos del álbum.

$rows = array();while($row = mysql_fetch_array($result, MYSQL_ASSOC))

{array_push($rows, $row);}return $rows;

Una alternativa a la creación de la matriz en PHP usando un bucle while es pasar el identificador de recurso devuelta a Flash y el uso de un registro conjunto personalizado de clase para analizar los datos de la fila afila. Hacer esto en Flash tiene parte de la carga fuera del servidor y hace un mejor uso de la máquina delcliente.

Las versiones anteriores de Flash tenía una clase RecordSet nativo. En AS3, usted tendría que crear su propiaclase. Esta clase ha sido añadido a los contenidos extra disponibles en el sitio Web del libro y adecuadamente

imita la clase RecordSet de AS2.

El primer paso en el trabajo con la clase recordSet es de modificar el método de disco (álbum).

/*** List of albums for RecordSet*/function getAlbumByGenreID($genreID){

Page 220: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 220/467

220

$this->connect();

$sql = “SELECT g.name, a.artist, a.albumNameFROM albums a, genre gWHERE a.genreID=g.idAND g.id=” . $genreID;return mysql_query($sql, $this->_connection);

}

Aqui esta la clase Album completo:

<?php

class Albums{

// Database infoprivate $dbHost = “localhost”;private $dbUser = “username”;private $dbPass = “password”;

private $dbName = “db name”;

private $_connection = null;

function Albums(){

$this->methodTable = array(“connect” => array(“access” => “private”),“getAlbumByGenreID” => array(“access” => “remote”,

“description” => “List of albums from categoryID.” ));

}

/*** @access private* @desc Connect to database - **PRIVATE**

*/function connect(){

if($this->_connection == null){$this->_connection = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass);

Page 221: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 221/467

221

mysql_select_db($this->dbName, $this->_connection);}}

/*** List of albums from genre ID.*/function getAlbumByGenreID($genreID)

{

$this->connect();

$sql = “SELECT g.name, a.artist, a.albumNameFROM albums a, genre gWHERE a.genreID=g.idAND g.id=” . $genreID;

$result = mysql_query($sql, $this->_connection);

$rows = array();

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){array_push($rows, $row);}return $rows;

}

/*** List of albums for RecordSet*/function getAlbumByGenreID_recordset($genreID){

$this->connect();

$sql = “SELECT g.name, a.artist, a.albumNameFROM albums a, genre gWHERE a.genreID=g.idAND g.id=” . $genreID;return mysql_query($sql, $this->_connection);

}

}

?> 

Integración de ActionScript para AMFPHP

El siguiente paso es la construcción de la parte Flash de la aplicación, que se encarga de mostrar los datos delálbum en un componente DataGrid precompilados.

Los cambios de la función sólo están dentro de la función onResult para este ejemplo más completo.

function onResult(responds:Object):void

Page 222: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 222/467

222

{

albumsDG.removeAll();for(var i:uint=0; i < responds.length; i++){albumsDG.addItem(responds[i]);}

}

Borrar resultados viejos

La función onResult borra todos los datos existentes en el DataGrid haciendo una llamada al método removeAlldel componente DataGrid.

albumsDG.removeAll();

Después que se ha limpiado el DataGrid un for..loop es usado para insertar los datos de la fila de la base dedatos.El addItem acepta un objeto como argumento. El control DataGrid es también lo suficientemente inteligente

como para emparejar los nombres de objeto para ser usado como los títulos de la columna.

for(var i:uint=0; i < responds.length; i++){albumsDG.addItem(responds[i]);}

El resto del ejemplo es la misma que la prueba de la aplicación de conceptos. Aunque no es una adición a laaplicación, el nombre del método del servicio debe ser modificado si usted decide utilizar el camino deRecordSet (registros) de mostrar la fila de datos.

Aquí está el código fuente completo del ejemplo de aplicación del álbum.

import flash.net.*;

var gatewayURL:String =“http://localhost/flashservices/gateway.php”;var gateway:NetConnection;

function loadAlbumData(e:MouseEvent):void{

var responder:Responder = new Responder(onResult, onFault);

gateway = new NetConnection();

gateway.connect(gatewayURL);gateway.call(“Albums.getAlbumByGenreID”, responder, 4);

}

function onResult(responds:Object):void{

albumsDG.removeAll();for(var i:uint=0; i < responds.length; i++){

Page 223: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 223/467

223

albumsDG.addItem(responds[i]);}

}

function onFault(responds:Object):void{

for(var i in responds){trace(“[“ + i + “]\t” + responds[i]);}

}

loadAlbumBtn.addEventListener(MouseEvent.CLICK, loadAlbumData);

Como puede ver, trabajar con datos dinámicos usando AMFPHP tiene muchas ventajas sobre los métodosnormales de trabajo con los datos.

Esta sección debería haber dado una buena comprensión de cómo trabajar con AMFPHP en ActionScript3. Usted puede tomar los conceptos aprendidos en esta sección y basarse en la información de otros en estelibro para crear una aplicación muy robusta.

Resumen 

Usted aprendió el proceso de trabajar con bibliotecas de terceros en la primera parte del capítulo. Luego, en lasegunda parte que fueron introducidos a cómo instalar correctamente las bibliotecas de terceros. Una vezcompletada la instalación inicial y el proceso de instalación, el siguiente paso fue crear código personalizadopara trabajar con las bibliotecas instaladas.

La parte final del capítulo se centró en el trabajo con AMFPHP para crear aplicaciones más robustas y fortalecerlos conceptos de trabajo con las bibliotecas.

Page 224: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 224/467

224

Capitulo 10

Uso de ProgramaciónOrientada a objetos

Este capítulo se centra en las clases y programación orientada a objetos.La comprensión de cómo trabajar con las clases y en el que se debe utilizar le ayudará a escribir código máseficiente. La clave para la escritura en un objeto de formato de la programación orientada a objetos (OOP) espara evaluar correctamente la aplicación que será escrito.

Este capítulo comienza por explicar los aspectos individuales de la POO en Flash y PHP. La última sección deeste capítulo es la construcción de una clase de ejemplo para mejorar su comprensión de las prácticasaprendidas en las secciones anteriores.

Es importante señalar que esta no es una guía detallada de programación orientada a objetos, que en realidadnecesitaría su propio libro, pero es más una visión general para apoyar a los usos de este libro.

Entender la programacion orientada a objetos (OOP) 

La clave para la comprensión de la programación orientada a objetos (OOP) es pensar de cada elemento como

una pieza separada. En la programación tradicional, el código de los flujos de la línea 1 hasta que llega al finaldel documento, con la función de vez en cuando para llevar a cabo tareas repetitivas. El problema con esteenfoque es la escalabilidad, o la habilidad de dejar crecer es un programa que evoluciona en el futuro.

Estoy seguro de que usted se está preguntando por qué debería importar si la aplicación es escalable o no. Enrealidad, es una preocupación muy importante que suele pasarse por alto en las aplicaciones. Hacer unprograma escalable desde el principio significa reelaboración menos código y la edición en el futuro. En ciertomodo, programación orientada a objetos y el código escalable en realidad van de la mano bastante biencuando se usan correctamente.

Información general de las práctica de OOP 

Ahora que tiene una comprensión de lo que la OOP es y cómo puede beneficiar a su código, puede ver lo queestá involucrado en la redacción. El primer o en programación orientada a objetos es "objeto" o un conjunto deinformación contenida en una pieza fácil de administrar.

Page 225: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 225/467

225

Clases

Una clase es una definición de todos los objetos de un tipo especificado. La clase define la estructura de losobjetos y el comportamiento. Este enfoque no sólo permite que el código para ser distribuido, pero también lepermite mantener un cierto nivel de seguridad.

Para entender mejor las clases, aquí es un ejemplo muy básico:

 public class Hello{ function Hello(){}public function getSaying():String{return “Hello World!”;}} 

El código anterior es un ejemplo simple de una clase y no es más que la intención de demostrar visualmente

cómo se construye una clase. El public antes de la clase define la clase entera como globalmente accesible. Enalgunos casos, esto no es el resultado deseado. Usted también puede asignar a cada método y la propiedadcomo los tipos de público (public), privado (prívate), o de otro dependiendo de los requisitos.

Aquí está un ejemplo común de la aplicación de protecciones a una clase para garantizar la seguridad:

public class UserLogin{function UserLogin(){}public function login():void

{callDatabase();} private function callDatabase():void{}}

Es seguro asumir que usted no desea que el método callDatabase ser llamado directamente, porque unallamada realmente malicioso que podría perjudicar a su base de datos y debilitar la integridad general de laaplicación. Forzar el método como privado garantiza el método no puede ser llamado. El usuario debe llamar almétodo de ingreso donde se puede validar la solicitud antes de que se llama la base de datos. Esto es, porsupuesto, un uso muy simple de los tipos de públicos y privados, pero debería ayudar a entender por qué son

importantes.

Constructor

El primer método en una clase es generalmente el constructor. El constructor es llamado automáticamente porel sistema y no pueden devolver los datos. Por lo general, cuando las tareas de inicialización se llevaría a cabo,como el dibujo de un objeto en el escenario o llamando a una base de datos.

Page 226: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 226/467

226

Paquetes (Packages)

Los paquetes son los contenedores para varias clases que ofrecen la posibilidad de compartir la informacióndentro del contenedor global. Esto es similar a los empleados en una oficina que comparten informacióndentro de su propio departamento, pero al mismo tiempo puede pasar información a lo largo de la altadirección sin que tener que abandonar la organización. En cierto modo, un paquete es una organización declases.

Hay dos maneras de definir un paquete. El primero es el directorio actual, que sólo se convierte en:

 package {class Example{function Example(){}}}

La otra opción es definir una estructura del paquete, por lo general definido por el desarrollador o el nombrede dominio de la empresa en orden inverso, como:

com.companywebsite.projectname

La estructura se coloca después de la palabra clave package.

package com.companywebsite.projectname {class Example{function Example(){}

}}

Un ruta reversa del paquete de dominio se utiliza para asegurarse de que el paquete es único.También seutiliza para definir adecuadamente la solicitud o de la biblioteca. Otra ventaja de utilizar este enfoque es que sedetenga las colisiones de clase, que es cuando dos clases diferentes tienen el mismo nombre. Esto ocurre mása menudo cuando bibliotecas de terceros se utilizan en una aplicación, ya que no tenemos control sobre losnombres utilizados en las clases. Si la biblioteca está bien construido, que tendrá una estructura de paqueteúnico para evitar colisiones.

Importar

Importación cuando se trabaja con las clases se refiere a la carga, o la conectar clases juntos. Por ejemplo, en laescena de Flash es una instancia de la clase DisplayObject. Sin embargo, cuando se crea un movieclip, que esuna instancia de la clase MovieClip, también se carga en una instancia de DisplayObject, junto con un montónde otras clases y paquetes.

Puede colocar las importaciones dentro de la clase por lo que sólo son visibles para esa clase, o usted puedecargarlos en el paquete que les permitan ser compartidos a través de todo el paquete. Por ejemplo, si tieneuna clase de miembros, es seguro asumir que siempre se quiere que las credenciales de los miembros es visible

Page 227: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 227/467

227

para validarlos en diversas partes de la aplicación. Usted podría comenzar por definir la clase de miembros, yluego importar la clase UserCredentials para la validación, como:

import UserCredentials;

public class Member{function Member(){}} 

Esto permitiría a UserCredentials para ser vista por cualquier método o propiedad en la clase de Member(miembros). Sin embargo, hay algunos casos en los que se desea que todas las clases para compartir otra clase.

package{import UserCredentials;public class Member{function Member(){}}}

En ActionScript 3 no tiene que preocuparse por la importación de una clase más de una vez porque elcompilador como es lo suficientemente inteligente como para importar sólo una vez. PHP, por el contrario,arroja un error si se intenta cargar una clase más de una vez. Esta realidad no es algo malo y puede evitarsefácilmente mediante la carga de todas las clases en un archivo. Basta pensar en esta clase magistral como elpadre de todos los demás.La siguiente sección se centrará en las diferencias y similitudes de la clase en PHP y Flash.

Métodos y propiedades estáticas

Un método estático es uno que no requiere una instancia de clase a ser llamado. También permite que elcódigo para conseguir un cierto nivel de coherencia. Por ejemplo, hay una clase Date (Fecha), y en que unmétodo que devuelve los días de la semana. Es seguro asumir los días de la semana no va a cambiar, así queusted puede tener acceso a este método simplemente llamando directamente.

Date.getDaysOfWeek();

Un método estático que se llama de la siguiente manera: Class.method. No hay necesidad de un nombre deinstancia o el constructor, de hecho, un constructor no es ni siquiera necesario en este tipo de clase. Sin

embargo, es una buena práctica para tener un constructor para la complete compatibilidad.

Una propiedad estática es similar a un método estático en que se puede acceder sin una instancia.Sin embargo, tiene un atributo especial, su tipo y los datos no se puede cambiar, con la obvia excepción de unamatriz o un objeto, que no puede tener elementos añadidos a la misma.

trace(“Days in Week: “ + Date.daysInWeek);

Page 228: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 228/467

228

El código anterior es acceder a la propiedad estática daysInWeek, lo que devuelve un valor numérico querepresenta el total de días en una semana. Una propiedad estática es útil cuando usted tiene un valor quenunca cambia, como una URL o una compañía de información que se utilizará en una aplicación.

Singletons

Un singleton es un patrón de diseño. El tema de los patrones de diseño requiere de su propio libro, perobásicamente son las reglas y las prácticas se forman entre varios desarrolladores. Usted no está obligado aseguir un patrón de diseño, pero hacerlo más limpio y ofrece un código más escalable. El Singleton es probableque el patrón de diseño más comunes. Es comúnmente usado para pasar alrededor de una pieza deinformación que no cambia nunca y será necesario un poco durante una aplicación.

NOTA En la mayoría de lenguajes de programación que es común a declarar el constructor de una Singletonprivado. Esto evita que los desarrolladores de forma accidental la creación de más de una instancia de unsingleton. Sin embargo, no es compatible con ActionScript constructores privados.

Como ha aprendido anteriormente, una instancia de una clase se realiza mediante la nueva palabra clave. Esaes una manera usted puede acceder a una clase y otra es la reutilización de la instancia existente, tales como:

public class User{private static instance:User;function User(){}public static function getInstance():User{if(instance == null){instance = new User();}return instance;}

public function exampleName():String{return “Joey”;}}

La mayoría de esta clase es el mismo que los ejemplos anteriores, con la excepción de la adición del métodogetInstance. Este método se utiliza para asegurar que una instancia única de la clase se utiliza siempre.Cualquier llamada a esta clase se realiza mediante el método getInstance, tales como:

import User;trace(“Example Call: “ + User.getInstance().exampleName);

La primera vez que la clase se hace referencia a la instancia única se genera. Cualquier llamada desde esepunto simplemente devuelve la instancia existente. Esto asegura que cualquier cambio a esta clase será vistopor todos los participantes.La magia detrás de esta clase es el método y las propiedades estáticas, que se utilizan esencialmente paraponer una puerta entre los métodos y la persona que llama. Todas las llamadas van a través de getInstancetambién te permiten poner un control de autorización para todas las llamadas.

Page 229: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 229/467

229

NOTA Un producto único sólo debe utilizarse cuando sea necesario. Haciendo de cada clase que cree en unaislado no es una buena práctica, de hecho, la mayoría de los programas tienen un producto único quealmacena toda la información necesaria.

Captadores (Getters) y definidores (setters)

Usted puede haber notado que mucha de la utilización de la clase se centra en pasar los datos de ida yvuelta. De hecho, eso es precisamente lo que toda la programación es, en cierto modo. La idea detrás de ungetter y setter es para obtener acceso a las propiedades privadas. De hecho, es una apuesta bastante segura deque la mayoría de sus propiedades serán privadas, debido a que es una especie de la idea de una clase. Aquí hay un ejemplo de un get y set, con un esqueleto de la clase como un ejemplo:

class People{ private var _person:String; public function get person():String{return _person;}

 public function set person(u:String):void{if(u.length > 0 && u.length < 25){_person = u;}}}

El código anterior simplemente devuelve el valor actual de la propiedad privada_person. O bien, una llamada ala persona que modificar la propiedad privada si el nuevo valor es de al menos 1 y no más de 25 caracteres delongitud. Usted puede agregar cualquier nivel de seguridad o de modificación de datos a estos setters. Laventaja de utilizar un regulador es la capacidad de bloquear el acceso a las propiedades privadas, también

llamada encapsulación.Esto asegura que el código no puede ser roto por pasar en los datos incorrectos, o peor aún, poner en peligroun sistema debido a una clase abierta.

Ahora que usted entiende lo que es un getter y setter, probablemente es una apuesta segura decir queprobablemente también quieren saber cómo llamar a ellos. Esto se hace mediante el acceso a la variablepública, tales como:

var people:People = new People();people.person = “Timmy”;trace(“The new person is: “ + people.person);

Como la mayoría de los aspectos de la programación, es responsabilidad del desarrollador para determinardónde y cuándo el uso de un getter/setter es una buena idea. La forma más fácil de determinar esto es, enprimer lugar la creación de un esquema de la correcta aplicación.

Page 230: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 230/467

230

Uso de clases en PHP 

Ahora que tiene una comprensión de lo que la OOP es y cómo funciona, el siguiente paso es analizar lasdiferencias de clase en Flash y PHP.

Para empezar, he aquí un ejemplo rápido de una clase en PHP:

<?php

class Example{public $sample = “Hello, World!”;function Example(){return $sample;}}

?>

Esa es la forma básica de crear una clase en PHP. Los principales aspectos son definiciones que empiezan con lapropiedad pública, privada o protegida. Una propiedad seguirá siendo necesario $, al igual que en el códigoestándar de PHP. La diferencia real sólo otro es el hecho de PHP no declarar el tipo de cambio. De hecho, PHPrealmente no importa lo estrictamente tipo de una variable se mantiene, que no es realmente una buenacosa. El desarrollador puede perder la capacidad de saber qué tipo de datos tiene una variable.

Importar clases en PHP 

Importación de una clase en PHP se realiza mediante la carga del archivo con Include (incluir) o require(requieren). Usando include intentará cargar el archivo, pero continuará si el archivo no se encuentra. Require,por otra parte, también busca el archivo, pero sale de la secuencia de comandos con un error grave si el

archivo no se encuentra, como se muestra en la Figura 10.1. Usar require ofrece la posibilidad de poner fin auna secuencia de comandos si los archivos adecuados no se encuentran. He aquí un ejemplo de la carga de unaclase por que lo requieran:

<?php

if(!file_exists(„Interface.php‟)){print “Class „Interface‟ not loaded, exiting script!”;}@require(„Interface.php‟);

class Example

{function Example(){$i = new iExample();print “My i: “ . $i->samplr();}}

$example = new Example();

Page 231: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 231/467

231

?>

Una sentencia if se utiliza para comprobar primero la existencia del archivo, ya que require creará un errorfatal, lo que significa que el script puede informar cualquier mensaje de error apropiado. Si por alguna razón elarchivo no se encuentra, el mensaje se envía al navegador y el script termina en silencio cuando llega a la líneade exigir (require). La @ se utiliza para silenciar a los errores internos que más a menudo entonces no causa unproblema de seguridad porque presentan rutas de archivo crucial. Una forma alternativa para ocultar los

errores es para deshabilitar el informe de errores, que se explica en el capítulo 13.

Instanciación 

Creación de instancias de clase es el acto de hacer una instancia de clase. La acción es la misma en cualquierlenguaje de programación orientada a objetos, pero cada idioma tiene una forma diferente de que lo crea. EnPHP, primero debe crear una variable y luego asignar la clase a esa variable. Una vez que la nueva instancia escreada, puede acceder a los métodos y las propiedades públicas de esa clase.

$myNewInstance = new Example();

FIGURA 10.1Aquí está el mensaje de error mostrado en el navegador, que es el resultado de la clase que no se encuentra.

Page 232: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 232/467

232

Métodos en PHP se tiene acceso utilizando:

$instance->methodName();

Sin embargo, cuando se desea acceder a un método dentro de la misma clase, puede sustituir la variable deinstancia y el uso de $this. Así que, suponiendo que usted desea tener acceso al método helloWorld en la claseSpeak (de hablar), tendría este aspecto:

$this->helloWorld();

También puede usar el operador de resolución de alcance (también llamado Paamayim Nekudotayim, que enhebreo significa dos puntos-dobles) el acceso a los métodos y propiedades. La diferencia está en lugar de usar$this, debería utilizar el nombre de clase real. Este planteamiento hace que el código sea más fácil de leer.

Speak::helloWorld();

Clases múltiples 

PHP permite una secuencia de comandos de clase para mantener varias clases. Esto es tanto una buena y mala

idea, porque a muchas clases en uno de los resultados de archivo en el código de hinchada que es difícil demanejar. Por otra parte, con las clases de todos en un archivo es más fácil de distribuir. Estoy seguro de que teestás preguntando cómo las clases son exactamente las múltiples definido en un archivo, aquí está un ejemplode un pseudo-paquete de la clase.

<?php

class Animals{function Animal(){

}public function speak($word){print $word;}}

class Dog extends Animals{function Dog($word){$this->speak($word);}}

// Create a new Dog$dog = new Dog(“Hello.. Woof!”);?>

De hecho, PHP realmente no segui todas las prácticas estándar de programación orientada a objetos, que creoque va a cambiar a medida que las versiones más recientes se han desarrollado. Por ahora, puede crear supropia versión de un paquete y obtener la misma funcionalidad básica. Es importante señalar que un pseudo-

Page 233: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 233/467

233

paquete no ofrece el mismo nivel de separación y la seguridad de que un paquete real hace, pero con algo deprogramación creativa y la creación adecuada de sus clases, usted puede mantener el código de seguridad.

CROSS--REF Véase el Capítulo 6 para obtener más información en profundidad sobre la seguridad del código.

Eso es todo lo que hay que utilizar y entender las clases en PHP, hasta el punto necesario para este libro.Usted puede, por supuesto, prorrogar el presente nuevos conocimientos y comenzar a explorar los aspectos

más avanzados de las clases en PHP.

NOTA PHP ofrece una gran cantidad de "magia" los métodos y propiedades hacen que las clases sean másdivertido y menos doloroso para trabajar.

Uso de clases en Flash 

Como se indicó anteriormente, las clases en Flash y PHP son similares en la mayoría de aspectos. Vamos a vercómo utilizar y modificar las clases en ActionScript Flash.

Importar  Importación de una clase en ActionScript es un poco menos perdonar si la clase no se encuentra. De hecho, elcompilador que se ejecuta cuando se exporta una película se detiene si una clase no se encuentra. Estobásicamente significa que usted no necesita mensajes de error si una clase no está cargado, porque la películanunca es capaz de ser visto por el público en general.

La excepción a esta comprobación compilador es si la clase es dinámica, lo que significa que su estructurageneral puede cambiar, pero que está más allá del alcance de este libro. Ahora, de regreso a la importación declases, que se crearía como este:

import com.organization.project.Example;

var example:Example = new Example();trace(“Call a method: “ + example.methodName());

Usted puede haber notado el uso de la importación, en vez de exigir o incluir. La diferencia obvia en el ejemploanterior es: Ejemplo de definición de tipo. Esto realmente no es necesario, pero permite un mejor control deerror cuando la película se está compilado o se está ejecutando.

Clase de documento 

La clase de documento se utiliza como la clase principal para una aplicación. Piense en ello como la clase delínea de tiempo, similar a los días de la adición de código de base en el fotograma 1 de una película. Esos días

han terminado y es una buena cosa, también. Sin embargo, hay algunas cosas que debe saber acerca decuando se utiliza una clase de documento, como se muestra en la Figura 10.2. En primer lugar, mire lo que unaclase de documentos parece:

package{import flash.display.MovieClip;public class DocRoot extends MovieClip{function DocRoot

Page 234: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 234/467

234

{trace(“I am the Document Class”);}}}

FIGURA 10.2La clase de documentos, que se puede encontrar en el inspector de propiedades

La asignación de la clase de documento es bastante singular. Usted puede agregar o editar el archivo de claseutilizando los pasos siguientes:

1. Haga clic en el escenario, para asegurar no hay nada seleccionado.2. Abra el inspector de propiedades si no está abierto.

3. Haga clic en el cuadro de texto clase de documento y añadir el nombre de la clase.

Usted puede haber notado la clase de documento extiende la clase MovieClip, sino que también puedeextender la clase Sprite. De hecho, esta ampliación es necesaria porque la clase de documento es en realidadun MovieClip.

Page 235: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 235/467

235

Biblioteca de clases 

Una biblioteca de clases es la nueva manera de ActionScript para conectar a un MovieClip en la línea detiempo. En versiones anteriores de Flash que se asigna un identificador de vinculación a su MovieClip. EnActionScript 3, de tomar los mismos pasos básicos de la apertura del inspector de Propiedades, seleccione laopción Exportar para ActionScript, y añadir el nombre de clase, como se muestra en la Figura 10.3.

FIGURA 10.3El inspector de propiedades con la opción Exportar para ActionScript seleccionados

Al igual que la clase de documento, es necesario asegurarse de que la clase personalizada MovieClip seextiende la clase MovieClip. De hecho, el Documento de la Biblioteca y las clases son muy similares en la que

fueron creados.

Page 236: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 236/467

236

Uso de Flash y PHP para construir clasespersonalizadas 

Usted puede haber notado que hay menos de explicar con el uso de clases en Flash que hay en PHP.Esta sección se centra en una clase completa ejemplo basado en Flash y PHP. Se utiliza para reforzar los

conceptos aprendidos en las páginas anteriores.

Vamos a empezar con PHP que se utiliza en este ejemplo. La idea es construir una aplicación básica quepermite a PHP y Flash para comunicarse, aprovechando al mismo tiempo de clases personalizadas.

<?php

class Communication{

public $MESSAGE_NOTIFY = “Hi, from PHP! You said: “;

function Communication()

{

}

public function respond($str){return $this->MESSAGE_NOTIFY . $str;}}

$communication = new Communication();

if($_GET[„a‟] == “newMessage”){

// send message back to Flashprint “resp=” . $communication->respond();}?>

La parte de PHP de este ejemplo permite a Flash comunicarse al pasar a lo largo de una petición para llamar elmétodo respond(). Dentro de la clase, PHP y entonces construye una cadena y devuelve a la Flash, en donde enese momento que se lee y aparece en el escenario.

El siguiente paso es construir la clase de documentos y de llamadas en Flash.Esta es la clase de documento:

package

{

import flash.display.MovieClip;import flash.text.TextField;

import Communicator;

public class Document extends MovieClip{function Document(){

Page 237: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 237/467

237

makeCall();}

public function makeCall():void{var mc:MovieClip = new MovieClip();var txt:TextField = new TextField();

mc.addChild(txt);addChild(mc);

var communicator:Communicator = new Communicator();communicator.action = “newMessage”;communicator.container = mc;communicator.callServer();}}}

El constructor es responsable de llamar al método makeCall(). Este método crea un TextField, concede al

escenario mediante addChild, y, finalmente, establece la llamada a la clase communicator (comunicador)

personalizada.

Como la llamada a la clase del comunicador se está instalando, también es responsable de asignar la instancia

de TextField y la acción. La acción en este ejemplo se utiliza para indicar que el código PHP para correr. Por

supuesto, en este ejemplo sólo hay una acción asignada. Sin embargo, es fácil de pronto tienen diez o más

acciones en una aplicación real.

La clase TextField es similar al método createNewTextField que se han utilizado en ActionScript 2. El cambio en

el código de ActionScript 3 se ha hecho para ser coherente con la colección de artículos personalizados, como

los de la sección anterior.

El siguiente paso es crear la clase personalizada, que se utiliza para comunicarse con PHP en el servidor Web.

package{

import flash.net.URLRequest;import flash.net.URLLoader;import flash.net.URLVariables;import flash.display.MovieClip;import flash.events.*;

public class Communicator{

private var _action:String;private var _txtBoxContainer:MovieClip;

function Communicator() {}

public function callServer():void{

var variables:URLVariables = new URLVariables();variables.a = _action;

Page 238: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 238/467

238

var request:URLRequest = newURLRequest(“http://localhost/flashphp/Communicate.php”);request.data = variables;

var loader:URLLoader = new URLLoader();loader.addEventListener(Event.COMPLETE, serverHandler);loader.load(request);

}

public function serverHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(loader.data);_txtBoxContainer.text = variables.resp;}

public function set action(a:String):void{

_action = a;}

public function set container(mc:MovieClip):void{_txtBoxContainer = mc;}}}

La clase es bastante sencillo y tiene los conceptos que han sido utilizados en los ejemplos anteriores. Lospuntos de enfoque principal de esta clase son los métodos callServer y serverHandler, que se encarga de llamary hacer frente a la respuesta del servidor.

El primer método, CallServer, establece la variable _action que se pasa a PHP usando el valor que se establecióen la clase de documentos en la sección anterior. Usted puede haber notado el _ antes de que el nombre de lavariable, que se utiliza para definir claramente una variable privada. No es necesario, pero hace que tu códigosea más fácil de leer.

Los dos últimos métodos de esta clase son responsables de establecer el contenedor de TextField y laacción. Estos dos setters son llamados desde la clase de documento.

Como puede ver, la creación de esta aplicación como una clase personalizada ofrece la posibilidad de actualizarrápidamente o ampliarlo a otra aplicación y lo mejor de todo tiene todo seguro. Esta solicitud de base es sólouna muestra de lo que pueden ofrecer las clases, sino que debe darle una mejor comprensión de cómo la clasede documento se establece.

La siguiente tabla 10.1, es una tabla de forma rápida y gráfica que explica las diferencias de clases en PHP yFlash. Siempre puede regresar a esta página si usted tiene una pregunta de si una característica existe en ellenguaje que están trabajando.

Page 239: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 239/467

239

TABLA 10.1

Diferencias entre Clases en PHP y FlashClass PHP Flash . Instantiation X XMultiple classes in one file XImporting X X

include or requireConstructor X XPackages XStatic methods and properties X X

Resumen 

Una gran cantidad de información se tratan en este capítulo y en este punto usted debe tener un buenentendimiento de cómo funciona programación orientada a objetos y cuándo usarlo. Como usted puede notar,las clases y programación orientada a objetos en general, ofrecen muchas ventajas. Sin embargo, tambiénpuede notar el desarrollo OOP tiene más tiempo. Esto no es necesariamente una mala cosa, porque a la larga,

te darás cuenta de menos tiempo de desarrollo en futuras actualizaciones. También ofrece la ventaja menosevidente de código más seguro que el desarrollador puede controlar. En este punto, usted sabe cómoconfigurar y utilizar las clases en PHP y Flash, y es probable que quieran experimentar con algunos de los temasmás avanzados que no están cubiertos en este capítulo.

Page 240: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 240/467

240

Parte IV

Desarrollo de

Aplicaciones 

Page 241: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 241/467

241

Capitulo 11

Desarrollo de aplicaciones

BásicasEn este capítulo, se desarrolla una serie de aplicaciones completas. El objetivo de este capítulo es el de acabarcon las aplicaciones completas al explicar los errores comunes y cómo superarlos. Usted investigar algunosconceptos nuevos, así como los controladores de eventos múltiples, clases personalizadas, y servicios adistancia.

En este capítulo también se centra en la mejor forma de trabajar con MySQL de una manera eficiente ysegura. El capítulo concluye con la evaluación de las mejores prácticas para el mantenimiento de lasaplicaciones y permitiendo la posibilidad de añadir nuevas funcionalidades.

Entender los elementos de una aplicación 

Crear aplicaciones no sólo en saltar en Flash o tu editor favorito y la línea de escritura después de la línea decódigo. El mejor lugar para empezar en el desarrollo de aplicaciones es la etapa de evaluación. Este es el punto

para mirar la lista de lo que su aplicación debe hacer, quién es la audiencia, y cómo va a desarrollar laaplicación. Tabla 11.1 ilustra los tres puntos de la etapa de evaluación.

TABLA 11.1

Los tres puntos de la Etapa de EvaluaciónQué Definir lo que hará la aplicación 

Quién El público objetivo de su aplicación 

Cómo Técnicas a utilizar para desarrollar su aplicación

Los siguientes ejemplos saltarse el paso "cómo" porque este es un libro de Flash y PHP. Una vez que el "cómo"se define usted puede pensar en el "quién". Esto es, por supuesto, su público objetivo. Una aplicación nosiempre tendrá un rígidamente definidas, que, sobre todo si se trata de un servicio de sitio Web, pero es mejordefinir uno. La mejor manera de determinar su público objetivo es pensar sobre el tipo de aplicación.Por ejemplo, va a ser una aplicación de comercio electrónico o tal vez un reproductor de vídeo. Saber quién vaa utilizar la aplicación es crucial para su éxito.

Ahora que el "cómo" y "quién" se define, se puede pensar acerca qué es exactamente lo que la aplicación va ahacer. Nunca iría a la ferretería, comprar todos los materiales, y luego decidir qué construir.Lo mismo es cierto para el desarrollo de aplicaciones. Al comenzar a seguir estas prácticas se conviertan en unasegunda naturaleza.

Page 242: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 242/467

242

Entender el diseño de una aplicación 

Con la fase de evaluación completa, naturalmente, pasar a la fase de diseño. Pero, al igual que la etapa deevaluación, siempre es una buena idea para el primer plan. Este sería un boceto con lápiz y papel o con flashcon formas primitivas. Por ejemplo, la figura 11.1 muestra un ejemplo de esquema.

Trabajar con pseudo-código 

Después de que haya la disposición general de la aplicación desarrollada, se puede pasar a la funcionalidad.Este sería el punto en empezar a escribir pseudo-código, tales como las funciones, variables, eventos, ycualquier otro concepto que va a utilizar en su aplicación. El siguiente es un ejemplo de pseudocódigo para unprograma de gestión de usuarios.

// Pseudo-code

function loadUser(id:uint):void{// make call to server passing// along the id as the user id}function handleServerResponse(e:Event):void{// capture server response// make necessary calls to application}

function drawInterface():void{// paint “draw” the interface that// the user will interact with}

function redraw():void{// redraw interface as info is loaded,// to keep things up to date}

// Assign event handlers

Usted notará que pseudo-código no es una aplicación completa, pero es el esqueleto de la aplicación engeneral.Esto le permite desarrollar rápidamente la forma en que la aplicación funcionará y lo que hará.Escritura de pseudo-código se convierte en mucho más importante en el desarrollo de aplicaciones a granescala, pero es una buena práctica para evaluar, dibujo, y el plan no importa cuán grande es el proyecto.

Page 243: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 243/467

243

FIGURA 11.1Un bosquejo ejemplo de aplicación con formas primitivas en Flash

Finalización de la etapa de planificación 

El último paso para la planificación de una aplicación no es definitiva, ya que puede concluir la etapa deplanificación o comenzar el proceso de desarrollo. Esta elección puede a veces ser determinado por el cliente oel director creativo si le ha sido asignado.

En este punto, en el proceso de planificación, que ha determinado lo que hará la aplicación, que va a utilizar, ycómo va a ser construido. También han diseñado un esquema y comenzado el proceso de programación. Elsiguiente paso depende de usted como el desarrollador. Puede continuar y finalizar el proceso de diseño o decomenzar a desarrollar el código de la aplicación utilizará.

Normalmente, se diseño la aplicación suficiente para empezar en la programación, porque las cosas son másque probable que va a cambiar a medida que sigan desarrollándose. Sin embargo, con la cantidad apropiada dela planificación puede minimizar estas fases de revision.

Page 244: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 244/467

244

Desarrollo de un cliente de Chat 

Ahora que han estudiado las mejores prácticas para el desarrollo de aplicaciones ya puede comenzar adesarrollar su aplicación completa en primer lugar. Esta aplicación será un cliente de chat Flash usando PHPpara interactuar con una base de datos MySQL. Después de desarrollar la aplicación de base se seguirá paraagregar características y ver la mejor manera de construir una aplicación escalable.

Una aplicación escalable es desarrollado teniendo en cuenta que dos usuarios pueden utilizar la aplicación alprincipio, pero podría fácilmente ser utilizado por millones en el tiempo. La idea es dar cuenta de esta ydesarrollar la aplicación de una manera que permite la expansión.

La porción de Flash 

De comenzar este proyecto mediante el diseño de la aplicación. Para esta aplicación, el diseño es siempre, perose siente libre para modificarlo. De hecho, le animamos a ampliar a todos los ejemplos, que es la forma defamiliarizarse con nuevos conceptos y también cómo crecer como desarrollador. La figura 11.2 muestra lainterfaz de la aplicación de chat.

Básicamente, la interfaz consta de un componente TextArea, que se utiliza para mostrar los mensajes de chat,dos componentes TextInput para el mensaje y los elementos nombre de usuario y una instancia del botón parael botón de envío.

Page 245: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 245/467

245

FIGURA 11.2El diseño de su aplicación de chat construido utilizando componentes precompilados en Flash

Tabla 11.2 muestra los nombres de instancia para cada componente.

TABLA 11.2

Instance Names for the ComponentsComponente Nombre de instancia Resultado . TextArea messagesTxt Mostrar los mensajes del chatTextInput newMsgTxt Nuevo mensajeTextInput usernameTxt Nombre de la persona del chatButton sendBtn Envía un nuevo mensaje al servidor

Se le hace referencia a los nombres de instancia durante el desarrollo de la ActionScript para su aplicación dechat.

Con la interfaz de usuario "diseño" parte ya realizada o en este caso cargada, se puede comenzar el desarrollodel código.

La primera parte del código de la aplicación de chat es un bloque de variables que se utilizan en todo. Laprimera variable es la ruta absoluta a los archivos PHP. Luego dos próximas variables son los archivos PHPencargados de enviar y la carga de los mensajes de chat de la base de datos. Después de que son dos variables

Page 246: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 246/467

246

booleanas para las llamadas de mensajes múltiples no se puede hacer. El último conjunto de variables es unareferencia al objeto Timer y el destructor de caché.

var phpPath:String = “http://localhost/ch10/chatClient/”;var phpSendMessage:String = phpPath + “message.php”;var phpLoadMessages:String = phpPath + “getMessages.php”;

var loadingMessages:Boolean = false;var sendingMessage:Boolean = false;

var timer:Timer;var cacheBuster:String = “?cb=1”;

La primera función que vas a construir es el init() o la función de inicialización. Esto se llama una sola vez,cuando se inicia la aplicación. Es responsable de la creación de un controlador de temporizador para la carga delos mensajes del servidor y hacer la primera llamada a un destructor (buster) de la caché, que se explica en lasiguiente sección. La última acción de la función init() es llamar a la función loadMessages y rellenar la lista demensajes.

function init():void

{// start timer for loading of messagestimer = new Timer(5000, 0);timer.addEventListener(TimerEvent.TIMER, timerHandler);timer.start();

cacheBuster = getCacheBuster();loadMessages(); // first time}

Los buques de clase Timer con Flash y tiene un montón de grandes aplicaciones. En este ejemplo se aprovechael evento Timer, que es llamado cada vez que la cuenta regresiva se ha alcanzado. El tiempo de cuenta y elnúmero de repeticiones se pasan al constructor. Establecer la cuenta regresiva a 5000 o 5 segundos y se repite

a 0, lo que realmente le dice a ActionScript para repetir continuamente. Después de una instancia de Timer secrea una nueva que asigna el controlador de eventos y de iniciar el temporizador de inmediato. El controladorde temporizador, simplemente hace una llamada a la función de loadMessages.

Esta parte del código podría ser condensado mediante la colocación de la función loadMessages en lugar de latimerHandler, pero hacerlo de esta manera nos permite agregar más funcionalidad en el futuro. Todo es buenapráctica de desarrollo para crear controladores de eventos adecuado para lo que el código puede seractualizado, y lo hace en general mucho más fácil de leer.

function timerHandler(e:TimerEvent):void{loadMessages();

}

La función de loadMessages es responsable de llamar y el manejo de la respuesta del servidor.La llamada al servidor es muy similar a otros ejemplos con algunos elementos nuevos. Un elemento nuevo es lavariable CacheBuster, que se utiliza para asegurar que no recibe un resultado almacenado en caché.

Page 247: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 247/467

247

Detener el almacenamiento en caché con datos dinámicos 

Usted acaba de crear una variable para detener el almacenamiento en caché, pero ¿qué es eso? Elalmacenamiento en caché en el servidor es cuando los datos dinámicos se almacena para su rápida carga entodas las futuras convocatorias. A primera vista parecería una buena idea, y en la mayoría de los casos lo es. Sinembargo, en el ejemplo de la carga de chat de datos que cambia constantemente, es probablemente segurodecir que desea que estos datos sean frescos. Esto se logra mediante la adición de una variable conocida comoun "destructor de caché" (“cache buster”), el cual engaña al navegador en el pensamiento de cada llamadapara el mismo archivo es diferente.

Aquí hay un ejemplo muy simple de un destructor de la memoria caché y la cadena real que se envía alservidor:

function getRandom(length:uint):void{return Math.round(Math.random() * (length - 1)) + 1;}

var rand:String = “?cb=” + getRandom(8);

var php:String = “http://localhost/ch04/getMessages.php” + rand;

trace(“URL: “ + phpFile); // getMessages.php?cb=65378426

PRECAUCIÓN busters caché añade el tiempo de descarga y la fuerza de cualquier archivo con un destructor decaché que se descargan cada vez que se solicita.

Todo después del? en la URL es decir el navegador y el servidor que la llamada es dinámica y los resultados enel archivo no está almacenado en caché.

La siguiente parte del proceso de enviar el mensaje es asegurar el mensaje es por lo menos tres caracteres delargo. Si el mensaje no es por lo menos tres personajes, un mensaje de error. Hay dos maneras que usted

puede escribir este control condicional.

La primera opción es:

if(newMsgTxt.text.length > 2){}

La segunda opción, que es más fácil de entender rápidamente:

if(newMsgTxt.text.length >= 3){}

Ambas opciones de lograr el mismo resultado, pero la segunda opción es mucho más fácil de leer desde unpunto de vista lógico.

Ahora bien, suponiendo que tiene un mensaje de la longitud correcta se puede continuar con el proceso deenviar el mensaje al servidor. La siguiente parte es la construcción de la llamada al servidor.

var variables:URLVariables = new URLVariables();variables.user = usernameTxt.text;

Page 248: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 248/467

248

variables.msg = newMsgTxt.text;var urlRequest:URLRequest = new URLRequest(phpSendMessage +getCacheBuster());urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, sendMessageHandler);

urlLoader.load(urlRequest);

Al llamar al servidor, debe crear un objeto URLVariables con el fin de transmitir el nombre de usuario y elmensaje que se introdujo. Un llamado también a la función personalizada Buster caché para asegurar que losdatos siempre es fresco.

El último paso en la función de envío es de inmediato y un mensaje del usuario en lugar de esperar a que lalista de mensajes para actualizar desde el servidor. Esto da a la solicitud de una sensación de mayor capacidadde respuesta y lo hace de modo que el mensaje no parece haber sido ignorada.

addMessage(usernameTxt.text, newMsgTxt.text);

Esta función acepta dos argumentos: el nombre de usuario y el mensaje de recogida de sus respectivoscomponentes. Esta información es luego incorporarse a una cadena de HMTL que se asigna a la TextAreamessagesTxt. El nombre de usuario se encuentra dentro de las etiquetas en negrita para resaltar el nombre. Dehecho, usted puede utilizar una gran cantidad de etiquetas comunes HTML dentro de cuadros de texto HTMLhabilitado.

function addMessage(user:String, msg:String):void{messagesTxt.htmlText += “<b>” + user + “</b>” + “: “ + msg +“\n”;}

Tabla 11.3 muestra las etiquetas HTML compatible que puede ser utilizado.

TABLA 11.3

Etiquetas HTML soportadasEtiqueta (Label) Etiqueta HTML . Anchor Tag <a>Bold Tag <b>Break Tag <br>Font Tag <font>Image Tag <img>Italic Tag <i>

List Item Tag <li>Paragraph Tag <p>Span Tag <span>Underline Tag <u>

La función sendMessageHandler se llama una vez que el mensaje se envió con éxito al servidor. La única parteimportante de esta función es la última línea, el que abre el cuadro de mensaje y permite que el usuarioescriba un mensaje nuevo. Usted puede borrar el mensaje en la función de envío, pero hacerlo de esta manerase asegura el mensaje permanece intacto hasta que esté seguro de que se ha añadido.

Page 249: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 249/467

249

NOTA El PHP no le avise a un error si el SQL falla, sólo si la página no se carga.Por supuesto que puede añadir más avanzadas de error de manipulación a este ejemplo.

Por supuesto que puede añadir más avanzadas de error de manipulación a este ejemplo.

function sendMessageHandler(e:Event):void

{...newMsgTxt.text = “”;}

Ahora que ha completado el código de envío y gestión de las llamadas al servidor, usted puede comenzar lafunción que gestiona los mensajes y los muestra en TextArea.

El loadMessages () es llamado desde dos puntos diferentes. El primer punto es la función init(), que vimosanteriormente, el segundo es el controlador de temporizador.

La función de control para ver si otra llamada ya se ha hecho para cargar los mensajes. La adición de esta

verificación asegura que no se pueden inundar el servidor y, potencialmente, la fuerza para que no responda. Siotro de carga ya ha comenzado, simplemente a salir de la función y dejar de procesar.

Suponiendo que otra carga ya no está en curso, se establece la variable loadingMessages, que es similar acerrar la puerta después de entrar en una habitación. La mayoría de la funcionalidad de loadMessages essimilar al proceso de envío.

Es básicamente, definir el archivo PHP correcta para cargar y configurar un controlador de eventos para que elservidor devuelva los datos del mensaje.

function loadMessages():void{

if(loadingMessages) return;loadingMessages = true;

var urlRequest:URLRequest = new URLRequest(phpLoadMessages +getCacheBuster());var urlLoader:URLLoader = new URLLoader();

urlLoader.addEventListener(Event.COMPLETE,loadMessagesHandler);urlLoader.load(urlRequest);}

Manejo de respuesta XML 

La función de respuesta de carga es responsable de trabajar con los datos XML y de pasar los mensajes que semostrarán.

function loadMessagesHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);

messagesTxt.htmlText = “”;

Page 250: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 250/467

250

for each(var item in xml..message){addMessage(item.name, item.msg);}

cacheBuster = getCacheBuster();loadingMessages = false;

}

NOTA Los nombres de elementos dentro de la respuesta XML distinguen entre mayúsculas yminúsculas. El caso de la norma está en minúscula, o camello, de múltiples palabras .

Después de que el XML se ha cargado correctamente y listo para usar, configurar un bucle for..each al igual quelo utiliza en el ejemplo al cargar el código XML en el Capítulo 3. El bucle se basa en todos los nodos del“mensaje” encontrado en la respuesta de ejemplo. Una muestra de la respuesta pasa de nuevo sería algo comoesto:

<messages><message id=‟29‟>

<name>guest1</name><msg>Flash is a lot of fun</msg></message><message id=‟30‟><name>guest2</name><msg>PHP and Flash is better</msg></message><message id=‟32‟><name>guest1</name><msg>You can do so many things with it</msg></message><message id=‟33‟><name>guest2</name><msg>For sure, just look at this cool chat client</msg></message></messages> 

El paso final de la función de loadMessagesHandler es crear un nuevo destructor de caché y establecer lavariable loadingMessages a false, lo que permite a las futuras convocatorias para obtener los últimos mensajes.

Busters caché se ha explicado anteriormente en la sección. Sin embargo, hay varias maneras de crear unacadena única. La fecha está siempre cambiando y ActionScript tiene un método getTime que devuelve losmilisegundos desde 1 de enero de 1970. Este método utiliza la fecha, ya que está cambiando constantemente ynunca se repite, lo que deja una cadena única cada vez que se llama.

En este punto, usted ha completado el código ActionScript para su aplicación de chat. Aquí está el códigocompleto de referencia:

var phpPath:String = “http://localhost/ch10/chatClient/”;var phpSendMessage:String = phpPath + “message.php”;var phpLoadMessages:String = phpPath + “getMessages.php”;

var loadingMessages:Boolean = false;var sendingMessage:Boolean = false;var chatMessages:Array = new Array();

Page 251: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 251/467

251

var timer:Timer;var cacheBuster:String = “?cb=1”;

function init():void{// start timer for loading of messagestimer = new Timer(5000, 0);

timer.addEventListener(TimerEvent.TIMER, timerHandler);timer.start();

cacheBuster = getCacheBuster();

loadMessages(); // first time}

function sendMessage(e:MouseEvent):void{if(usernameTxt.text == “”){trace(“Username required”);

return;}

if(newMsgTxt.text.length >= 3){var variables:URLVariables = new URLVariables();variables.user = usernameTxt.text;variables.msg = newMsgTxt.text;

var urlRequest:URLRequest = new URLRequest(phpSendMessage +getCacheBuster());urlRequest.method = URLRequestMethod.POST;urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,sendMessageHandler);urlLoader.load(urlRequest);

// force message into displayaddMessage(usernameTxt.text, newMsgTxt.text);}}

function sendMessageHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);

var variables:URLVariables = new URLVariables(loader.data);trace(“Response: “ + variables.resp);

// clear message boxnewMsgTxt.text = “”;}

function loadMessages():void{if(loadingMessages) return;loadingMessages = true;

Page 252: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 252/467

252

var urlRequest:URLRequest = new URLRequest(phpLoadMessages +getCacheBuster());var urlLoader:URLLoader = new URLLoader();

urlLoader.addEventListener(Event.COMPLETE,loadMessagesHandler);urlLoader.load(urlRequest);

}

function loadMessagesHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);

loadingMessages = false;messagesTxt.htmlText = “”;

for each(var item in xml..message){addMessage(item.name, item.msg);

}

cacheBuster = getCacheBuster();}

function getCacheBuster():String{var date:Date = new Date();cacheBuster = “?cb=” + date.getTime();return cacheBuster;}

function addMessage(user:String, msg:String):void{

messagesTxt.htmlText += “<b>” + user + “</b>” + “: “ + msg +“\n”;}

function timerHandler(e:TimerEvent):void{trace(“Timer hit”);loadMessages();}

sendBtn.addEventListener(MouseEvent.CLICK, sendMessage);

init();

PHP para la aplicación de chat 

En este punto, usted ha completado la parte de ActionScript de la aplicación de chat. El segundo paso esdesarrollar el código PHP, que es llamado desde el código ActionScript.

El código PHP está dividido en tres archivos, que se ilustran en la tabla 11.4.

Page 253: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 253/467

253

TABLA 11.4

Desglose de los archivos PHPArchivo de código PH Acción . getMessages.php Coge todos los mensajes en los últimos 15 minutos 

messages.php Se encarga de la redacción de un nuevo mensaje a la base de datos 

dbConn.php La conexión de base de datos compartida con los otros archivos

El primer archivo trabajar con getMessages.php. La primera parte de la carga de código o incluye el archivo deconexión de bases de datos, que usted va a mirar en un momento. La siguiente parte es el llamado SQL, queconsulta la base de datos MySQL y coge todos los últimos mensajes publicados en los últimos 15 minutos.

$sql = “SELECT * FROM flashChat WHERE dateAdded > “ .(time() - (60 * 15));$result = mysql_query($sql);

La condición de los últimos 15 minutos se determina por el código siguiente. El time() devuelve un timestampUNIX que se resta un 60 y multiplicado por 15. El 60 es para los segundos en un minuto y el 15 es la cantidad deminutos que usted se refiere. También puede escribir esta ecuación matemática básica mediante la eliminaciónde la etapa de multiplicación. Si lo hace, lo hace más difícil de leer el código, sino que también aumenta lavelocidad de la aplicación.

time() - 900

Esta cadena SQL se pasa a la función real que hace la llamada al servidor mysql_query(), que se asigna a lavariable $result. Ahora que ha realizado con éxito la llamada a la base de datos MySQL, el siguiente paso esgenerar un bucle que construye los mensajes.La figura 11.3 muestra la pantalla de consultas en MySQL Query Browser, que está disponible de forma gratuitaen www.mysql.com. 

Este bucle se realiza mediante un tiempo, que tiene una duración prevista hasta que una fila válida no se

devuelve desde la base de datos. También puede colocar esto en un bucle y el uso mysql_num_rows() paradeterminar cuántas filas se devuelven.

Page 254: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 254/467

254

FIGURA 11.3La consulta SQL devuelto dentro de el MySQL Query Browser

 

La función mysql_fetch_array() agarra la de una sola fila de la tabla de base de datos en un formato de matrizasociativa y la asigna a la variable $row. El contenido del bucle se crean para generar nodos XML que contienenlos datos del mensaje, que se miró en el capítulo anterior.

while($row = mysql_fetch_array($result)){$xmlData .= “ <message id=‟” . $row[„id‟] . “„>\n”;$xmlData .= “ <name>” . $row[„username‟] . “</name>\n”;$xmlData .= “ <msg>” . $row[„message‟] . “</msg>\n”;$xmlData .= “ </message>\n”;}

En este punto, usted tiene una llamada efectuada SQL en el servidor y un bucle para generar el mensaje dedatos XML, que se devuelve a la Actionscript en Flash. Envío de los datos de vuelta a ActionScript es muysencilla, solo asignar la variable $xmlData a la declaración de impresión.

print $xmlData;

La declaración de impresión envuelve su archivo messages.php, que se muestra en su totalidad aquí.

<?php

Page 255: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 255/467

255

include „dbconn.php‟;

$sql = “SELECT * FROM flashChat WHERE dateAdded > “ . (time() - (60 * 15));

$result = mysql_query($sql);$xmlData = “<messages>\n”;

while($row = mysql_fetch_array($result)){$xmlData .= “ <message id=‟” . $row[„id‟] . “„>\n”;$xmlData .= “ <name>” . $row[„username‟] . “</name>\n”;$xmlData .= “ <msg>” . $row[„message‟] . “</msg>\n”;$xmlData .= “ </message>\n”;}

$xmlData .= “</messages>”;print $xmlData;

?>

El archivo PHP siguiente que debe ser desarrollado es messages.php, que es responsable de la inserción denuevos mensajes en la base de datos MySQL. La primera parte de este archivo PHP comienza el mismo que elanterior por la carga del archivo dbconn.php, que es responsable de manejar la información de acceso yconexión a la base de datos MySQL.

include „dbconn.php‟;

El siguiente paso es comprobar que el mensaje enviado desde ActionScript es de hecho mayor que 0 caracterescadena vacía. En PHP, strlen() devuelve la longitud de una cadena que se pasa como argumento.

if(strlen($_POST[„msg‟]) > 0){...}

Asumiendo que tiene un mensaje de longitud válido, asigna tres variables: una es el nombre de usuario, elsegundo es el mensaje, y la tercera es la fecha en formato timestamp UNIX.

$username = $_POST[„user‟];$message = $_POST[„msg‟];$date = time();

El siguiente paso en el desarrollo de este archivo es tomar realizar la llamada MySQL real, que se realizautilizando mysql_query(). Esta función tiene la instrucción SQL como argumento y devuelve un identificador derecursos o genera un error.

La instrucción SQL real es bastante similar a otros utilizados en los ejemplos anteriores. Hay una mesa deFlashChat dentro de la base de datos que pasa a tener cuatro columnas, pero una de ellas es unaauto_increment y no necesita ser definido en una sentencia INSERT.

NOTA En una aplicación más robusta, que se desea añadir una capa de seguridad en los datos pasados en el deotra fuente. No importa si se trata de Flash, el navegador, o de un servicio de terceros, siempre es importante.

mysql_query(“INSERT INTO flashChat (username, message, dateAdded)

Page 256: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 256/467

256

VALUES („“ . $username . “„,„“ . $message . “„,„“ . $date . “„)”);

PRECAUCIÓN El nombre dateAdded fue utilizado porque la fecha es una palabra reservada en MySQL y seproducirá un error en la mayoría de los casos. Nunca es una buena idea utilizar las palabras reservadas para suuso en cualquier otro lenguaje de desarrollo.

El último paso en este archivo es devolver una respuesta a la notificación de Flash que el mensaje se haañadido otro mensaje y ahora puede ser añadido a partir de ese usuario. En general, el archivo messages.phpes bastante simple, pero hace el trabajo.

Aquí está el archivo de messages.php de referencia completa.

<?php

include „dbconn.php‟;

if(strlen($_POST[„msg‟]) > 0){$username = $_POST[„user‟];$message = $_POST[„msg‟];$date = time();

mysql_query(“INSERT INTO flashChat (username, message,dateAdded)VALUES („“ . $username . “„,„“ . $message . “„,„“ . $date . “„)”);

print “resp=MESSAGE_ADDED”;}

?>

Usar PHP para conectar a MySQL

El archivo PHP pasado en su versión de Flash aplicación de chat es el archivo de dbconn.php. Este archivo esresponsable de conectar a MySQL y proporcionar un vínculo a las tablas contenidas en la base de datos.

NOTA Sólo puede haber una conexión a una base de datos única a la vez. La mejor práctica es el plan de SQL se

conecta a ser más eficientes. Esto le impide tener que ir adelante y atrás.

Este archivo es bastante pequeño, pero tiene un requisito muy importante, que es en honor a las medidas deseguridad en la mayor medida. Una buena parte de estos artículos han señalado que la seguridad esimportante. Se veía en muchos ejemplos anteriores, en este ejemplo, la seguridad no se excluye de lasimplicidad.

La primera parte de el archivo es asignar las variables de la base de datos que se pasarán a lo largo de laconexión. A menudo las aplicaciones más avanzadas tendrán un archivo separado para las variables de

Page 257: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 257/467

257

configuración. Ese archivo de configuración que se carga sólo cuando la aplicación se inicia y se hace referenciaen todo.

Sin embargo, debido a esta aplicación es bastante pequeño, sólo se asignan las variables de la base de datos deconexión dentro de la conexión del archivo dbconn.php.

$host = “HOST_NAME”;

$user = “SQL_USERNAME”;$pass = “SQL_PASSWORD”;$database = “SQL_DATABASE_NAME”;

La primera variable es a menudo localhost o la dirección IP del servidor donde MySQL se ejecuta si se pasa aestar en ejecución remota del servidor donde está corriendo PHP. No había que esperar para ver unainstalación remota de MySQL en sistemas más pequeños, pero es muy común en aplicaciones de mayortamaño.

Las otras tres variables son nombre de usuario, contraseña y el nombre de la base de datos a la que deseaconectarse. Esta información de conexión proporcionada por su administrador de sistema o de acogida, si noya lo saben.

NOTA MySQL crea una instalación por defecto con el nombre del usuario "root" y sin contraseña, pero es muyinseguro de esta manera y se debe cambiar inmediatamente.

Ahora que las variables son definidas correctamente, puede realizar una conexión real a MySQL. Esto se lograpor la función mysql_connect() dentro del PHP. Esta función acepta tres argumentos: host, nombre de usuarioy una contraseña definida hace un momento.

$link = mysql_connect($host, $user, $pass);

La función mysql_connect() devuelve un identificador de recurso que se almacena en la variable $link.Esto se hace referencia a cuando se va a seleccionar la base de datos.

Selección de la base de datos es simplemente una cuestión de hacer referencia el nombre de la base de datos ala que desea conectarse y pasando por el enlace recibido en el paso de la conexión.

mysql_select_db($database, $link);

El paso final y más importante es destruir las variables que contienen la información de conexión de MySQL. Ladestrucción o eliminación de una variable se hace pasando la la variable de referencia a la función unset(), queelimina la existencia de esa variable.

unset($host);unset($user);

unset($pass);unset($database);unset($link);

Es importante que este paso para garantizar que los futuros aspectos de una aplicación no puede obteneracceso a estas variables. Esto es especialmente importante cuando la introducción de aplicaciones de tercerosen su aplicación personalizada.

Page 258: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 258/467

258

Una alternativa más segura que el método anterior es envolver todo esto en una clase. Esto es similar atrabajar con un componente cerrado en Flash. El acceso está permitido sólo a lo que usted quiere que otrosvean, y el resto está oculto.

Aquí hay un ejemplo de una conexión de base de datos con una clase:

<?php

// simple mysql connection class

class MysqlConnection{

public $link;

private $host = “localhost”;private $user = “SQL_USERNAME”;private $pass = “SQL_PASSWORD”;private $database = “SQL_DB_NAME”;

function MysqlConnection() {}

public function connect(){$this->link = mysql_connect($this->host,$this->user,$this->pass);mysql_select_db($this->database, $this->link);}

public function setConnectionDetails($h=‟‟, $u=‟‟, $p=‟‟,$d=‟‟)

{$this->host = $h;$this->user = $u;$this->pass = $p;$this->database = $d;}

public function getLink(){return $this->link;}}

$sql = new MysqlConnection();$sql->connect();

?>

A primera vista no parece muy diferente de la conexión de ejemplo anterior, sin embargo, la secciónimportante es la definición de las variables.

public $link;

Page 259: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 259/467

259

private $host = “localhost”;private $user = “SQL_USERNAME”;private $pass = “SQL_PASSWORD”;private $database = “SQL_DB_NAME”;

Como vimos en el capítulo 9, las variables de clase de PHP se puede dar una designación pública y privada. Enesta clase de ejemplo, las variables de conexión se definen como privadas, el bloqueo con fuerza dentro de la

clase. Esto garantiza esas variables no pueden ser descubiertos por accidente, y también ofrece otrobeneficio. Digamos que tienes un nuevo proyecto y desea conectarse a una base de datos; hacerlo sería tansimple como el siguiente bloque de código.

<?php

include „MysqlConnection.php‟;

$mysqlConn = new MysqlConnection();$mysqlConn-> setConnectionDetails(“host”, “user”, “pass”, “db”);$mysqlConn->connect();

$query = “SELECT * FROM our_table”;

$result = mysql_query($query, $mysqlConn->getLink());?>

Tenga en cuenta que se utiliza la clase de conexión personalizada, información nueva conexión, y finalmentepasar el enlace de la base de datos en la convocatoria de la consulta. En ningún momento de este código es lainformación de conexión de acceso o expuestos al público en general.

NOTA Cuando se conecte a una base de datos en un servidor de vivir es una buena idea deshabilitar el informede errores, o al menos suprimir cualquier error de conexión.

Aquí está el archivo de conexión original en su totalidad:

<?php$host = “localhost”;$user = “SQL_USERNAME”;$pass = “SQL_PASSWORD”;$database = “SQL_DB_NAME”;

$link = mysql_connect($host, $user, $pass);mysql_select_db($database, $link);

unset($host);unset($user);unset($pass);unset($database);unset($link);

?> 

Crear una tabla de base de datos

En este punto, todos los ActionScript y PHP es escrito. Sin embargo, si intenta probar la aplicación no seejecutará porque no se ha definido la tabla de SQL que interactúan con el PHP para enviar y la carga demensajes.

Page 260: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 260/467

260

La sintaxis SQL es muy fácil de seguir, pero es importante para construir cuidadosamente. El desempeño de uncuadro de construcción deficiente sufrirá más y más a medida que comienza a crecer. Este SQL crea una tablade FlashChat, y agrega las filas que se utiliza en el PHP. Notificación de la fila de identificación, que no se utilizaen el código PHP, sino que se utiliza internamente para la indización y la asignación de teclas. Otra forma depensar acerca de la ID es la llave que abre el misterio para que sus datos se encuentra dentro de esta mesagrande.

El mensaje de la filas que usted usa en el PHP son nombre de usuario, y dateAdded. La fila de mensaje es másimportante porque se establece como TEXT, lo que da una composición abierta, la capacidad de longitud. Estosignifica básicamente un mensaje puede ser de cualquier longitud. Ese registro también podría haber sidoasignado un varchar(), que obliguen a la longitud de un límite previamente determinada, como la:

message varchar(150) NOT NULL default „‟

Esta nueva definición de la fila mensaje obligaría a cualquier mensaje de chat más de 150 caracteres que setrunca o terminado. Establecer como texto es más conveniente, pero tiene problemas potenciales derendimiento como la base de datos y mesa de crecer.

CREATE TABLE flashChat (id int(11) not null auto_increment,username varchar(20) NOT NULL default „‟,message text NOT NULL,dateAdded int(11) NOT NULL default 0,PRIMARY KEY (id)) ENGINE=MyISAM;

Tomó un montón de código, pero su PHP-impulsado Flash Chat aplicación está completa. Tome el tiempo pararevisar el código y extender el ejemplo, para añadir más características. Aquí están algunas ideas paracomenzar.

Característica de la primera y probablemente más evidente que se podría agregar algo de mayor nivel de

seguridad entre PHP y Flash. También puede añadir un panel de moderación o como un bono de un script demoderación de base haya sido proporcionada en el contenido adicional disponible para este libro.

En este punto, usted debe tener un buen entendimiento de cómo construir una aplicación completa usandoFlash, PHP y MySQL. En la siguiente sección, se utiliza Flash y PHP para construir una galería de fotos completacon las categorías y los controles de navegación.

Uso de PHP para el desarrollo de una galleria de fotos 

¿Qué es mejor que una galería de Flash? ¿Qué tal una galería Flash dinámico en PHP alimenta autoupdatingarchivos XML? Esta sección es una guía paso a paso sobre cómo desarrollar eso. El desarrollo comenzará con el

código ActionScript y luego mudarse a la parte de PHP. El último paso será evaluar la aplicación de acabados yexplicar la manera de avanzar.

Como aprendimos en el comienzo de este capítulo, cada buena aplicación está diseñada y evaluada antes deque la programación comienza. Tome un momento para mirar a la aplicación de acabado, que está disponibleen la fuente de material para este libro. Figura 11.4 se muestra la aplicación completa.

Page 261: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 261/467

261

FIGURA 11.4La galería de fotos Flash/PHP completado que muestra contenido cargado

El código ActionScript para la aplicación completa automáticamente para rellenar una lista de categorías.Carga dinámica de las imágenes y permitir una navegación anterior y siguiente a través de cada categoría de lasimágenes.

El desarrollo de ActionScript 

Ahora que sabes lo que hará la aplicación, puede comenzar a colocar las variables.

var phpPath:String = “http://localhost/ch10/photoGallery/”;var phpFile:String = phpPath + “gallery.php”;

var images:Array = new Array();

var imageHolder:MovieClip;var categoryHolder:MovieClip;

Las dos primeras variables hace referencia al archivo PHP que genera la categoría y los datos de la imagen. Lavariable de las imágenes se utiliza para almacenar los datos de las imágenes enviadas desde el PHP, que seutiliza para cargar las imágenes. Las dos últimas variables en esta sección son MovieClips titular para la imagen

Page 262: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 262/467

262

principal y la navegación. Ambas variables se rellenan en tiempo de ejecución una vez que se carga la imagen ylos datos de la categoría.

El siguiente conjunto de variables que se necesita es específicamente para navegar alrededor de las imágenes ylas categorías.

var currentID:uint;

var currentImage:Number = 0;var imageDir:String = “photos/”;var cacheBuster:String = “?cb=1”;

El currentID se usa para recordar que la imagen se está viendo. Esto será utilizado en las funciones denavegación anterior y siguiente. El imageDir es una referencia al directorio de la imagen, que es donde está eldirectorio de la categoría. La última variable es un destructor de la caché, que como se explicó al comienzo deeste capítulo se utiliza para asegurar la carga de datos es siempre fresca y no en caché.

Ahora que ha completado el proceso de establecimiento de todas las variables necesarias, puede pasar alnúcleo de la aplicación, que es de las funciones.

La función init() es responsable de crear los dos MovieClips holder (titular). El MovieClips se creandinámicamente, colocado, y adjunta a la lista de visualización. Esto se hace realizando una llamada a addChild ypasando a lo largo de la referencia de MovieClip. La función init también es donde genera el Buster caché. Elúltimo paso de la función de inicio es para hacer una llamada a la loadCategories() la función. Es importanteque esta función sólo se le llama en el inicio, porque los objetos y las categorías sería indefinido o duplicado.

function init(){imageHolder = new MovieClip();imageHolder.x = 212;imageHolder.y = 49;addChild(imageHolder);

categoryHolder = new MovieClip();categoryHolder.x = 15;categoryHolder.y = 50;addChild(categoryHolder);

cacheBuster = getCacheBuster();

loadCategories();}

Una vez que la fase de inicialización de init se ha completado la función loadCategories() es llamado. Estafunción se llama al archivo PHP para cargar en la lista de categorías usando URLRequest y pasando a lo largo deuna acción personalizada que le dice a la secuencia de comandos que desea que la lista de categorías. Esto es

importante porque la gallery.php maneja tanto las categorías y la selección de fotos. En general, la función deloadCategories es bastante similar a otros cargadores utilizados en este libro.

function loadCategories():void{var action:String = “action=cat”;var urlRequest:URLRequest = new URLRequest(phpFile +getCacheBuster() + “&” + action);

var urlLoader:URLLoader = new URLLoader();

Page 263: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 263/467

263

urlLoader.addEventListener(Event.COMPLETE, drawCategories);urlLoader.load(urlRequest);}

La función de drawCategories se llama una vez la lista de categorías se ha enviado desde el PHP.Los datos se cargan en un objeto XML y analizado utilizando un bucle for..each. Para comprender mejor el ciclo,mira un ejemplo de XML resultado pasa de nuevo desde el PHP. Uno de estos nodos XML se crea para cada

categoría en la galería.

<category id=”2” name=”Landscapes” copyright=”Other”/>

El texto de la categoría que se muestra en el escenario es un campo de texto dinámico creado en el buclefor..each. También puede adjuntar un clip de película de la biblioteca, pero al hacerlo da lugar a una aplicaciónmás fragmentada y se pierden algunas opciones de formato.

function drawCategories(e:Event):void{...for each(var item in xml..category){

...}}

Antes de continuar con la aplicación mirada código específico en lo que exactamente se está haciendo paracrear el TextField.

var txt:TextField = new TextField();txt.selectable = false;txt.width = 200;txt.text = “Sample Text”;

La primera línea es la creación de una nueva instancia de TextField y el establecimiento de una referencia a lavariable txt. La siguiente línea es asegurarse de que el texto no se puede seleccionar con el ratón.

NOTA No siempre se establece la propiedad seleccionable en false. Los usuarios a menudo como para copiar elcontenido, sobre todo bloques de texto.

La segunda a la última línea de código es responsable de establecer la anchura del TextField a 200 píxeles paraacomodar el texto. Luego de la última línea es simplemente aplicar el texto que será visible en el cuadro detexto.

Una vez creado el campo de texto, se adjunta un detector de eventos para cargar una categoría de las

imágenes cuando el texto se hace clic.

Funciones Anonimas

Una función anónima está directamente ligado a la llamada addEventListener. Una función anónima no puedeser llamado por su nombre porque no tiene uno, es usado como una alternativa a una función habitual cuandola tarea es sencilla y no requiere una gran cantidad de código. Siendo realistas funciones anónimas se utilizanpara hacer el código más compacto, o si necesita acceder a una variable que está en el ámbito local en elmétodo de llamada.

Page 264: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 264/467

264

Aquí hay un ejemplo de una función anónima similar a la que se ubica dentro de la función drawCategories.

txtContainer.addEventListener(MouseEvent.CLICK,function(e:Event):void{trace(“Anonymous function here, I don‟t have a name.”);});

Usted puede notar una de las razones posibles para evitar las funciones anónimas (aparte de no sermultifuncional) es un código que hace mucho más difícil de leer de un vistazo. Esto se debe principalmente alhecho de la definición de la función está enterrado en el addEventListener. Además, una función anónima nopuede ser eliminado, lo que puede causar un potencial de pérdidas de memoria.

La última tarea de la función drawCategories es la de conectar el campo de texto a la etapa mediante addChild,como se hace para la categoría.

txtContainer.addChild(txt);categoryHolder.addChild(txtContainer);

Aquí está la función drawCategories completo de referencia.

function drawCategories(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);

for each(var item in xml..category){var txtContainer:MovieClip = new MovieClip();var txt:TextField = new TextField();txt.selectable = false;txt.width = 200;

txt.text = item.attribute(„name‟);txt.y = uint(item.attribute(„id‟) + 4) * 2;txt.name = “text_” + item.attribute(„id‟);txtContainer.addEventListener(MouseEvent.CLICK,function(e:Event):void{loadImages(e.target.name.substring(5));});txtContainer.addChild(txt);categoryHolder.addChild(txtContainer);}}

La siguiente función es centrarse en loadImages. Esta es la función que carga los datos de imagen desde el PHP.El resultado pasa de nuevo es casi idéntica a la encontrada en la función (category) categoría. La variable demedida se establece para las fotos, y también agregar un id de dejar de PHP saber qué fotos para cargar.

function loadImages(id:uint):void{var action:String = “action=photos&id=” + id;var urlRequest:URLRequest = new URLRequest(phpFile +getCacheBuster() + “&” + action);var urlLoader:URLLoader = new URLLoader();

Page 265: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 265/467

265

urlLoader.addEventListener(Event.COMPLETE, imagesLoaded);urlLoader.load(urlRequest);currentID = id;}

Una respuesta se envía de nuevo cuando se carga el PHP, y la función imagesLoaded es llamada. Los datos deimagen se devuelve en formato XML y manejado con un bucle for..each.

Este ciclo de los procesos de cada nodo de fotos en los datos XML y construye un objeto, que se añade"empujado" (“pushed”) a las imágenes de matriz.

function imagesLoaded(e:Event):void{for each(var item in xml..photo){images.push({name:‟‟, src:item.attribute(„src‟)});}...}

He aquí el objeto por sí mismo y un método alternativo y más legible de la creación del objeto.

{ name:‟‟, src:item.attribute(„src‟) }

Aquí está el método alternativo para definir el objeto.

var obj:Object = new Object();obj.name = „‟;obj.src = item.attribute(„src‟);

La última tarea de la función de imagesLoaded es establecer la variable de currentImage y hacer una llamada ala función DisplayImage pasando la fuente de imagen. El origen de la imagen se carga desde la matriz deimágenes usando currentImage como el índice de la matriz.

function imagesLoaded(e:Event):void{...currentImage = 0;displayImage(images[currentImage].src);}

Esta es la función imagesLoaded completa:

function imagesLoaded(e:Event):void{var loader:URLLoader = URLLoader(e.target);

var xml:XML = new XML(loader.data);images = new Array();for each(var item in xml..photo){images.push({name:‟‟, src:item.attribute(„src‟)});}currentImage = 0;displayImage(images[currentImage].src);} 

Page 266: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 266/467

266

Con las categorías y las imágenes cargadas, puede mostrar la imagen. Esto se hace mediante la asignación deun URLRequest construcción del directorio de imagen, id de la categoría actual, y el nombre de la foto. La clasecargador se coloca directamente en una llamada addChild, que maneja la visualización de la imagen una vezque esté completamente cargada. Usted no notará ningún tiempo de carga a nivel local, pero puede ser enlínea.

NOTA Es buena práctica colocar preloaders donde los datos se cargan. Esto informa al usuario de que algo está

pasando.

function displayImage(src:String):void{var loader:Loader = new Loader();loader.load(new URLRequest(imageDir + currentID + “/” + src));imageHolder.addChild(loader);}

Navegacion de galeria de fotos

La parte de navegación de la galería de fotos está construida con dos clips de película en el escenario. Cada uno

de los clips se asigna a un controlador de eventos que, o bien de cargar la imagen siguiente o la anterior.

Navegación de Imagen

Usted notará que la función nextImage() tiene algo de lógica condicional. Esta es la comprobación para ver si lavariable currentImage es un número mayor que el total de las imágenes, lo que daría lugar a un error de carga.El mismo proceso básico se hace para la función prevImage() con la excepción de que el cheque condicional esgarantizar el valor no sea inferior a cero.

NOTA Las funciones de la imagen anterior y siguiente se bloqueará si una categoría no ha sido elegido.

function nextImage(e:MouseEvent):void{currentImage++;if(currentImage > images.length-1){currentImage = 0;}displayImage(images[currentImage].src);}

function prevImage(e:MouseEvent):void{currentImage--;if(currentImage <= 0)

{currentImage = images.length-1;}displayImage(images[currentImage].src);} 

La última función en el script de galería de fotos se utiliza para generar su buster caché, que se utiliza paraasegurar las llamadas al servidor nunca se almacenan en caché. Esta función es idéntica a la utilizada en elFlash aplicación de chat que construyó anteriormente en este capítulo.

Page 267: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 267/467

267

La última parte de la aplicación es llamar a init() en el inicio de la aplicación y asignar los manejadores deeventos que utiliza los botones de navegación.

function getCacheBuster():String{var date:Date = new Date();cacheBuster = “?cb=” + date.getTime();return cacheBuster;}

init();

prevMC.addEventListener(MouseEvent.CLICK, prevImage);nextMC.addEventListener(MouseEvent.CLICK, nextImage);

Aquí está el código ActionScript completo para la aplicación galería de fotos:

var phpPath:String = “http://localhost/ch%2010/photoGallery/”;var phpFile:String = phpPath + “gallery.php”;

var images:Array = new Array();

var imageHolder:MovieClip;var categoryHolder:MovieClip;

var currentID:uint;var imageDir:String = “photos/”;

var currentImage:uint = 0;

var cacheBuster:String = “?cb=1”;

function init(){

imageHolder = new MovieClip();imageHolder.x = 212;imageHolder.y = 49;addChild(imageHolder);

categoryHolder = new MovieClip();categoryHolder.x = 15;categoryHolder.y = 50;addChild(categoryHolder);

cacheBuster = getCacheBuster();

loadCategories();}

function loadCategories():void{var action:String = “action=cat”;var urlRequest:URLRequest = new URLRequest(phpFile +getCacheBuster() + “&” + action);

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, drawCategories);urlLoader.load(urlRequest);

Page 268: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 268/467

268

}

function drawCategories(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);

for each(var item in xml..category)

{var txtContainer:MovieClip = new MovieClip();

var txt:TextField = new TextField();txt.selectable = false;txt.width = 200;txt.text = item.attribute(„name‟);txt.y = uint(item.attribute(„id‟) + 4) * 2;txt.name = “text_” + item.attribute(„id‟);txtContainer.addEventListener(MouseEvent.CLICK,function(e:Event):void{loadImages(e.target.name.substring(5));

});

txtContainer.buttonMode = true;

txtContainer.addChild(txt);categoryHolder.addChild(txtContainer);

}}

function loadImages(id:uint):void{trace(“Load Images: “ + id);var action:String = “action=photos&id=” + id;

var urlRequest:URLRequest = new URLRequest(phpFile +getCacheBuster() + “&” + action);

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, imagesLoaded);urlLoader.load(urlRequest);currentID = id;}

function imagesLoaded(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);

images = new Array();

for each(var item in xml..photo){images.push({name:‟‟, src:item.attribute(„src‟)});}

currentImage = 0;displayImage(images[currentImage].src);}

Page 269: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 269/467

269

function displayImage(src:String):void{trace(“Load Image: “ + src);

var loader:Loader = new Loader();loader.load(new URLRequest(imageDir + currentID + “/” + src));imageHolder.addChild(loader);}

function nextImage(e:MouseEvent):void{currentImage++;if(currentImage > images.length-1){currentImage = 0;}displayImage(images[currentImage].src);}

function prevImage(e:MouseEvent):void{

currentImage--;if(currentImage <= 0){currentImage = images.length-1;}displayImage(images[currentImage].src);}

function getCacheBuster():String{var date:Date = new Date();cacheBuster = “?cb=” + date.getTime();return cacheBuster;}

init();

prevMC.addEventListener(MouseEvent.CLICK, prevImage);nextMC.addEventListener(MouseEvent.CLICK, nextImage);

PHP para la galleria de fotos 

La parte de PHP de esta aplicación galería de fotos está construido de tres archivos. El primer archivo escategories.php, que es una representación estática de las categorías de ser enviado a ActionScript.

La primera parte del código es la categoría en un formato de matriz multidimensional. Los elementos de

categoría tienen el nombre, id, y la información de derechos de autor para cada categoría.

$categories = array(array(“Boston”, 1, “M. Keefe”),array(“Landscapes”, 2, “Other”),array(“Las Vegas”, 3, “M. Keefe”),array(“Weddings”, 4, “Other”),);

Page 270: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 270/467

270

La primera función GetCategories() se establece una referencia global a la variable $categories. El siguientepaso es definir un bucle que se encargará de construir los datos XML que se reintegrará a ActionScript.

function getCategories(){global $categories;

$xml = “<categories>\n”;

for($i=0; $i < count($categories); $i++){$xml .= “ <category id=\”” .$categories[$i][1] . “\” name=\”” .$categories[$i][0] . “\” copyright=\”” .$categories[$i][2] . “\” />\n”;}

$xml .= “</categories>”;

return $xml;}

La longitud del bucle está determinado por cuán grande es el array $categories pasa a ser.

count($categories)

El cuerpo del bucle no es más que la construcción de los datos XML, similar a la muestra miró durante la partede desarrollo de ActionScript.

$xml .= “ <category id=\”” .$categories[$i][1] . “\” name=\”” .$categories[$i][0] . “\” copyright=\”” .$categories[$i][2] . “\” />\n”;

El último paso de esta función es la de devolver los datos XML de ActionScript para el proceso.

return $xml;

Aquí está el archivo categories.php en su totalidad:

<?php

$categories = array(array(“Boston”, 1, “M. Keefe”),array(“Landscapes”, 2, “Other”),array(“Las Vegas”, 3, “M. Keefe”),

array(“Weddings”, 4, “Other”),);

function getCategories(){

global $categories;

$xml = “<categories>\n”;

for($i=0; $i < count($categories); $i++)

Page 271: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 271/467

271

{$xml .= “ <category id=\”” .$categories[$i][1] . “\” name=\”” .$categories[$i][0] . “\” copyright=\”” .$categories[$i][2] . “\” />\n”;}

$xml .= “</categories>”;

return $xml;}

?>

El archivo siguiente a desarrollar es getPhotos.php, que abre el directorio de foto y devuelve el archivo XML depoblación con información de origen para cada una de las fotos.

La carne de este archivo es la función getPhotosFromID(), que acepta un argumento, un id.Usted quiere asegurarse de que una identificación válida se pasa antes de continuar por lo que una sentenciacondicional simple trabajará en este caso. Si un número de identificación válido se ha encontrado, entonces se

puede continuar con la apertura de las mismas y el bucle while.

<?php

$photo_dir = “photos/”;

function getPhotosFromID($id=null){global $photo_dir;

if($id == null){print “ID Not Provided”;return false;}

$xml = “<photos id=\”” . $id . “\”>”;

$dir = opendir($photo_dir . $id);while(false !== ($file = readdir($dir))){if($file != “.” && $file != “..”){$xml .= “<photo name=\”” . “” . “\” src=\”” . $file . “\”/>\n”;}}

closedir($dir);

$xml .= “</photos>”;

return $xml;}

?>

Page 272: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 272/467

272

El bucle while está configurado para recorrer cada archivo en el directorio hasta que el puntero de archivo esfalso, lo que significa que no se encontró archivo válido.

while(false !== ($file = readdir($dir))){...}

Se utiliza un condicional si la declaración de exclude .y .. que es punteros de directorio para el directorio actualy directorio padre. Si se excluye este control, habrá al menos dos entradas falsas en el archivo XML, o peor aún,el archivo puede error a cabo todos juntos, ya que podría poner el bucle while en un estado recursiva infinita.

Después de todas las imágenes en el directorio se reunieron, se desea cerrar el directorio para liberar recursosvaliosos. Esto es especialmente importante si el archivo puede ser utilizado por otra persona al mismo tiempo.

closedir($dir);

El último paso en este archivo es devolver el XML para el proceso de flash.

Después de haber creado la categoría y los archivos de fotos, puede crear el archivo de gallery.php, que manejalas llamadas de PHP y devuelve el código XML adecuado de acuerdo con lo que se.

<?php

include „categories.php‟;include „getPhotos.php‟;

header(„Content-type: text/xml‟);

if($_GET[„action‟] == „cat‟){print getCategories();}else if($_GET[„action‟] == „photos‟){print getPhotosFromID($_GET[„id‟]);}

?>

Este archivo se inicia mediante la inclusión de los dos archivos anteriores que has creado. Luego, un cabecera()“header()” es de obligar a la salida de todo el contenido en formato XML apropiado. Esta función de cabecerase puede utilizar para casi cualquier tipo de contenido. Es, básicamente, fijarlo, y desde ese punto de la salidasigue a ese formato. Por ejemplo, suponga que desea exportar contenido como PNG.

header(“Content-type: image/png”);

NOTA Asegúrese de utilizar el tipo de contenido correcto en su aplicación. Usando el incorrecto puedeprovocar errores y, en raras ocasiones una aplicación de accidente.

El último bloque de código se utiliza para determinar el contenido que usted está solicitando. Los dos tipos decontenido disponibles en este ejemplo son la categoría y la lista de fotos. La variable $_GET [ 'action'] se pasade Flash en la dirección URL como una cadena de consulta.http://localhost/photoGallery/gallery.php?cb=1192408716823&action=cat 

Page 273: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 273/467

273

En este punto, la galería Flash impulsados por PHP es completa. Se puede extender este ejemplo, para añadirpáginas, de las transiciones, o quizás algunos títulos y descripciones para cada imagen.

Esa es la cosa fresca sobre ActionScript: se puede extender a partir de ejemplos del libro, o simplemente use asu barco.

Uso de PHP para desarrollar un lector RSS Los lectores de RSS es un tema muy popular, y las aplicaciones se pueden encontrar para casi todos losdispositivos que tengan habilitada su web. Se pueden encontrar de todo, desde un navegador en su escritoriopara el teléfono en tu bolsillo.

El RSS es un grupo de canales web utiliza para publicar el contenido frecuentemente actualizado, como lasentradas, titulares de noticias, podcasts, o el entretenimiento. Otra forma de pensar de alguien que RSS es laentrega de las noticias diarias directamente a usted, la única diferencia es que no hay límite a la cantidad dealimentos puede suscribirse a.

Lo que sigue es un vistazo a la aplicación de RSS que usted desarrollará y cómo va a funcionar, como se

muestra en la Figura 11.5.

Page 274: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 274/467

274

FIGURA 11.5El lector de RSS con un sistema de distribución de PHP

La aplicación está construido con componentes prediseñados que ya han sido colocados en el archivo departida. Los tres elementos principales que interesan son la lista, TextArea, y componentes Enviar. Cada uno deestos componentes se le ha asignado un nombre de instancia que se hace referencia en el código ActionScript.

Importar clases 

La mayoría de las clases que se incluyen con Flash no requieren volver a importarlos. Sin embargo, hay algunas

excepciones, una de las cuales es la clase ListEvent.

import fl.events.ListEvent;

Cuando el evento es importado puede asignar las variables de la aplicación de RSS. La única variable global quese necesita para esta aplicación es la referencia de PHP.

var phpPath:String = “http://locahost/ch10/rssReader/”;var phpFile:String = phpPath + “rss.php”;

Page 275: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 275/467

275

Cargar el PHP 

La función utilizada para cargar el PHP, que devuelve XML es muy similar a los ejemplos anteriores. Establecerun URLRequest, un URLLoader, y adjuntar un controlador al evento COMPLETE.

function loadFeeds():void{

var urlRequest:URLRequest = new URLRequest(phpFile);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, feedHandler);urlLoader.load(urlRequest);}

La función feedHandler() es responsable de trabajar con la respuesta de la llamada de PHP. En esta aplicación,el PHP devuelve XML, que se utiliza para rellenar el componente List. El RSS de las entradas se colocan en elcomponente de la lista utilizando la función addItem().

Esta función feedHandler acepta un objeto como argumento. El objeto necesita al menos una etiqueta depropiedad con el fin de añadir el elemento, pero por lo general, se agrega la propiedad de datos, así.

function feedHandler(e:Event):void{...for each(var item in xml..entry){topicsList.addItem({label:item..name, data:item..desc});topicsList.addEventListener(ListEvent.ITEM_CLICK,listClickhandler);}}

Los elementos de la lista de carga el cuerpo del texto cuando se hace clic, de modo de crear la función que se

encarga de este evento. El ListEvent se pasa desde el evento ITEM_CLICK, que contiene la propiedad delelemento. La propiedad es el punto donde se almacena la propiedad de datos. En este ejemplo, que los datoses el órgano de RSS, por lo que simplemente puede pasar que los datos directamente a la TextArea feedBody.

function listClickhandler(e:ListEvent):void{feedBody.htmlText = e.item.data;}

La última función en la aplicación de RSS es el controlador de botón, que es llamado cada vez que elcomponente Button se hace clic. Esta función simplemente hace una llamada a la función loadFeeds.

function submitHandler(e:Event):void{loadFeeds();}

Como puede ver, el ActionScript es bastante simple para este ejemplo. XML realmente acelera el desarrollo deaplicaciones web-enabled, y este es un ejemplo perfecto de ello.

Page 276: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 276/467

276

Aquí está el código de la aplicación de RSS en su totalidad por referencia:

import fl.events.ListEvent;

var phpPath:String = “http://localhost/ch10/rssReader/”;var phpFile:String = phpPath + “rss.php”;

function loadFeeds():void

{var urlRequest:URLRequest = new URLRequest(phpFile);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, feedHandler);urlLoader.load(urlRequest);}

function feedHandler(e:Event):void{var loader:URLLoader = URLLoader(e.target);var xml:XML = new XML(loader.data);

for each(var item in xml..entry)

{topicsList.addItem({label:item..name, data:item..desc});topicsList.addEventListener(ListEvent.ITEM_CLICK,listClickhandler);}}

function listClickhandler(e:ListEvent):void{feedBody.htmlText = e.item.data;}

function submitHandler(e:Event):void{loadFeeds();}

loadBtn.addEventListener(MouseEvent.CLICK, submitHandler);

Con la porción de ActionScript del lector RSS terminado usted puede centrarse en el código PHP.

La conexión RSS que está siendo utilizado para este ejemplo, como se muestra en la figura 11.6, viene deAdobe y son las últimas noticias e información sobre Adobe AIR.

<?php$rssFeed = “http://weblogs.macromedia.com/mxna/xml/rss.cfm?” .

“query=bySmartCategory&languages=1&smartCategoryId=28&” .“smartCategoryKey=F2DFD9E0-FBB6-4C2D-2AFE6AFD941FDDB1”;?>

Page 277: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 277/467

277

FIGURA 11.6¿Cómo se ve la fuente RSS en su navegador web, suponiendo que usted no tiene instalado un lector RSS

La variable $feed es un marcador de posición para el XML generado que se construye una vez que la fuente RSSse carga correctamente. El RSS es leída en el uso de la biblioteca SimpleXML que se entrega con PHP 5. Esta noes la única biblioteca de XML de análisis disponibles para PHP, pero es el más eficiente y más fácil de usar.

$feed = “”;$xml = simplexml_load_file($rssFeed);

En este punto, usted puede comenzar a construir el bucle foreach, que es responsable de construir eldocumento XML se reintegrará al ActionScript.

$feed .= “<items>\n”;

foreach($xml->item as $item){$desc = $item->description;

$desc = preg_replace(„/[...\[\]]/‟, „‟, $desc);

$feed .= “ <entry>\n”;$feed .= “ <name>” . $item->title . “</name>\n”;$feed .= “ <desc><![CDATA[“ . $desc .”]]></desc>\n”;

Page 278: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 278/467

278

$feed .= “ </entry>\n”;}

$feed .= “</items>\n”;

El ciclo de tomar cada elemento del XML y los lazos a través de los nodos de elemento.

Usted notará que la descripción no está asignado a una variable $desc. La razón de esto es porque ladescripción tiene que ser limpiado antes de devolverlo. El proceso de limpieza se realiza mediantepreg_replace(), una función de expresión regular que elimina los caracteres sin escapar e impropio.

$desc = preg_replace(‘/*...\[\++/’, ‘’, $desc);

NOTA Este libro no ofrece un tutorial en profundidad sobre las expresiones regulares (regex), sin embargo, hayuna guía muy bueno encontrar en http://php.net/manual/en/reference.pcre.pattern.syntax.php. 

La última parte del código PHP establece el tipo de cabecera y los resultados del XML en ActionScript.

header(„Content-type: text/xml‟);print „<?xml version=”1.0” encoding=”UTF-8”?>‟ .”\n”;print $feed;

Usted notará que la requerida de PHP para generar la aplicación de RSS no es en profundidad, mucho de eso sedebe a SimpleXML ser tan gran biblioteca. Este ejemplo podría extenderse a tirar más de la informacióncontenida en el feed RSS. Por ejemplo, puede mostrar el título de la entrada, la fecha, e incluso la direccióndonde se encuentra la entrada original.

Por último, aquí está la referencia completa para PHP:

<?php

$rssFeed = “http://weblogs.macromedia.com/mxna/xml/rss.cfm?” .

“query=bySmartCategory&languages=1&smartCategoryId=28&” .“smartCategoryKey=F2DFD9E0-FBB6-4C2D-2AFE6AFD941FDDB1”;

$feed = “”;$xml = simplexml_load_file($rssFeed);

$feed .= “<items>\n”;

foreach($xml->item as $item){$desc = $item->description;

$desc = preg_replace(„/[...\[\]]/‟, „‟, $desc);

$feed .= “ <entry>\n”;$feed .= “ <name>” . $item->title . “</name>\n”;$feed .= “ <desc><![CDATA[“ . $desc .”]]></desc>\n”;$feed .= “ </entry>\n”;}

$feed .= “</items>\n”;

header(„Content-type: text/xml‟);print „<?xml version=”1.0” encoding=”UTF-8”?>‟ .”\n”;

Page 279: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 279/467

279

print $feed;

?>

Uso de PHP, Flash, y MySQL para desarrollar unbanner dinámico 

Muchos de los diseñadores utilizan Flash para crear anuncios para ser colocados en línea. Estos van desde losanuncios de mini dentro de una página de anuncios de toda regla que se la página. El formato de anuncio máscomún es el anuncio de la bandera, que normalmente es 468 × 60, como se muestra en la Figura 11.7, lospíxeles de tamaño. Estas banderas son generalmente secuencias de comandos para cargar un sitio web al hacerclic. ¿Qué pasa con el seguimiento de los clics? Aún mejor, ¿por qué no crear un banner dinámico que carga unanuncio al azar y no requiere que el propietario de actualizar algo más que un archivo XML y directorio de laimagen?

Esta sección será el proceso de desarrollo de un banner dinámico en Flash. A continuación, añadir elseguimiento a este banner utilizando sólo unas pocas líneas de PHP. Este ejemplo no requiere los archivos de

partida, porque cualquier imagen de trabajo para la bandera, y la aplicación va a ser desarrollado 100 porciento en el código ActionScript.

FIGURA 11.7Ejemplo de la aplicación de anuncios de banner en acción

La primera parte del código es responsable de la inicialización de las variables utilizadas en la aplicación.

var phpPath:String = “http://localhost/ch10/bannerAd/”;var phpFile:String = phpPath + “ads.php”;

var imageHolder:MovieClip;var cacheBuster:String = “?cb=1”;var adURL:String;

Una vez que las variables se definen usted puede construir las funciones. El primero es responsable de lacolocación del titular de la imagen, añadiendo el controlador de eventos, y llamando a la función loadImage.

imageHolder = new MovieClip();imageHolder.x = 0;imageHolder.y = 0;imageHolder.addEventListener(MouseEvent.CLICK, loadAdURL);imageHolder.buttonMode = true;addChild(imageHolder);

cacheBuster = getCacheBuster();

loadImage();

Page 280: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 280/467

280

La función loadImage() es responsable de cargar el archivo XML que contiene los datos de anuncios de banner. 

A continuación, asigne una función de controlador que se llama después de que el XML es completamentecargado.

function loadImage():void{var urlRequest:URLRequest = new URLRequest(phpFile +

getCacheBuster());var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, imageLoaded);urlLoader.load(urlRequest);}

Después de que el XML es a plena carga, se hace una llamada a imageLoaded. Esta función es responsable decargar los datos XML, sacando la información de la imagen, y la carga de la imagen. Lo que sigue es un vistazo acada parte, de una en una.

El siguiente es el proceso de carga de los datos y crear el objeto XML:

function imageLoaded(e:Event):void

{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);...

La siguiente parte de esta función es ayudar a introducir los datos de imagen y asignarle a las variables locales:

var url:String = xml..banner.attribute(„url‟);var name:String = xml..banner.attribute(„name‟);var image:String = xml..banner.attribute(„src‟);var directory:String = xml..banner.attribute(„dir‟);

adURL = url;

El último paso en esta función es la de cargar la imagen y adjuntarlo a la lista de visualización:

var loader:Loader = new Loader();loader.load(new URLRequest(directory + image));imageHolder.addChild(loader);

Abrir una ventana del navegador  

El proceso de cargar y mostrar el anuncio ha finalizado. El siguiente paso es asignar el controlador de eventosque se llama cuando se hace clic en el banner. Utilice navigateToURL() para abrir una nueva ventana delnavegador y vaya a la página de anuncios predeterminados.

function loadAdURL(e:MouseEvent):void{navigateToURL(new URLRequest(adURL));}

La última tarea del ActionScript es llamar a la función init() y comenzar el proceso.

init();

Page 281: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 281/467

281

Aquí está el código ActionScript para la referencia completa:

var phpPath:String = “http://localhost/ch10/bannerAd/”;var phpFile:String = phpPath + “ads.php”;

var imageHolder:MovieClip;var cacheBuster:String = “?cb=1”;var adURL:String;

function init(){imageHolder = new MovieClip();imageHolder.x = 0;imageHolder.y = 0;imageHolder.addEventListener(MouseEvent.CLICK, loadAdURL);imageHolder.buttonMode = true;addChild(imageHolder);

cacheBuster = getCacheBuster();

loadImage();

}function loadImage():void{var urlRequest:URLRequest = new URLRequest(phpFile +getCacheBuster());var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, imageLoaded);urlLoader.load(urlRequest);}

function imageLoaded(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

var url:String = xml..banner.attribute(„url‟);var name:String = xml..banner.attribute(„name‟); var image:String = xml..banner.attribute(„src‟);var directory:String = xml..banner.attribute(„dir‟);

adURL = url;

var loader:Loader = new Loader();loader.load(new URLRequest(directory + image));imageHolder.addChild(loader);}

function loadAdURL(e:MouseEvent):void{navigateToURL(new URLRequest(adURL));}

function getCacheBuster():String{var date:Date = new Date();cacheBuster = “?cb=” + date.getTime();return cacheBuster;}

Page 282: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 282/467

282

init();

Desarrollo del PHP 

En este punto, el código ActionScript está completo y usted puede centrarse en el PHP. El archivo ads.php secompone de dos variables globales y una función.

La primera variable global es el directorio donde se encuentran las imágenes del anuncio. La segunda variablees la matriz que contiene los datos de los anuncios.

$adImageDir = “./adImages/”;$bannerAds = array(array(„Banner Name‟, „randomimage1.jpg‟, „http://localhost/‟),array(„Banner Name‟, „randomimage2.jpg‟, „http://localhost/‟),);

La función getBannerAd asigna las dos variables como globales para que sean accesibles dentro de estafunción.

Selección aleatoria

El banner solo se elige de la matriz mediante el uso de una clave aleatoria. Esta clave aleatoria se generamediante la función mt_rand() y la longitud de la matriz $bannerAds ($anunciosdebanner).

$random = (mt_rand() % count($bannerAds));

El archivo XML es construido para dar salida una sola línea de datos de imágenes que ActionScript procesa.

function getBannerAd(){

...

$xml .= “ <banner id=\”” . 0 .“\” dir=\”” . $adImageDir .“\” url=\”” . $bannerAds[$random][2] .“\” name=\”” . $bannerAds[$random][0] .“\” src=\”” . $bannerAds[$random][1] . “\” />\n”;

$xml .= “</banners>”;

return $xml;}

print getBannerAd();

El PHP responsable de cargar el anuncio de la bandera ya está completa. Como puede ver, la cantidad decódigo necesario para crear esta aplicación es bastante pequeño. Este ejemplo básico se puede ampliarfácilmente para agregar en categorías o imágenes, incluso varios que la transición de la película se sienta en unnavegador.

Page 283: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 283/467

283

Aquí está el código de referencia para completar.

<?php

$adImageDir = “./adImages/”;

$bannerAds = array(array(„Banner 1‟, „randomimage1.jpg‟, „http://localhost/‟),

array(„Banner 2‟, „randomimage2.jpg‟, „http://localhost/‟),array(„Banner 3‟, „randomimage3.jpg‟, „http://localhost/‟),array(„Banner 4‟, „randomimage4.jpg‟, „http://localhost/‟),array(„Banner 5‟, „randomimage5.jpg‟, „http://localhost/‟),array(„Banner 6‟, „randomimage6.jpg‟, „http://localhost/‟),array(„Banner 7‟, „randomimage7.jpg‟, „http://localhost/‟),array(„Banner 8, „randomimage8.jpg‟, „http://localhost/‟));

function getBannerAd(){global $bannerAds, $adImageDir;

$xml = “<banners>\n”;

$random = (mt_rand() % count($bannerAds));

$xml .= “ <banner id=\”” . 0 .“\” dir=\”” . $adImageDir .“\” url=\”” . $bannerAds[$random][2] .“\” name=\”” . $bannerAds[$random][0] .“\” src=\”” . $bannerAds[$random][1] . “\” />\n”;

$xml .= “</banners>”;

return $xml;}

print getBannerAd();

?>

Ahora ha creado con éxito un PHP totalmente funcional y de anuncios de banner Flash espectador. Losconceptos aprendidos en esta sección se pueden adaptar fácilmente a otros proyectos. De hecho, le animamosa ampliar el ejemplo y crear una aplicación más robusta.

Esta aplicación también se puede simplificar al cargar un archivo XML estático, sin embargo, esto es más difícilde actualizar y no ofrece el mismo nivel de personalización. La aplicación como PHP significa que usted puedeadjuntar una capa de base de datos MySQL a ella y devolver los datos de la imagen de una base de datos, lo

más probable es que se actualizará de otra fuente.

Uso de PHP para desarrollar un contador de visitas 

Un contador de visitas (hit counter) es usada para determinar cuántos visitantes van a un sitio. En general, elcontador es visible para los visitantes en forma de texto o un gráfico. Algunos sitios utilizan otras formas decontrol que no están disponibles al público, para fines de seguimiento de estadísticas. El sorteo de importantesy las características de un golpe contra alguna representación gráfica.

Page 284: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 284/467

284

Puede utilizar un archivo de texto plano o base de datos SQL para almacenar los datos del contador de visitas.Este ejemplo utiliza una base de datos SQL para un par de razones: la velocidad (la base de datos puedeprocesar la información mucho más rápido) y el archivo se refiere a permiso. En casos raros, un servidor puedecolocar un bloqueo en un archivo, lo que significa que ese archivo no se puede abrir. Esto forzaría el contadorde visitas a fallar y no es el resultado ideal que se busca.

Contador de visita lógico 

La lógica detrás de el contador de visitas es bastante sencillo. En primer lugar, realizar una llamada a la base dedatos para capturar el recuento de visitas actual y se incrementará por 1.

$oldCount = $row[„amount‟];$newCount = $oldCount + 1;

Cuando tenga el nuevo valor, enviarlo de nuevo en la tabla de SQL. Para ello, la actualización de la fila existentey el establecimiento de la columna de importe que el valor de la variable $newCount.

mysql_query(“UPDATE counter SET amount=” . $newCount);

El último paso en el código PHP es devolver el valor nuevo a Flash para que se muestre.

return “resp=” . $newCount;

Eso es todo el PHP las necesidades de la lógica de contador de visitas. El siguiente es el archivo completo.

<?php

include „dbConn.php‟;

$query = “SELECT amount from counter”;$result = mysql_query($query);$row = mysql_fetch_array($result);$oldCount = $row[„amount‟];$newCount = $oldCount + 1;

mysql_query(“UPDATE counter SET amount=” . $newCount);

return “resp=” . $newCount;

?>

Desarrollo de contador de visitas en Flash 

Con el PHP hecho, usted puede moverse sobre el desarrollo de Flash, que consiste en una aplicación de todos

los ActionScript.

El contador tiene que llamar primero al archivo PHP, que sirve a dos propósitos. La primera es llamar al archivoPHP a la carga y el incremento de la cuenta. El segundo objetivo es devolver el nuevo valor, que se pasa a uncampo de texto dinámico.

La primera parte consiste en asignar la variable de phpfile, que es una referencia para el contador de archivoque se encuentra en el servidor.

Page 285: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 285/467

285

var phpFile:String = “ http://localhost/ch10/hitCounter/”;

La primera función es la de construir loadHitCounter(), que es responsable de llamar al servidor y asignar elmanejador de la respuesta.

function loadHitCounter():void{

var urlRequest:URLRequest = new URLRequest(phpFile);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, handleServerResp);urlLoader.load(urlRequest);}

Después que la respuesta se ha cargado, el handleServerResp() se llama pasa a lo largo de los datos cargados.Esta información es posteriormente enviada a la clase URLVariables para sacar la propiedad resp. Estapropiedad es donde se encuentra la cuenta actual.

function handleServerResp(e:Event):void{var loader:URLLoader = URLLoader(e.target);

var variables:URLVariables = new URLVariables(loader.data);var count:uint = variables.resp;...}

El recuento es finalmente colocado en el campo de texto dinámico, que no tiene el formato de este ejemplo,pero usted puede agregar fácilmente esto por su cuenta.

var txt:TextField = new TextField();txt.selectable = false;txt.width = 200;txt.text = count + “ visitors”;}

La última línea absoluta de código en el ActionScript es la llamada a la función loadHitCounter, que comienzatodo de encima.

loadHitCounter();

Resumen 

En este capítulo usted aprendió los elementos de desarrollo y diseño de una aplicación. Luego, una vezentendido como la aplicación debe ser construido se construyó un cliente de chat usando PHP y Flash.

En la siguiente sección usted aprendió a desarrollar una galería de fotos basada en Flash con la categoríadinámica y soporte de imágenes con XML.

La última sección se dedicó al desarrollo de otras aplicaciones que utilicen Flash, PHP y MySQL paracomprender mejor los conceptos.

Usted debe ahora tener una buena idea de cómo construir aplicaciones robustas que se aprovechan de losdatos dinámicos para la actualización y funcionalidad.

Page 286: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 286/467

286

Capitulo 12

Desarrollo de las aplicaciones 

del mundo realEn este capítulo, aprenderá acerca de cómo desarrollar aplicaciones completas de la tierra para arriba. Laatención se centra en la clase basado en los diseños que puede actualizar fácilmente más adelante. El aspectoprincipal de este capítulo será cómo utilizar Flash y PHP para desarrollar estas aplicaciones.

Este capítulo está dividido en cuatro aplicaciones: un carro de PayPal, carrito de la compra personalizado,

buscador de Amazon, Flickr y un buscador de galería de fotos. Cada sección se inicia con la solicitud de códigoPHP y continúa con el ActionScript.Construcción de una aplicación como esta hace que sea más fácil de probar como se construye y reduce lacantidad de tiempo en el proceso de desarrollo.

Los ejemplos en este capítulo son construidos con clases personalizadas, que se tratan en el capítulo 9. Si ustedno ha leído el capítulo, sin embargo, os recomiendo que lo hagan antes de continuar en este capítulo. Porsupuesto, si usted ha utilizado las clases en el pasado, entonces por todos los medios continuar en.

Entender las aplicaciones del mundo real

Una aplicación real es uno que ha sido diseñado, probado y desplegado con la intención de que los otrosusuarios podrán utilizarlo.

Al igual que en una aplicación real que habrá algunos sectores que utilizan una de tercero ApplicationProgramming Interface (API) para la carga y búsqueda de datos.Cuando se trabaja con un API es común encontrar una lista de los métodos y las llamadas permitido, como semuestra en la Figura 12.1.

Page 287: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 287/467

287

FIGURA 12.1La lista de API de Flickr, que muestra que los métodos y propiedades están públicamente disponibles

Una API abierta no siempre significa que cualquiera puede tener acceso. Por ejemplo, en Flickr que estánobligados a pasar a lo largo de una clave que autoriza a una solicitud. Esto no es sólo para bloquear ciertosaspectos de una API, pero también se detiene el correo basura y respuestas automáticas que podría resultar enla API de ser discapacitado.

El Amazon y ejemplos de Flickr en este capítulo utilizan las API, pero la primera cosa a mirar son las normas y requisitos para la API que está utilizando .

Uso de PayPal en Flash 

Trabajar con PayPal en Flash es similar al HTML, porque PayPal ofrece un conjunto común de conexión ycapacidad de acceso. Sin embargo, una ventaja para desarrollar la solución en Flash es la capacidad paramejorar la experiencia del usuario, Flash ofrece una comunicación más fluida con otros servicios, ya que no esnecesario recargar toda la página o abrir las ventanas adicionales.

Page 288: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 288/467

288

Registrarse en PayPal Premier 

Antes de comenzar a escribir el código para interactuar con PayPal, crear una cuenta PayPal Premier, quepuede utilizar para el seguimiento de sus ventas y autenticar sus peticiones. Sólo toma unos minutos para crearuna cuenta, y no cuesta nada.

Para configurar una cuenta PayPal Premier, siga estos pasos:

1. En el explorador Web, vaya a www.paypal.com. Seleccione Iniciar - Tipos de cuenta.2. En la página Tipos de cuenta PayPal, haga clic en Regístrese ahora. Seleccione la cuenta de la páginaque aparezca Tipo.3. Bajo Cuenta Premier, haga clic en Iniciar ahora. En Crear un formulario de cuenta PayPal que aparece(ver Figura 12.2), escriba la información solicitada.4. Después de enviar su formulario, usted recibió un correo electrónico de confirmación. Usted deberesponder al e-mail para activar su cuenta.5. Entra y prueba de su nueva cuenta.

NOTA Recuerde, usted debe activar la cuenta a través de e-mail antes de que usted puede usar.

FIGURA 12.2La pantalla de registro de la cuenta de PayPal

Page 289: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 289/467

289

En este punto, usted debe tener un inicio de sesión de trabajo de PayPal. Uso de la cuenta que acaba deregistrar para que usted puede acceder a PayPal y empiece a configurar los detalles en cuenta.

NOTA El sistema requiere un nombre de usuario y contraseña para generar contenido. Sin embargo, con el finde presentar una solicitud de datos sólo tiene que proporcionar su dirección de correo electrónico. Esto seutiliza para garantizar la solicitud es correcta. En ningún momento debe colocar la contraseña de PayPal en estaforma.

Haga clic en el enlace de vendedor (Merchant) en la parte superior de la página para visitar la página CompreAhora generador. Las otras opciones en la primera pantalla no son importantes en este punto. Por último, hagaclic en Crear botón, que se trasladará a la siguiente página, donde el código HTML es que el botón Comprarahora. Copia el código HTML que es generado por PayPal para los botones Comprar ahora.

Este código se utiliza para construir el ejemplo de Flash. Lo que sigue es el código de ejemplo copia de sistemagenerador de PayPal comerciante que usted acaba de visitar.

<form action=”https://www.paypal.com/cgi-bin/webscr”method=”post”><input type=”hidden” name=”cmd” value=”_xclick”><input type=”hidden” name=”business” value=”{email_address}”><input type=”hidden” name=”item_name” value=”{item_name}”><input type=”hidden” name=”item_number” value=”{item_number}”><input type=”hidden” name=”amount” value=”{item_amount}”><input type=”hidden” name=”currency_code” value=”USD”><input type=”hidden” name=”weight” value=”1”><input type=”hidden” name=”weight_unit” value=”lbs”><input type=”hidden” name=”lc” value=”US”></form> 

NOTA Asegúrese de que usted no tiene botón de encriptación activada, ello hace que sea imposible coger lainformación necesaria para construir el botón de Flash.

Como puede ver, el código generado por el formulario HTML tiene todas las variables necesarias que seutilizarán para crear un botón de Flash. El siguiente paso es construir el código de Flash que hará que el botónComprar ahora para la aplicación.

Aquí está el código ActionScript necesario para la interfaz con PayPal, como se puede ver el código es muysimilar al código HTML existente que ha generado en la página de PayPal. La primera parte es para centrarse enlas variables de URL que se encargará de construir los datos POST. Estos datos POST se pasa a lo largo de PayPalcuando el usuario hace clic en Comprar ahora.

// Paypal variablesvar pp_cmd:String = “_xclick”;

var pp_business:String = “[email protected]”;var pp_item_name:String = “sample product”;var pp_item_number:String = “0001”;var pp_amount:String = “24.99”;var pp_currency:String = “USD”;var pp_weight:String = “1”;var pp_weight_unit:String = “lbs”;var pp_location:String = “US”;

Page 290: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 290/467

290

A pesar de que se puede ver claramente los números en el bloque de variables, todos los parámetros sedefinen como cadenas para ser compatible con el equivalente de HTML. El siguiente tema es el de establecer ladirección, que se usa para la interfaz con PayPal. Esta es esencialmente la misma variable como la acción, quese encuentra en el código HTML original.

var paypalURL:String = “https://www.paypal.com/cgi-bin/webscr”;

Cuando se establecen las variables y los datos de PayPal, usted puede crear el código que se llama cuando el sehace clic en el botón Comprar ahora.

Esta es la función que se utiliza para llamar a PayPal. Este método no requiere que las variables personalizadasa pasar porque ellos se definen fuera de la función. La definición de una variable fuera de una función es deámbito de lo que cualquier función tiene acceso a ellos. Si esta variable se define dentro de la función que sólosería visible a la función en la que se define. La excepción es, por supuesto, si la función es global o de lavariable se devuelve desde la función creada.

function callPaypal(e:MouseEvent):void{var urlVariables:URLVariables = new URLVariables();

urlVariables.cmd = pp_cmd;urlVariables.business = pp_business;urlVariables.item_name = pp_item_name;urlVariables.item_number = pp_item_number;urlVariables.amount = pp_amount;urlVariables.currency_code = pp_currency;urlVariables.weight = pp_weight;urlVariables.weight_unit = pp_weight_unit;urlVariables.lc = pp_location;

var urlRequest:URLRequest = new URLRequest(paypalURL);urlRequest.method = URLRequestMethod.POST;urlRequest.data = urlVariables;sendToURL(urlRequest);}

Uso de POST data 

El método de los datos enviados a PayPal está en formato POST. Esto significa que las variables se incluyen enla convocatoria, pero no en la dirección como se ve con GET. Utilizando el formato POST tiene algunas ventajas,la primera es la dirección está limpio y en realidad no puede ser alterado. El segundo es el nivel adicional deseguridad al pasar moderadamente sensibles a los datos del servidor.

Si usted necesita enviar datos altamente sensibles, como la facturación o tarjeta de crédito, es importante queusted utiliza una llamada de HTTPS. La razón de ello es POST en realidad sólo se convierte en una de Seguridad

por oscuridad y no es el resultado más seguro.

Este ejemplo hace uso de la variable POST constante que se encuentra en la URLRequestMethod.Por supuesto, usted puede simplemente utilizar la cadena literal POST porque esto es lo que realmente tiene laconstante de una variable.

urlRequest.method = URLRequestMethod.POST;

Page 291: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 291/467

291

Uso de sendToURL 

En los ejemplos anteriores, usted puede haber notado el uso de navigateToURL, que pide una URL y ofrece lacapacidad de enviar datos a través de GET de la URL. En este ejemplo se pide que los datos POST, por lo que eluso de sendToURL es una mejor opción. Es importante entender que el método sendToURL envía la solicitud alservidor, pero ignora cualquier respuesta que se devuelve.

sendToURL(urlRequest);

Establecer una comunicación de communication 

El último paso es asignar a la acción del botón que se adjunta al MovieClip Compre Ahora. Simplementecoloque un MovieClip en el escenario y le dan el nombre de instancia buyNowBtn. Si decide tener más de unbotón, le recomiendo una estructura de clases que transfiere los datos de PayPal, para minimizar la cantidad decódigo necesario.

La función callPaypal se inserta en el botón mediante un detector de eventos. El evento Click es utilizada, quese llama cuando el usuario hace clic en el botón.

buyNowBtn.buttonMode = true;byNowBtn.useHandCursor = true; buyNowBtn.addEventListener(MouseEvent.CLICK, callPaypal);

El último paso es poner todo el código y probarlo juntos.

// Paypal variablesvar pp_cmd :String = “_xclick”;var pp_ business:String = “[email protected]”;var pp_item_name:String = “sample product”;var pp_item_number:String = “0001”;var pp_amount:String = “24.99”;

var pp_currency:String = “USD”;var pp_ weight:String = “1”;var pp_ weight_unit:String = “lbs”;var pp_location:String = “US”;

var paypalURL:String = “https://www.paypal.com/cgi-bin/webscr”;

function callPaypal(e:MouseEvent):void{var urlVariables:URLVariables = new URLVariables();urlVariables.cmd = pp_cmd;urlVariables.business = pp_business;urlVariables.item_name = pp_item_name;

urlVariables.item_number = pp_item_number;urlVariables.amount = pp_amount;urlVariables.currency_code = pp_currency;urlVariables.weight = pp_weight;urlVariables.weight_unit = pp_weight_unit;urlVariables.lc = pp_location;

var urlRequest:URLRequest = new URLRequest(paypalURL);urlRequest.method = URLRequestMethod.POST;urlRequest.data = urlVariables;sendToURL(urlRequest);

Page 292: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 292/467

292

}

buyNowBtn.buttonMode = true;byNowBtn.useHandCursor = true;buyNowBtn.addEventListener(MouseEvent.CLICK, callPaypal);

En este punto, usted tiene un ejemplo de trabajo de un botón Comprar ahora de PayPal. Es sólo una cuestiónde agregar la información de elementos específicos. También puede crear una clase para que este proceso seamás fácil la creación, como se mencionó anteriormente.

PayPal también ofrece un carrito de la compra un sistema basado en el que puede permitir al usuario elegirvarios elementos y las cantidades. Este elemento de información se almacena en el mismo formato de losdatos básicos de POST, pero mantiene un registro de cada elemento individual. Ya sea que usted utilice laopción de compra o en un elemento de solución Compre Ahora sólo tiene que enviar una solicitud.

Este ejemplo en realidad no requiere el uso de cualquier PHP. Usted puede extender el ejemplo en primerlugar de enviar la información a fin de PHP y el almacenamiento de las compras para su orden propio sistema.PayPal, incluso ofrece a los desarrolladores de soluciones para conectar directamente a su sistema de pago yconfirmación de si el pedido pasa a través de. Este servicio está fuera del alcance del libro, pero PayPal

proporciona la documentación adecuada para empezar.

Uso de Flash y PHP para construir una cesta decompras 

La sección anterior se centró en la construcción de un botón Comprar ahora en Flash utilizando PayPal comosistema de pago. Ese sistema funciona bastante bien, pero realmente no ofrece al diseñador el control total delcarro, el pago, y los componentes de almacenamiento. La mayoría de las veces cuando usted decide construiruna solución personalizada que acabará con mejores resultados. Esto no quiere decir que todo el mundo puededesarrollar la interfaz de PayPal siguiente, pero ¿cuánto de ese sitio se utilizan? La construcción de una

solución personalizada es donde se llega a centrarse en las características que va a utilizar y excluir los que nose.

Esta cesta de la compra se divide en cuatro partes: diseño, MySQL, PHP, y el ActionScript que reúne todo.

Diseño de la cesta de compras 

La aplicación de carrito de la compra será construido usando clases para reutilización. Esto también hace quesea más fácil de modificar más adelante.

CROSS--REF Para obtener más información sobre las clases de ActionScript, véase el capítulo 9.

Desarrollar la clase StoreItem

La primera porción de código que se centrará en los elementos individuales de productos que se mostrará a laizquierda de la cesta de la compra. Los artículos de la tienda MovieClip será añadido de forma dinámica alescenario y se le asignará una clase personalizada StoreItem.

La clase es responsable de asignar las variables de la tienda tema y mostrar los valores necesarios.

Page 293: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 293/467

293

Al igual que el capítulo de clase, estas clases se componen de independiente paquetes para la simplicidad, loque no hay necesidad de proporcionar una estructura de paquetes

La primera parte del código de las importaciones de las clases MovieClip y TextField. Esta clase personalizada seextiende la clase MovieClip y TextField necesita ser cargado, porque hay cuadros de texto en el movieclip.

import flash.display.MovieClip;

import flash.text.TextField;

Hay cinco variables privadas que se utilizan para sostener el elemento de datos específicos. Estos datos sonluego compartidos con el carrito de la compra, pero por ahora los datos sólo tiene que ser almacenado.

private var albumName:String;private var albumDesc:String;private var albumThumb:String;private var albumPrice:String;private var storeItemID:uint;

El método de StoreItem se deja vacía y en realidad no es necesario porque el compilador de ActionScript locolocará automáticamente, pero para la integridad es una buena idea tenerlo.

function StoreItem() {}

El método personalizado primero es responsable de guardar los datos de posición a las variables privadas quese acaba de definir. Los cinco argumentos definidos en esta función se pasan de la persona que llama y semantendrá los datos de elemento que se utiliza más tarde.

public function setStoreData(id:uint,n:String,d:String,t:String,

p:String):void{storeItemID = id;albumName = n;albumDesc = d;albumThumb = t;albumPrice = p; ...}

Los dos cuadros de texto que contienen el nombre y la descripción de cada elemento son la última parte deesta clase de encargo. Los datos que se aprobó se asigna a cada cuadro de texto. Normalmente, es probableque verificar si los datos válidos, pero debido a que se está controlando el PHP que se devuelve puede estar

seguro de los datos será válido.

nameTxt.text = albumName;descTxt.text = albumDesc;

El método final de esta clase se utiliza para enviar los datos a quien llama. La acción de retorno devuelve unobjeto personalizado que se llena con los datos del elemento en el método anterior.

public function getItem():Object{

Page 294: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 294/467

294

return{target:this,id:storeItemID,name:albumName,price:albumPrice};}

El método anterior tiene un tipo especial de retorno definido. El valor devuelto es un objeto en línea que seutiliza para simplificar el código mediante la exclusión de los nombres de variables innecesarias.

Cada uno de los tipos: Array, Object, y String tienen una forma abreviada para definirlos. Por ejemplo, el tipode objeto puede ser definido simplemente con:

var sampleObj:Object = {name:value};

La tabla 12.1 muestra el tipo y el equivalente a la abreviatura de ella. Usando los valores de taquigrafía puedeahorrar tiempo de desarrollo, ya que tiene que escribir menos.

ADVERTENCIA La forma abreviada puede crear problemas, porque se crea un "débil", escribió objeto.Por lo tanto, no pueden beneficiarse de la comprobación de tipos en tiempo de compilación. Usted puedeacceder al objeto dinámico mal y no lo sabremos hasta que tiempo de ejecución. Esto significa que usted debetener cuidado al crear sus propiedades y las variables en taquigrafía.

TABLA 12.1

Tipos de Taquigrafía y EquivalentesArray new Array() []Object new Object() {}String new String() “”

Ambos métodos de aplicación que se crearon son públicos porque son llamados desde clases externas.También puede crear una función intermedia que ofrece un mayor nivel de seguridad, que se encarga dellamar a los métodos privados.

Con la clase StoreItem construido, puede pasar a la ShoppingCartItem, que se adjunta a la partida cesta de lacompra de MovieClip.

Desarrollar la clase ShoppingCartItem

Esta clase es básicamente responsable del mantenimiento de la identificación del tema, que será utilizado en laclase ShoppingCart. Al igual que la clase anterior, éste también tiene que importar la clase MovieClip yTextField para alojar los elementos situados en este MovieClip.

package{

import flash.display.MovieClip;import flash.text.TextField;

public class ShoppingCartItem extends MovieClip{ private var cartItemID:uint;

Page 295: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 295/467

295

function ShoppingCartItem() { }

public function getID():uint{return cartItemID;}

public function setID(id:uint):void

{cartItemID = id;}}

}

La última parte de esta clase es responsable de obtener y establecer la cartItemID. Este valor se utiliza paravincular los productos con el carro de artículos.

La clase de ActionScript personalizado última es la ShoppingCart. Esta clase es bastante grande, por lo que serompa en pedazos para entenderlo mejor. El mejor lugar para empezar es a primera mirada a un esqueleto de

clase, que muestra los métodos que se utilizan en esta aplicación. A menudo construir este primer esqueleto,que puede doblar como un esquema.

package{public class ShoppingCart extends MovieClip{function ShoppingCart() {}

public function addProduct(product:Object):void {}public function removeProduct(e:MouseEvent):void {}public function updateList():void {}public function updateTotal():void {}public function checkout():void {}public function setGatewayURL(url:String):void {}private function round2D(n:Number):Number {}}}

El lugar más lógico para empezar en esta clase es mediante la asignación de las importaciones de clase que senecesitarán.

import flash.display.MovieClip;import flash.text.TextField;import flash.events.MouseEvent;import flash.net.*;

Las propiedades de esta clase consistirá en todas las variables privadas para que no se puede acceder por otrasclases.

private var cartItemCount:uint = 0;private var cartContents:Array;

private var cartItemHeight:uint = 20;private var lineSpacing:uint = 30;private var gateway:String;

Page 296: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 296/467

296

El constructor es responsable de la creación en el botón Checkout y la inicialización de la matriz de punto decompra.

function ShoppingCart(){cartContents = new Array();cont = cartContents;checkoutBtn.addEventListener(MouseEvent.CLICK, function():void{var xml:String = “<?xml version=‟1.0‟ ?>\n\r”;xml += “<products total=\”” + totalTxt.text + “\”>”;for(var i in cont){xml += “<product>”;xml += “\t<quantity>” +cont[i].cartItem.quantityTxt.text+ “</quantity>”;

xml += “\t<name>” + cont[i].name + “</name>”;xml += “\t<price>” + cont[i].price + “</price>”;xml += “</product>”;

}xml += “</products>”;

var variables:URLVariables = new URLVariables();variables.action = “checkout”;variables.xml = xml;

var urlRequest:URLRequest = new URLRequest(gateway);urlRequest.data = variables;urlRequest.method = “GET”;

navigateToURL(urlRequest);})}

El contenido del botón Checkout puede parecer abrumador, pero se trata simplemente de construir undocumento XML personalizado que se pasarán a la PHP. La variable de XML comienza por asignar el códigoXML apropiado partida. Sin esta partida, PHP asumiría el expediente está incompleto y no cargar.

var xml:String = “<?xml version=‟1.0‟ ?> \n\r”;

El bucle for.. loop es el responsable de pasar por la matriz cartContents y sacar a cada elemento de la cesta.Una vez dentro del bucle, el cartItem es una referencia a la costumbre ShoppingCartItem que se creó en lasección anterior. Estos elementos tienen la cantidad y la id de elemento, que será colocado en esta costumbredocumento XML.

cont = cartContents;for(var i in cont){...xml += “\t<name>” + cont[i].name + “</name>”;...}

Page 297: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 297/467

297

Una vez que el ciclo for.. se completa el proceso de construcción del XML, el archivo PHP se encuentra en elservidor puede ser llamado. La petición es una base GET, pasando por los datos XML.

var variables:URLVariables = new URLVariables();variables.action = “checkout”;variables.xml = xml;

var urlRequest:URLRequest = new URLRequest(gateway);urlRequest.data = variables;urlRequest.method = “GET”;

navigateToURL(urlRequest);

El código PHP espera dos variables a ser transmitido. La acción en este caso es obtener, y los datos XML que segeneró por los puntos de compra seleccionadas de compras en el carrito de la compra de código.

El siguiente paso es la construcción de los métodos. El primer método es responsable de añadir un producto ala cesta de la compra. El carrito de la compra está formado por instancias de la clase ShoppingCartItem, peroesta clase es en realidad un clip de película en la biblioteca. El primer paso es crear una nueva instancia de esteclip de película. Después de crear una nueva instancia, un detector de eventos se agrega al botónremoveProduct, que se encuentra dentro del movieclip. La cantidad predeterminada de un nuevo punto seestablece en 1, lo que puede ser actualizado, lo que se aprende en la siguiente sección.

public function addProduct(product:Object):void{...var cartItem:ShoppingCartItem = new ShoppingCartItem();cartItem.removeItemBtn.addEventListener(MouseEvent.CLICK,removeProduct);cartItem.quantityTxt.text = “1”;cartItem.nameTxt.text = product.name;...}

El siguiente paso es crear una identificación falsa que usted puede utilizar para agregar y eliminar la instanciamás tarde.

cartItem.setID(cartItemCount); // faux id for removal system

La colocación de un nuevo carro de ejemplo el tema de la compra está determinado por primera multiplicandoel cartItemCount por la altura y luego añadir un espacio.

cartItem.y = (cartItemCount * cartItemHeight) + lineSpacing;

Una vez que se coloca la nueva instancia, es temporalmente añadido al producto objeto de modo que las

piezas futuro de código puede acceder a ella sin la caza de ella. Luego se añade a la matriz cartContents.

product.cartItem = cartItem;cartContents.push(product);

La siguiente parte del método de addProduct es responsable de añadir la instancia a la lista de visualización,incrementar la cuenta y, finalmente, hacer una llamada a la actualización de precios.

addChild(cartItem);cartItemCount++;

Page 298: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 298/467

298

updateTotal();

En este momento, si tuviera que añadir un artículo a la cesta de la compra que permitiría a los duplicados quese añade. Cuando el resultado deseado es incrementar la cantidad al bucle for.. se coloca en el principio delmétodo para cuidar de este.

public function addProduct(product:Object):void

{// Look for product in listfor(var i in cartContents){if(cartContents[i].id == product.id){var q:Number = cartContents[i].cartItem.quantityTxt.text;cartContents[i].cartItem.quantityTxt.text = q + 1;updateTotal();return;}}...}

El bucle se configura para comprobar el carro de un elemento de identificación válida. Si se encuentra unaidentificación válida, la cantidad se asigna a la variable q. Este se añade al valor del cuadro de texto la cantidady una llamada a la actualización de precios se hace para asegurar que siempre es correcto. El retorno se utilizapara detener cualquier ulterior ejecución de código situado dentro de esta función.

Este método fue probablemente el más grande, ya que es responsable de gran parte de la funcionalidad deesta aplicación.El código completo se facilite en una presentación final al final de esta sección, y por supuesto, también estádisponible en el sitio Web del libro.

El siguiente método se utiliza para eliminar un elemento de la cesta de la compra. El método getID que se creóen la clase ShoppingCartItem se utiliza en esta función para recuperar el ID. La referencia de los padres se usapara tomar la meta (botón Delete) e informar el código de lo que el padre o el objeto superior es. Estoproporciona un vínculo sólido a la instancia de clase ShoppingCartItem y en última instancia el método pararecuperar el ID.

public function removeProduct(e:MouseEvent):void{var id:uint = e.target.parent.getID();...}

Después del ID, éste puede ser utilizado para eliminar el elemento de la serie de artículos de compra y de lalista de visualización. El método de empalme se utiliza para eliminar el elemento de compra utilizando el ID,que es realmente la posición del elemento puede encontrarse en la matriz. El segundo argumento en elmétodo de empalme es que exista un sólo elemento se elimina.

cartContents.splice(id, 1);removeChild(e.target.parent);cartItemCount--;

Page 299: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 299/467

299

NOTA Si el segundo argumento no se proporciona, el método de empalme se eliminarán todos los elementosde ese punto.

El archivo Flash se ha añadido una nota de forma automática que se muestra para informar al usuario de queno hay productos en el carrito. Sin embargo, se elimina esta cuando se añade un elemento. El problema es, si elusuario elimina todos los artículos de la cesta que hay que mostrar una vez más, por lo que una simpledeclaración de si se añade al final de eliminar el método para controlar este.

if(cartItemCount == 0){noItemsTxt.visible = true;}

Por último, una llamada a los métodos updateTotal y updateList se hace para asegurar que los datos semantiene constante y el precio se actualiza.

updateList();updateTotal();

Los artículos de compra se añadirán a la matriz que el usuario hace clic en el botón Añadir al carro, sinembargo, puede recordar en la sección anterior que el tema de compra se puede encontrar en la matrizmediante el carro de id.El problema es si un elemento se elimina de la lista ahora es mixto y un elemento incorrecto puede ser añadidoo quitado. La solución es presentar una identificación nueva como se elimina un elemento. Esto se lograrecorriendo todos los elementos restantes de compra y hacer una llamada para establecer una nuevaidentificación.

public function updateList():void{for(var i:uint=0; i < cartItemCount; i++){cartContents[i].cartItem.setID(i);}}

El otro efecto secundario a la eliminación de un tema libremente es que puede crear un vacío en la lista. Estono cambia la forma de las funciones de aplicación, pero visualmente no es el más limpio. La forma de evitareste problema es poco para realinear la lista como se quita un elemento.

public function updateList():void{for(var i:uint=0; i < cartItemCount; i++){cartContents[i].cartItem.setID(i);

}cartContents[i].cartItem.y = (i * cartItemHeight) +lineSpacing;}

En los métodos anteriores no ha habido una llamada a updateTotal. Este método es responsable de mantenerel precio total actualizado como elementos añadidos y modificados. El proceso consiste en recorrer loselementos de compra, multiplicar el precio por la cantidad, y mostrar el resultado final. El resultado esentonces la prueba de números válidos y un decimal (.) Se proporciona si es necesario.

Page 300: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 300/467

300

public function updateTotal():void{var total:Number = 0;

for(var i:uint=0; i < cartItemCount; i++){total += Number(cartContents[i].price) *Number(cartContents[i].cartItem.quantityTxt.text);

}

totalTxt.text = “$” + String(round2D(total));

// tack on extra 0 if needed or two 0‟sif(totalTxt.text.indexOf(„.‟) == -1){totalTxt.appendText(“.00”);}else if(totalTxt.text.indexOf(„.‟) + 2 == totalTxt.text.length){totalTxt.appendText(“0”);}

}

El método de setGatewayURL establece la propiedad de puerta de enlace que se refiere a la dirección URL quese llama cuando el botón se hace clic en Realizar Pedido.

public function setGatewayURL(url:String):void{gateway = url;}

En este punto la clase ShoppingCart ha sido creado. La última porción de código que se necesita será colocadoen la línea de tiempo. Este código será responsable de establecer todo y en última instancia el control de loselementos individuales.

La línea de tiempo de ActionScript también podría ser colocado en una clase de documentos, que se explica enel capítulo 9. Sin embargo, para simplificar, se incluirá directamente en el archivo Flash.

La primera parte es para asignar el archivo PHP, que se construirá en la siguiente sección.

var phpFile:String = “http://localhost/ch11/store/flashCart.php”;

La cesta de la compra está ya en el escenario, con el nombre de instancia y se puede asignar a la variable cestade la que se utilizará en el resto del código. El siguiente paso es crear un movieclip vacío que tiene la tienda deartículos.

var cart:MovieClip = shoppingCart;cart.setGatewayURL(phpFile);

var storeItems:MovieClip = new MovieClip();storeItems.x = 25;storeItems.y = 80;

La solicitud de que el servidor es más o menos el mismo proceso que se ha utilizado en el pasado. La únicaporción única es la acción que se adjunta al final de la url.

Page 301: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 301/467

301

var urlRequest:URLRequest = new URLRequest(phpFile+ “?action=getproducts”);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, productsLoaded);urlLoader.load(urlRequest);

Después de cargar el servidor de datos, se llama la función de respuesta. Esta función se encarga de analizar elXML y agregar el artículo de la tienda al carro de la compra. Aquí tiene un ejemplo del código XML que sedevuelve y analiza.

<products><product id=”1”name=”Cool Tracks”desc=”Another hot release”thumbnail=”” /></products> 

Esta función también es responsable de cargar una nueva instancia del movieclip StoreItem, que contiene lainformación de cada producto. El botón en este caso también se adjunta a un evento que es responsable deañadir un nuevo elemento a la cesta de la compra.

function productsLoaded(e:Event):void{...var id:uint = 0;for each(var xmlItem in xml..product){var item:StoreItem = new StoreItem();item.y = 85 * id;item.setStoreData(id,xmlItem.attribute(„name‟),xmlItem.attribute(„desc‟),xmlItem.attribute(„thumbnail‟));xmlItem.attribute(„price‟));item.addToCartBtn.addEventListener(MouseEvent.CLICK,addItemHandler);storeItems.addChild(item);id++;}addChild(storeItems);}

La función addItemHandler agarra el primer objeto único y agrega el producto a la cesta.El objeto se encuentra cargando el objeto desde el contenedor primario, similar al código que se utilizó en lasección anterior. La declaración trace() es simplemente para probar y nunca se muestran al usuario final de la

aplicación.

function addItemHandler(e:MouseEvent):void{var prod:Object = e.target.parent.getItem();

trace(“Add Item: “ + e.target.parent);trace(“Item ID: “ + prod.id);

cart.addProduct(prod);}

Page 302: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 302/467

302

Me tomó un tiempo y dio lugar a una gran cantidad de código nuevo, pero todo el código ActionScriptnecesario para este ejemplo se ha completado. La siguiente parte es para centrarse en el código PHP que esllamado por el botón Checkout.

En realidad, el PHP y MySQL, van de la mano, así que es mejor para construir la tabla de SQL necesario antes deque se escriba el PHP. Esto hace que sea más fácil de depurar a largo plazo.

CREATE TABLE flashStore_products (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(25),`category` int(3) NOT NULL DEFAULT 0,`description` TEXT,`thumbnail` varchar(200) NOT NULL DEFAULT “”,`price` varchar(10) NOT NULL,`active` int(1) NOT NULL DEFAULT 1,PRIMARY KEY (`id`))

El SQL es responsable de mantener toda la información de cada elemento en la tienda. En una aplicación

completa, probablemente sería poblado por un sistema de gestión de contenido. Para este ejemplo, el códigode INSERT se proporciona para que usted pueda rápidamente probar el ejemplo.

INSERT INTO flashStore_products (name, description,price)VALUES („Cooler Music‟, „Another new one‟);

Construir el PHP 

Cuando el SQL es configurada el PHP puede ser escrito. El PHP es responsable de la carga de los artículos delalmacén y manejo de una solicitud de pago. Estas dos tareas se pueden dividir en varios archivos, y esprobablemente mejor de como las clases, pero para simplificar todo esto se encuentra dentro de un archivoPHP Este.

Antes de la base de datos se puede utilizar, de una conexión debe ser establecida. Esto se logra mediante lacarga de un archivo externo que contiene la información de conexión de base de datos.

include „dbconn.php‟;

El contenido de este archivo dbconn.php se ven aquí.

<?php

$host = “localhost”;$user = “username”;

$pass = “password”;$database = “database name”;

$link = mysql_connect($host, $user, $pass);mysql_select_db($database, $link);

unset($host);unset($user);unset($pass);unset($database);

Page 303: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 303/467

303

?>

Ahora usted puede determinar qué acción se está solicitando. Hay dos opciones posibles:getproducts, que devuelve un documento XML de artículos de la tienda, o la caja, que carga el XML de Flash ylo muestra.

if($_GET[„action‟] == „getproducts‟){print getProducts();}else if($_GET[„action‟] == „checkout‟){$xml = new SimpleXMLElement($_GET[„xml‟]);

$nodeCount = count($xml->product);

print “<table border=\”1\” width=\”500\”>”;print “<tr><td><strong>Quantity</strong></td>”;print “<td><strong>Product</strong></td>”;print “<td><strong>Price</strong></td></tr>”;

for($x=0; $x < $nodeCount; $x++){print “<tr style=\”background-color:#eeeeee;\”>”;print “<td style=\”width:60px;text-align:center;\”>”. $xml->product[$x]->quantity . “</td>”;print “<td>” . $xml->product[$x]->name . “</td>”;print “<td>” . $xml->product[$x]->price . “</td></tr>”;}

print “<tr>”;print “<td colspan=\”3\”>Total: <strong>”

. getAttribute($xml, „total‟) . “</strong></td></tr>”;

print “</table>”;print “<br />Checkout code goes here<br />”;}

La acción getproducts simplemente hace una llamada a otra función que devuelve el código XML generados apartir de las entradas de base de datos. La acción de compra, como se muestra en la figura 12.3, es un pocomás complicado.Empieza agarrando los datos XML pasado de Flash. Este XML se carga en la biblioteca SimpleXML donde seanaliza y cada uno de los artículos de la tienda se recupera.

Page 304: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 304/467

304

FIGURA 12.3Aquí está una muestra de la página de caja, cargada de Flash. Esta página es visible cuando se hace clic en elbotón Checkout.

Esta función se llama desde la primera acción y es responsable de la construcción de un documento XML de losdatos en la base de datos. Los artículos de la tienda se desglosan por id, name, desc, y en miniatura, que sonvisibles en el archivo de Flash.

El resultado desde el MySQL devuelve cualquier elemento que está activo actualmente. Este resultado se pasaluego a un bucle while, que es donde se construye el de datos XML. Por último, el XML es devuelto a la personaque llama y, en este ejemplo, se imprime en la pantalla para que se ejecute.

function getProducts()

{global $link;

$result = mysql_query(“SELECT * FROM flashStore_productsWHERE active=1”, $link);

$xml = “<products>\n”;while($row = mysql_fetch_array($result)){$xml .= “<product id=\”” . $row[„id‟] .“\” name=\”” . $row[„name‟] .

Page 305: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 305/467

305

“\” desc=\”” . $row[„description‟] .“\” thumbnail=\”” . $row[„thumbnail‟] . “\” />\n”;“\” price=\”” . $row[„price‟] .”\” />\n”;

}$xml .= “</products>”;

return $xml;

}

La última función es en realidad una función olvidada de SimpleXML. Esta función tiene dos argumentos, elXML y el nombre del atributo que está buscando. Primero se realiza un bucle a través de todos los argumentosy los partidos de los argumentos en contra de la variable passed-in. Se devuelve el valor del atributo o falso,dependiendo de lo que el resultado es.

function getAttribute($xml, $name){foreach($xml->attributes() as $key=>$val){if($key == $name){return (string)$val;}}return false;}

Ahora que todo el código está completo, aquí están las tres clases y el código de línea de tiempo previsto en unsolo lugar para facilitar la visualización y la comparación con el código.

ShoppingCart

package

{

import flash.display.MovieClip;import flash.text.TextField;import flash.events.MouseEvent;import flash.net.*;

public class ShoppingCart extends MovieClip{private var cartItemCount:uint = 0;private var cartContents:Array;

private var cartItemHeight:uint = 20;private var lineSpacing:uint = 30;private var gateway:String;

function ShoppingCart(){cartContents = new Array();

checkoutBtn.addEventListener(MouseEvent.CLICK,function():void{var xml:String = “<?xml version=‟1.0‟ ?>\n\r”;

Page 306: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 306/467

306

xml += “<products total=\”” + totalTxt.text + “\”>”;

for(var i in cartContents){xml += “<product>”;xml += “<quantity>” +cartContents[i].cartItem.quantityTxt.text+ “</quantity>”;

xml += “<name>” + cartContents[i].name+ “</name>”;xml += “<price>” + cartContents[i].price+ “</price>”;xml += “</product>”;}xml += “</products>”;

var variables:URLVariables = new URLVariables();variables.action = “checkout”;variables.xml = xml;

var urlRequest:URLRequest = new URLRequest(gateway);

urlRequest.data = variables;urlRequest.method = “GET”;

navigateToURL(urlRequest);})}

public function addProduct(product:Object):void{// Look for product in listfor(var i in cartContents){if(cartContents[i].id == product.id){

var quantity:Number =cartContents[i].cartItem.quantityTxt.text;

cartContents[i].cartItem.quantityTxt.text =quantity + 1;

updateTotal();return;}}

if(cartItemCount == 0){

noItemsTxt.visible = false;}

var cartItem:ShoppingCartItem =new ShoppingCartItem();

cartItem.removeItemBtn.addEventListener(MouseEvent.CLICK, removeProduct);cartItem.quantityTxt.text = String(1);cartItem.nameTxt.text = product.name;cartItem.setID(cartItemCount);

Page 307: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 307/467

307

cartItem.y =(cartItemCount * cartItemHeight) + lineSpacing;

product.cartItem = cartItem;

cartContents.push(product);

addChild(cartItem);

cartItemCount++;

updateTotal();}

public function removeProduct(e:MouseEvent):void{var id:uint = e.target.parent.getID();

cartContents.splice(id, 1);removeChild(e.target.parent);

cartItemCount--;

if(cartItemCount == 0){noItemsTxt.visible = true;}

updateList();updateTotal();}

public function updateList():void{for(var i:uint=0; i < cartItemCount; i++)

{cartContents[i].cartItem.setID(i);cartContents[i].cartItem.y =(i * cartItemHeight) + lineSpacing;}}

public function updateTotal():void{var total:Number = 0;for(var i:uint=0; i < cartItemCount; i++){total += Number(cartContents[i].price) *

Number(cartContents[i].cartItem.quantityTxt.text);}totalTxt.text = “$” + String(round2D(total));

// tack on extra 0 if needed or two 0‟sif(totalTxt.text.indexOf(„.‟) == -1){totalTxt.appendText(“.00”);}else if(totalTxt.text.indexOf(„.‟) + 2 ==totalTxt.text.length)

Page 308: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 308/467

308

{totalTxt.appendText(“0”);}}

public function setGatewayURL(url:String):void{gateway = url;

}

private function round2D(n:Number):Number{return Math.round(n * Math.pow(10, 2)) / Math.pow(10, 2);}}}

ShoppingCartItem

package{

import flash.display.MovieClip;import flash.text.TextField;

public class ShoppingCartItem extends MovieClip{private var cartItemID:uint;

function ShoppingCartItem() { }public function getID():uint{return cartItemID;}

public function setID(id:uint):void{cartItemID = id;}}

}

StoreItem

package{import flash.display.MovieClip;import flash.text.TextField;

public class StoreItem extends MovieClip{private var albumName:String;private var albumDesc:String;private var albumThumb:String;private var albumPrice:String;private var storeItemID:uint;

function StoreItem() {}

Page 309: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 309/467

309

public function setStoreData(id:uint, n:String,d:String, t:String, p:String):void{storeItemID = id;albumName = n;albumDesc = d;

albumThumb = t;albumPrice = p;

nameTxt.text = albumName;descTxt.text = albumDesc;}

public function getItem():Object{return {target:this,id:storeItemID,name:albumName,

price:albumPrice};}}}

Timeline code

var phpFile:String = “http://localhost/ch11/store/flashCart.php”;

var cart:MovieClip = shoppingCart;cart.setGatewayURL(phpFile);

var storeItems:MovieClip = new MovieClip();storeItems.x = 25;storeItems.y = 80;

var urlRequest:URLRequest = new URLRequest(phpFile +“?action=getproducts”);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, productsLoaded);urlLoader.load(urlRequest);

function productsLoaded(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

trace(“XML: “ + xml);

var id:uint = 0;for each(var xmlItem in xml..product){var item:StoreItem = new StoreItem();item.y = 85 * id;item.setStoreData(id,xmlItem.attribute(„name‟),

Page 310: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 310/467

310

xmlItem.attribute(„desc‟),xmlItem.attribute(„thumbnail‟));xmlItem.attribute(„price‟));item.addToCartBtn.addEventListener(MouseEvent.CLICK, addItemHandler);storeItems.addChild(item);id++;}

addChild(storeItems);}

function addItemHandler(e:MouseEvent):void{var prod:Object = e.target.parent.getItem();

trace(“Add Item: “ + e.target.parent);trace(“Item ID: “ + prod.id);

cart.addProduct(prod);}

PHP code

<?php

$host = “localhost”;$user = “username”;$pass = “password”;$database = “database name”;

$link = mysql_connect($host, $user, $pass);mysql_select_db($database, $link);

unset($host);unset($user);unset($pass);unset($database);

?>

<?php

include „dbconn.php‟;

function getProducts(){global $link;

$result = mysql_query(“SELECT * FROM flashStore_productsWHERE active=1”, $link);

$xml = “<products>\n”;

while($row = mysql_fetch_array($result)){$xml .= “<product id=\”” . $row[„id‟] .“\” name=\”” . $row[„name‟] .“\” desc=\”” . $row[„description‟] .

Page 311: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 311/467

311

“\” thumbnail=\”” . $row[„thumbnail‟] . “\” />\n”;“\” price=\”” . $row[„price‟] .”\” />\n”;

}

$xml .= “</products>”;

return $xml;

}

if($_GET[„action‟] == „getproducts‟){print getProducts();}else if($_GET[„action‟] == „checkout‟){$xml = new SimpleXMLElement($_GET[„xml‟]);

$nodeCount = count($xml->product);

print “<table border=\”1\” width=\”500\”>”;

print “<tr><td><strong>Quantity</strong></td>”;print “<td><strong>Product</strong></td>”;print “<td><strong>Price</strong></td></tr>”;

for($x=0; $x < $nodeCount; $x++){print “<tr style=\”background-color:#eeeeee;\”>”;print “<td style=\”width:60px;text-align:center;\”>”. $xml->product[$x]->quantity . “</td>”;print “<td>” . $xml->product[$x]->name . “</td>”;print “<td>” . $xml->product[$x]->price . “</td></tr>”;}

print “<tr><td style=\”text-align:right;\” colspan=\”3\”>Total:

<strong>” . getAttribute($xml, „total‟) .“</strong></td></tr>”;

print “</table>”;print “<br />Checkout code goes here<br />”;}

function getAttribute($xml, $name){foreach($xml->attributes() as $key=>$val){if($key == $name){

return (string)$val;}}return false;}

?>

El ejemplo se ha completado, es sólo una cuestión de poner el PHP en un servidor Web activo. Desde estepunto se puede extender el ejemplo para tener varias categorías, productos, y las imágenes.

Page 312: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 312/467

312

Siendo realistas, la construcción de la aplicación en un formato de clase que ofrece una mayor capacidad deexpansión, pero no acaba de tomar mi palabra para ella. Experimenta y extender el ejemplo.

Uso de PHP y Flash para construir una aplicación debusqueda del Amazon 

Amazon ofrece un conjunto muy poderoso de herramientas diseñadas para trabajar con los datos de su sitio.Esta sección abarca la construcción de una aplicación de búsqueda utilizando Amazon.com como la fuente dedatos. Este ejemplo utiliza el ECS (Amazon E-Commerce Service), que proporciona acceso directo a Amazonincreíble la búsqueda y el sistema de inventario.

Con el fin de utilizar la ECS tiene que tener una identificación de acceso válida del Amazon, que se proporcionacuando se crea una cuenta de desarrollador. Este proceso de registro es rápido y gratuito, todo lo que necesitaes una dirección válida de correo electrónico y una cuenta activa.

Uso del servicio web de Amazon 

Para empezar con los desarrolladores la creación de una cuenta, visite el servicio Web de Amazon (AWS) en lapágina de www.amazon.com/gp/aws/landing.html. 

NOTA Asegúrese de activar la cuenta por correo electrónico antes de empezar a usarlo.

AWS está configurado para ser accesible desde diferentes medios. El formato utilizado para este ejemplo esRepresentational State Transfer (REST), que es básicamente una dirección URL con formato con toda lainformación necesaria siempre en la Versión GET.

Aquí está una muestra de enviar a la Amazonía, como se muestra en la figura 12.4, para devolver informaciónacerca del libro de posibles coincidencias para una palabra clave o serie de palabras clave.

http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId={AWS_ACCESS_KEY}&Operation=ItemSearch&SearchIndex=Books&ResponseGroup=Medium&Keywords={SEARCH_TERMS}

El AWS_ACCESS_KEY es la identificación de acceso que es proporcionado por Amazon, y la SEARCH_TERMSsería la palabra clave (s) que se transmiten a lo largo de la búsqueda.

Como te habrás dado cuenta, la respuesta XML de Amazon es bastante complejo. Sin embargo, para esteejemplo, la atención se centrará en el título del libro, autor, y la ruta en miniatura. Amazonas es realmente muyagradable para proporcionar la cantidad de detalle que lo hace. Usted puede construir algunas aplicacionesmuy interesantes con el sistema de AWS.

Page 313: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 313/467

313

FIGURA 12.4Aquí está la respuesta XML de Amazon, después de una búsqueda de "PHP".

De hecho, la URL enviada a Amazon puede ser modificado para la búsqueda de diferentes elementos o temastodos juntos. AWS está configurado para devolver mensajes de error incluso válido similar a éste si no ofrecenun parámetro de operación.

AWS.InvalidOperationParameterThe Operation parameter is invalid.Please modify the Operation parameter and retry. Valid valuesfor the Operation parameter include TagLookup, ListLookup,CartGet, SellerListingLookup, CustomerContentLookup,ItemLookup, SimilarityLookup, SellerLookup, ItemSearch,VehiclePartLookup, BrowseNodeLookup, CartModify, ListSearch,CartClear...

El sistema de búsqueda ofrece un montón de tipos y modificadores, y usted no tiene que depender de este"create an error " a ver qué hay disponible. Amazon pasa a proporcionar la documentación muy sólido en elcentro del desarrollador. Entra en el acceso.

Page 314: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 314/467

314

Simplificar la respuesta XML 

Cuando la respuesta XML se ha cargado en la sección anterior, el resultado fue abrumador. Hay muchos nodosXML y datos que simplemente no son aplicables a esta aplicación. Usted podría pasar estos datos en bruto enFlash, pero lo que si usted quiere almacenar los resultados? Usted tiene un montón de información no utilizadaobstruyendo su base de datos.

La idea es construir una respuesta XML personalizada que contiene únicamente los datos necesarios para estaaplicación.

<?php

$terms = “”; 

define(“AWS_ACCESS_KEY”, “{AWS_KEY_GOES_HERE}”);

Es importante comprobar las etiquetas válidas antes de una respuesta se envía al Amazonas. Realmente nodaña nada, pero se podría considerar una solicitud fraudulenta.

if(!empty($_GET[„terms‟])){...}

Suponiendo etiquetas válidas encontrado, construir la petición que se enviará a la AWS.

if(!empty($_GET[„terms‟])){$terms = $_GET[„terms‟];$request = „http://ecs.amazonaws.com/onca/xml‟ .„?Service=AWSECommerceService&‟ .„AWSAccessKeyId=‟ . AWS_ACCESS_KEY .

„&Operation=ItemSearch‟ .„&SearchIndex=Books‟ .„&ResponseGroup=Medium‟ .„&Keywords=‟ . $terms;}

Tiene la palabra la AWS, pasando por los parámetros de búsqueda.

$rawXml = file_get_contents($request);

La respuesta de la AWS se carga utilizando file_get_contents, que dice en todo el archivo solicitado en unacadena. En este ejemplo, la cadena se guarda en la variable $ rawXML. Una llamada a la biblioteca SimpleXMLse hace para construir un objeto XML con formato correcto.

$xmlResponse = simplexml_load_string($rawXml);

El siguiente paso es crear el documento XML personalizado que será enviado de vuelta a Flash cuando sesolicita. La variable nodeCount no es modificable a 4 de manera que se guardan sólo cuatro resultados libro.Incluso si vuelve la Amazonía miles, Flash sólo ve cuatro.

$nodeCount = 4;

Page 315: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 315/467

315

$xml = “<?xml version=\”1.0\” ?>\n<books>”;

for($i=0; $i < $nodeCount; $i++){...}

$xml .= “</books>”;

El contenido del bucle for.. es donde la mayoría del proceso de construcción se produce XML. Por ejemplo,para cargar el título del libro actual, acceder por primera vez en el nodo Elementos. Una vez dentro de esenodo, el nodo de elemento seleccionado es acceder utilizando la variable $i para determinar qué niño debe serde referencia.Dentro del nodo hijo en vigor, hay otro niño con el nombre ItemAttributes de nodo, que contiene un nodo detítulo y en última instancia se convierte en el nombre del libro para este niño seleccionado.

$xmlResponse->Items->Item[$i]->ItemAttributes->Title

Como puede ver, Amazon paquetes de este archivo XML completo de la información, que en este caso haceque sea difícil especie de carga de la información deseada. El proceso de carga y datos del autor en miniatura

es prácticamente el mismo sólo el acceso de cada niño y referencia el nodo deseado.

$xml .= “\t<book>”;$xml .= “\t\t<title><![CDATA[“ . $xmlResponse->Items->Item[$i]->ItemAttributes->Title . “]]></title>”;$xml .= “\t\t<author><![CDATA[“ . $xmlResponse->Items->Item[$i]->ItemAttributes->Author . “]]></author>”;$xml .= “\t\t<price><![CDATA[“ . $xmlResponse->Items->Item[$i]->ItemAttributes->ListPrice->FormattedPrice . “]]></price>”;$xml .= “\t\t<thumb>” . $xmlResponse->Items->Item[$i]->SmallImage->URL . “</thumb>”;$xml .= “\t</book>”;

PRECAUCIÓN Los datos para generar el XML es una línea por la variable $xml; el envoltorio es adaptar estapágina y, potencialmente, puede romper el código.

La última parte del PHP para este ejemplo crea un tipo de cabecera para que los lectores conocen el formatoXML que se está enviando. Entonces, finalmente los resultados a la pantalla.

header(“content-type: text/xml”);print $xml;

El Flash (ActionScript) necesarias para la aplicación en todas las clases externas. Esto se hace porque es másfácil de gestionar y mantener para avanzar.

CROSS--REF Si necesita una explicación más a fondo de las clases, os recomiendo que lea el capítulo 9.

El archivo Flash (FLA) para esta aplicación consta de un diseño simple con un cuadro de búsqueda y el botón. Laclase principal, Booksearch, se asigna como la clase de documento y es responsable de la gestión de laaplicación en general. Aquí está el esqueleto de la clase, que da una idea de qué métodos y propiedades seutilizan para crear esta aplicación.

Page 316: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 316/467

316

package{import flash.display.MovieClip;import flash.events.*;import flash.net.*;

public class BookSearch extends MovieClip{

public var webServiceURL:String;private var bookItems:Array;private var bookItemsContainer:MovieClip;

public function BookSearch() {}

public function searchHandler(e:MouseEvent):void {}

public function loadSearchResults(terms:String):void {}

public function loadedResultsHandler(e:Event):void {}

private function removeOldResults():void {}

}}

El método constructor se utiliza para inicializar la matriz, crear un movieclip contenedor, y agregue el detectorde eventos para el botón de búsqueda.

public function BookSearch(){ bookItems = new Array(); bookItemsContainer = new MovieClip();bookItemsContainer.y = 100;searchBtn.addEventListener(MouseEvent.CLICK, searchHandler);}

El último paso del método constructor es añadir el contenedor nuevo libro a la lista de visualización, que enúltima instancia, lo hace visible.

public function BookSearch(){bookItems = new Array();bookItemsContainer = new MovieClip();bookItemsContainer.y = 100;searchBtn.addEventListener(MouseEvent.CLICK, searchHandler);addChild(bookItemsContainer);}

El siguiente método es centrarse en la searchHandler (). Este método se llama cuando el usuario hace clic en elbotón Buscar. Cuando se llama a este método, primero comprueba la longitud de los datos de la caja debúsqueda para asegurar una búsqueda válida va a suceder. Si el valor es de longitud válido, una llamada aeliminar los resultados de búsqueda de edad se hace.

public function searchHandler(e:MouseEvent):void{if(searchTxt.text.length > 0){removeOldResults();

Page 317: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 317/467

317

loadSearchResults(searchTxt.text);}}

Una vez que se encuentra un término de búsqueda válido, el siguiente paso es configurar y realizar la llamadaal PHP, que es responsable de la interfaz con la AWS. La convocatoria de este ejemplo es muy similar a losejemplos anteriores. En primer lugar, establecer las variables de objeto, que asigna a la URLRequest, crear una

instancia de cargador nuevo, y, finalmente, asignar un detector de eventos.

public function loadSearchResults(terms:String):void{var urlVariables:URLVariables = new URLVariables();urlVariables.terms = terms;

var urlRequest:URLRequest = new URLRequest(webServiceURL);urlRequest.data = urlVariables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,loadedResultsHandler);urlLoader.load(urlRequest);}

Usted puede haber notado que este método se ha hecho público. Esto se hace lo que otras aplicacionespueden utilizar la capacidad de buscar, porque eso es lo que la reutilización se trata. Por supuesto, si ustedpermite que otros para llamar a este método directamente, lo más probable es que quiera colocar otro plazode verificación para asegurarse de que los datos erróneos no va a ser enviado.

Una vez que devuelve el servidor Web de los datos, se envía al método loadedResultsHandler(). La respuesta seenvía en formato XML y, utilizando un bucle for..each cada elemento se extrae y se envía a una instancia únicade clase BookItem.

var xml:XML = new XML(urlLoader.data);

for each(var item in xml..book)...

El BookItem hace referencia a un movieclip en la biblioteca. Este movieclip está precargado con entradasficticias que se rellenan con los datos reales antes de que se muestran en el escenario.

var bookItem:BookItem = new BookItem (); bookItem.setValues(item..title,item..author,item..price,item..thumb);bookItem.y = (bookItems.length * (bookItem.height + 30));bookItems.push(bookItem);bookItemsContainer.addChild(bookItem);

El controlador de eventos siguiente completado:

public function loadedResultsHandler(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);

Page 318: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 318/467

318

var xml:XML = new XML(urlLoader.data);

for each(var item in xml..book){var bookItem:BookItem = new BookItem();bookItem.setValues(item..title,item..author,

item..price,item..thumb);

bookItem.y = (bookItems.length * (bookItem.height + 30));bookItems.push(bookItem);bookItemsContainer.addChild(bookItem); }} 

El último método para la clase de documento se utiliza para eliminar los casos elemento existente libro. Estemétodo es llamado cada vez que comienza una nueva búsqueda, para asegurar que los datos noaccidentalmente apilar hasta.

private function removeOldResults():void{if(bookItems.length > 0){bookItems = new Array();removeChild(bookItemsContainer);bookItemsContainer = new MovieClip();bookItemsContainer.y = 100;addChild(bookItemsContainer);}}

La primera parte del método de los controles para las entradas válidas porque la primera vez que se ejecuta la

aplicación, no habría productos existentes en el escenario.

if( bookItems.length > 0){...}

Si hay elementos existentes, una nueva matriz se crea que limpia los objetos existentes. Luego, utilizandoremoveChild, el contenedor de edad se elimina y se crea uno nuevo. Esto se hace para liberar recursos yeliminar los productos existentes.

bookItems = new Array();removeChild(bookItemsContainer);bookItemsContainer = new MovieClip();

El último paso es añadir el contenedor nuevo libro a la lista de visualización, que se hace llamando addChild() ypasar la nueva instancia del contenedor como un argumento.

addChild(bookItemsContainer);

Ahora puede seguir adelante y crear la clase BookItem, que se utiliza para cada producto que se añade alescenario. Es responsable de almacenar los datos fuera de la carga de los productos y en la miniatura de libro.

Page 319: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 319/467

319

Antes de que cualquier desarrollo de la clase comienza es una buena idea buscar en el esqueleto, como en elejemplo anterior. Si lo hace, le permite entender mejor cómo se pretende trabajar.

package{import flash.display.MovieClip;import flash.text.TextField;import flash.display.Loader;import flash.net.URLRequest;

public class BookItem extends MovieClip{public function BookItem() { }public function setValues(t:String, a:String, p:String,i:String):void {}public function loadThumb():void {}public function getValues():Object {}}}

El primer método en la mayoría de las clases es el constructor, y esto no es una excepción, salvo por el hecho

de que este constructor está vacío. El siguiente método es setValues, que se encarga de almacenar los valorespasados. Estos valores serán los datos del libro que es extraído de Amazon. Usted también puede pasar estainformación como un objeto, pero para este ejemplo, es más fácil de entender el uso de variablesindependientes.

public functionsetValues(t:String,a:String,p:String,i:String):void{title = t;author = a;price = p;thumb = i;

titleTxt.text = title;authorTxt.text = author;priceTxt.text = price;

loadThumb();}

Una vez que todas las variables que se almacenan fuera, una llamada a loadThumb hecho es, que esresponsable de recuperar la imagen de la portada del libro. Cuando se utiliza la clase Loader, puede pasar queen el addChild, que elimina la necesidad de un detector de eventos, pero más importante aún, se carga por sí sola, porque la portada del libro no es necesario. También puede crear un gestor visual para informar al usuariode que algo es realmente la carga. El resto del método es sólo una URLRequest estándar, que debe estar

familiarizado con los de los ejemplos anteriores.

public function loadThumb():void{var thumbLoader:Loader = new Loader();var thumbURL:String = thumb;var thumbURLRequest:URLRequest = new URLRequest(thumbURL);thumbLoader.load(thumbURLRequest);thumbLoader.x = 10;addChild(thumbLoader);

Page 320: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 320/467

320

}

El último método es para el retorno de los datos BookItem que fue poblada en los métodos anteriores.

public function getValues():Object{return {title:title, author:author, price:price};}

En este punto, usted ha completado una aplicación de búsqueda de Amazon con PHP y Flash. También hanobtenido una gran cantidad de información sobre el sistema de AWS y debe ser bombeado a construir supropio servicio de Web-habilitado.

Algunos proyectos posibles a construir son la aplicación de búsqueda de CD, sistema de concordancia degénero, o incluso una galería a la que utiliza la biblioteca de iTunes local o reproductor de música similar a laconstrucción de una nube visual de música que ha escuchado. Consulte el sitio Web para este libro para verotros ejemplos de aplicaciones creadas usando el sistema de Amazon AWS.

Desarrollar una galleria de fotos usando flickr  

La galería de fotos es una aplicación muy popular que se construye a menudo usando Flash. Ofrece una maneramuy única para exhibir su trabajo o en algunos casos se utiliza como una aplicación de entrega de información,como por ejemplo en juegos y sitios de noticias.

En esta sección, usted aprenderá a desarrollar una galería de fotos usando el servicio de fotos en Flickrproporcionados por Yahoo. La aplicación Flash se hace una llamada a PHP, que interactúan con los serviciosWeb de Flickr y, finalmente, volver de nuevo a que los datos de Flash para mostrarlos.

Antes de comenzar el desarrollo de la aplicación, registrarse para obtener una clave de API de Flickr, que es unproceso de dos pasos. El primer paso es crear una cuenta de Flickr, visite la página de registro en

www.flickr.com/signup/. 

Una vez que tenga una cuenta de Flickr, solicitur una API, por visitar www.flickr.com/services/api/keys/apply/. 

NOTA Si selecciona la opción no comercial que autoriza su solicitud de forma casi instantánea.

En este ejemplo se utiliza una clase de documentos para manejar la mayoría de la carga y visualización deproceso.De hecho, la mayor parte de esta clase es similar al del ejemplo anterior. Si usted completó este ejemplo,puede copiar los archivos de clase y hacer los cambios que sean necesarios.

Aquí está el esqueleto de la clase, que le dará una mejor idea de cómo la clase trabaja.

package{import flash.display.MovieClip;import flash.events.*;import flash.net.*;

public class PhotoGallery extends MovieClip{public var webServiceURL:String;

Page 321: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 321/467

321

private var photos:Array;private var photosContainer:MovieClip;

public function PhotoGallery() {}public function searchHandler(e:MouseEvent):void {}public function loadSearchResults(terms:String):void {}public function loadedResultsHandler(e:Event):void {}

private function removeOldPhotos():void {}}}

El primer método es realmente el constructor, que en esta aplicación se encarga de la creación de un nuevocontenedor, y también inicializa la matriz de elemento.

public function PhotoGallery(){ photos = new Array(); photosContainer = new MovieClip();photosContainer.y = 75;}

Después de que se crea un nuevo movieclip, es necesario que se añada a la lista de visualización, y uncontrolador de eventos debe ser asignada al botón de búsqueda situado en el escenario.

searchBtn.addEventListener(MouseEvent.CLICK, searchHandler);addChild(photosContainer);

El siguiente método es centrarse en searchHandler(). Cuando este método se le llama comprueba en primerlugar por un término de búsqueda válido. Si el valor es válido, una llamada a eliminar las imágenes antiguasque se haga.

public function searchHandler(e:MouseEvent):void

{if(searchTxt.text.length > 0){removeOldPhotos();loadSearchResults(searchTxt.text);}}

El siguiente método es para llamar al PHP, que es responsable de la interfaz con Flickr. La variable de etiquetasse pasa desde el controlador de búsqueda y se envía al PHP a través de una petición GET.

public function loadSearchResults(tags:String):void{

var urlVariables:URLVariables = new URLVariables();urlVariables.tags = tags;

var urlRequest:URLRequest = new URLRequest(webServiceURL);urlRequest.data = urlVariables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,loadedResultsHandler);urlLoader.load(urlRequest);}

Page 322: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 322/467

322

El PHP está configurado para devolver un conjunto de resultados XML, que es una versión reducida de lo que sedevuelve desde Flickr. Esto es muy similar al del ejemplo del Amazon, porque los servicios Web tienden adevolver una gran cantidad de información que no es necesario para una aplicación como esta.

Los datos XML se carga por primera vez en un objeto XML para analizar adecuado para ser posible. Una vezcreado el objeto XML, se ejecuta a través de un bucle for..each de sacar cada foto nodo de.

public function loadedResultsHandler(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

for each(var item in xml..photo){...}}

Uso de cada foto nodo es necesario crear una instancia de PhotoItem, que es donde se carga la imagen deflickr. Piense en este caso como un contenedor para cada imagen. Esta instancia también es donde los datos de

imagen se almacena para uso futuro.

var photoItem:PhotoItem = new PhotoItem();photoItem.setValues(item..title, item..thumb);

Cuando se crea una nueva instancia de la PhotoItem, debe estar alineado en el contenedor. Esta posición sedetermina en función de la longitud de la matriz de fotos y multiplicando el resultado por la altura de laphotoItem nuevo. Ese valor se incrementó en un 50 pixels para permitir espacio para la imagen en miniatura.

photoItem.y = (photos.length * (photoItem.height + 50));

Otra solución más elegante es la de crear un controlador de eventos que se suman las fotos una vez que se

carga. Esto ofrece la posibilidad de tener múltiples imágenes a tamaño y ser más dinámico.

La última tarea de este método consiste en agregar la nueva instancia en la matriz de fotos y finalmentemostrarlo.

photos.push(photoItem);photosContainer.addChild(photoItem);

Cada vez que una nueva búsqueda se lleva a cabo, una llamada al método removeOldPhotos se hace. Estemétodo es responsable de la eliminación de las imágenes existentes y asegurar que los datos no se cruzaron.

private function removeOldPhotos():void

{if(photos.length > 0){photos = new Array();removeChild(photosContainer);photosContainer = new MovieClip();photosContainer.y = 75;addChild(photosContainer);}}

Page 323: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 323/467

323

Este método private se establece en el código para que no pueden borrar accidentalmente las imágenes. Sidesea permitir la eliminación externa de las imágenes que puede crear un método que los controles que delegacierto nivel de autorización. Si la petición es válida, las imágenes pueden ser removidos.

La siguiente clase para crear, ahora que se ha completado la clase de documento, es la PhotoItem. Esta clasecontiene la información para cada imagen que se carga desde Flickr. También es responsable de cargar laposición de la miniatura de la instancia en el escenario.

package{import flash.display.MovieClip;import flash.text.TextField;import flash.display.Loader;import flash.net.URLRequest;

public class PhotoItem extends MovieClip{private var title:String;private var thumb:String;

public function BookItem() { }public function setValues(t:String, i:String):void {}public function loadThumb():void {}public function getValues():Object {}}}

Cuando una nueva instancia de esta clase se crea, una llamada a la setValues se hace para almacenar los datosde la imagen. Este método acepta dos argumentos: título y la ruta en miniatura. Ambas variables se guardan envariables privadas para que accidentalmente no se pueda acceder y modificar.

title = t;thumb = i;

Una vez que se carguen los datos, el título se añade al componente titleTxt situado en el movieclip. El títulotambién se desplaza a cabo para dar cabida a la imagen en miniatura.

titleTxt.text = title;titleTxt.x = 100;

La pieza final es hacer una llamada al método loadThumb.

loadThumb();

El método de loadThumb es responsable de cargar la imagen que se encuentra en el documento XML.

public function loadThumb():void{var thumbLoader:Loader = new Loader();var thumbURL:String = thumb;var thumbURLRequest:URLRequest = new URLRequest(thumbURL);thumbLoader.load(thumbURLRequest);thumbLoader.x = 10;addChild(thumbLoader);}

Page 324: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 324/467

324

El último método es responsable de pasar de nuevo la información de la imagen.

public function getValues():Object{return {title:title};}

Usted puede haber notado el gestor de miniatura es el mismo código que se utilizó en el libro de ejemplo de labúsqueda. También puede haber notado que el código de gestor a través de todo este libro es muy similar. Loque debería decir es una clase que se han construido para manejar esta tarea, y una importación sencillasustituiría diez líneas de código que se han duplicado en todas las aplicaciones.

Esto no es realmente notable para una pequeña aplicación, pero que sería si estuviera desarrollando unproyecto a gran escala largerscale. Reutilización de la clase se explica en mayor detalle en el capítulo 9. Perobásicamente, lo que viene abajo es cuando eres capaz de hacer algo modular, es probablemente una buenaidea para hacerlo.

Interfaz con el servicio Web 

El siguiente paso en la galería de fotos es para construir el código PHP que se encargará de la conexión a flickr yanalizar la respuesta XML.

El primer paso es definir el API clave de Flickr que se proporciona desde Flickr.

<?php

define(“FLICKR_ACCESS_KEY”, “{FLICKR_API_KEY}”);

Flickr tiene una manera única parte de la construcción de las URLs de la imagen. La manera más fácil trabajarcon este formato es usando la función sprintf. Esta función acepta una cadena con las variables de marcador deposición que luego se rellenan con las variables reales utilizando valores proporcionados en los otros.

$flickrURLTemplate= “http://farm%s.static.flickr.com/%s/%s_%s_s.jpg”;

Para evitar solicitudes erróneas, una simple declaración if se utiliza para asegurarse de que las etiquetas devariable que viene de Flash, de hecho, tiene un término de búsqueda. Si por alguna razón, la variable estávacía, el script y no más de código se ejecuta desde ese punto.

if(empty($_GET[„tags‟])){exit();}

Si se encuentra un valor de etiqueta válido, el siguiente paso es recoger la información de la etiqueta y hacer lallamada a Flickr para iniciar el proceso de búsqueda.

$apiMethod = “flickr.photos.search”;$request = “http://api.flickr.com/services/rest/” .“?method=” . $apiMethod .“&tags=” . $searchTags .“&api_key=” . FLICKR_ACCESS_KEY.“&per_page=5”;

Page 325: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 325/467

325

$rawXml = file_get_contents($request);

El servicio de fotografía devuelve un documento XML que se almacena en la variable $rawXml. Una vez cargado el XML, se pasa a

lo largo del método simplexml_ load_string(), que crea un objeto propio que PHP puede analizar .

$xmlResponse = simplexml_load_string($rawXml);

Cuántas imágenes para mostrar son determinados por la carga del valor que se encuentra en el documentoXML.

$nodeCount = getAttribute($xmlResponse->photos, “perpage”);

Construir un document XML personalizado 

El proceso de construcción del documento XML personalizado se realiza mediante un bucle que se agarra acada nodo de fotos y recoge la información requerida.

$xml = “<?xml version=\”1.0\” ?>\n<photos>”;

for($i=0; $i < $nodeCount; $i++){$farmID= getAttribute($xmlResponse->photos->photo[$i], “farm”);$serverID= getAttribute($xmlResponse->photos->photo[$i],“server”);$photoID= getAttribute($xmlResponse->photos->photo[$i], “id”);$secret= getAttribute($xmlResponse->photos->photo[$i],“secret”);

$xml .= “\t<photo>”;$xml .= “\t\t<title><![CDATA[“ . getAttribute($xmlResponse->photos->photo[$i], “title”) . “]]></title>”;

$xml .= “\t\t<thumb>” .sprintf($flickrURLTemplate,$farmID,$serverID,$photoID,$secret) .“</thumb>”;$xml .= “ </photo>”;}

La primera parte del circuito es para la construcción de la ruta de la imagen, que se pasa a la función sprintf.Después de que el documento XML en general se crea, el último paso es la salida a la persona que llama, queen este caso sería Flash.

header(“content-type: text/xml”);print $xml;

Ahora que el PHP se ha completado y la aplicación general se ha desarrollado, se puede comprobar, como semuestra en la Figura 12.5.

Page 326: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 326/467

326

FIGURA 12.5Aquí está la aplicación final, que muestra las imágenes de una búsqueda usando la etiqueta de color naranja.

Resumen 

En este capítulo usted aprendió cómo conectar Flash a los servicios Web de PayPal, para desarrollar un carritode la compra personalizada. Una vez que se completó la parte de desarrollo de PayPal que aprendió adesarrollar un carrito de la compra personalizado en Flash utilizando clases para simplificar el proceso dedesarrollo.

A continuación, aprendió a desarrollar un sistema de búsqueda que utiliza la API de búsqueda de Amazon.com,y obtuvo una comprensión de cómo los datos en el tercer partido los servicios de regreso.

En la última parte del capítulo que desarrolló una aplicación de la imagen usando la API de Flickr. En el proceso,que ha aprendido algunas de las características más robustas de PHP para desglosar los datos y construir lassolicitudes utilizando sprintf.

El siguiente paso es extender este ejemplo y, posiblemente, crear un script de galería de fotos con lascategorías y la posibilidad de añadir/editar fotografías. Incluso podría incluir esta pequeña porción en unaaplicación mayor, mientras que a través de Flickr como la interfaz gráfica o el punto de almacenamiento defotos.

Page 327: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 327/467

327

Capitulo 13

Uso Avanzado de las aplicacionesDel mundo realAplicaciones del mundo real están destinados a ser productos completos que han sido probados y están listospara ser desplegados para el público en general a disfrutar de ellos. Este capítulo se centra en la construcciónde una serie de aplicaciones que hacen precisamente eso. Los archivos de partida se han previsto para quepueda centrarse en el núcleo de las aplicaciones, lo que sería el proceso de desarrollo.

Cada ejemplo se divide en sus clases individuales, archivos, y los paquetes en función de lo que se requiere. Siusted nunca ha trabajado con las clases, te recomiendo que lea el capítulo 10. Esto asegurará los ejemplos y losestilos de codificación son fáciles de seguir.

Construir una aplicación de dibujo en Flash 

Esta aplicación toma el dibujo (véase la figura 13.1) y usa PHP para crear un formato de imagen exportable. Laprimera parte del código es responsable de la parte de dibujo de la aplicación.

Page 328: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 328/467

328

FIGURA 13.1Aquí está la aplicación de dibujo terminado.

API de dibujo en Flash 

La API de dibujo que se incluye con Flash ofrece una amplia gama de herramientas, como líneas, círculos,cuadrados, y degradados. Este ejemplo se centra en la línea para crear un flash basado en la herramienta dedibujo.

Una vez abierto el archivo de inicio {START_FILE}, se puede comenzar a establecer las variables de inicializaciónque se mantenga el color del lápiz y el tamaño por defecto, así como el contenedor de referencia.

var penMC:MovieClip;

var isDrawing:Boolean = false;

var penTipSize:uint = 1;var penColor:Number = 0x000000;

La aplicación de dibujo se creó para elaborar la línea cuando el botón se mantiene presionado y se detendrácuando se suelta el botón del ratón. Durante el tiempo que el botón del ratón se establece un llamadopersistente a una función de desplazamiento del ratón se produce al colocar el punto de la pluma en unaubicación diferente. La pluma está programado para trazar la línea donde se encuentra el puntero del ratón.

Page 329: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 329/467

329

El siguiente paso es la construcción de los controladores de eventos que se utilizará para determinar el estadode la pluma y habilitar o deshabilitar la capacidad de dibujo. La variable isDrawing se alterna para definir elestado actual de la aplicación. Este método startDrawing () sólo es llamado cuando el ratón hace clic. Esimportante que una línea nueva se crea en caso de que el color o el tamaño de las variables han cambiado.

function startDrawing(e:MouseEvent):void{

trace(“Start Drawing”);isDrawing = true;penMC.graphics.lineStyle(penTipSize, penColor, 1.0);penMC.graphics.moveTo(mouseX, mouseY);}

Después de la bandera de dibujo se establece que puede comenzar a dibujar el trazo de lápiz reales (s). Laposición de la pluma está determinado por la ubicación actual del puntero del ratón.

function drawing(e:MouseEvent):void{if(isDrawing){

penMC.graphics.lineTo(mouseX, mouseY);}}

Ahora que la línea está siendo debidamente elaborados, es una buena idea para evitar que una vez que sesuelta el botón del ratón. Esto se hace colocando un controlador para el evento de ratón.

function stopDrawing(e:MouseEvent):void{trace(“Stop Drawing”);isDrawing = false;}

El último método en este ejemplo es bastante complejo. Es responsable de la construcción de la caja deherramientas y de inicializar el evento de controladores de ratón.

function init():void{penMC = new MovieClip();stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);stage.addEventListener(MouseEvent.MOUSE_MOVE, drawing);addChild(penMC);...

La caja de herramientas está formado por clips de película que ya están en el escenario y convenientemente

identificado dentro de un movieclip contenedor.

toolsMC.swatchPurpleMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0x9999CC;});toolsMC.swatchBlueMC.addEventListener(MouseEvent.CLICK,function():void{

Page 330: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 330/467

330

penColor = 0x0000FF;});toolsMC.swatchRedMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0xFF0000;});toolsMC.swatchGreenMC.addEventListener(MouseEvent.CLICK,

function():void{penColor = 0x00FF00;});toolsMC.swatchOrangeMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0xFF9900;});toolsMC.swatchBlackMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0x000000;

});

toolsMC.brushSize1MC.addEventListener(MouseEvent.CLICK,function():void{penTipSize = 1;});toolsMC.brushSize2MC.addEventListener(MouseEvent.CLICK,function():void{penTipSize = 2;});

toolsMC.brushSize4MC.addEventListener(MouseEvent.CLICK,

function():void{penTipSize = 4;});

toolsMC.brushSize6MC.addEventListener(MouseEvent.CLICK,function():void{penTipSize = 6;});

Cuando todas las herramientas están en su lugar, los canjes de contenedores en las profundidades con elmovieclip pluma para asegurarse de que no se puede querer aprovechar la interfaz de la herramienta.

swapChildren(toolsMC, penMC);}

Ahora que se establece el código ActionScript para la aplicación de dibujo, aquí está el código completado:

var penMC:MovieClip;var isDrawing:Boolean = false;

var penTipSize:uint = 1;

Page 331: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 331/467

331

var penColor:Number = 0x000000;

function init():void{penMC = new MovieClip();stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);stage.addEventListener(MouseEvent.MOUSE_MOVE, drawing);

addChild(penMC);

toolsMC.swatchPurpleMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0x9999CC;});toolsMC.swatchBlueMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0x0000FF;});toolsMC.swatchRedMC.addEventListener(MouseEvent.CLICK,

function():void{penColor = 0xFF0000;});toolsMC.swatchGreenMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0x00FF00;});toolsMC.swatchOrangeMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0xFF9900;});

toolsMC.swatchBlackMC.addEventListener(MouseEvent.CLICK,function():void{penColor = 0x000000;});

toolsMC.brushSize1MC.addEventListener(MouseEvent.CLICK,function():void{penTipSize = 1;});toolsMC.brushSize2MC.addEventListener(MouseEvent.CLICK,function():void

{penTipSize = 2;});

toolsMC.brushSize4MC.addEventListener(MouseEvent.CLICK,function():void{penTipSize = 4;});

toolsMC.brushSize6MC.addEventListener(MouseEvent.CLICK,

Page 332: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 332/467

332

function():void{penTipSize = 6;});swapChildren(toolsMC, penMC);}

function startDrawing(e:MouseEvent):void

{trace(“Start Drawing”);isDrawing = true;penMC.graphics.lineStyle(penTipSize, penColor, 1.0);penMC.graphics.moveTo(mouseX, mouseY);}

function drawing(e:MouseEvent):void{if(isDrawing){penMC.graphics.lineTo(mouseX, mouseY);}

}

function stopDrawing(e:MouseEvent):void{trace(“Stop Drawing”);isDrawing = false;}

init();

Eso es todo lo que hay es una aplicación de dibujo básico en Flash. Puede ampliar este ejemplo, dandoconsejos de lápiz diferente o tal vez algunos de diferentes colores para permitir el sombreado de estilos depintura y otros.

La siguiente sección se basa en este ejemplo y usa PHP para hacer y guardar la imagen en el servidor.

Uso de la libreria GD en PHP 

La librería GD de PHP es una colección de funciones que te dan la habilidad para manipular y crear imágenes.GD también tiene soporte de texto siempre que usted haya instalado las bibliotecas correctas. Trabajar con labiblioteca GD es bastante sencillo, ya sea crear una imagen o abrir una imagen existente como base ymodificarlo según sea necesario.

Uno de los usos más comunes de la biblioteca GD incluye la creación automática de marcas de agua que se

aplican a una galería de imágenes. Algunos lo utilizan para crear miniaturas dinámicas, similar a la forma enque su editor de imágenes locales haría.

http://www.php.net/manual/en/ref.image.php 

La biblioteca GD ofrece una lista enorme de funciones, pero algunos de ellos requieren de librerías adicionales.De hecho, es una buena idea ejecutar un código, como el siguiente, para determinar lo que está instalado.

<?php var_dump(gd_info()); ?>

Page 333: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 333/467

333

Este código imprime lo que la situación de los diferentes componentes de GD son, como lo que es y no estáinstalado. Este es el resultado de la muestra de la llamada var_dump.

array(9){[“GD Version”] => string(24) “bundled (2.0 compatible)”[“FreeType Support”] => bool(false)[“T1Lib Support”] => bool(false)[“GIF Read Support”] => bool(true)[“GIF Create Support”] => bool(false)[“JPG Support”] => bool(false)[“PNG Support”] => bool(true)[“WBMP Support”] => bool(true)[“XBM Support”] => bool(false)}

El código anterior le permite saber que usted no tiene FreeType (fuente) y JPG (imagen) el apoyo habilitado oinstalado. Con esta información, usted puede continuar e instalar las librerías necesarias.Tenga en cuenta que la instalación de aplicaciones en un entorno de línea de comandos no es tan simple comoun doble clic. Se trata de construir extensa de herramientas y, a veces requiere de otras bibliotecas, lo que

significa que puede tomar un montón de trabajo para obtener el kit completo de trabajo GD.

Si usted es presionado por el tiempo y están trabajando a nivel local se puede echar un vistazo a las opcionesde inicio rápido disponible en el capítulo 1, que vienen con una versión completa de PHP y GD. Si estáejecutando desde un sistema remoto lo mejor es ponerse en contacto con su host web para las solicitudes deinstalación.

PRECAUCIÓN La biblioteca GD (básicos) no viene con cada versión de PHP. Consulte con su servidor o instalarsegún sea necesario.

Desde este punto avanza paquete GD debe estar instalado con al menos apoyo JPG a fin de completar losejemplos. Antes de construir la aplicación final, es mejor para familiarizarse con la biblioteca GD mirandoalgunos ejemplos.

He aquí un ejemplo GD simple que crea un rectángulo de color rosa y los resultados al explorador como unarchivo JPG (véase la figura 13.2).

$image = imagecreate(250, 80);$bgColor = imagecolorallocate($image, 255, 0, 120);header(“Content-Type: image/jpeg”);imagejpeg($image);

Page 334: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 334/467

334

FIGURA 13.2Aquí está la imagen que fue generada por la librería GD, utilizando el código simple.

Esta es una continuación del ejemplo anterior, pero esta vez se guarda el archivo JPG al el servidor Web.Al agregar un segundo argumento a la función imagejpeg(), que es un nombre de archivo, la imagen se guardacon el nombre de archivo sample.jpg en lugar de ser una salida en el navegador.

$image = imagecreate(250, 80);$bgColor = imagecolorallocate($image, 255, 0, 120);header(“Content-Type: image/jpeg”);imagejpeg($image, „./sample.jpg‟);

Si bien estos ejemplos son bastante simples que deben dar una idea de cómo trabajar con la librería GD. Siusted tiene otras bibliotecas instalado, puede representar el texto en las imágenes, entre otros muchos

resultados muy interesantes. La biblioteca GD es una gran característica de PHP y ha llegado realmente útilpara muchas tareas, no importa cuán grande.

Ahora, vamos a pasar a la aplicación real que se inició en la sección anterior. El ActionScript es permitir a losusuarios dibujar una imagen y cambiar la configuración, y todo funciona a la perfección, sin embargo, elusuario no es capaz de guardar la imagen, a menos que lo imprime. La idea es inspeccionar la imagen y enviarlos datos a PHP, que será responsable de la creación de un píxel por píxel de la imagen y guardarla en elservidor Web.

Page 335: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 335/467

335

Generar una imagen en la libreria GD 

Esta sección se centra en el uso de PHP para hacer que la imagen que se dibuja en la aplicación Flash.Normalmente, se comienza con el código PHP en primer lugar, pero en esta aplicación, el PHP se utilizasolamente como un renderizador de lo que tiene sentido comenzar con la parte de Flash.

La mayoría de la aplicación se escribió en la sección anterior, usted simplemente tomar ese código y ampliarpara agregar las acciones necesarias.

El código PHP se encarga de la carga del passed-in XML en un objeto que se utiliza para generar, o hacer, laimagen final. La anchura, altura, y XML son todos pasaron a partir de datos POST porque una solicitud GETfracasaria.

$width = $_POST[„width‟];$height = $_POST[„height‟];

$points = simplexml_load_string($_POST[„pointData‟]);

Cuando los datos se ha cargado correctamente, puede configurar la base de la imagen renderizada. Esto sehace utilizando la función imagecreatetruecolor(), que es parte de la librería GD.

$img = imagecreatetruecolor($width, $height);

La imagen real se genera un bucle a través de todos los datos XML que está sacando los valores de color quefueron capturados en Flash.

$limit = count($points->point);

for($j=0; $j < $limit; $j++){$x = $points->point[$j]->x;

$y = $points->point[$j]->y;

$color = $points->point[$j]->c;$color = hexdec($color);

imagesetpixel($img, $x, $y, $color);}

Los datos de los píxeles se colocan en un patrón de cuadrícula de una línea a la vez, la $x y $y son el punto decada color se va a colocar. Todos estos datos se pasa a la función Imagesetpixel en cada paso del bucle interior.

El último paso del PHP una vez creada la imagen para representar la imagen como PNG, tal como se muestra enla Figura 13.3, y guárdelo en el sistema de archivos.

header(„Content-Type: image/png‟);imagepng($img, „render_‟ . time() . „.png‟);

Page 336: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 336/467

336

FIGURA 13.3Una imagen de muestra representa como un PNG

PRECAUCIÓN El proceso de construcción de un píxel de la imagen por píxeles es intensivo del procesador ypuede tomar mucho tiempo, dependiendo del tamaño de la imagen.

Aquí está el código PHP completado:

<?php

$width = $_POST[„width‟];$height = $_POST[„height‟];

$points = simplexml_load_string($_POST[„pointData‟]);

$img = imagecreatetruecolor($width, $height);

$limit = count($points->point);

for($j=0; $j < $limit; $j++){$x = $points->point[$j]->x;$y = $points->point[$j]->y;

$color = $points->point[$j]->c;

Page 337: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 337/467

337

$color = hexdec($color);

imagesetpixel($img, $x, $y, $color);}

header(„Content-Type: image/png‟);imagepng($img, „render_‟ . time() . „.png‟);

?>

Recolección de datos de pixel en Flash 

Hay sólo algunas actualizaciones necesarias para el código de Flash de la sección anterior, pero por ahora secentran en la recopilación de los datos de la imagen utilizando la clase BitmapData.

El primer paso en esta función es determinar las dimensiones de la imagen.

var width:uint = penMC.width;var height:uint = penMC.height;

La siguiente variable a definir es la referencia de archivo PHP.

var phpFile:String =“http://localhost/ch12/DrawingGD/ImageGenerator.php”; 

El siguiente paso es construir un nuevo mapa de bits utilizando el método draw() de la clase BitmapData. Elmétodo draw realiza un argumento, que es el objetivo. Este método toma el argumento y copia los datos de lospíxeles al nuevo mapa de bits.

var bmp:BitmapData = new BitmapData(width, height, true,0xFFFFFF);bmp.draw(penMC);

Después de que el nuevo mapa de bits es creado, usted puede construir un bucle que se analizará el mapa debits y agarrar el color de cada píxel.

var xml:String = “<points>”;

for(var i:uint=0; i < width; i++){for(var j:uint=0; j < height; j++){var color:String = bmp.getPixel(i, j).toString(16);

if(color == “0”)

{color = “FFFFFF”;}

xml += “<point>”;xml += “\t<x>” + i + “</x>”;xml += “\t<y>” + j + “</y>”;xml += “\t<c>” + color + “</c>”;xml += “</point>”;}}

Page 338: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 338/467

338

xml += “</points>”;

Los datos de color se almacena un elemento en el documento XML personalizado que se envía fuera de PHP,una vez escaneado toda la imagen. Las variables se almacenan en una nueva instancia de la URLVariablesobjeto y se pasa a PHP en el formato de datos POST.

var urlVariables:URLVariables = new URLVariables();urlVariables.width = width;urlVariables.height = height;urlVariables.pointData = xml;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.method = URLRequestMethod.POST;urlRequest.data = urlVariables;sendToURL(urlRequest);

La respuesta es enviada a PHP usando el método de sendToURL. Este silencio, llama al servidor web y noespera ninguna respuesta. La razón para usar este método es porque la solicitud será bastante grande si laimagen se ha prestado una gran cantidad de datos de píxeles.

Uso de Flash para construir un monitor del sitio web 

Cuando se posee u opera un sitio web que a veces puede ir fuera de línea, pero probablemente nunca se sabrási se establecen sólo por un breve momento, a menos que se esté consultando en el sitio. ¿Qué sucede si ustedopera muchos sitios Web y están ocupados trabajando mientras que su sitio se cae? Más probable es que susitio se desconecta y no son conscientes de ello.

Esta sección contiene la explicación y el desarrollo de un seguimiento basado en Flash de la web que registralos intentos fallidos de acceder al servidor. Incluso puede ser configurado para el administrador de e-mail si elsistema encuentra un sitio que no ha respondido después de cierto punto (configurable por el operador).

El esquema de tabla de MySQL (esquema) es el siguiente:

CREATE TABLE siteMonitor (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(100) DEFAULT “” NOT NULL,uri TEXT NOT NULL,active VARCHAR(1) DEFAULT 1 NOT NULL,PRIMARY KEY (id));

CROSS--REF Hay muchas maneras que usted puede cargar el esquema de MySQL en su base de datos. Para

obtener una explicación, véase el capítulo 2.

Desarrollar el PHP para el monitor del sitio web 

La primera parte de la carga en PHP es la información de conexión para la base de datos. Este se coloca en unarchivo externo, por lo que puede ser compartida a través de proyectos. De hecho, si usted está utilizando lamisma base de datos como ejemplos anteriores de este libro, se puede reutilizar el viejo dbconn.php, porqueno será cambiado para esta aplicación.

Page 339: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 339/467

339

Si usted aún no ha creado el dbconn.php, aquí están los contenidos. Se llena la información real para suservidor, que se pueden obtener del administrador del servidor Web si usted no es el propietario, o suproveedor de alojamiento si usted es dueño de su servidor.

<?php

$host = “localhost”;

$user = “USERNAME”;$pass = “PASSWORD”;$database = “DATABASE_NAME”;

$link = mysql_connect($host, $user, $pass);mysql_select_db($database, $link);

unset($host);unset($user);unset($pass);unset($database);

?>

Después de la conexión de la base de datos se establece puede continuar el desarrollo del archivo monitor.php.La $action se pasa a lo largo de la dirección, pero debe ser válido para que la secuencia de comandos parasaber qué estado debe estar en ejecución.

$action = (isset($_GET[„action‟])) ? $_GET[„action‟] : “”;

Suponiendo que la acción es válida y el valor es getsites, que está configurado para devolver una lista de lossitios que están siendo monitoreadas. El proceso de recuperar la lista de sitios se lleva a cabo mediante unbucle que se carga en la información de la base de datos MySQL. La lista de sitios se devuelve a Flash como unobjeto XML que definen cada uno de los sitios y donde se encuentran.

El SQL para recuperar la lista está configurado para cargar todas las entradas donde el valor de activo es igual a1.

SELECT * FROM siteMonitor WHERE active=1

Después que los datos de SQL se recupera, se pasa a un bucle while, que es responsable de la apropiación cadafila y la construcción de una línea de XML que define la información del sitio.

$result = mysql_query(“SELECT * FROM siteMonitor WHEREactive=1”);

$xml = “<?xml version=\”1.0\” ?>\n”;$xml .= “<sites>\n”;

 while($row = mysql_fetch_array($result)){...}$xml .= “</sites>”;

La línea de XML está construido utilizando los datos $row, que se transmite en la función sprint(). El sprintf seutiliza para rellenar automáticamente el código XML necesario atributos utilizando la fila de datos de SQL.

$xml .= sprintf(“\t<site name=\”%s\” uri=\”%s\” />\n”,

Page 340: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 340/467

340

$row[„name‟],$row[„uri‟]);

Ahora que se ha construido los datos XML, es enviada al navegador y regresó a Flash. Esto se lograestableciendo el tipo de contenido de la respuesta al texto/xml, que es el tipo de MIME de XML. Entonces, elúltimo paso es utilizar una declaración de hecho la salida de impresión a los datos.

header(“Content-type: text/xml”);print $xml;

Aquí está una muestra de la respuesta que se devolvería a Flash:

<?xml version=”1.0” ?><sites><site name=”Adobe” uri=”http://www.adobe.com” /><site name=”AIRPlayground” uri=”http://www.airplayground.com”/><site name=”mkeefeDESIGN” uri=”http://www.mkeefedesign.com” /><site name=”Google” uri=”http://www.google.com” /></sites> 

Uso de PHP para e-mail del administrador  

Cuando un sitio ha sido inalcanzable para una cierta cantidad de tiempo, es probablemente una buena ideapara notificar a alguien. La notificación se envía utilizando el construido en función mail(). El e-mail alertas aladministrador de un servidor de lo que el sitio está experimentando el corte y en qué momento se envió elinforme, en el caso raro el correo electrónico se retrasa o no es notado de inmediato.

El primer paso es verificar la acción anterior se establece en e-mail al administrador. De lo contrario, estebloque de código completo sería ignorado.

else if($action == “emailadmin”)

{...}

Si la acción (action) es válido, el siguiente paso es construir el mensaje de correo electrónico y recuperar losvalores pasados de Flash que definir el sitio experimentando el apagón.

$from = “[email protected]”;$to = “[email protected]”;$site = $_GET[„site‟];$siteURI = $_GET[„siteURI‟]; 

$date = date(“F j, Y \\a\\t h:i a”, time()); // today‟s date

El cuerpo del e-mail se define como una serie de variables $emailInfo concatenados con el punto (.), Que seutiliza para que PHP conocer esta variable es una continuación.

$emailInfo = “”;$emailInfo .= “**This is an automated response**.\n\n”;$emailInfo .= “The site status monitor has been informed\n”;$emailInfo .= “ the following site is not responding:\n”;$emailInfo .= “-----------------------------------------\n”;$emailInfo .= “Site: “ . $site . “ [“ . $siteURI . “]\n”;

Page 341: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 341/467

341

$emailInfo .= “Date Sent: “ . $date . “\n\n”;$emailInfo .= “-----------------------------------------\n”; 

El encabezado del correo electrónico debe seguir la especificación que define cómo el e-mail se va a construir yel $from de valor tiene que ser válido, a pesar de que la actual dirección de correo electrónico no es utilizada.

// Mail headers, do not alter

$mailHeaders = “From: “ . $from . “ <> \n\n”;

Cuando todas las variables y la información de correo electrónico se han creado, el correo electrónico realespueden ser enviados.Esto se hace realizando una llamada a la función mail(), pasando por la información que fue construido en lospasos anteriores.

if(mail($to,“Automated response from Site Monitor”,$emailInfo,$mailHeaders)){

print “result=success”;}

NOTA La función mail() devuelve un mensaje de éxito si la función es llamada correctamente. La función nosabe el estado del envío efectivo del e-mail.

Aquí está el código PHP completado para monitor.php:

<?php

require(„dbconn.php‟);

$action = (isset($_GET[„action‟])) ? $_GET[„action‟] : “”;

if($action == “getsites”){$result = mysql_query(“SELECT * FROM siteMonitor WHEREactive=1”);

$xml = “<?xml version=\”1.0\” ?>\n”;$xml .= “<sites>\n”;while($row = mysql_fetch_array($result)){$xml .= sprintf(“\t<site name=\”%s\” uri=\”%s\” />\n”,$row[„name‟],$row[„uri‟]);

}$xml .= “</sites>”;

header(“Content-type: text/xml”);

print $xml;}else if($action == “emailadmin”){$from = “[email protected]”;$to = “[email protected]”;

Page 342: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 342/467

342

$site = $_GET[„site‟];$siteURI = $_GET[„siteURI‟];

$date = date(“F j, Y \\a\\t h:i a”, time()); // today‟s date

$emailInfo = “”;$emailInfo .= “**This is an automated response**.\n\n”;$emailInfo .= “The site status monitor has been informed\n”;

$emailInfo .= “ the following site is not responding:\n”;$emailInfo .= “-----------------------------------------\n”;$emailInfo .= “Site: “ . $site . “ [“ . $siteURI . “]\n”;$emailInfo .= “Date Sent: “ . $date . “\n\n”;$emailInfo .= “-----------------------------------------\n”;

// Mail headers, do not alter$mailHeaders = “From: “ . $from . “ <> \n\n”;

print $emailInfo;if(mail($to,“Automated response from Site Monitor”,

$emailInfo,$mailHeaders)){print “result=success”;}}

?>

Desarrollo del ActionScript para el monitor del sitio web 

En este punto, el código de PHP ha sido completado, y la siguiente sección se centra en el proceso de

desarrollo de ActionScript. El archivo Flash se ha previsto para este ejemplo en el sitio Web del libro, que tienetodos los elementos de diseño en el lugar, como se muestra en la figura 13.4, para que pueda centrarse en eldesarrollo.

Page 343: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 343/467

343

FIGURA 13.4Aquí está la solicitud completa con uno de los lugares con indicación de un fracaso.

Aquí está el esqueleto de clase para la clase de documento.

package{import flash.display.MovieClip;import flash.net.*;import flash.events.*;

public class SiteMonitor extends MovieClip{public function SiteMonitor() {}private function loadSites():void {}private function loadSiteHandler(e:Event):void {}}}

El constructor de la clase de documento es responsable de asignar el movieclip siteContainer, y agregó quemovieclip a la lista de visualización y, finalmente, hacer una llamada al método loadSites().

siteContainer = new MovieClip();siteContainer.y = 80;siteContainer.x = 20;

Page 344: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 344/467

344

addChild(siteContainer);

loadSites();

El método loadSites() es el responsable de cargar la lista de sitios para ver. Un evento se une a la secuencia decarga, que se llama cuando los datos de la web es recuperado con éxito.

var variables:URLVariables = new URLVariables();variables.action = “getsites”;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, loadSiteHandler);urlLoader.load(urlRequest);

El siguiente método se llama cuando los datos del sitio se carga correctamente. Un evento es pasado como unargumento que contiene la respuesta de PHP.

private function loadSiteHandler(e:Event):void{...}

La respuesta es XML, lo que es necesario crear primero un objeto XML que se utiliza un bucle for..each.

var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

var i:uint = 0;for each(var item in xml..site){...}} 

El contenido del bucle for..each crea una nueva instancia de la clase SiteMonitorItem que se adjunta a un clipde película en la línea de tiempo del mismo nombre.

var siteItem:SiteMonitorItem = new SiteMonitorItem();siteItem.phpFile = phpFile;siteItem.siteURI = item..attribute(„uri‟);siteItem.siteNameTxt.text = item..attribute(„name‟);siteItem.statusMC.gotoAndStop(2);

siteItem.y = (i * (siteItem.height + 10));

siteContainer.addChild(siteItem);i++;

La variable siteItem tiene la instancia de clase de nueva creación, que se utiliza para asignar el phpfile, siteURI,y el nombre del sitio. El uri y el nombre del sitio se analizan desde el objeto XML utilizando el métodoattribute(), que tiene un argumento que es el nombre del atributo que está buscando. La colocación del objetositeItem está determinado por una ecuación simple, utilizando la altura del objeto y el valor de la variable i,luego de tomar esa suma y añadiendo un relleno 10px.

Page 345: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 345/467

345

En este punto se termina la clase de documento. Aquí está el código completado:

package{import flash.display.MovieClip;import flash.net.*;import flash.events.*;

public class SiteMonitor extends MovieClip{

public var siteContainer:MovieClip;public var phpFile:String =“http://localhost/SiteMonitor/monitor.php”;

public function SiteMonitor(){siteContainer = new MovieClip();siteContainer.y = 80;siteContainer.x = 20;addChild(siteContainer);

loadSites();}

private function loadSites():void{var variables:URLVariables = new URLVariables();variables.action = “getsites”;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,loadSiteHandler);urlLoader.load(urlRequest);}

private function loadSiteHandler(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

var i:uint = 0;for each(var item in xml..site){var siteItem:SiteMonitorItem = new

SiteMonitorItem();siteItem.phpFile = phpFile;siteItem.siteURI = item..attribute(„uri‟);siteItem.siteNameTxt.text =item..attribute(„name‟);siteItem.statusMC.gotoAndStop(2);siteContainer.addChild(siteItem);

siteItem.y = (i * (siteItem.height + 10));

siteItem.checkSite();

Page 346: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 346/467

346

i++;}}}}

La próxima clase a centrarse es SiteMonitorItem, que se asigna al movieclip en la biblioteca del mismo nombre.

Aquí está el esqueleto de la clase de esa clase:

package{public class SiteMonitorItem extends MovieClip{public function SiteMonitorItem() {}public function checkSite():void {}

private function noResponse(event:IOErrorEvent):void {}private function siteResponsedHandler(e:Event):void {}private function stopChecking():void {}

public function get attempts():uint {}public function set attempts(num:uint):void {}}}

El constructor de esta clase está vacía, por lo que puede dejar fuera y continúe con el método siguiente, que escheckSite(). Este método es llamado por la clase de documento cuando el temporizador expira esperar. Elobjetivo de este método consiste en comenzar la acción de control del sitio y el controlador correcto enfunción de la respuesta recibida.

public function checkSite():void{var urlRequest:URLRequest = new URLRequest(siteURI);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,siteResponsedHandler);urlLoader.addEventListener(IOErrorEvent.IO_ERROR, noResponse);urlLoader.load(urlRequest);}

La mayoría de este método es el mismo que los ejemplos anteriores, con la excepción de que el segundoevento listener (oyente). Este detector de eventos se asigna a la IO_ERROR, que ocurre cuando un archivo nose carga correctamente o llamado. El método noResponse() será llamado cuando el sitio no puede ser cargado,como se muestra aquí:

urlLoader.addEventListener(IOErrorEvent.IO_ERROR , noResponse);

El método noResponse() es responsable de incrementar la variable failedAttempts, pero utilizando un métodosetter en lugar de acceder directamente a la variable.

private function noResponse(event:IOErrorEvent):void{attempts = attempts + 1;}

Page 347: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 347/467

347

Si se carga el sitio, una llamada a siteResponsedHandler() se hace para borrar los intentos anteriores fracasarony, básicamente, restablecer la cuenta de errores.

private function siteResponsedHandler(e:Event):void{failedAttempts = 0;}

Una llamada a stopChecking() se produce cuando un sitio no responde después de un número determinado deveces, fijada por la constante MAX_ATTEMPTS.

private function stopChecking():void{stopCheck = true;}

Los dos últimos métodos de esta clase son el getter y set para la variable failedAttempts.El captador (getter) simplemente devuelve el valor actual del valor failedAttempts. El setter no sólo losincrementos de variable failedAttempts, sino que también determina si todos los controles futuro debeinterrumpirse según el recuento actual fracaso.

public function get attempts():uint{return failedAttempts;}

public function set attempts(num:uint):void{if(num == undefined){failedAttempts++;}else

{failedAttempts = num;}

if(failedAttempts == MAX_ATTEMPTS){statusMC.gotoAndStop(1);stopChecking();}

}

Si failedAttempts es igual a la constante MAX_ATTEMPTS, una llamada a stopChecking() se hace y se mueve elindicador de estado para el primer cuadro que muestra un círculo rojo.

En este punto la clase SiteMonitorItem ya está completo y la película de Flash pueden ser examinados paraasegurarse de que funciona correctamente con el código PHP por escrito antes.

Lo que sigue es la clase de archivo completado SiteMonitorItem que se adjunta a la movieclip del mismonombre:

package{

Page 348: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 348/467

348

import flash.display.MovieClip;import flash.net.*;import flash.events.*;import flash.text.TextField;

public class SiteMonitorItem extends MovieClip{

public var phpFile:String;public var siteURI:String;

private var stopCheck:Boolean = false;

private var failedAttempts:uint = 0;

private const MAX_ATTEMPTS:uint = 3;

public function SiteMonitorItem() { }

public function checkSite():void{

var urlRequest:URLRequest = new URLRequest(siteURI);var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,siteResponsedHandler);urlLoader.addEventListener(IOErrorEvent.IO_ERROR,noResponse);urlLoader.load(urlRequest);}

private function noResponse(event:IOErrorEvent):void{attempts = attempts + 1;}

private function siteResponsedHandler(e:Event):void{failedAttempts = 0;}

private function stopChecking():void{stopCheck = true;}

public function get attempts():uint{return failedAttempts;

}

public function set attempts(num:uint):void{if(num == undefined){failedAttempts++;}else{failedAttempts = num;

Page 349: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 349/467

349

}

if(failedAttempts == MAX_ATTEMPTS){statusMC.gotoAndStop(1);stopChecking();}}

}}

Uso de Flash para construer un reproductor de video  

Reproductores de vídeo, como el que se ilustra en la figura 13.5, son cada vez más popular como la Internetsigue para llegar más rápido. La idea detrás de esta sección es desarrollar un reproductor de vídeo que seinterconecta con PHP para cargar en la lista de vídeos, así como el seguimiento de la obra cuenta.

Flash ya los buques con un muy versátil reproductor de vídeo por componentes, pero aún se puede ampliar, lo

que es exactamente lo que esta sección le ayudará a alcanzar.

La aplicación está construida con un componente ComboBox VideoPlayer y que ya se ha colocado en elescenario. El archivo de inicio {START_FILE} se presta para que usted pueda centrarse en el desarrollo yrápidamente puede poner a prueba a medida que avanza.

Page 350: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 350/467

350

FIGURA 13.5Un reproductor de vídeo con un vídeo cargado y reproduciendo 

NOTA Usted necesita un archivo de vídeo FLV a fin de probar esta aplicación. Uno se incluye con el materialencontrado en el sitio Web del libro.

Muchas de las aplicaciones desarrolladas en Flash constará de unos ActionScript. La complejidad de laActionScript se determinará sobre la base de lo que la aplicación será. En este ejemplo va a utilizar una claseexterna para desarrollar el reproductor de vídeo.

La primera parte de la aplicación a desarrollar es el código ActionScript, que se divide en clases de una mayorescalabilidad. El ActionScript principal se adjuntará a la aplicación utilizando la clase de document.

Para empezar, examine la estructura de clase, que le dará una mejor idea de cómo la aplicación fluye.

package{public class VideoPlayer extends MovieClip{public function VideoPlayer(){}public function loadData():void {}

private function dataLoaded(e:Event):void {}

Page 351: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 351/467

351

private function comboHandler(e:Event):void {}}}

El método constructor de la clase de documento es responsable de asignar la instancia VideoPlayer. Tambiénes el punto donde se definen los detectores de eventos necesarios.

_player = this[„player‟];this[„videoListCombo‟].addEventListener(Event.CHANGE,comboHandler);

La última parte del método constructor es llamar al método LoadData y recoger los datos XML.

loadData();

El método LoadData() es para cargar los datos de vídeo, que se devuelve en formato XML.

public function loadData():void{var urlVariables:URLVariables = new URLVariables;

urlVariables.a = “getvideos”;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = urlVariables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, dataLoaded);urlLoader.load(urlRequest);}

Aquí está una muestra de la respuesta XML, que tiene los atributos de población en lugar de los nodos.

<videos>

<video name=”Sample Video 1” src=”color1.flv” playCount=”7” /><video name=”Sample Video 2” src=”color2.flv” playCount=”3” /><video name=”Sample Video 3” src=”color3.flv” playCount=”5” /><video name=”Sample Video 4” src=”color4.flv” playCount=”4” /><video name=”Sample Video 5” src=”color5.flv” playCount=”1” /><video name=”Sample Video 6” src=”color6.flv” playCount=”2” /></videos> 

Después de los datos objeto XML se carga, una llamada a dataLoaded() se hace, que es responsable de llenar elComboBox. Un bucle for..each se utiliza para analizar los datos de vídeo, que se añade al componenteComboBox.

this[„videoListCombo‟].addItem({label:‟Choose Video...‟, data:-

1});for each(var item in xml..video){var name:String = item..attribute(„name‟);var src:String = item..attribute(„src‟);this[„videoListCombo‟].addItem({label:name, data:src});}

Page 352: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 352/467

352

El último método de la clase de documento es un controlador de eventos para el componente ComboBox.

private function comboHandler(e:Event):void{if(e.target.selectedItem.data == -1) return;trace(“Load Video: “ + e.target.selectedItem.data);_player.source = „videos/‟ + e.target.selectedItem.data;}

Este método controlador de eventos se utiliza para cargar el archivo de vídeo, pero sólo si se encuentra unvalor de datos válidos. Una simple declaración de if (si) se utiliza para determinar si se selecciona la etiqueta.

if(e.target.selectedItem.data == -1) return;

Eso es todo lo que hay a esta clase. Esta es la clase de documento terminado:

package{import flash.display.MovieClip;import flash.events.*;

import flash.net.URLVariables;import flash.net.URLRequest;import flash.net.URLLoader;import flash.media.Video;public class VideoPlayer extends MovieClip{public var phpFile:String =“http://localhost/ ch12/VideoPlayer/videoManager.php”;

private var _player:FLVPlayback;

public function VideoPlayer(){_player = this[„player‟];

this[„videoListCombo‟].addEventListener(Event.CHANGE, comboHandler);loadData();}

public function loadData():void{var urlVariables:URLVariables = new URLVariables;urlVariables.a = “getvideos”;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = urlVariables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,dataLoaded);urlLoader.load(urlRequest);}

private function dataLoaded(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var xml:XML = new XML(urlLoader.data);

Page 353: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 353/467

353

this[„videoListCombo‟].addItem({label:‟Choose Video...‟, data:-1});for each(var item in xml..video){var name:String = item..attribute(„name‟);var src:String = item..attribute(„src‟);

this[„videoListCombo‟].addItem({

label:name, data:src});}}

private function comboHandler(e:Event):void{if(e.target.selectedItem.data == -1) return;trace(“Load Video: “ + e.target.selectedItem.data);_player.source = „videos/‟ +e.target.selectedItem.data;}}}

El siguiente paso es desarrollar el código PHP que se utiliza para devolver un objeto XML. Para este ejemplo, losdatos de vídeo es un conjunto estático, pero que puede actualizar fácilmente para utilizar una base de datosMySQL similares a los ejemplos anteriores.

$videos = array(array(“Sample Video 1”, “color.flv”, 0),array(“Sample Video 2”, “color.flv”, 0),array(“Sample Video 3”, “color.flv”, 0),array(“Sample Video 4”, “color.flv”, 0),array(“Sample Video 5”, “color.flv”, 0),array(“Sample Video 6”, “color.flv”, 0));

Este ejemplo sólo tiene una acción, que es recuperar la lista de vídeo y crear un objeto XML que se pasa denuevo a Flash.

if($action == “getvideos”){$xml = “<videos>”;for($i=0; $i < count($videos); $i++){$xml .= “\t<video”;$xml .= “ name=\”” . $videos[$i][0] . “\””;$xml .= “ src=\”” . $videos[$i][1] . “\””;$xml .= “ playCount=\”” . $videos[$i][2] . “\””;

$xml .= “ />\n”;}$xml .= “</videos>”;

Después de que el objeto XML se crea, un tipo de encabezado de XML es emitida, el último paso es la salida elcódigo XML real.

header(“Content-type: text/xml”);print $xml;

Page 354: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 354/467

354

Eso es todo el código PHP que se necesita para desarrollar este programa de vídeo. Aquí está el PHPcompletado:

<?php

$action = (isset($_GET[„a‟])) ? $_GET[„a‟] : “”;

$videos = array(array(“Sample Video 1”, “color.flv”, 0),array(“Sample Video 2”, “color.flv”, 0),array(“Sample Video 3”, “color.flv”, 0),array(“Sample Video 4”, “color.flv”, 0),array(“Sample Video 5”, “color.flv”, 0),array(“Sample Video 6”, “color.flv”, 0));

if($action == “getvideos”){$xml = “<videos>”;for($i=0; $i < count($videos); $i++){

$xml .= “\t<video”;$xml .= “ name=\”” . $videos[$i][0] . “\””;$xml .= “ src=\”” . $videos[$i][1] . “\””;$xml .= “ playCount=\”” . $videos[$i][2] . “\””;$xml .= “ />\n”;}$xml .= “</videos>”;

header(“Content-type: text/xml”);print $xml;}

?>

Desarrollar una aplicación de encuesta 

Una encuesta es una característica muy común de cualquier sitio Web, pero una persona con frecuencia utilizaun servicio que administra la encuesta en lugar de crear su propia cuenta. El principal problema con esteenfoque es que sus datos están en algún otro servidor. Un problema menos común es la falta de libertad con eldiseño de la aplicación de encuesta.

Creando el PHP y MySQL 

Esta aplicación consiste en el diseño, el desarrollo de PHP y ActionScript para desarrollar una aplicación plena

de votación funcionales, como la que se muestra en la Figura 13.6. El foco inicial está en el código SQL quealmacena los datos de las encuestas.

Page 355: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 355/467

355

FIGURA 13.6Una aplicación de encuesta completa muestra algunos datos del ejemplo

Para ofrecer más de una encuesta, un número de identificación único asignado a cada respuesta quedetermina que la pregunta que se asocia con.

CREATE TABLE poll (id INT NOT NULL DEFAULT 0,pollValue TEXT NOT NULL,pollType VARCHAR(20) DEFAULT “” NOT NULL,pollVotes INT(11) NOT NULL,active VARCHAR(1) DEFAULT 1 NOT NULL);

Este esquema de la tabla está poniendo las preguntas y respuestas en una tabla de la simplicidad. Sin embargo,en una aplicación más robusta que usted desea colocar las preguntas y respuestas en dos tablas separadas parauna mejor escalabilidad. Esta es la manera de hacer una base de datos más eficiente.

Después de escribir el SQL, puede pasar a desarrollar el código PHP. Esta aplicación tiene dos acciones: lacapacidad de obtener datos de las encuestas y votar. En una aplicación más avanzado que lo más probable esque tenga un editor y sistema de eliminación.

Page 356: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 356/467

356

La acción y la encuesta de identificación son aprobadas por la dirección (URL), así que la primera parte delcódigo es responsable de almacenar la información.

$action = (isset($_GET[„a‟])) ? $_GET[„a‟] : “”;$pollID = (isset($_GET[„id‟])) ? $_GET[„id‟] : “”;

El siguiente paso es cargar los datos de una encuesta de la base de datos mediante una instrucción SELECT

simple.

$sql = “SELECT * FROM poll WHERE id=” . $pollID;$query = mysql_query($sql);

Cuando se carga los datos de SQL, se pasa en un bucle while que es responsable de la construcción de los datosXML. Una declaración de if se utiliza para determinar si un voto válido está disponible, si lo es, se añade elatributo XML.

$xml = “<poll id=\”” . $pollID . “\”>\n”;

while($row = mysql_fetch_array($query)){

$xml .= “\t<element”;$xml .= “ type=\”” . $row[„pollType‟] . “\””;$xml .= “ value=\”” . $row[„pollValue‟] . “\””;

if($row[„pollType‟] == “answer”){$xml .= “ votes=\”” . $row[„pollVotes‟] . “\””;}

$xml .= “ />\n”;

La segunda acción consiste en emitir un voto mediante el ID de encuesta y el valor de la pregunta como unamanera única de determinar el valor correcto a la encuesta de actualización.

else if($action == “vote”){$votes = (isset($_GET[„v‟])) ? $_GET[„v‟] : “”;$question = (isset($_GET[„q‟])) ? $_GET[„q‟] : “”;

$votes = $votes + 1;

$sql = “UPDATE poll SET pollValue=” . $votes . “ WHERE id=” .$pollID . “ AND pollValue=” . $question;mysql_query($sql);}

El último paso del PHP es generar una cabecera XML y el objeto XML creado para el navegador, donde Flash, lacargará.

header(“Content-type: text/xml”);

print $xml;

Page 357: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 357/467

357

Aquí está el archivo PHP concluido que se utilizará en la aplicación de encuesta:

<?php

require „dbconn.php‟;

$action = (isset($_GET[„a‟])) ? $_GET[„a‟] : “”;$pollID = (isset($_GET[„id‟])) ? $_GET[„id‟] : “”;

if($action == “getpolldata”){$sql = “SELECT * FROM poll WHERE id=” . $pollID;$query = mysql_query($sql);

$xml = “<poll id=\”” . $pollID . “\”>\n”;

while($row = mysql_fetch_array($query)){$xml .= “\t<element”;$xml .= “ type=\”” . $row[„pollType‟] . “\””;$xml .= “ value=\”” . $row[„pollValue‟] . “\””;

if($row[„pollType‟] == “answer”){$xml .= “ votes=\”” . $row[„pollVotes‟] . “\””;}

$xml .= “ />\n”;}

$xml .= “</poll>”;

header(“Content-type: text/xml”);

print $xml;}else if($action == “vote”){$votes = (isset($_GET[„v‟])) ? $_GET[„v‟] : “”;$question = (isset($_GET[„q‟])) ? $_GET[„q‟] : “”;

$votes = $votes + 1;

$sql = “UPDATE poll SET pollValue=” . $votes . “ WHERE id=” .$pollID . “ AND pollValue=” . $question;mysql_query($sql);}

?>

Desarrollo de ActionScript para la encuesta 

El código ActionScript para la aplicación de encuesta está dividida en dos partes. La primera pieza es una clasede documentos que controla la mayoría de la solicitud de votación. El segundo es un PollItem que se duplicapor cada respuesta en la encuesta de carga.

Page 358: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 358/467

358

Los datos que se cargan desde PHP se devuelve en formato XML. Aquí está una muestra de la respuesta:

<poll><element type=”question” value=”What is your favorite color?”/>

<element type=”answer” value=”Black” votes=”0” />

<element type=”answer” value=”Blue” votes=”0” />

<element type=”answer” value=”Orange” votes=”0” />

<element type=”answer” value=”Red” votes=”0” /></poll>

La primera clase es a centrarse en la PollItem porque va a ser cargado por la clase de documento, y es elsiguiente paso para trabajar en un orden lógico. Aquí está el esqueleto de clase para el PollItem:

package{public class PollItem extends MovieClip{public function PollItem() {}public function get data():Object {}public function setData(i:uint, a:String, v:uint):void {}}}

La primera parte de la clase son las variables, que en esta clase son el id, la respuesta, y el valor de la votaciónpara cada elemento de encuesta ejemplo.

private var ID:uint;private var answer:String;private var votes:uint;

Esta clase en realidad sólo había dos métodos. El primer método es un captador que devuelve un objeto llenocon el tema de datos.

public function get data():Object{return {id:ID, answer:””, votes:votes};}

El segundo método es responsable de asignar los datos a cada partida de la encuesta. Las variablesalmacenadas se ajustan a privados, lo que permite al desarrollador para controlar el acceso y mantengaconsistente durante el proceso de aplicación.

public function setData(i:uint, a:String, v:uint):void{ID = i;answer = a;votes = v;}

Page 359: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 359/467

359

Eso es todo lo que hay a la clase PollItem, que se muestra aquí completa:

package{import flash.display.MovieClip;import flash.text.TextField;

public class PollItem extends MovieClip

{private var ID:uint;private var answer:String;private var votes:uint;public function PollItem() {}

public function get data():Object{return {id:ID, answer:””, votes:votes};}

public function setData(i:uint, a:String, v:uint):void{

ID = i;answer = a;votes = v;}}}

La última clase es la clase de documentos, que se adjunta a la etapa de establecer el valor en el inspector depropiedades. Aquí está el esqueleto de la clase:

package{public class Poll extends MovieClip

{public function Poll() {}public function loadPollData():void {}public function dataLoaded(e:Event):void {}}}

El primer método se llama desde el constructor y es responsable de cargar los datos de la encuesta en formatoXML basado en la encuesta de identificación que se pasa en una petición GET.

public function loadPollData():void{var urlVariables:URLVariables = new URLVariables;

urlVariables.a = “getpolldata”;urlVariables.id = POLL_ID;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = urlVariables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, dataLoaded);urlLoader.load(urlRequest);} 

Page 360: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 360/467

360

Después de cargar los datos, una llamada al método dataLoaded() se hace, que se encarga de mostrar los datosde encuesta con las instancias PollItem.

La respuesta del servidor se envía en formato XML, que se analiza y se utiliza para construir la encuesta degráficos. Cada elemento de los datos de la encuesta se almacena como un atributo en lugar de un nodo en unintento de mantener el código de peso ligero.

var type:String = item..attribute(„type‟);var value:String = item..attribute(„value‟);var total:uint = uint(xml..attribute(„total‟));

La variable de type (tipo) se utiliza para determinar si un elemento es una pregunta o una respuesta.

if(type == “question”){this[„questionTxt‟].text = value;continue;}

if(type == “answer”)

{var votes:uint = uint(item..attribute(„votes‟));}

Las tiendas pollItem variable de la instancia de la clase PollItem, que contiene los gráficos para cada elementode la encuesta. El porcentaje se determinará con un poco de matemáticas muy básicas, que se divide elrecuento de votos por el total y que se multiplica por 100 para generar un porcentaje.

var pollItem:PollItem = new PollItem();pollItem[„percentTxt‟].text = Math.round(votes / total * 100) +“%”;pollItem[„barMC‟].width = (votes / total * 100) * 4;

El último paso en el método es para la alineación de cada pollItem, adjuntando el pollItem a la lista devisualización, y, finalmente, añadiendo a la matriz pollItems.

pollItem.y = (pollItems.length * (pollItem.height + 20));

container.addChild(pollItem);pollItems.push(pollItem);

En este punto, la clase de documento está construido, y se muestra en su totalidad aquí:

package{import flash.display.MovieClip;import flash.events.*;import flash.net.URLVariables;import flash.net.URLRequest;import flash.net.URLLoader;import flash.text.TextField;

public class Poll extends MovieClip{public var POLL_ID:uint = 1;public var phpFile:String =

Page 361: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 361/467

361

“http://localhost/ch12/Poll/poll.php”;

public var container:MovieClip;public var pollItems:Array;

public function Poll(){pollItems = new Array();

container = new MovieClip();container.x = 15;container.y = 100;

addChild(container);

loadPollData();}

public function loadPollData():void{var urlVariables:URLVariables = new URLVariables;urlVariables.a = “getpolldata”;

urlVariables.id = POLL_ID;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = urlVariables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE,dataLoaded);urlLoader.load(urlRequest);}

public function dataLoaded(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);

var xml:XML = new XML(urlLoader.data);

for each(var item in xml..element){var type:String = item..attribute(„type‟);var value:String = item..attribute(„value‟);var total:uint =uint(xml..attribute(„total‟));

if(type == “question”){this[„questionTxt‟].text = value;continue;

}

if(type == “answer”){var votes:uint =uint(item..attribute(„votes‟));}

var pollItem:PollItem = new PollItem();pollItem[„percentTxt‟].text =Math.round(votes / total * 100) + “%”;

Page 362: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 362/467

362

pollItem[„barMC‟].width =(votes / total * 100) * 4;

pollItem.y =(pollItems.length *(pollItem.height + 20));

container.addChild(pollItem);

pollItems.push(pollItem);}}}}

Construir un simple editor de archivos 

En este punto usted ha visto una amplia selección de aplicaciones del mundo real, pero todavía hay uno que nose ha hablado. Eso, por supuesto, sería un sistema de gestión de contenidos. Un sistema completo de gestiónde contenido sería un proyecto masivo, pero esta sección se centra en un aspecto de la aplicación.

El editor de archivo, que se utiliza para añadir y editar los archivos, es una pieza fundamental para cualquiersistema de gestión de contenido. Es probable que en algún momento el administrador va a necesitaractualizaciones realizadas. En lugar de descargar el material de origen, es mucho más eficiente de utilizar uneditor de archivos dinámico.

La aplicación de esta sección es sólo eso: un editor de archivos dinámico que está conectado a PHP para querealmente salvar y cargar los archivos. Normalmente usted puede utilizar el flash para cargar los archivos, peroPHP ofrece la posibilidad de cargar los archivos que no se almacenan en la raíz Web. Esta es una buena ideapara los archivos de plantilla, porque no tienen que acceder directamente por un huésped.

El diseño del editor de archivos es un área de texto básicos, el botón Enviar, TextField y ComboBox.

Nada de emocionante para diseñar el editor de archivos, en cambio, la verdadera sustancia de la solicitud seencuentra dentro del código ActionScript y PHP.

Comenzando con el código PHP le permite probar la parte de Flash a medida que comienza a desarrollarlo. ElPHP es realmente muy simple para este ejemplo. Primero, comprobar que un archivo es válido, porque si ustedva guardar o cargar, se necesita un archivo válido.

if(!empty($_GET[„file‟])){$file = „./files/‟ . $_GET[„file‟];...}

Después de determinar que es un archivo válido, el siguiente paso es comprobar si la acción está en blanco. Sila acción está en blanco, el código cargará automáticamente la acción, si la acción contiene un valor que secompara mediante una declaración if comunicado interno.

if($_GET[„action‟] == „save‟){...}else{

Page 363: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 363/467

363

...}

Este ejemplo sólo permite cargar y guardar los archivos. En una aplicación más robusta que lo más probable esque desee tener una acción de eliminar o moverla.

La acción de guardar es responsable de cargar el archivo solicitado, reemplazando el texto actual, y,

finalmente, volver a guardar el archivo. Es importante señalar que el ejemplo es con vistas a una piezafundamental para cualquier aplicación en el mundo real, que es escapar de los datos que se envían desdeFlash. Usted también puede agregar una clave de acceso de código de forma arbitraria no puede ejecutarse enel navegador a través de una petición GET.

La variable $fileContents recupera desde el principio los datos enviados por Flash.

$fileContents = $_GET[„fileContents‟];

El archivo se carga mediante la función fopen con acceso de escritura a sobrescribir. Esto significa que elcontenido original se elimina y sólo la nueva versión se guarda.

$handle = fopen($file, „w+‟);

Una vez que el archivo se carga, una llamada a fwrite () se hace, que en realidad escribe el contenido en elarchivo y guarda el archivo. El último paso de la acción de guadar es cerrar el archivo de recursos y liberar lamemoria.

fwrite($handle, $fileContents);fclose($handle);

La carga de un archivo es mucho más fácil. Básicamente, se hace referencia en el archivo y cargar el contenidomediante file_get_contents(), que devuelve todo el archivo como una cadena, como se muestra en la Figura13.7.

$loadedFile = file_get_contents($file);print “fileContents=” . $loadedFile;

Aquí está el archivo PHP completo, que debe ser guardado con el nombre fileManager.php:

<?php

error_reporting(0);

if(!empty($_GET[„file‟])){$file = „./files/‟ . $_GET[„file‟];

if($_GET[„action‟] == „save‟){$fileContents = $_GET[„fileContents‟];

$handle = fopen($file, „w+‟);fwrite($handle, $fileContents);fclose($handle);}else{$loadedFile = file_get_contents($file);

Page 364: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 364/467

364

print “fileContents=” . $loadedFile;}}

?>

El siguiente paso es desarrollar el código ActionScript. La parte de diseño ha sido creado previamente parapoder mover directo al código.

El primer paso es definir las variables utilizadas para este ejemplo.

varphpFile:String=”http://localhost/ch12/FileEditor/fileEditor.php”;var files:Array = [„sample.txt‟, „anotherfile.txt‟,„readme.txt‟];var storedFileData:String;

FIGURA 13.7El contenido del archivo en bruto pasó de PHP como se ve desde un navegador Web

Una vez definidas las variables, puede pasar a las funciones. La primera función es responsable de llenar la listade archivos cuadro combinado.

Page 365: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 365/467

365

function populateFileList():void{...}

El método AddItem del cuadro combinado (comb box) acepta un objeto como argumento, que define los datosde la etiqueta y los datos. Para esta aplicación, el fichero se utiliza tanto para la etiqueta y el valor de los datos.

for(var i:uint=0; i < files.length; i++){fileListCombo.addItem({label:files[i], data:files[i]});}

El método loadFile se llama cuando se hace clic en el loadbtn. Este controlador crea un archivo de solicitud conuna variable de archivo que PHP utiliza para cargar el archivo real.

function loadFile(e:MouseEvent):void{var variables:URLVariables = new URLVariables();variables.file = fileListCombo.selectedItem.data;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, fileLoaded);urlLoader.load(urlRequest);}

Después de que el archivo solicitado se carga y se devuelve el contenido de PHP, es enviado en el área de textobodyTxt y también a la variable storedFileData. Esta variable se utiliza para almacenar en caché los resultadossin modificar. Puede volver a estos resultados más adelante haciendo clic en el botón Restablecer.

function fileLoaded(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(urlLoader.data);

 bodyTxt.text = unescape(variables.fileContents);storedFileData = bodyTxt.text;}

El método de restablecimiento simplemente reemplaza el contenido del cuerpo con los datos modificados quese almacena en el archivo original se carga.

function resetHandler(e:MouseEvent):void

{ bodyTxt.text = storedFileData;}

El último método necesario en esta aplicación es responsable de guardar el contenido editado. Antes de que seguardan los datos, se almacena en caché, lo que elimina la necesidad de volver a cargar los datos.

function saveHandler(e:MouseEvent):void{var body:String = bodyTxt.text;

Page 366: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 366/467

366

storedFileData = body;...}

Las variables pasadas al PHP definir la acción, el nombre del archivo, y el contenido de primas que reemplazaráel archivo de datos existente. El nombre del archivo es obtenida del ComboBox acceso al objeto deselectedItem.

var variables:URLVariables = new URLVariables();variables.file = fileListCombo.selectedItem.data;variables.action = “save”;variables.fileContents = body;

Esta URLRequest particular, no requiere de un detector de eventos porque el proceso de guardar que pasa

por su propia cuenta y se completa una vez que PHP recibe todos los fileContents.

NOTA En una aplicación remota es una buena idea para notificar al usuario del proceso de ahorro, ya que unarchivo grande puede tomar tiempo para salvar.

var urlRequest:URLRequest = new URLRequest(phpFile);

urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.load(urlRequest);

La última tarea del ActionScript es el registro de los eventos de los botones y hacer una llamada a la funciónpopulateFileList() para el archivo de perfil ComboBox.

// Register EventsloadFileBtn.addEventListener(MouseEvent.CLICK, loadFile);saveBtn.addEventListener(MouseEvent.CLICK, saveHandler);resetBtn.addEventListener(MouseEvent.CLICK, resetHandler);populateFileList();

Page 367: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 367/467

367

FIGURA 13.8El editor de archivos completada con una muestra de archivo cargado

La aplicación, como se muestra en la figura 13.8, se ha efectuado. El siguiente es el código fuente deActionScript completo:

Var

phpFile:String=”http://localhost/ch12/FileEditor/fileEditor.php”;var files:Array = [„sample.txt‟, „anotherfile.txt‟,„readme.txt‟];var storedFileData:String;

function populateFileList():void{for(var i:uint=0; i < files.length; i++){fileListCombo.addItem({label:files[i], data:files[i]});}}

function loadFile(e:MouseEvent):void{var variables:URLVariables = new URLVariables();

Page 368: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 368/467

368

variables.file = fileListCombo.selectedItem.data;

var urlRequest:URLRequest = new URLRequest(phpFile);urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, fileLoaded);urlLoader.load(urlRequest);

}

function fileLoaded(e:Event):void{var urlLoader:URLLoader = URLLoader(e.target);var variables:URLVariables = new URLVariables(urlLoader.data);

bodyTxt.text = unescape(variables.fileContents);storedFileData = bodyTxt.text;}

function resetHandler(e:MouseEvent):void{

bodyTxt.text = storedFileData;}

function saveHandler(e:MouseEvent):void{var body:String = bodyTxt.text;storedFileData = body;

var variables:URLVariables = new URLVariables();variables.file = fileListCombo.selectedItem.data;variables.action = “save”;variables.fileContents = body;

var urlRequest:URLRequest = new URLRequest(phpFile);

urlRequest.data = variables;

var urlLoader:URLLoader = new URLLoader();urlLoader.load(urlRequest);}

// Register EventsloadFileBtn.addEventListener(MouseEvent.CLICK, loadFile);saveBtn.addEventListener(MouseEvent.CLICK, saveHandler);resetBtn.addEventListener(MouseEvent.CLICK, resetHandler);

populateFileList(); 

Page 369: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 369/467

369

Resumen 

En este capítulo usted aprendió cómo desarrollar avanzadas aplicaciones del mundo real, tales como lautilización de Flash y PHP para construir un editor de archivos, reproductor de vídeo y monitor de sitio.

Si bien el desarrollo del sitio monitor que aprendieron los nuevos eventos que hacen que sea más fácil trabajar

con datos incorrectos, así como la vinculación de PHP, MySQL y Flash juntos. La aplicación se ha mejoradomediante la adición de acciones personalizadas, tales como el proceso de e-mail al administrador cuando unsitio no responde.

En la aplicación de votación aprendió a desarrollar una aplicación completa usando Flash como medio devisualización. La solicitud general fue escrito para ser muy escalable y, de hecho, cambiar la variable de ID en laclase de documento se carga una pregunta de la encuesta totalmente diferente (siempre existe uno).

En este punto, usted debe entender completamente la forma de desarrollar aplicaciones del mundo real queson fáciles de actualizar y mantener. De hecho, la mayoría de este capítulo pueden sumarse para crear unsistema de gestión o basadas en otro módulo de aplicaciones.

Page 370: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 370/467

370

Capitulo 14

Depurar AplicacionesCuando se construye una aplicación, es casi seguro que algún elemento que deje de funcionar o tal vez nuncatrabajo desde el principio. Esto puede ser un punto en cualquier momento el bono de un ciclo de desarrollopuede tener que desaparecer. La idea es crear su aplicación con la depuración en la mente. La adición decomentarios en realidad puede acelerar la depuración de la línea.

Por supuesto, añadiendo a medida que avanza la depuración es similar a escribir un esquema. Piensa en ellocomo te das cuenta de que es demasiado tarde. La clave es no dejar que un proyecto de llegar a este punto.Este capítulo se centra en la mejor forma de depurar aplicaciones.Se empieza por las herramientas integradas y luego progresar y algunas aplicaciones externas y prácticas quehacen que sea menos dolorosa.

Uso de informes de errors en PHP 

Empecemos con mirar a la depuración de una aplicación PHP. De forma predeterminada, la depuraciónhabilitada de buques PHP con un cierto nivel. Es creado para informar de los errores fatales (accidentes deprograma) y las advertencias (archivos que faltan y argumentos). Este nivel de informe de errores está bienpara un servidor de desarrollo, pero un gran problema con la instalación por defecto es que los errores seimprimen en la pantalla y cada usuario puede ver.

La alternativa y la opción más segura es permitir el registro de errores en un registro de error de archivo similar

a cómo se configura Apache. Habilitar el registro de errores se realiza editando el archivo php.ini. Si usted notiene acceso de administrador de su servidor, usted necesita ponerse en contacto con alguien que tiene esteacceso. El archivo php.ini se encuentra normalmente en el directorio /etc/ en UNIX y C:\WINDOWS\, que esgeneralmente sólo accesible por el administrador del servidor.

El archivo php.ini se almacena en varios lugares dependiendo de la configuración del servidor. Sin embargo, lobueno es que PHP puede indicar dónde está almacenado. Basta con crear un nuevo archivo, el nombre deinfo.php, y agregar el siguiente código:

<?phpphpinfo();?>

Al ejecutar este archivo en un explorador que se presentan con una gran cantidad de información específica desu versión actual de PHP. Uno de los primeros bloques de información es el camino ini, que se ve algo comoesto:

Configuration File (php.ini) Path /usr/local/php5/lib/php.ini

PRECAUCIÓN Modificación incorrecta del archivo php.ini puede resultar en su servidor no funciona. Tengacuidado al editar este archivo.

Page 371: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 371/467

371

Después de éxito encontrar el archivo php.ini, y abrirlo en el editor de texto favorito o usar vi si está utilizandola línea de comandos. Usando vi, un comando para abrir un archivo, se ve así:

vi /usr/local/php5/lib/php.ini

Con el archivo abierto, desplazarse a través hasta llegar a una sección que se parece a este:

; Log errors to specified file.;error_log = filename

Las líneas que comienzan con ; (punto y coma) son comentarios en los archivos ini. Como puede ver, elerror_log no está definido y por lo tanto no es salvar a cualquier archivo. El método para activar esta opción esquitar el punto y coma (;) y reemplazar el nombre de archivo con una ruta y el nombre real del archivo, talescomo

error_log = /usr/local/debug/php_errors 

Después de realizar los cambios y guardar el archivo php.ini, es necesario reiniciar el servidor Web para

permitir a PHP para leer el archivo ino. Esto es necesario porque el PHP sólo lee el archivo ini(s) en el inicio paramaximizar el rendimiento.

Después de empezar a generar errores del archivo de registro comienza a llenarse. Si usted lee elarchivo de registro que debe ver cadenas como la siguiente. Muy probablemente, los errores queusted recibe en realidad le dirá lo que está mal, debido a un error que proporciona informaciónincorrecta no es realmente tan útil.

[18-Jul-2007 20:51:17] PHP Fatal error: file.php on line 30[09-Aug-2007 21:23:37] PHP Fatal error: file.php on line 13[03-Nov-2007 23:10:21] PHP Fatal error: file.php on line 56...

Un servidor de producción sólo debería registrar los errores, lo que significa que los errores también se debedar salida con discapacidad en el archivo php.ini. Abra el archivo ini y cambiar el valor a Off output_errors yreiniciar Apache de nuevo.

display_errors = Off

Mostrando los errors para depurar  

Con el servidor de registro de errores de forma segura sin mostrar a los usuarios en general, se puede ver loque los informes de errores en PHP ofrece el promotor. Desde el punto de vista de la depuración, el informe deerrores en PHP es muy robusto. Ahí están los errores estándar, tales como errores fatales, los archivos que

faltan, advertencias, etc. Aún más importante es la capacidad de crear su propio error.

Con el fin de crear un error personalizado, simplemente llame a trigger_error (), que toma dos argumentos. Elprimer argumento es la cadena de error para mostrar y el segundo (opcional) El argumento es lo que el nivel deerror de error debe ser reportado como. Esta es una llamada trigger_error simple:

trigger_error(“Cannot load non-existent user data”,E_USER_WARNING);

Page 372: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 372/467

372

Depurar variables

El código de depuración no es siempre acerca de los errores de sintaxis, de hecho, la mayoría de veces no lo es.A menudo se encuentra una variable fuera de alcance o no inicializado, lo que no se producirá un error. Porsupuesto, PHP tiene muchas funciones y los métodos que se adapten a la depuración.

Posiblemente se haya impreso o echo antes, pero créanlo o no las funciones son realmente muy útil paradepurar una aplicación. Básicamente, usted puede rastrear las variables y tener una mejor idea de cómo estáfuncionando un programa.

Depurar arrays

Trabajar con una matriz es un poco diferente porque una impresión simple mostrará Array. Sin embargo,puede utilizar la función print_r() para ver una matriz. Incluso se mostrará una matriz dentro de una matriz yasí sucesivamente, también conocida como una matriz multidimensional. Aquí es el resultado del ejemplomuestra de la llamada print_r:

Array([0] => Array([one] => 1)

[1] => Array([two] => 2))

Entender los niveles de error  

Si bien usando trigger_error puede observar que el segundo parámetro es una constante. Esta constante sedefine un nivel de error determinado. PHP ofrece una amplia gama de niveles de error e incluso permite a losdesarrolladores para cambiar el nivel como el código avanza.

Aquí es cómo el cambio de manera pragmática el nivel de error, en este caso, haciendo que incluso se informósobre esto AVISOS:

error_reporting(E_ALL);

Tabla 14.1 muestra los niveles de error y una descripción del nivel de lo que el error se refiere.

TABLE 14.1

Niveles de Error y DescripcionesError Descripción . E_ERROR Errores fatales en tiempo de ejecución. Estos indican errores que no pueden recuperarse, tales

como un problema de asignación de memoria. La ejecución del script se detiene.E_WARNING Advertencias Tiempo de ejecución (errores no fatales). La ejecución del script no se detiene.E_PARSE Errores de compilación analizar el tiempo. Errores de análisis sólo debe ser generada por el

analizador.E_NOTICE Anuncios de Tiempo de ejecución. Indica que el guión ha topado con algo que podría indicar un

Page 373: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 373/467

373

error, pero también podría ocurrir en el curso normal de ejecución de un script.E_CORE_ERROR Errores fatales que ocurren durante el arranque inicial de PHP. Esto es como un E_ERROR,

excepto que es generado por el núcleo de PHP.E_CORE_WARNING Advertencias o errores no fatales que ocurren durante el arranque inicial de PHP. Esto es como un

E_WARNING, excepto que es generado por el núcleo de PHP.E_COMPILE_ERROR Fatal errores de compilación. Esto es como un E_ERROR, excepto que es generado por el Motor

de Scripting de Zend.

E_COMPILE_WARNING Advertencias en tiempo de compilación o errores no fatales. Esto es como un E_WARNING,excepto que es generado por el Motor de Scripting de Zend.E_USER_ERROR Mensaje de error generado por el usuario. Esto es como un E_ERROR, excepto que es generado

desde código PHP usando la función trigger_error().E_USER_WARNING Generado por el usuario mensaje de advertencia. Esto es como un E_WARNING, excepto que es

generado desde código PHP usando la función trigger_error().E_USER_NOTICE Generada por el usuario previo aviso. Esto es como un E_NOTICE, excepto que es generado desde

código PHP usando la función trigger_error().E_STRICT Anuncios de Tiempo de ejecución. Habilitar para que PHP sugiera cambios en su código que

velarán por la mejor interoperabilidad y por mantener la compatibilidad de su código.E_ALL Todos los errores y advertencias, como el apoyo, excepto por el nivel E_STRICT en PHP < 6. 

Como puede ver, PHP ofrece un montón de opciones de depuración dar salida más allá de la básica y la

explotación forestal. De hecho, usted puede personalizar un montón de errores que se encuentran en elarchivo php.ini para depurar las aplicaciones más diversas.

Si usted desea conseguir un nivel grave de depuración de código y herramientas de observación, entoncespuede que desee echar un vistazo a Zend Studio IDE (ver figura 14.1), construido en la cima de lainfraestructura Eclipse. Esta aplicación no es gratuito, sin embargo, es el editor de PHP más robusto y undepurador de perfil en el mercado en el momento de escribir este artículo. Una licencia de Zend Studio pararangos de $150 a $300 dependiendo de la versión que usted compra.

NOTA Zend Studio no es el único editor de PHP, sin embargo tiene el depurador más robusto.Además puede utilizar PHPEclipse que tiene características similares a Zend. Sin embargo, el proceso de

instalación es un poco más complicado.

Page 374: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 374/467

374

FIGURA 14.1El IDE de Zend Studio con los paneles de depuración visible

Page 375: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 375/467

375

Depurar en Flash 

Similar a PHP, Flash ofrece una serie de herramientas muy útiles para la depuración. De hecho, el IDE de Flashtiene un sistema de depuración completo construido en el derecho en el que puede inspeccionar su código(véase la figura 14.2), se aplican puntos de interrupción, y la actividad en torno a un bloque de código para verlos detalles y encontrar un error.

FIGURA 14.2Aquí está el panel que se utiliza para inspeccionar una aplicación.

Flash también tiene un panel de salida (ver figura 14.3) que se utiliza para ver declaraciones trace() los estadosllamados desde el código. La sentencia trace es una función básica que acepta una cadena como unargumento. Esto se envía al panel de la producción y ofrece la posibilidad de mostrar los elementos de unaaplicación, que se está ejecutando.

trace(“Here is a very basic debug message”);

Una pregunta común con el uso de las instrucciones de seguimiento es la voluntad que siguen a la producciónde una película compilado? Lo harán, pero usted puede seleccionar la opción "Omitir acciones de seguimiento"en el cuadro de diálogo Configuración de publicación para deshabilitarlo.

Page 376: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 376/467

376

El simple método trace (seguimiento) puede ser útil cuando se depuren los ejemplos de código de base. Sinembargo, para las aplicaciones más completa, lo más probable es que quiera construir su propio gestor dedepuración. Esto se puede hacer de forma bastante sencilla.

FIGURA 14.3Este es un ejemplo del panel de salida como se ve en Flash.

En primer lugar, crear un componente de TextArea en el escenario con el nombre de instancia debugTxt.Luego, crear una nueva función de seguimiento que llenarán de que TextArea. Utilizando el métodoappendText agregará en el texto existente, en lugar de eliminarlo.

function tracer(debug:String):void{debugTxt.text.appendText(debug);}

También podría crear una clase personalizada que cualquier porción de su código es capaz de llamar. Sinembargo, encontrará rápidamente que el nivel de seguimiento no es perfecto. Por ejemplo, no de manerapragmática puede borrar la pantalla o de la prioridad lugar en ciertos eventos.

De hecho, la depuración en Flash no es tan avanzada como las posibilidades en PHP, pero todavía hace eltrabajo.

Page 377: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 377/467

377

En este punto, usted ha visto cómo Flash se puede utilizar para depurar una aplicación y cómo PHP puede serusado para la misma tarea. Ahora mira algunas opciones de terceros y las bibliotecas para que este proceso seaaún más fácil.La mayoría de los datos que se pasa de ida y vuelta en Flash es hecho utilizando las llamadas remotas, tambiénconocido como Remoting o Flash Remoting. Este método de intercambio de datos se ha vuelto bastantepopular, pero no se presta a que se está depurando o visto. Parte de esto es debido al hecho de un objeto esautónomo y también el modo Flash interactúa con un origen remoto.

Utilizando una herramienta de terceros llamado Charles o Charles Web Debugging Proxy, que se puededescargar desde http://xk72.com/charles/, hace que sea muy fácil de ver estos datos a medida que pasaalrededor. Carlos no es freeware, pero ofrece una demostración completa. En el momento de escribir estedocumento, una licencia es de $50. Para mí, vale la pena.

Figuras 14.4 y 14.5 muestran datos remotos y cómo se ve a Carlos.

FIGURA 14.4Esta es la solicitud que se envía al servicio remoto.

Page 378: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 378/467

378

FIGURA 14.5Esta es la interfaz de Charles normalizado en la que una respuesta XML de un sistema remoto.

Otra gran herramienta es un plug-in para el navegador web Firefox llamada LiveHTTPHeaders que vigila eltráfico de red. La desventaja parcial a esta aplicación es que sólo los relojes de tráfico del explorador. Si estáprobando o la depuración de la aplicación a nivel local no va a ver las llamadas.

Más información acerca de LiveHTTPHeaders se puede encontrar en http://livehttpheaders.mozdev.org/.

Uso alternativo de Trace 

El último tema en este capítulo será la construcción de una nueva traza que permite a los colores, así como

otras características.Este trazado alternativo se construye como un stand-alone SWF y puede ser llamado por cualquier otro SWF enel mismo dominio (local es su equipo). El código de seguimiento de esta alternativa se basa en la claseLocalConnection, que es una clase de pre-compilados que permite a varias películas en las comunicaciones decompartir el tiempo que están en el mismo dominio. La primera parte del código es responsable de construir elobjeto de conexión local y el registro de la función de devolución de llamada.

var receivingLC:LocalConnection = new LocalConnection();receivingLC.client = this;

Page 379: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 379/467

379

function debug(str:String, level:String):void{var debugLevel:String =((typeof(level) == „undefined‟) ? „NORMAL‟ : level);var color:String = null;

switch(debugLevel){

case „NORMAL‟:color = „#000000‟;break;case „ERROR‟:color = „#E60000‟;break;case „NOTE‟:color = „#77C0FD‟;break;case „WARNING‟:color = „#FBF400‟;break;case „RESPONSE‟:

color = „#27C201‟;break;case „REGISTER‟:color = „#FC8AFF‟;break;case „CLASS‟:color = „#FD779F‟;break;case „ATTENTION‟:color = „#FF6600‟;break;case „URGENT‟:color = „#FF0000‟;break;

case „STATUS‟:color = „#CCFF00‟;break;}

if(color == null){color = „#000000‟;}

debugTxt.htmlText += (“<font color=\”” + color + “\”>” + str +“</font>” + “\n”);

var scrollPos:uint = debugTxt.verticalScrollPositionvar maxScroll:uint = debugTxt.maxVerticalScrollPosition;if(scrollPos + 5 > maxScroll){debugTxt.verticalScrollPosition = maxScroll;//debugTxt.scroll = max_scroll;}

};

Page 380: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 380/467

380

Después de la devolución de llamada y el objeto de conexión local están construidas, es el momento parainiciar la conexión. Esto se hace mediante una llamada al método connect() de la instancia local objeto deconexión.

receivingLC.connect(“remoteDebug”);

El resto del código es exclusivamente para la visualización de la ventana de depuración y no es necesario para

los propósitos de la funcionalidad.

function clearHandler(e:MouseEvent):void{debugTxt.htmlText = “”;}

clearBtn.addEventListener(MouseEvent.CLICK, clearHandler);

// Resize Codestage.scaleMode = StageScaleMode.NO_SCALE;stage.align = StageAlign.TOP_LEFT;stage.addEventListener(Event.RESIZE, function():void

{debugTxt.width = stage.stageWidth - 25;debugTxt.height = stage.stageHeight - 75;clearBtn.x = (stage.stageWidth - 12) - clearBtn.width;clearBtn.y = (stage.stageHeight - 12) - clearBtn.height;});

Eso es todo el código necesario para crear una traza alternativa, y usarlo requiere muy poco código. La llamadaal seguimiento personalizado parece un poco a esto. El método send() requiere cuatro argumentos, que son lossiguientes. El primero es el objeto de conexión local, el segundo es el método al que llamar, la tercera es lacadena de rastrear, y el cuarto es el nivel de error.

var sendingLC:LocalConnection = new LocalConnection();

sendingLC.send(“remoteDebug”, “debug”, “Object Not Found!”,“ERROR”);

Resumen 

Ahora debe tener un conocimiento bastante sólido de las herramientas y prácticas disponibles para depurarcorrectamente sus aplicaciones en Flash y PHP. Estas no son las únicas herramientas y prácticas disponiblespara depurar una aplicación. Los desarrolladores están subiendo con mejores maneras todo el tiempo, en parteporque es una tarea importante y también porque es el más temido en el ciclo de desarrollo.

En este capítulo usted aprendió a crear sus propios errores personalizados y cómo trabajar con los tipos de

error estándar que se encuentran en PHP. También ha aprendido a depurar el código dentro de Flash utilizandoel panel de salida y las instrucciones de seguimiento.

La última sección del capítulo se centró en el desarrollo de un controlador personalizado de depuración enActionScript, que muestra los mensajes en un código de color scrollbox para identificar mejor sus mensajes dedepuración.

Page 381: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 381/467

381

Parte V

Mantenimiento del

Servidor, Aplicación, y dela base de datos

Page 382: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 382/467

382

Capitulo 15

Mantenimiento de una aplicación 

El proceso de mantenimiento de una aplicación se logra simplemente siguiendo algunas reglas. Estas normas sehan establecido a través del tiempo como las aplicaciones siguen desarrollándose a diario.

Este capítulo se centra en estas reglas individuales. Al final del capítulo, usted comprenderá no sólo la manerade seguir, pero también cómo pueden hacer su trabajo más fácil.

La última sección se centra en trabajar en un entorno de equipo, utilizando la nota común que, comentando, ycontrol de versiones desde la perspectiva de un único promotor. Incluso después de que se escribe unaaplicación, no es raro que volver y hacer cambios. Si este plan durante el proceso de la escritura original y

seguir algunos pasos simples, hace que las actualizaciones mucho más fácil de administrar y ejecutar avanzar.

A menudo, un intento de reescribir se hace en lugar de corregir algunos problemas leves. Esto generalmente sedebe a la mala planificación en el inicio y los resultados en el tiempo de desarrollo adicional que no siemprepueden explicarse.

Comentando código 

Código de comentar que es más importante como un proyecto sigue creciendo, o como los desarrolladoresadicionales se introducen en el proyecto. El proceso de comentar el código no es una parte necesaria de unaaplicación por escrito, pero es útil cuando se busca en un proyecto que ha estado en desarrollo durante algún

tiempo.

A menudo el estilo de los comentarios es bien definido en un perfil del proyecto o establecidos por el líder delproyecto.

Comentando incluso puede ser beneficioso al escribir el código que usted posee, ya que pueden dejar notas avolver a un pedazo de código en una fecha posterior. Esto es especialmente importante si alguna vez laintención de distribuir el código como un proyecto de código abierto o vender la aplicación.

Comentando el código también hace que sea más fácil escribir o generar la documentación con la modificaciónadicional escaso o nulo que necesita el desarrollador.

Entender los estilos para comentar código 

Cada lenguaje tiene su propio estilo de comentar código. Por ejemplo, una forma muy común de loscomentarios es visto en los documentos HTML, que se parece a este:

<!-- This is an HTML comment -->

Page 383: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 383/467

383

HTML sólo ofrece un estilo de comentar, en otros lenguajes de scripting completa tienen distintos estilos decomentar. Éstos son algunos ejemplos de los estilos de comentarios más comunes que se encuentran en Flash,PHP y MySQL.

Bloque de comentarios

PHP, ActionScript (Flash), y MySQL permite comentarios en bloque.

/*** This is a block style comment,* which can have any number of lines.**/

Comentarios en línea en MySQL 

MySQL permite comentarios en línea usando un -- al comienzo de una línea.

-- This is a MySQL comment; the database will not read this.

Comentarios en lineas

También puede usar un comentario en línea para extraer una determinada sección de código. Esto le permiteprobar rápidamente una sección de código y localizar errores más rápidamente. Aquí hay un comentario enlínea que elimina la cláusula de la sección WHERE de una consulta SQL.

SELECT name, status FROM users/* WHERE id=1004 ANDstatus=‟active‟*/;

Los resultados de un comentario anterior en la consulta se mostrarán todos los usuarios en la base de datos

porque la parte condicional se ha comentado.

NOTA Línea con formato incorrecto y comentarios en línea puede crear en ocasiones difíciles de rastrear loserrores a menos que su editor de código se utiliza color resaltado de sintaxis.

Comentarios del compilador

Algunos lenguajes de desarrollo y aplicaciones use los comentarios del compilador. Estos comentariosespecializados de decirle a un compilador de aplicaciones de cómo manejar ciertos tipos de datos. Estoscomentarios no deben ser removidos manualmente a menos que la intención de eliminar esa funcionalidad.

Comentarios en XML

Algunas de las diversas aplicaciones que se han desarrollado en anteriores capítulos de acuerdo con XML. Esimportante darse cuenta de que XML puede actuar de una forma desconocida cuando los comentarios sonutilizados indebidamente.

Esto sólo se convierte en un problema cuando un -- se utiliza dentro de un comentario como el siguiente:

<!-- Person, contains all info -- globally used --><person>

Page 384: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 384/467

384

<name>Alex</name><age>27</age><gender>Male</gender></person>

Como puede ver, la -- imita la etiqueta de cierre y confundir al analizador XML hasta el punto donde se creeque el XML está mal formado y en algunos casos raros no lo cargará.

Comentarios en Apache

El uso de comentarios en el Apache se limita generalmente a los archivos .htaccess para determinar laconfiguración del sitio.Es importante tener en cuenta que los comentarios en los archivos de Apache puede causar problemas derenderizado. Si por alguna razón una directiva no está funcionando correctamente, vea los comentarios comoel primer culpable de la cuestión.

Aquí hay un ejemplo de un comentario en un archivo .htaccess de.

# Force PHP to render .html files

AddType application/x-httpd-php .html .htm

Mezcla de comentarios

Se pueden mezclar varios estilos de comentarios cuando sea necesario. Esto es común a la hora de explicar unasección de código, como una función o definición del método. Como se puede ver, un comentario de bloque seutiliza para describir la función y un comentario de línea explica el código de la función.

/*

@num1: first number@num2: second number

@return: sum of two arguments@author: developer‟s name@description: static function that multiplies two numbers

*/static function multiplyBy(num1:Number, num2:Number):Number{// return the sum of num1 & num2return (num1 * num2);}

Comentar correctamente el código puede tener ventajas evidentes. Más editores de código populares ofrecencaracterísticas que se pueden ocultar o colapso comentarios por lo que sólo están en el camino cuando se

quiere que sean.

Es posible incluso encontrar algunos editores que la sintaxis de comentarios sea resaltado. Algunos editoresprofesionales utilizan la información para crear archivos de ayuda en línea llamado sugerencias de código (verfigura 15.1).

Estas sugerencias son las cajas en línea de código que aparecen a medida que comienza a escribir. Ellosproporcionan los elementos disponibles posibles basadas en el código introducido hasta el momento.

Page 385: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 385/467

385

Un editor de ActionScript más avanzado, como FDT por Powerflasher, tiene la capacidad de aprender el códigoy muestra sus comentarios personalizados en su versión de sugerencias para el código.

FIGURA 15.1Ejemplo de una pista de código muestra en Flash CS3 para las propiedades de MovieClip

Eliminar comentarios y depurar ayuda 

Los comentarios se quitan a menudo debido al tamaño del archivo, que puede ser una preocupación válida enun programa de gran tamaño. Sin embargo, la mayoría de las veces, los comentarios se eliminan automáticamente cuando una aplicación secompila o construiye.

Dependiendo de la aplicación que utilice, instrucciones de depuración también debe ser eliminado. Porejemplo, el IDE nativo de Flash que se envía con CS3 tiene una opción de configuración en el cuadro de diálogoConfiguración de publicación. Si selecciona Omitir acciones de seguimiento, que se encuentra en la ficha Flashde la Configuración de publicación, seguimiento de las llamadas se quitan de la aplicación.

NOTA Si las acciones Omitir Trace está habilitado durante la depuración no podrá ver ningún seguimiento delas llamadas que aparece en la ventana de salida.

Page 386: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 386/467

386

Si decide utilizar una clase personalizada o depuración de un paquete, entonces puede utilizar Find (Buscar) yReplace (reemplazar) para eliminar esas instancias. Sin embargo, tenga cuidado de no borrar accidentalmentela aplicación de código específico.

Como puede ver, los comentarios pueden ser beneficiosa desde el punto de vista de la legibilidad del código.También sabemos ahora que comentar correctamente el código tiene ventajas adicionales para utilizar algunosde los editores de código disponibles hoy en día más sólida.

Administrar un cambio de registro 

Un cambios de los registros es un bloque de formato o entradas de registro colocado en un archivopersonalizado. Estos archivos suelen tener los cambios de nombre o actualizaciones. Esta sección se utiliza paratomar notas sobre las características de una aplicación o para comunicar los avances con el resto de un equipode desarrollo.

Una de las ventajas de utilizar un ChangeLog es que algunas aplicaciones pueden leer este formato de registroy automáticamente, como se muestra en la Figura 15.2. Esto, por supuesto, depende de la aplicación que esté

utilizando, pero puede ser muy beneficioso como una aplicación empieza a crecer.

Seguimiento de errores 

Hay muchos desarrolladores que utilizan este formato para realizar un seguimiento de cambios dinámicoserrores. Este es un proceso que muchas aplicaciones comerciales y gratuitos, tales como Jira y Bugzilla, seutiliza para crear una alternativa más gráfica para el texto básico de archivo.

Uso de seguimiento de errores con los equipos (teams)

El seguimiento de errores es especialmente importante cuando se trata de equipos. Por ejemplo, muchas de

las tecnologías de código abierto compuesto por desarrolladores de todo el mundo. Imagínese cómo seríatedioso para rastrear errores en e-mails o llamadas telefónicas a través de todos estos desarrolladores. Aquí esdonde el seguimiento de errores es especialmente importante. Eso no significa que un único promotor nopuede beneficiarse de un mismo sistema.

Page 387: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 387/467

387

FIGURA 15.2Aquí hay una página web que muestra un ChangeLog que se generan de forma dinámica.

Usos adicionales 

Un ChangeLog no se limita a unas pocas líneas de texto. Siendo realistas, como se puede ver, puede contenerlas correcciones de errores, las notas a otros desarrolladores, y la información sobre un elemento específico.Por ejemplo, si usted decide usar un error de seguimiento de la aplicación, es una buena idea incluir el ID delerror en la entrada de cambios o dejar que la aplicación para el seguimiento de manejar este.

Correctamente la documentación de los identificadores siguientes hace más fácil el seguimiento de un errormás tarde, durante el desarrollo de aplicaciones, o si regresa a un proyecto una vez se haya completado.

Creación dinámica de cambios 

Aplicaciones de control de versión, que se discuten en la sección siguiente, incluso tienen la capacidad degenerar automáticamente una lista de cambios. La ventaja de este enfoque es que el desarrollador no tieneque gastar el tiempo de edición del proyecto o la actualización del registro. Sin embargo, una desventaja deesto es el archivo se vuelve menos personalizado y, a veces hace más difícil de comprender plenamente.

Page 388: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 388/467

388

Administración de múltiples versiones 

El control de versiones es la gestión de múltiples versiones de código o archivos de una aplicación. Estasaplicaciones son utilizados en los equipos de desarrollo, pero puede ser fácilmente utilizado por un únicopromotor.

La ventaja de utilizar el control de versiones es el seguimiento y el código de seguridad que se almacena comoa desarrollar o mantener una aplicación. Este nivel adicional de seguridad en un proyecto puede permitir que eldesarrollador de experimentar con una idea y todavía tienen la capacidad de volver a una versión estable.

También permite a los desarrolladores mantener el código consistente a través de plataformas de desarrollo.Esta característica es un uso muy común para los desarrolladores que viajan solas y el código en un sistemamóvil. Simplemente conecte al servidor de desarrollo, descargar la última versión, y están dispuestos a ir.Cuando regresan, una simple actualización que se haga en el mismo servidor y la aplicación está de vuelta ensincronía.

Aplicación de control de versiones 

Existen varias aplicaciones de control de versión disponible para sus entornos de desarrollo de hoy en día.Seleccionar las aplicaciones de control de versiones a utilizar es determinado por mirar a las características yrequisitos de su proceso de desarrollo.

El más común es la aplicación de control de versiones SVN (Subversion). Otra aplicación muy popular es CVS(Concurrent Versions System). Soporte para el control de versiones es a menudo construidos directamente enun editor de código, como el editor de código abierto Eclipse.

Apoyar el control de version de CS3 

Nuevo para Adobe Flash CS3 es la posibilidad de utilizar Version Cue directamente en Flash. Version Cue (véasela figura 15.3) es el control de Adobe versión de la aplicación que se encuentran dentro de sus otrasaplicaciones.

Uso de Version Cue en Flash CS3

Va a encontrar un elemento de menú " Check In..." en el menú Archivo. Este elemento se utiliza para abrir elcuadro de diálogo de gestión de Version Cue y es donde usted puede guardar versiones de su aplicación.

Usted encontrará una entrada de Check In... situado en el menú Archivo.

La ventaja de utilizar Version Cue es que los buques con CS3 y está integrado en la suite de aplicaciones.Esto es especialmente importante si usted es el desarrollo de los activos en una sola aplicación, el código enotro, y la gestión del sitio en un tercero.

Usted puede incluso permitir a su equipo para iniciar sesión en el servidor de Version Cue de forma remota yhacer cambios. Esto significa, por ejemplo, el desarrollador puede ser prácticamente en la misma oficina que elresto de su equipo.

Page 389: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 389/467

389

FIGURA 15.3Captura de pantalla de Version Cue, que se suministra con los programas de Creative Suite 3

Configurar el control de versiones El proceso de creación de control de versiones depende del sistema de su entorno de desarrollo de carreras.Una guía de instalación más completo se incluye, con la aplicación que usted decide utilizar. La instalaciónbásica que incluiría descomprimir el contenido de la solicitud de control de versiones, modificando el archivode configuración de Apache y alerta a la existencia de la aplicación.

Usar version de control

Normalmente, el proceso de utilización de control de versiones es integrado en su editor de código. Sinembargo, hay aplicaciones disponibles para el uso de control de versiones directamente dentro de su sistemaoperativo.

Dos gerentes de control de versiones para Windows y Mac OS X se muestran en la tabla 15.1.

TABLA 15.1

Gerentes de Control de la versión para Windows y Mac OS X Nombre URL OSTortoiseSVN http://tortoisesvn.tigris.org/  WindowsSCPlugin http://scplugin.tigris.org/  Mac OS X

Page 390: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 390/467

390

NOTA Para una configuración de desarrollo más seguro y final, lo mejor es instalar la aplicación de control deversiones en un equipo diferente.

Copia de seguridad de control de versiones 

Los sistemas de control más popular versión de oferta integrada de soluciones de copia de seguridad, peromuchas veces usted encontrará que la copia de seguridad de la aplicación que está escribiendo se incluyen losdatos de control de versiones.Normalmente, estos archivos se definen como ocultos y nunca se debería modificar manualmente si por algunarazón no se permite el acceso.

PRECAUCIÓN Edición de un control de versión de archivo de forma manual puede resultar en copias deseguridad de corrupción e incluso dañar la integridad del código de su aplicación.

Uso adicional de control de versión

El uso adicional de control de versiones es la posibilidad de publicar la estructura de archivos a la Web paracompartir.

Esto no es siempre el resultado deseado, pero puede encontrar compañías como Adobe, Google y Microsoftque este enfoque.

Uso de los cortes de control de versiones abajo en la cantidad de trabajo adicional necesario publicar el códigofuente de la aplicación y permite a otros para mantener actualizado el código con sólo conectarlos a su sistemade control de versiones de forma remota.

Uso de librerias personalizadas 

Colecciones personalizadas pueden hacer que el código de fácil mantenimiento. En antiguas versiones deActionScript (antes de AS3), los paquetes en realidad no existía, así que era difícil de mantener adecuadamentey compartir la fuente de una aplicación de código.

ActionScript 3 introdujo una práctica de codificación más común que se llama paquetes. Esto ofrece laposibilidad de crear una instancia de la clase y compartirlo entre todos los proyectos contenidos en una solacarpeta o archivo.

CROSS--REF Una mirada más a fondo de bibliotecas personalizadas se pueden encontrar en el capítulo 9.

Uso de librerias personalizadas con el control de versión 

Si se crea una instalación independiente para su sistema de control de versiones puede usar la misma máquina

para almacenar bibliotecas personalizadas y luego incluirlos de forma remota en su archivo de Flash (s).

La ventaja de este enfoque es la capacidad de actualizar un paquete y todas las aplicaciones que tienen queutilizar el paquete de actualización, así.

Page 391: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 391/467

391

Publicar un SWC 

Usted puede crear un SWC en Flash, que le permite distribuir los componentes y las clases de ActionScript.Para publicar un SWC, seleccione la opción de exportación de SWC en el cuadro de diálogo Configuración depublicación.

El archivo contiene un clip de SWC compilado y los archivos de clases de ActionScript que lo apoyan.

NOTA Es una buena idea de documentar los cambios de clase y el paquete ya que las aplicaciones existentespueden dejar de funcionar.

El proceso de usar las bibliotecas personalizadas no puede parecer un aspecto muy importante de desarrollode aplicaciones. Sin embargo, una vez que comiencen a desarrollar aplicaciones de mayor escala quecompartan atributos comunes que usted se dará cuenta de cuánto se ahorra tiempo al no tener que reescribirel código.

Resumen 

En este capítulo usted aprendió a comentar el código y por qué se hace para una mejor aplicación en general.También ha aprendido este aspecto es especialmente importante al desarrollar una aplicación con los demás.

Tienes una introducción sobre cómo incorporar un Registro de cambios en su desarrollo y cómo algunasaplicaciones de terceros pueden utilizar esta información para mostrar de seguimiento de fallos más detallado.

En la última sección aprendió a utilizar el control de versiones y se introdujeron a Version Cue, que es unanueva adición a Flash CS3.

Page 392: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 392/467

392

Capitulo 16

Mantenimiento de un servidor escalables y más eficiente 

Este capítulo se centra en las mejores prácticas para el mantenimiento de su servidor de tiempo que seintroducen técnicas de mejora más avanzados de aplicaciones como el almacenamiento en caché, bases dedatos eficiente, copias de seguridad, y código escalable.

Después de aprender y aplicar esta información a sus aplicaciones, pronto se dará cuenta de que funcione más

eficientemente. Si sigues estos pasos en mente al inicio del proceso de desarrollo de aplicaciones, usted notendrá que volver a trabajar después de la aplicación.

Ejecutar un servidor actualizado 

Uno de los métodos más simples, pero ignorado por el mantenimiento de un servidor más eficaz es mantenerlas bibliotecas y el servidor central el código del lado actualizado.A menudo estos programas que son responsables de ejecutar las aplicaciones se actualizan a medida que losdesarrolladores siguen encontrando maneras de acelerar hacia arriba o hacerlas más eficientes. Este procesode actualización no se refiere a su código personal, pero las bibliotecas y los servicios depende de su código.

La actualización de su servidor, no sólo ofrece mejoras de rendimiento, pero también puede asegurarse de quesu servidor Web es más seguro. PHP, por ejemplo, se actualiza con frecuencia como las mejoras más y seintroducen cambios de codificación. Esto es debido a nuevos problemas de seguridad descubiertos, lo queresulta en una mejor aplicación en general.

Antes de actualizar su sistema, asegúrese de sus aplicaciones serán compatibles.Por ejemplo, las aplicaciones desarrolladas en PHP 4 no siempre son compatibles con PHP 5. Usted encontraráalgunos casos en que otra pieza de software en el servidor puede requerir una versión específica. Un buenejemplo de esto es que los clientes de correo, como una versión específica de la multitud (una popularaplicación de correo electrónico) requiere PHP 4 y no simplemente en una versión más reciente.

Esto no significa que no pueda actualizar, sino todo lo contrario en realidad. Sólo hace falta un pequeño trabajode investigación y antes de instalar las nuevas versiones.

Uso de actuaizaciones automáticas 

Como ustedes saben, la instalación de nuevas versiones de las aplicaciones en su servidor no es siempre lamejor opción.Usted necesita ser más consciente de esto con los actualizadores automáticos. Por ejemplo, usted encontrará

Page 393: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 393/467

393

las actualizaciones automáticas son más propensos a ofrecer marca una nueva funcionalidad, pero al mismotiempo que también ofrecen el código que no se ha probado tan a fondo.Usted encontrará que no todas las aplicaciones de tu lado del servidor ofrecen actualizaciones automáticas,pero lo mejor es comprobar de antemano y asegurarse de que estas opciones están desactivadas.

Algunos proveedores de hosting realizar actualizaciones periódicas de seguridad, a veces sin su permiso, oincluso que le informa de la actualización. Esta es una de las muchas razones que prefiero correr un auto-

gestionado, servidor dedicado en lugar de pagar un poco menos y dejar que el proveedor de hosting manejar laseguridad y la versión actualizaciones.

Plataforma Zend

La excepción a no instalar las actualizaciones automáticas es cuando se utiliza la plataforma Zend. Esteconjunto de herramientas asegura que su sistema esté correctamente al día con todas las últimas mejoras deseguridad, mientras que asegurarse de que su secuencia de comandos existentes seguirán funcionandocorrectamente.

El costo de Zend Platform puede causar un dilema para las organizaciones más pequeñas y

desarrolladores individuales, pero el tiempo total guardado en el largo plazo es una razón válida paracomprarlo.

Trabajar con Development Installs 

Instalación de nuevas aplicaciones o bibliotecas no es una práctica bien cuando se trabaja con un servidor envivo.Sin embargo, esto no significa que no puede experimentar con el nuevo código de la instalación de un sistemade desarrollo.

Usted puede construir o adquirir su alojamiento en un nuevo servidor para obtener una configuración de

sistema de desarrollo, pero esto no puede ser la solución más eficaz, especialmente si usted es un hombre deuna tienda.

Construir otra version de Apache en el mismo sistema  

La alternativa es instalar una versión independiente de Apache en el servidor en vivo. Por defecto, Apache sólopuede tener una versión que se ejecuta porque cada versión que trata de compartir el mismo puerto delservidor.

Sin embargo, puede modificar esta configuración modificando el archivo httpd.conf. Usted encontrará estearchivo de configuración en el directorio conf/ de su nueva instalación de Apache.

Abrir este archivo en su editor de texto favorito o vi, si está ejecutando un servidor remoto, y modificar lassiguientes categorías:

# Change this to Listen on specific IP addresses as shown belowto# prevent Apache from glomming onto all bound IP addresses(0.0.0.0)##Listen 12.34.56.78:80

Page 394: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 394/467

394

Listen 80 

La mayor parte de ese bloque de código es un comentario que explica lo que este parámetro es responsable.Usted puede modificar el puerto en el que su sistema de desarrollo se puede encontrar al cambiar este númeroa algo similar a lo siguiente:

...

##Listen 12.34.56.78:80Listen 9004

Después de guardar y reiniciar Apache, puede acceder a esta nueva instalación, visite http://localhost:9004.

NOTA Aplicaciones en su equipo utilizan diferentes puertos, así que es mejor para comprobar el puerto antesde elegir uno nuevo.

Trabajar con tecnología de punta 

Cuando tenga el nuevo sistema instalado, puede empezar a experimentar con sangrado nueva tecnología de

punta sin dañar la configuración de su vida. Sangrado software de borde como se muestra en la figura 16.1 esrecién lanzado versiones que no se han probado tanto como versiones estables sería. Esto le permite trabajarcon los más avanzados y nuevas características, pero también significa que podrían llegar a los errores ycuestiones de desarrollo utilizando estas versiones. A medida que continúe para probar esta nueva tecnologíase puede determinar si se debe utilizar en un entorno viven y se mueven por encima de cuando esté listo.

Dependencias 

Muchas bibliotecas y herramientas que utilizará en su servidor Web dependen de otras bibliotecas. Porejemplo, la librería GD de PHP para la manipulación de imágenes requiere la biblioteca libjpeg con el fin deeditar las imágenes correctamente.

Al actualizar el servidor, usted necesita estar consciente de estas dependencias, porque la actualización de unaparte puede dar lugar en las instalaciones rotas o incompletas. Frecuentemente usted encontrará informaciónsobre el sitio del desarrollador de actualización en materia de información específica o se puede consultarphp.net en la sección de comentarios. Allí usted podrá encontrar a otros desarrolladores para informar de susresultados en diferentes situaciones de desarrollo.

Page 395: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 395/467

395

FIGURA 16.1Un ejemplo de sangrado borde emisiones de php.net

Almacenamiento en cache y optimización 

Mantener el servidor hasta la fecha es sólo una manera de ejecutar un servidor eficiente. De hecho, lasprácticas, hay mucho más importante para seguir en primer lugar. Una de estas prácticas más importante es laoptimización de su código de servidor y el sistema que se ejecute. No sólo hay que seguir las mejores prácticasen el desarrollo de sus aplicaciones, también debe mantener su servidor que se optimiza en función de susnecesidades específicas.

Optimización de PHP 

Tras los pasos para la optimización de su instalación de PHP que permite llevar a cabo una mejor general delservidor. Estas medidas de optimización es bastante fácil de seguir y fácilmente se puede repetir como ustedtrabaja en varios servidores.

Page 396: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 396/467

396

Procesador versus RAM

A diferencia de la mayoría de aplicaciones que requieren más memoria, PHP se basan más en el procesador ensu servidor. Esto significa que un sistema de doble-procesador es más eficiente que un procesador con másmemoria. Eso no significa que la memoria no es importante, porque algunas partes de PHP utilizan unacantidad considerable de la memoria.

El búfer de salida y la base de datos de plug-ins requieren más memoria que se accede a ellos, ya que tienden aalmacenar la mayoría de la información para un acceso más rápido la próxima vez. Esto significa que la primerasolicitud es lento, pero las siguientes solicitudes que son más rápidas si tiene suficiente memoria para manejaradecuadamente las solicitudes para ser almacenados.

Esto no significa que usted debe salir corriendo y de inmediato adquirir más memoria o más procesadores,porque hay maneras de optimizar su servidor sin gastar dinero en software o hardware adicional.

Diez consejos para optimizar el código 

La siguiente es una lista de diez consejos a seguir que producir un mejor rendimiento en su código, así comolimitar la tensión en el servidor Web. Que aparecen aquí en orden de menor importancia a la más importante.

1. Limite la cantidad de control de errores de sus aplicaciones de manejar. Menos manipulación deerror significa un mejor rendimiento general, a menos que están experimentando ya los cuellos debotella. Entonces, el manejo de errores puede ser importante.2. Usar la funcion included; no crear uno propio. Siempre que sea posible, trate de usar las funcionesprevistas en PHP, ya que están precompilados y se han optimizado para funcionar más eficientemente.También han sido probados una y otra vez para asegurarse de que el trabaja.3. Utilice una selecta declaración en lugar de múltiples if/else. No sólo se utiliza un código más limpio,

seleccione producir, sino que también resultará en un mejor rendimiento cuando el PHP se ejecuta laparte de su código.4. Evitar mitos como el eco es más rápido que el de impresión. Como con la mayoría de lenguajes deprogramación, PHP tiene varios mitos, como todo el código debe estar en una línea. Uno de los mitosmás comunes es que el eco es más rápido que el de impresión al enviar el código para el búfer de salidao de la pantalla. Esto simplemente no es cierto. Puede utilizar cualquiera de declaración. Yopersonalmente prefiero de impresión, ya que se está imprimiendo a la pantalla o buffer.5. Conexiones de base de datos Cerrar el uso de funciones como mysql_close (para MySQL) cuando nose utiliza. Conexiones de base de datos final, cuando la secuencia de comandos completa, pero esto nosiempre es la mejor manera. Por ejemplo, si usted tiene un programa que realiza llamadas de base dedatos y modifica estos resultados, la conexión de bases de datos se mantiene activa (a menos que locierre) todo el tiempo que su guión está trabajando en el conjunto de resultados.6. Utilice unset () para eliminar las variables cuando ya no se utiliza. Eliminación de variables, engrandes series y los objetos cuando ya no esté en uso, se traduce en un mejor rendimiento general.7. Trate de limitar las expresiones regulares y el uso de funciones de cadena estándar siempre que seaposible.Las expresiones regulares, mientras que más robusto, puede consumir una considerable cantidad dememoria.Frecuentemente usted encontrará una función de cadena sencilla (por ejemplo, strstr) produce elmismo resultado y con un aumento de rendimiento significativo en la mayoría de los casos.

Page 397: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 397/467

397

8. Sea inteligente sobre el uso de la clase. Las tareas simples sufrirán de programación orientada aobjetos innecesarios. Va a encontrar más simples tareas consumen más memoria que las prácticasdesarrolladas con OOP. Es importante no sólo saber que existen técnicas, sino también cuando se debeutilizar.9. Controla tus aplicaciones para determinar los cuellos de botella. Ralentización en el rendimiento delcódigo se remonta a un lugar específico, conocido como un cuello de botella. Piense en una botellareal, donde el cuello se hace más lento el flujo del líquido a medida que los grupos que pasar por la

parte superior estrecha de la botella. Lo mismo es cierto para el código como la mayoría de lasbibliotecas y los guiones tienen un punto en el que todos deben cumplir.Un cuello de botella en su aplicación pueden existir en el código, pero también podría ser en unallamada de base de datos o un archivo de interacción del sistema. La supervisión de su aplicación seexponen los problemas y le permitirá solucionar el problema de rendimiento.10. Caché de su código PHP, siempre que sea posible.

Después de optimizar el código, pero todavía necesitamos mejorar más, el caché puede ser una opción. Ustedpuede desarrollar una solución personalizada o utilizar un sistema existente, tales como memcached, que seexamina en la sección siguiente. Usted también puede almacenar en caché el script PHP adquirido precompilar,lo que acelera las solicitudes posteriores.

PHP por defecto compila las páginas de sus archivos .php cada vez que se solicitan. El almacenamiento encaché evita este almacenando el código precompilado. Esto es mucho más eficiente y significa un rendimientomás rápido.

Dichas recomendaciones no son las únicas maneras de optimizar el código, pero proporcionan una lista dedesaceleración comunes y mitos en el desarrollo de sus aplicaciones. Como usted puede ver, con pocasmodificaciones en el código y la atención a cómo el servidor Web se ocupa de sus secuencias de comandos,usted puede asegurar un mejor desempeño, manteniendo la funcionalidad final.

He visto algunas aplicaciones eliminar funciones cuando el programa comienza a expandirse, y esto es

simplemente el enfoque equivocado. Extracción de características de una aplicación lenta es similar a lanzarcantidades salvajes de nuevo hardware para resolver un problema de rendimiento.

Optimizar Zend

El optimizador de Zend es un producto que se utiliza para optimizar y la caché de su código, sino que tambiénproporciona un resultado seguro, ya que el código se compila y cifrado. El cifrado se realiza mediante laejecución de su código fuente a través de Zend, como se muestra en la Figura 16.2, que ofusca el códigoabierto.

Esta herramienta no es gratuita, pero a medida que continúe el desarrollo de aplicaciones más robustas, ustedaprenderá que el coste se ve compensado por el aumento en el rendimiento a alcanzar.

Page 398: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 398/467

398

FIGURA 16.2Zend Guard con un proyecto activo cargado

Zend Studio

Un servidor más optimizado se remonta al proceso de desarrollo de aplicaciones. Zend ofrece un estudio dedesarrollo que pueden perfilar y depurar el código, lo que le permite localizar los cuellos de botella antes deimplementar el código de.

El Zend Studio, como se muestra en la Figura 16.3, permite incluso la depuración remota, que le permiteprobar sus aplicaciones en el servidor de vivir al mismo tiempo ser capaces de controlar y depurar cuando seanecesario.

Usted puede encontrar más información acerca de estas herramientas en el sitio web de Zend enwww.zend.com/en/products/guard/optimizer/ y www.zend.com/en/products/studio/. 

Page 399: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 399/467

399

FIGURA 16.3El editor de código se encuentra en el Zend Studio IDE

Optimización de Apache 

El proceso de optimización de Apache está dividido en cuatro pedazos. Esto permite al desarrollador aconcentrarse en cada paso específico en lugar de obligarlos a modificar todos los aspectos del servidor. Enraros casos, sólo verá las actualizaciones de rendimiento mínimo, pero se dará cuenta más que la aplicación yla demanda continuará creciendo.

Hardware

El primer lugar de mirar al tratar de optimizar Apache es el hardware que puede correr. Por ejemplo, Apacheconsume una gran cantidad de memoria en el tiempo. Más memoria puede ser una ventaja aquí, porque serácapaz de mantener adecuadamente la propia.

Servidor dedicado

Page 400: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 400/467

400

Hacer seguro Apache se ejecuta en un servidor dedicado. Esta técnica incluye el desarrollo de instalar queusted aprendió en la sección anterior. Es importante entender el desarrollo de instalar la versión de Apacheque no consume muchos recursos, siendo un producto de un solo usuario.Es mejor dejar que Apache tiene todo el servidor para ejecutar más eficientemente. La empresa (grande)muchas veces las aplicaciones se ejecuta un servidor independiente para gestionar el tráfico web.

Archivos de configuración

Modificación de los archivos de configuración (*.conf) puede producir un aumento de rendimiento si se quitalas directivas que no están siendo utilizados. A medida que aprenda el diseño de configuración, puede eliminarlos comentarios, que hará más fácil mirar en el largo plazo.

Apache ofrece una serie de archivos de configuración de arranque, pero trate de evitar la versión de altorendimiento ya que en realidad se vuelve menos eficiente en el largo plazo. La razón es porque esta versiónexcesivamente optimiza Apache, que lo obliga a correr menos eficaz a menos que esté experimentando untráfico muy alto.

Registros y los errores

Siempre que sea posible tratar de limitar la cantidad de uso de registro. Usted puede desactivar el registrocompleto o limitar la cantidad de información que se escribe en los registros. Los errores son más difíciles derastrear debido a Apache no informar de estas cuestiones. En la mayoría de los casos, sin embargo, cuando unservidor está funcionando correctamente esto no es un problema.

Si decide habilitar el registro, asegúrese de editar los archivos en un equipo diferente, porque el proceso deapertura y análisis de estos archivos a veces muy grandes puede tener un impacto en el rendimiento.

Número maximos de clientes

Puede modificar la directiva MaxClients en el archivo de configuración httpd.conf para aumentar el

rendimiento, sino ser conscientes de que cualquier cliente intenta conectarse después de que el límite esalcanzado no podrá ver su sitio. En casos raros, esto puede no ser algo malo porque va a mantener elrendimiento para los usuarios existentes.

<IfModule prefork.c>StartServers 8MinSpareServers 5MaxSpareServers 20MaxClients 150MaxRequestsPerChild 1000</IfModule>

NOTA La directiva MaxClients sólo se aplica cuando el módulo prefork está configurado y habilitado.

Hay otras maneras de optimizar Apache, pero corto de agregar hardware adicional y el costo para suorganización, esta lista tendrá su servidor en funcionamiento mucho más eficiente.

Optimización de MySQL 

Ahora que ha optimizado PHP y el servidor Web Apache, el lugar más lógico para optimizar es MySQL. Ustedpuede optimizar MySQL después de ser instalado, pero hay algunas buenas prácticas a tener en cuenta antesde la instalación, cuando sea posible.

Page 401: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 401/467

401

Mejor rendimiento de la instalación 

Elegir el mejor compilador para el sistema cuando se genera normalmente MySQL puede conseguirle 10 a 30por ciento de mejor rendimiento. Compilar MySQL con sólo los conjuntos de caracteres y las opciones que

vayan a utilizar. A menudo, una evaluación rápida de su uso previsto puede resultar en un mejor rendimiento,porque a simple vista se puede determinar qué características que usted usa y no va a usar.

La documentación de MySQL tiene varios consejos sobre la mejora del rendimiento, y como seguir aplicandomás de ellos tendrá que ejecutar el binario compilado utilizando la prueba de referencia de MySQL pararealmente determinar si las modificaciones se traducirá en un mejor rendimiento.

MySQL es una aplicación de largo camino. Esto significa que usted desea un mejor rendimiento general y nosólo para acciones muy rápido. Por ejemplo, suponga que tiene una tabla con 100.000 líneas, que no es pococomún en aplicaciones grandes. Realización de una búsqueda en esta tabla llevará algún tiempo, por lo queMySQL en sintonía con un acceso rápido en la mente realmente será el cuello de botella. Es mejor disponer deMySQL en sintonía con los procesos a largo plazo en mente para trabajar con datos en estos volúmenes.

Registro de consultas lentas 

Una de las mejores maneras de localizar los cuellos de botella en su base de datos MySQL es habilitar elregistro cuando sea necesario. Es importante entender que registros en sí mismo es un asesino en elrendimiento, pero a veces es necesario fijar otras cuestiones.

MySQL registra las consultas de lento a un archivo de registro. Si la cola de este archivo, que se utiliza paravigilar activamente el flujo, se le informó de las consultas lentas. También puede dejar que este registro derelleno y luego pruebe más tarde, dependiendo de qué tan activo es su sistema.

tail -f /var/lib/mysql/192-168-1-107-slow.log

El camino de la lentitud de archivo de registro de consultas será diferente dependiendo de su entorno.

NOTA Windows no ofrece una "cola" de comandos por defecto, pero puede instalar el servidor de lasherramientas disponibles en Microsoft.

NOTA Es posible que necesite para que "el registro de consultas lentas" en los archivos de configuración deMySQL.

Comprobación de tablas 

Otra manera de asegurar una base de datos se está ejecutando correctamente es para controlar la salud demesa, al emitir el comando siguiente en el símbolo del sistema. Table_name Reemplazar con el nombre real dela tabla que desea consultar.

CHECK TABLE table_name

Por ejemplo:

mysql> check table poll;

Page 402: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 402/467

402

+-------------+---------+---------------+--------------+| Table | Op | Msg_type | Msg_text |+-------------+---------+---------------+--------------+| book.poll | check | status | OK |+-------------+---------+---------------+--------------+1 row in set (0.00 sec)

Limitar las opciones de inicio 

Otra forma de obtener un mejor rendimiento de MySQL es limitar las opciones que se cargan cuando se inicia.Los buques de MySQL con varias opciones para cada caso de uso, pero es seguro decir que no hará uso detodos ellos. Similar a Apache, si modifica los archivos de configuración de MySQL, usted notará un mejorrendimiento.

Herramientas adicionales

El grupo de desarrollo de MySQL proporciona perfiles libre y herramientas de administración. Estasherramientas pueden ser descargadas desde el sitio web principal de MySQL y le ayudará a optimizar y

controlar sus bases de datos de forma remota. La ventaja de usar estas herramientas es no tener que controlartu servidor usando el comando herramientas de línea de base. Estos interfaz gráfica permite que lasherramientas le permiten entender lo que su servidor web está haciendo desde una perspectiva visual, comose muestra en la Figura 16.4.

FIGURA 16.4The MySQL Query Browser

Page 403: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 403/467

403

Almacenamiento en cache 

El tema de la caché es normalmente una vez que miró a experimentar cuellos de botella en una aplicación,pero se puede instalar las soluciones de almacenamiento en caché antes de que surja algún problema.

Trabajar con memcached

Uno de los cuellos de botella en los scripts de servidor es la base de datos. Usted tiene la habilidad de ajustar laconfiguración, lo que hizo en la sección anterior. A veces, esto sólo puede ir tan lejos como un sistema siguecreciendo.

La respuesta a este problema es instalar un software para ayudar a lidiar con la desaceleración de base dedatos, tales como memcached, que es una memoria de alto rendimiento objeto de sistema de almacenamiento

en caché. Este sistema está construido con la intención de acelerar las aplicaciones web dinámicas mediante laeliminación de la carga de base de datos, que se encuentra más a menudo como el sistema sigue creciendo.Puede descargar la última versión de memcached de danga.com en www.danga.com/memcached/. 

Instalar memcached en Linux 

La siguiente sección cubre el proceso de instalación de memcached en un servidor Web de Linux. Esta versiónrequiere de otra biblioteca que se instalen, que también estarán cubiertos.

Page 404: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 404/467

404

Instalación de libevent

Antes de instalar memcached, necesita instalar una biblioteca de la dependencia. Esta es la libevent, que puededescargarse en www.monkey.org/~provos/libevent/. 

Descomprimir el archivo y realizar los mismos pasos de instalación que ha visto en los ejemplos anteriores,cuando la instalación de aplicaciones.

$ tar -xvf libevent-1.3b.tar.gz

Cambie el directorio actual a la recién creada libevent para continuar el proceso de instalación.

$ cd libevent-1.3b

El último paso para la creación de la dependencia es configurar y construir el necesario instalar los archivos einstalar la biblioteca libevent.

$ ./configure$ make

$ make install

Instalación de memcached

Una vez que se instala libevent, puede continuar con la instalación de memcached.

$ gunzip memcached-x.x.x.tar.gz

Empieza por descomprimir el archivo que acaba de descargar.

$ tar -xvf memcached-x.x.x.tar

A continuación, cambiar el directorio actual para continuar la instalación.

$ cd memcached-x.x.x

El último paso del proceso de instalación es la de crear el script de instalación e instalar la aplicación.

$ ./configure$ make$ make install

Con memcached instalado, ponerlo en marcha y pasar a la extensión de PHP.

$ ./memcached -d -m 2048 -l 127.0.0.1 -p 11211

Descargar la extension memcached para PHP

En este punto, el siguiente paso es instalar la extensión de PHP que se utiliza para interactuar con memcached.

El primer paso es descargar memcached desde el repositorio de paquetes PECL.

$ wget http://pecl.php.net/get/memcache-x.x.x.tgz

Page 405: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 405/467

405

NOTA El número de versión se ha eliminado para asegurarse de que descarga la versión correcta, no por lafuerza una versión en el lector. Lo mejor es leer la documentación antes de descargar una versión de.

Instalación de la extensión memcached de PHP

Una vez que el archivo se descarga, descomprimir y desempaquetar el archivo de almacenamiento.

$ gzip -df memcache-x.x.x.tgz$ tar -xvf memcache-x.x.x.tar

Cambie al directorio que el archivo ha creado memcached.

$ cd memcache-x.x.x

Una llamada a phpize se hace para crear los archivos descomprimidos en una extensión de PHP compatibles.

$ phpize

El siguiente paso es configurar la instalación, hacer que los archivos de instalación, y finalmente instalar la

aplicación que utiliza los siguientes tres comandos:

$ ./configure$ make$ make install

Cuando la instalación esté completa, se necesita modificar el archivo php.ini y añadir la nueva extensión.

extension=memcache.so

Instalar memcached en Windows 

El primer paso para la instalación de memcached es descargar la versión binaria directamente dehttp://jehiah.cz/projects/memcached-win32/ 

1. Descomprimir los archivos binarios en el directorio deseado (e.g., c:\memcached).2. Instalar el servicio: ‘c:\memcached\memcached.exe -d instalar desde el símbolo del sistema.3. Inicie el servidor de Microsoft Management Console.4. Utilice el servidor, por defecto escuchando en el puerto 11211.

Ahora que ha instalado y arrancado memcached, el siguiente paso es configurar PHP. Comience por comprobarlas extensiones de directorio de PHP (C:\php\ext) para la extensión memcached (php_memcache.dll).

Si usted no ve la extensión de ese directorio se puede visitar el repositorio de PECL y descargarla desde allí:

http://pecl4win.php.net/ext.php/php_memcache.dll 

El siguiente paso es abrir el archivo php.ini y añadir la extensión memcached a la lista existente de lasextensiones.

extension=php_memcache.dll

El último paso es reiniciar Apache.

Page 406: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 406/467

406

Terminando la instalación para Linux y Windows 

El último paso es reiniciar PHP reiniciar Apache y ejecutar la función phpinfo para ver si memcached se haañadido correctamente.

Guardar los datos en la caché 

El poder de memcached no puede ser explicado en una sección pequeña, pero el siguiente es un buen resumende cómo cargar y guardar datos en el sistema de almacenamiento en caché.

El primer paso es crear una nueva instancia de la biblioteca de objetos Memcache .

$cache = new Memcache;

Después de crear el objeto, crear una nueva conexión. Para este ejemplo, todo lo que se está ejecutando en elmismo servidor, pero memcached realmente brilla cuando está instalado en varios servidores. El segundoargumento en el método connect es el número de puerto en el que se está ejecutando memcached.

$cache->connect(“localhost”, 11211);

Después de realizar la nueva conexión, puede crear algunos datos de la muestra, que probablemente sería unbloque de más avanzada de datos en una aplicación real.

$sampleData = array(“apples”, “oranges” “bananas”, “waffles”);

Después de crear los datos de la muestra, que en este ejemplo es una matriz básica, es necesario enviar losdatos al sistema de almacenamiento en caché. Esto se hace realizando una llamada al método conjunto de laclase Memcached.

El primer argumento es el nombre de la clave, que debe ser único, porque es la forma en que usted va a

recuperar esta información.

$cache->set(“uniquekey”, $sampleData, false, 86400);

El segundo argumento es la muestra de datos para almacenar en la memoria caché.

$cache->set(“uniquekey”, $sampleData, false, 86400);

Memcached tiene la capacidad de almacenar los datos en un formato comprimido, que es fijado por el tercerargumento.Esta opción es una bandera de verdadero o falso.

$cache->set(“uniquekey”, $sampleData, false, 86400);

El cuarto y último argumento determina el tiempo que los datos en caché debe permanecer vivo en segundos. En este ejemplo, los datos se va a quedar por 24 horas.

$cache->set(“uniquekey”, $sampleData, false, 86400);

NOTA La opción caducará de datos memcached no puede exceder de 2592000 (30 días).

$cache->set(“uniquekey”, $sampleData, false, 86400);

Page 407: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 407/467

407

Como puede ver, el código necesario para guardar los datos en la caché es bastante simple y hace que sea muyfácil de adaptar a las aplicaciones existentes.

Aquí está el script de ejemplo completo para guardar los datos en la caché.

<?php

$cache = new Memcache;$cache->connect(“localhost”, 11211); 

$sampleData = array(“apples”, “oranges” “bananas”, “waffles”);

$cache->set(“uniquekey”, $sampleData, false, 86400);

?>

Carga de datos en caché 

Una vez que almacenar información en la caché, el proceso para recuperar esa información es una cuestión de

llamar a uno de los métodos de la clase Memcache. Este método acepta un argumento, que es la clave queutilizó para guardar los datos en la caché.

$result = $memcache->get(“uniquekey”);

Eso es todo lo que hay que cargar la información almacenada en caché. Como puede ver, la carga de datos dela caché es muy similar al proceso general de trabajo con la base de datos. Esto significa que no es difícilintegrar sin problemas en su código.

Adminitrar servidores 

El sistema de almacenamiento en caché memcached se puede instalar en la misma máquina que el servidorWeb se ejecuta en.Sin embargo, funciona mejor si se añade a una serie de otras máquinas. Estas máquinas adicionales no tienenque estar en el mismo dominio, ubicación, o incluso ser todo lo que de gran alcance, desde una perspectiva dehardware.

Agregar nuevos servidores

Usted puede utilizar connect() para agregar nuevos servidores, pero hay una función mejor, addServer (), queno utiliza tantos recursos y sólo establece una conexión de red cuando sea necesario. Puedes añadir tantosservidores como desee, pero sólo se utilizará cuando sea requerido por el sistema.

Cerrar una conexión

El proceso de cierre de una conexión de servidor caché se realiza mediante una llamada al método close(). Estemétodo no cerrará conexiones persistentes. Estas conexiones se cierran sólo cuando el servidor Web se apagao se reinicia.

$cache = new Memcache;$cache->close();

Page 408: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 408/467

408

Eliminación de un elemento en la caché 

Artículos será automáticamente eliminado de la caché cuando su expiración, pero no es raro que a usted lodesea, puede eliminar los datos inmediatamente. El método delete () acepta dos argumentos. El primerargumento es la clave del partido y eliminar. El segundo argumento es un retraso de tiempo de espera cuandoel servicio de almacenamiento en caché a esperar esta cantidad de tiempo antes de extraer el valor.

Usted puede utilizar este método para acelerar el proceso de eliminación de ciertos elementos, estableciendoel tiempo de espera de unos minutos u horas, en el futuro.

Avanzando con memcached 

Ahora que tiene una comprensión de cómo instalar, modificar y utilizar memcached debería ver un aumentosustancial del rendimiento. La ventaja de trabajar con memcached se puede añadir más servidores que la cargase vuelve más exigente. Este sigue siendo eliminar el estrés de la base de datos y hace que sus aplicacionessean más sensibles.

La clase Memcached ofrece algunos otros métodos que pueden ser útiles, dependiendo de su uso previsto.

También puede utilizar este sistema de almacenamiento en caché memcached con múltiples lenguajes deprogramación, pero el foco en esta sección ha sido PHP 5.

Manejo de copias de seguridad (Backups) 

Copia de seguridad de sus datos no es sólo una las mejores prácticas para asegurar que sus datos se almacenande forma segura, copias de seguridad también se puede utilizar para limpiar periódicamente el sistema ylimitar los archivos que están disponibles en el sistema.A menudo usted tendrá muchos archivos Oldfilename.php o test.php a través de su servidor como prueba delos conceptos más código. El problema con estos archivos extra se ralentiza el directorio analiza y hace másdifícil gestionar los archivos que la material.

Administrar archivos 

Ejecutar un servidor más eficiente puede incluir la reducción de lo que está instalado en su servidor. En lasiguiente sección usted aprenderá cómo excluir archivos no utilizados para limitar la sobrecarga.

Administra archivos necesarios

Si limita el servidor para que sólo tenga el código de activa y salir de la experimentación de un servidor dedesarrollo o de la sección, usted se dará cuenta de un directorio de exploración y la búsqueda de aumentar elrendimiento.

Esto no significa que los archivos innecesarios que debe suprimirse. De hecho, eso es exactamente lo contrariode lo que debe hacer. La mejor práctica es crear copias de seguridad programado que buscan estos archivos osimplemente tener un sistema de copia de seguridad que respalda todo el servidor y lo mueve a una ubicaciónremota.

Límite de archivos largos

Page 409: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 409/467

409

Trate de limitar el uso de los archivos más grandes siempre que sea posible. Estos archivos tardan más tiempopara abrir y requieren más memoria cuando se abre. Si no se excluyen, sino que también ralentizar el procesode copia de seguridad, que obtiene una mirada más a fondo en la siguiente sección.

NOTA No almacene los datos de backup en la misma unidad, ya que tendrá un problema aún mayor de losrecursos.

Aministrar copias de seguridad 

Ejecutar copias de seguridad en su sistema asegurarse de no perder los archivos necesarios. Esto puede incluirlos archivos de usuario cargado o configuraciones de servidor básico.

Copias de seguridad temporizado 

Servidores web UNIX ofrecen un servicio llamado cron, que puede ser configurado para ejecutarse en unmomento determinado sobre la base de la información de configuración. Usted puede encontrar másinformación sobre el servicio cron consultando la página de manual para que.

man cron

Este es el formato de un archivo crontab, donde se repite la última línea para cada nuevo comando.

# +---------------- minute (0 - 59)# | +------------- hour (0 - 23)# | | +---------- day of month (1 - 31)# | | | +------- month (1 - 12)# | | | | +---- day of week (0 - 6) (Sunday=0 or 7)

# | | | | |* * * * * command to run

Todos los trabajos de cron se encuentran en el mismo archivo, que normalmente se cargan al escribir elsiguiente comando:

crontab -e

En Windows, puede usar el Programador de tareas, que pueden proporcionar la misma funcionalidad básica.

Directorios de copia de seguridad usando PHP

Con el sistema de cron, que se puede ejecutar un comando en un momento dado, a su disposición se puedeconstruir un sistema de copia de seguridad automática que es llamado por el cron. Estas copias de seguridad sepueden ejecutar en cualquier momento, pero a menos que haya un requisito especial, es mejor correr cuandoel servidor se encuentra con la menor cantidad de estrés.

La primera parte de la secuencia de comandos de copia de seguridad es definir el directorio de copia deseguridad. Esta parte está construido como una matriz, que se utiliza para permitir que más de un directorio aser respaldada.

Page 410: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 410/467

410

$dirs = array(“/var/www/vhosts/example.org/myfiles”);

El backupDir define en el archivo de almacenamiento se guarda después de su creación.

$backupDir = “/var/www/vhosts/example.org/backups”;

A la fecha es almacenado que se utiliza como el nombre de archivo. Puede modificar el nombre del archivo

para incluir las horas y minutos si decide crear más de una copia de seguridad por día.

$date = date(„m-d-y‟);

El núcleo de la secuencia de comandos de copia de seguridad dentro de un bucle foreach. Este lazo es elresponsable de realizar copias de seguridad de cada directorio definido en la matriz. Para este ejemplo, sólohay un directorio definido, por lo que este ciclo sólo se ejecutará una vez.

foreach($dirs as $dir){...}

Continuando con la secuencia de comandos, la sección siguiente está todo en el bucle foreach. La primeraparte consiste en usar preg_replace para eliminar todos, pero el nombre del directorio de la variable $dir. Estoes pasado a través de otro preg_replace para definir el nombre del archivo.

$dir = preg_replace(„/\/$/‟, „‟, $dir);$archiveName = preg_replace(„/^(.*)\/.*?/‟, „‟, $dir);

Después de definir el nombre del archivo, el siguiente paso es construir el comando que creará el archivo dealmacenamiento.

$tgzName = “{$archiveName}-{$date}.tgz”;$tgzFile = “{$backupDir}/{$tgzName}”;

$backupCmd = “tar czf {$tgzFile} {$archiveName}”;

La variable $backupCmd se pasa al comando del sistema, que informa de PHP para ejecutar el passed-in elmando a nivel de sistema de su servidor Web. Este sería el mismo que ejecutar el comando en la línea decomandos o terminal.

$result = system($backupCmd . “ 2>&1”);

Para propósitos de depuración es posible que desee a la salida del comando en caso de que se produce unerror, así como el mando original para asegurar la estructura está bien definida.

print “Command: “ . $backupCmd . “<br />”;

print “Result: “ . $result;

Este es el final de la secuencia de comandos de copia de seguridad de archivos. Como puede ver, la estructurade este script es sencillo y el único aspecto importante es la función del sistema, que puede ser desactivado enalgunos entornos.

Aquí está el script completo, que se hace referencia en el archivo crontab para automatizar el proceso.

<?php

Page 411: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 411/467

411

// File Backup

$dirs = array(“/var/www/vhosts/example.org/myfiles”);$backupDir = “/var/www/vhosts/example.org/backups”;

$date = date(„m-d-y‟);

foreach($dirs as $dir)

{$dir = preg_replace(„/\/$/‟, „‟, $dir);$archiveName = preg_replace(„/^(.*)\/.*?/‟, „‟, $dir);

$tgzName = “{$archiveName}-{$date}.tgz”;$tgzFile = “{$backupDir}/{$tgzName}”;

$backupCmd = “tar czf {$tgzFile} {$archiveName}”;

$result = system($backupCmd . “ 2>&1”);

print “Command: “ . $backupCmd . “<br />”;print “Result: “ . $result;

}

?>

Copia de seguridad de tus archivos importantes es una manera de mantener un sistema eficaz. Sin embargo, labase de datos es otro aspecto que debe ser limpiado periódicamente. Usted nunca quiere borraraccidentalmente información importante por lo que es una buena idea de establecer un sistema de copia deseguridad de este, así.

Con la excepción de unos pocos comandos, la secuencia de comandos de copia de seguridad de base de datoses muy similar a la secuencia de comandos de copia de seguridad de archivos y se pueden combinar en unscript de copia de seguridad que se explica en la siguiente sección.

Si opta por combinar las dos secuencias de comandos que puede limitar los directorios de copia de seguridad.De lo contrario, las copias de seguridad puede resultar en un rendimiento más lento.

Uso de PHP para copia de seguridad de base de datos 

Como aprendimos en la sección anterior, se puede asignar scripts de copia de seguridad automática en elfichero crontab. Otro script de copia de seguridad común es la que se ocupa de sus bases de datos. Al igual quela copia de seguridad de archivos, entonces debe mover a un directorio remoto para asegurar el tamaño delarchivo añadido no afecta a su servidor en vivo.

Usted encontrará que a medida que el sistema comienza a crecer es posible que desee invertir en un servidor

de copia de seguridad que no necesita muchos recursos, ya que se utilizarían exclusivamente para elalmacenamiento. Este no es un elemento necesario, pero te da un nivel adicional de protección con sus datos,así como su servidor hace vivir más eficiente.

La primera parte de la secuencia de comandos de copia de seguridad de base de datos es definir los detalles dela conexión MySQL.

$dbHost = “localhost”;$dbUsername = “root”;$dbPassword = “pass”;

Page 412: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 412/467

412

La base de datos para este ejemplo es una aplicación de tienda de libros, pero puede modificar la base de datospara que coincida con alguna de las muchas bases de datos se puede tener todo en su sistema.

$dbName = “bookStore”;

Si se han definido estas variables en otra parte de su aplicación, usted simplemente puede cargar 

dicho archivo de configuración para asegurarse de que los únicos valores deben actualizarse unavez. Reemplaza los últimos cuatro líneas con una simple llamada de incluir o requerir .

require “/path/to/configuration/dbConnection.php”;

El directorio de almacenamiento de copia de seguridad de $ backupDir se define como una cadena en esteejemplo, pero usted puede modificarlo para que un arreglo como lo hizo en la secuencia de comandos de copiade seguridad de archivos. Esto es importante si usted tiene más de una base de datos, como la mayoría de lossistemas de hacer.

$backupdir = „/var/www/vhosts/example.org/dbBackups‟;

NOTA Define el directorio de copia de seguridad fuera de la ruta de acceso del público siempre que sea posiblepara garantizar el navegador Web no puede tener acceso a las copias de seguridad.

El nombre del archivo debe ser único para los archivos no se escriben uno al otro.Usted puede crear un hash al azar usando el tiempo, que sería único, sino que haría imposible determinar quéarchivo ha creado.

Una solución mucho más elegante es anexar partes de la fecha al nombre del archivo, lo que crea un nombrede archivo legible y único. En lugar de hacer llamadas múltiples hasta la fecha se puede utilizar la funcióngetdate(), que devuelve una matriz de información actualizada que se puede hacer referencia a los nombres delas teclas.

$today = getdate();

Para asegurar que la fecha se puede leer en la mejor manera posible, una serie de sentencias if se utiliza paragarantizar los valores de fecha son siempre dos dígitos. Esto no es un requisito de programación, pero másimportante, una coherencia que hace que sea más fácil de leer la fecha en el nombre de archivo.

$month = $today[mon];

if($month < 10){$month = “0” . $month;}

$day = $today[mday];if($day < 10){$day = “0” . $day;}

$year = $today[year];

La creación de archivo real se divide en tres partes, pero todos en el mismo comando. La primera parte haceuna llamada a la base de datos mediante la aprobación en la información de acceso necesaria.

Page 413: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 413/467

413

$mysqlCommand = “mysqldump --opt -h %s -u %s -p%s %s”;

La segunda parte del comando acepta los datos de MySQL y lo empuja a la función gzip, que es donde se creael archivo real.

$gzipCommand =”gzip > %s/%s-%s-%s-%s.gz”;

La tercera y última parte del comando tiene las variables definidas en los apartados anteriores y crea la cadenade comandos usando sprintf limpiamente crear el comando. La función sprintf utiliza marcadores de posición yacepta los argumentos adicionales para cubrir los marcadores de posición. Este es el mismo que crear unacadena en línea, sino que crea una cadena más limpio y más fácil.

$run_command = sprintf($mysqlCommand . “ | “ . $gzipCommand,$host, $user, $pass, $db,$backupdir, $db, $month, $day, $year);

El tubo | personaje (pipe | character) es un comando especial que indica al sistema para capturar la salida delcomando a la izquierda de la tubería e introducir en la función definida en el lado derecho de la tubería.

En este ejemplo, los datos de MySQL es capturado y pasado en la llamada gzip.

El último paso en la secuencia de comandos de copia de seguridad de base de datos es realmente hacer lallamada al sistema, que reúne los datos de MySQL y crea el archivo de almacenamiento.

system($run_command);

NOTA El comando system() no está disponible si está incapacitado en el archivo php.ini o si está habilitado elmodo seguro.

Aquí está el script completo, que usted puede rápidamente modificar y agregar a su crontab existentes. Usted

puede incluso combinar las dos secuencias de comandos de copia de seguridad y agregar más funcionalidad.Los ejemplos anteriores son para empezar.

<?php

#!/usr/bin/php

//require „connectfile.php‟;

$dbHost = “localhost”;$dbUsername = “root”;$dbPassword = “pass”;$dbName = “bookStore”;

$backupdir = „/var/www/vhosts/example.org/dbBackups‟;

$month = $today[mon];

if($month < 10){$month = “0” . $month;}

$day = $today[mday];

Page 414: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 414/467

414

if($day < 10){$day = “0” . $day;}

$year = $today[year];

$mysqlCommand = “mysqldump --opt -h %s -u %s -p%s %s”;

$gzipCommand =”gzip > %s/%s-%s-%s-%s.gz”;

$run_command = sprintf($mysqlCommand . “ | “ . $gzipCommand,$host, $user, $pass, $db,$backupdir, $db, $month, $day, $year);

system($run_command);

?>

Resumen 

En este capítulo, usted aprendió diversas técnicas sobre cómo mantener un servidor Web escalable y máseficiente. El estudio abarcó los temas de la modificación de los archivos de configuración de Apache, lo quelimita lo que se carga, y deshabilitar el registro de errores para mejorar el rendimiento global.

A continuación, aprendió cómo optimizar MySQL, que puede dar cuenta de la gran mayoría de los cuellos debotella en una aplicación y puede incluso suben a consumir los recursos del servidor Web.

En la parte final del capítulo, que se introdujeron para memcached, que fue utilizado para construir un sistemade alto rendimiento que elimina el almacenamiento en caché de la mayoría de los gastos generales de la basede datos.

Uso de cada una de estas técnicas en cualquiera de sus proyectos de desarrollo se traducirá en un mejorrendimiento. Nuevo hardware no tiene por qué ser la única solución, si bien optimizar su servidor Webutilizando estas técnicas.

También aprendió sobre las nuevas herramientas que pueden ayudarle a optimizar su sistema utilizando unmétodo gráfico en lugar del comando del sistema tradicional.

Page 415: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 415/467

415

Capitulo 17

Construir aplicacionescompletamente avanzadas 

En lugar de tener el final libro con una descripción básica, pensé que desarrollar una aplicación reproductor devídeo que le permiten comprender el proceso de construcción de una aplicación.

En este capítulo se utiliza diversos conceptos y tecnologías aprendidas en los capítulos anteriores. Recomiendola lectura de esos primero a menos que simplemente tienen curiosidad acerca de los tipos de aplicaciones que

puede desarrollar el uso de Flash y PHP o ya tienen alguna familiaridad con Flash y PHP.

Este capítulo está dividido en cinco partes, cada edificio en la sección anterior y que resulta en un reproductorde vídeo completo, PHP conducido. También puede tomar los conceptos y los componentes desarrollados eneste capítulo y utilizarlos en sus propios proyectos. Por ejemplo, el componente de acceso será desarrolladocomo un módulo independiente, que le permite caer en otra aplicación con la modificación de muy poco.

Construir un reproductor de video básico 

Flash ofrece una gran variedad de funcionalidad. Las posibilidades de lo que se puede desarrollar la utilizaciónde Flash sólo están limitadas por el tiempo y la imaginación.

El vídeo es un activo muy valioso en la Internet con el avance de las conexiones de banda ancha de altavelocidad. Flash es la mejor manera de transmitir vídeo a causa de la amplia disponibilidad de Flash Player paratodos los navegadores web más populares.

Flash permite a los desarrolladores a construir un reproductor de vídeo y estar seguro de que la mayoraudiencia posible será capaz de verla. Además, no hace daño que Adobe ha desarrollado un completo yfuncional reproductor de vídeo única que permite a los desarrolladores incorporar fácilmente en un proyectoexistente.

De hecho, la construcción de un reproductor de vídeo básico en Flash, como se muestra en la Figura 17.1.requiere de muy pocas líneas de código.

Comience arrastrando un componente FLVPlayback del panel Componentes al escenario. Dar a este nuevo jugador el nombre de instancia myPlayer y abrir el panel de Acciones.

Para simplificar, utilice uno de los archivos de muestra de vídeo que Adobe ofrece para las pruebas:

www.helpexamples.com/flash/video/water.flv 

Page 416: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 416/467

416

FIGURA 17.1Componente de vídeo FLVPlayback aparece en el escenario

El siguiente paso es establecer la propiedad de origen del reproductor de vídeo, señalando la muestra delarchivo FLV:

myPlayer.source = “http://helpexamples.com/flash/video/water.flv”; 

Pruebe la película y usted debería ver la carga de vídeo de muestra, a continuación, se inicia automáticamentela reproducción. Felicitaciones, ha desempeñado un FLV en Flash, utilizando el reproductor de componentes vídeoprediseñados.

El reproductor de vídeo tiene una colección bastante grande de los métodos y propiedades, pero algunos de

los más comunes están relacionados con el control de la reproducción. Por ejemplo, recuerda cómo el videoreproduce una vez que se cargó? Esto no puede ser el resultado deseado todo el tiempo, de modo que elreproductor de vídeo te permite modificar este comportamiento, establezca la propiedad autoPlay a false.

myPlayer.source = “http://helpexamples.com/flash/video/ water.flv”;  myPlayer.autoPlay = false; 

Ahora, cuando se carga el vídeo, espera a una llamada al método de juego antes de que comience lareproducción. Esta funcionalidad es más comúnmente utilizado en sitios de Internet interactivos paragarantizar el vídeo o el sonido no conseguir a nadie en problemas mientras se visualiza un sitio. Normalmente,iniciado por el usuario hace clic en un botón o algo similar, vamos a mejorar la funcionalidad y añadir un evento

de ratón para iniciar el vídeo.

Usted puede empezar por añadir un botón al escenario y le da el nombre de instancia de myPlayBtn. Acontinuación, modifique el código y añadir la función de controlador de ratón:

myPlayer.source = “http://helpexamples.com/flash/video/ water.flv”; myPlayer.autoPlay = false;

 myPlayBtn.addEventListener(MouseEvent.CLICK,

Page 417: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 417/467

417

 beginPlaybackHandler);

function beginPlaybackHandler(e:MouseEvent):void { myPlayer.play();}

También quiere que sus usuarios puedan para detener la reproducción de un vídeo. Esto es casi idéntico al

proceso de reproducción de un vídeo.

Empiece por agregar otro botón para el escenario, con el nombre de instancia myStopBtn. Luego se agrega elnuevo controlador de eventos y asignar al botón Stop, tales como:

myPlayer.source =“http://helpexamples.com/flash/video/water.flv”; myPlayer.autoPlay = false;

myPlayBtn.addEventListener(MouseEvent.CLICK,beginPlaybackHandler);

function beginPlaybackHandler(e:MouseEvent):void{myPlayer.play();}

 myStopBtn.addEventListener(MouseEvent.CLICK,stopPlaybackHandler);

function stopPlaybackHandler(e:MouseEvent):void { myPlayer.stop();} 

Para simplificar, el componente de un reproductor de vídeo tiene la capacidad de ser de piel, lo que significa

que usted no tiene que diseñar una interfaz personalizada. Esto carga la costumbre de la piel en un conjuntopredeterminado de los controles de reproducción.

De hecho, Adobe ofrece una gran lista de skins, cada una en diferentes colores o con varias selecciones debotones y funcionalidad. Por ejemplo, aquí es el ejemplo más común utilizada. Esta piel es un conjuntocompleto de controles que se coloca debajo de la componente de reproductor de vídeo. Viendo que esta pieltiene controles de reproducción básica, puede reemplazar el controlador de ratón existentes y utilizar laversión interna:

myPlayer.source = “http://helpexamples.com/flash/video/ water.flv”; myPlayer.autoPlay = false;

myPlayer.skin = “SkinUnderPlayStopSeekMuteVol.swf”; 

NOTA La piel de un reproductor de vídeo debe estar en el mismo directorio que el SWF. También puedeestablecer la piel utilizando el Inspector de componentes.

La piel se puede encontrar en el mismo directorio que la película Flash una vez que seleccione al menos unapiel de el inspector de propiedades.

Page 418: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 418/467

418

Como puede ver, la funcionalidad del reproductor de vídeo componente permite crear un jugador de base conbastante rapidez. El problema con este componente se encuentra cuando se desea jugar más de un vídeo oincluso añadir categorías de videos.

Afortunadamente, Adobe desarrolló un componente maravilloso e incluso hizo fácil de usar en los proyectos dedesarrollo personalizados, que se aprende a hacer más adelante en este capítulo. Va a crear y agregar lafuncionalidad adicional que desee.

Construir un reproductor de video en Flash y PHP 

En la sección anterior aprendió a desarrollar un reproductor de vídeo de base, con un archivo de fuente nomodificable, y ha funcionado bastante bien. El problema no es, este resultado es escalable y realmente noofrece ningún tipo de reutilización, que es crucial cuando se construye una aplicación.

Como empezar 

La aplicación de reproductor de vídeo que se desarrollan en esta sección ha sido diseñada, como se muestra enla figura 17.2, de modo que usted pueda centrarse en la parte de desarrollo.

El reproductor de vídeo precompilados está disponible en el sitio Web del libro, donde también se puedeencontrar la aplicación completa para tener una idea de lo que será el edificio como un producto acabado.

Este reproductor de vídeo está dividido en tres partes. La primera parte es el componente de MySQL, quealmacena las referencias de vídeo y las categorías.

Page 419: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 419/467

419

FIGURA 17.2Ejemplo del diseño del reproductor de vídeo que va a trabajar en este capítulo

Construcción de tablas de la base de datos y MySQL

Comience por abrir el editor de base de datos favorita y crear una nueva base de datos para este proyecto.Usted puede nombrar a esta base de datos nada que usted prefiera. Yo book_videoplayer, pero eso es sólo unasugerencia.

Después que la base de datos es creada, puede empezar a añadir la estructura del esquema de la tabla para losvideos y las categorías de datos. Para esta aplicación los cuadros ya han sido definidos, pero no dude en buscarlos entregó a una mejor comprensión de lo que son responsables.

Los cuadros de esta aplicación se dividen para asegurarse de que se optimizan y entender fácilmente que el

cuadro es el responsable de cada tarea. Es mejor dividir la funcionalidad en varias tablas, también conocidacomo la normalización. Así, asegura que su base de datos será la más eficiente y le permite ampliar.

La estructura de la tabla en esta aplicación es sencilla. Por ejemplo, el nombre del vídeo, la descripción, y lafuente de referencias se encuentran en la tabla de videos, que se construye similar a la siguiente:

CREATE TABLE `videos` (`id` int(11) NOT NULL auto_increment,`catId` int(11) default NULL,`name` varchar(200) default NULL,

Page 420: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 420/467

420

`src` varchar(200) default NULL,`description` text,`count` int(11) default 0,`active` varchar(1) default „1‟, PRIMARY KEY (`id`)) ENGINE=MyISAM; 

Como puede ver, este cuadro no es nada especial, pero maneja el núcleo de la gestión de aplicaciones.

Usted puede agregar más columnas si usted decide que quiere ampliar la aplicación original.

Como puede ver, este cuadro no es nada especial, pero maneja el núcleo de la gestión de aplicaciones.Una base de datos no es la única opción de almacenamiento. Usted puede utilizar un archivo XML o inclusocodificar los caminos de vídeo en Flash, pero la idea es desarrollar una aplicación ampliable. Esto significa quela base de datos es la opción más lógica para almacenar el vídeo y los datos de categoría. La base de datostambién ofrece la capacidad de expandirse y crecer a medida que agrega más características para su aplicación.

El segundo cuadro tiene que agregar es la tabla de categorías, que almacena un identificador usado en elcódigo PHP en la siguiente sección y el nombre de la categoría que se muestra en la aplicación Flash.

CREATE TABLE `categories` (`id` int(11) NOT NULL auto_increment,`name` varchar(100) default NULL,`active` varchar(1) default „1‟,PRIMARY KEY (`id`)) ENGINE=MyISAM; 

Adición de datos de ejemplo para las tablas

Ahora puede rellenar a las tablas a prueba de todo, como se muestra en la Figura 17.3. Usted puede utilizar sueditor favorito de la base de datos y agregar los datos de ejemplo a mano, o utilizar el comando INSERTsiguiente muestra que añadir unas pocas categorías y vídeos:

INSERT INTO categories (name) VALUES („Category 1‟); INSERT INTO categories (name) VALUES („Category 2‟); INSERT INTO videos (catId, name, src, description)VALUES (1, „Sample Video 0:1‟, „sample.flv‟, „Cool Video Here‟); INSERT INTO videos (catId, name, src, description)VALUES (2, „Sample Video 0:2‟, „sample.flv‟, „Cool Video Here‟); 

Page 421: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 421/467

421

FIGURA 17.3Datos de la tabla de ejemplo se muestra en el MySQL Query Browser

Probar la base de datos 

Después de cargar los datos en la base de datos que puede probarlo. Esto puede hacerse mediante la creaciónde un archivo PHP simple que se conecta a la base de datos y ejecuta una consulta muy simple. Usted haaprendido cómo conectarse a la base de datos en los capítulos anteriores. Para este ejemplo, es necesariodefinir los detalles de conexión y realizar una llamada a la función mysql_connect.

<?php

$link = mysql_connect(„localhost‟, „root‟, „password‟); mysql_select_db(„book_videoplayer‟, $link); 

?> 

Cuando se establece la conexión, el siguiente paso es construir la consulta SQL.

<?php

$link = mysql_connect(„localhost‟, „root‟, „password‟); mysql_select_db(„book_videoplayer‟, $link); 

Page 422: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 422/467

422

$catID = 1;$query = sprintf(“SELECT * FROM categories where id=%d”, $catID); 

?> 

El último paso es devolver algo. Para simplificar, vamos a mostrar uno de los nombres de categoría.

<?php

$link = mysql_connect(„localhost‟, „root‟, „password‟); mysql_select_db(„book_videoplayer‟, $link); 

$catID = 1;$query = sprintf(“SELECT * FROM categories where id=%d”, $catID); 

$result = mysql_query($query, $link);$row = mysql_fetch_array($result);

 print “Category Name: <strong>” . $row[„name‟] . “</strong>”; 

?>

Guardar este archivo como sqltest.php en su casa directorio del servidor Web y acceder a ella mediante elnavegador de Internet favorito. Cuando se ejecuta el archivo PHP, usted debería ver una salida similar a lasiguiente:

Category Name: Category 1 

Si usted ve cualquier otra cosa, asegúrese de comprobar los detalles de conexión. Si por alguna razón ustedrecibe una página en blanco, coloque la siguiente línea en la parte superior de su archivo a la fuerza de PHPpara mostrar todos los errores posibles:

error_reporting(E_ALL); 

Ahora que usted ha visto una consulta de MySQL, ejecuta utilizando la fecha para esta aplicación, intentellamar a dos tablas y probar la funcionalidad de la aplicación final tendrá. Las dos únicas líneas de código quenecesitan ser modificados son la consulta SQL y la salida.

<?php

$link = mysql_connect(„localhost‟, „root‟, „password‟); mysql_select_db(„book_videoplayer‟, $link); 

$catID = 1;$query = sprintf(“SELECT v.name FROM videos v, categories c WHERE v.catId=c.id AND c.id=%d”, $catID); 

$result = mysql_query($query, $link);

 while($row = mysql_fetch_array($result)) 

{ print “Video Name: “ . “<strong>” . $row[„name‟] . “</strong>”; }

?> 

Page 423: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 423/467

423

Al ejecutar este código, debe presentarse una lista de vídeos para esa categoría específica. Este código buscaen la categoría de vídeo y tablas y devuelve todos los vídeos que los identificadores comparten la misma. Estees el más básico de unirse a las tablas de MySQL, pero funciona perfectamente para esta aplicación.

Integración remota 

El siguiente paso es construir el PHP reales que serán llamados por el uso de Flash Remoting. De hecho, estasección es similar en el hecho de que va a utilizar AMFPHP. Pero la parte más allá de este desarrollo real esdiferente.

CROSS--REF Más información sobre la interacción remota se puede encontrar en el capítulo 8.

La ventaja de la construcción de esta aplicación que utiliza interacción remota es que te da la posibilidad deprobar más fácilmente. Esto es porque usted puede construir las clases AMFPHP y luego probarlos mediante elcódigo PHP estándar o el visor de navegador incluido que se incluye con AMFPHP.

Usted también tiene la capacidad de reutilizar estas clases en otros proyectos o con las porciones de códigoHTML del mismo proyecto. Por ejemplo, suponga que desea crear un panel de usuario que puede mostrar las

últimas películas de una categoría específica. Usted puede hacer esto mediante la construcción de una páginaHTML muy básico y llamar a la clase de interacción remota para devolver los datos necesarios, al igual que loharía en Flash.

Clase de conector de base de datos 

Las clases en esta aplicación dependen de la base de datos. En lugar de definir los detalles de la conexión entodas las clases, es mejor construir una clase de conector de base de datos que es responsable de hacer laconexión inicial y almacenar las credenciales de conexión.

La clase de conector tiene cinco variables privadas. Los cuatro primeros definen la información de conexión.

<?php

class DatabaseConnector{

 private $host = “localhost”;  private $user = “root”;  private $pass = “password”;  private $dbName = “book_videoplayer”; 

}

?> 

La quinta variable se utiliza para almacenar el enlace de la base de datos de identificación de recursos.

private $link = null;

El constructor para esta clase está vacía, porque las variables privadas se definen previamente.

function DatabaseConnector() { }

Page 424: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 424/467

424

El método de conexión privada sólo es llamado cuando una conexión existente no se encuentra. Este métodopasa en los detalles de una conexión privada y almacena el identificador de recurso en el $this-> propiedad deenlace, que sólo es visible a esta clase.

private function connect(){$this->link = mysql_connect($this->host, $this->user, $this->pass);mysql_select_db($this->dbName, $this->link);}

El segundo método, getConnection, se establece como pública para otras clases tienen acceso a ella. Sinembargo, los comentarios que lo definen como privado para garantizar las clases remoto no puede acceder aél. Este método comprueba en primer lugar para un recurso de la conexión ya existente, y si uno no seencuentra, se hace una llamada al método connect.

El último paso de esta función es devolver el recurso de conexión activa, que se utiliza en otras clases. 

/*** Get database connection

* @access private* @returns database link, to be used in other sql calls*/public function getConnection(){if($this->link == null){$this->connect();}

return $this->link;} 

Como puede ver, esta clase es muy útil, ya que se encarga de almacenar la conexión de base de datos.Además, si uno no se encuentra, se crea una.

Esta es la clase completa, que debe ser guardado como DatabaseConnector.php en el directorio del proyectopor lo que se puede acceder por las otras clases. 

<?php

class DatabaseConnector{

private $host = “localhost”; private $user = “root”; 

private $pass = “password”; private $dbName = “book_videoplayer”; 

private $link = null;

function DatabaseConnector() { }

private function connect(){$this->link = mysql_connect(

Page 425: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 425/467

425

$this->host,$this->user,$this->pass);mysql_select_db($this->dbName, $this->link);}

/**

* Get database connection* @access private* @returns database link, to be used in other sql calls*/public function getConnection(){if($this->link == null){$this->connect();}

return $this->link;}

}

?> 

Clase Video

Ahora que la clase de conector de la base de datos se completa, la próxima clase a desarrollar es la gestión delos videos. Esta clase devuelve la lista de vídeo basado en vídeo o ID de categoría.

La primera parte de esta clase es para cargar en el archivo de conector de base de datos, que esta clase devídeos se extenderá.

<?phprequire_once „DatabaseConnector.php‟;?>

Usted puede recordar se extiende desde las clases de ActionScript que han desarrollado en los ejemplosanteriores.La sintaxis de PHP es idéntico. Básicamente, definir la clase y cualquier clase que se extenderá, de forma similara la siguiente:

<?php

require_once „DatabaseConnector.php‟;

class Videos extends DatabaseConnector{

?> 

La clase de vídeo tiene un método, getVideos. Este método acepta un vídeo y un ID de categoría por separadocomo argumentos para determinar qué videos para volver.

Page 426: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 426/467

426

/*** get videos* @access remote* @returns array of videos*/function getVideos($categoryID=-1, $videoID=-1){

...}

La primera parte de este método para comprobar las necesidades de identificaciones válidas para garantizar elSQL no se verá comprometida.Este paso no es obligatorio, pero asegura que su aplicación sea más seguro.

if($categoryID == -1 || strlen($categoryID) == 0){trigger_error(“Category ID required to return video list”);}

Esta declaración pide trigger_error si un identificador de categoría no válido o no se pasa in. La razón para usarel trigger_error es porque AMFPHP graciosamente detiene todo el proceso aún más y devuelve el errordeseado para la secuencia de comandos de llamada, en este en este caso, que será de ActionScript.

El siguiente paso es asignar las variables de este método y crear una matriz que contendrá los datos de vídeoque se pasa de nuevo a ActionScript.

$vidSQL = “”;$rows = array();

Una vez que los fundamentos se han definido, el siguiente paso es determinar si la secuencia de comandosdebe estar buscando un video único o una lista de ellos. Esto asigna el SQL correcto si el código sólo se debe

buscar un vídeo.

// look for specific video?if($videoID != -1 && strlen($videoID) != 0){$vidSQL = “ AND v.id=” . $videoID;}

El enlace de base de datos puede ser definido simplemente haciendo una llamada al método getConnection dela clase de DatabaseConnector porque la clase de vídeo se está extendiendo. La variable local $link se le asignala conexión activa que se utiliza en el resto de la interacción dentro de esta función de MySQL.

$link = $this->getConnection();

La consulta de la base de datos es bastante complejo, ya que los controles dos tablas de datos y devuelve unalista de vídeos sobre la base de ese cheque. Esta consulta es similar a la que construyó cuando se prueba labase de datos al comienzo de esta sección. Esta consulta utiliza el $vidSQL, que o bien será una adición válida ala de SQL o una cadena en blanco cuando no buscas un vídeo concreto.

$query = sprintf(“SELECTv.name,v.src,

Page 427: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 427/467

427

v.id as „vid‟,c.name as „cat‟,v.description,v.countFROM categories c, videos vWHERE v.catId=c.idAND v.catId=%dAND v.active=1 “ . $vidSQL, $categoryID); 

La parte especial de esta consulta SQL es la modificación de los nombres de columna, como la

v.id as „vid‟

Esto se hace porque el conjunto de resultados tiene el nombre de identificación en las tablas y sólo un nombrepueden ser devueltos. Si se mantiene el estándar de nomenclatura sólo tendrán acceso a una tabla deinformación de identificación.Saber que uno será devuelto es una cuestión de orden que se les llama en. El cambio de nombre sólo modificael conjunto de resultados, por lo que no tiene que preocuparse de los datos originales se vean afectados.

El siguiente paso es ejecutar la consulta de MySQL y recuperar los resultados, que luego a través de bucle y se

pasa de la función como una matriz multidimensional.

$result = mysql_query($query, $link);

Antes de que se ejecute el bucle, es una buena idea para algunas filas fueron devueltos por la consulta. Elincumplimiento de esta comprobación simple podría resultar en un bucle sin fin. Esto puede dañar el servidorWeb, ya que muy probablemente no darse cuenta de que está ocurriendo.

Esta sencilla comprobación se hace comprobando el número de registros devueltos con la funciónmysql_num_rows. Esta función devuelve un valor numérico que representa el número de filas devueltas en laconsulta.

if(mysql_num_rows($result) == 0){trigger_error(“No videos found”);return false;}

Suponiendo que un conjunto de resultados válidos se encuentra, el siguiente paso es recorrer los resultados yllenar la variable de matriz que se definió anteriormente.

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){array_push($rows, $row);

El último paso de esta función es devolver la matriz de datos de vídeo. Este método no llegar a este punto,salvo que los datos válidos de vídeo está listo para ser aprobado de nuevo.

return $rows;

Eso es todo lo que hay en la clase de vídeo. Este archivo debe ser guardado como Videos.php. Esta es la clasecompleta, que también se puede encontrar en el código del libro en el sitio Web.

Page 428: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 428/467

428

<?php

require_once „DatabaseConnector.php‟;

class Videos extends DatabaseConnector{

/*** get videos* @access remote* @returns array of videos*/function getVideos($categoryID=-1, $videoID=-1){if($categoryID == -1 || strlen($categoryID) == 0){trigger_error(“Category ID required to return video list”);}

$vidSQL = “”;

$rows = array();

// look for specific video?if($videoID != -1 && strlen($videoID) != 0){$vidSQL = “ AND v.id=” . $videoID;}

$link = $this->getConnection();

$query = sprintf(“SELECTv.name,v.src,v.id as „vid‟,

c.name as „cat‟,v.description,v.countFROM categories c, videos vWHERE v.catId=c.idAND v.catId=%dAND v.active=1 “ . $vidSQL, $categoryID);

$result = mysql_query($query, $link);

if(mysql_num_rows($result) == 0){trigger_error(“No videos found”);

return false;}

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){array_push($rows, $row);}

return $rows;}

Page 429: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 429/467

429

}

?>

La segunda clase de este ejemplo es la clase de categoría, que también tiene un método. Este método esresponsable de devolver todas las categorías activas para el reproductor de vídeo.

Antes de que se cree el método, debe cargar en la conexión de bases de datos, exactamente igual que lo hizoen la clase de vídeo.

require_once „DatabaseConnector.php‟;

La primera parte del método getCategories es responsable de la creación de una nueva variable $rows quellevará a cabo es regresar de la base de datos las categorías. La variable de enlace se llena con una conexión debase de datos activa, que será utilizado en las llamadas SQL siguiente.

$rows = array();$link = $this->getConnection();

La consulta SQL básicamente tira en todas las categorías que están activas, es decir, la columna activa seestablece en un valor de 1. Esta consulta SQL se pasa luego a mysql_query que es responsable de la ejecuciónde la llamada realidad de SQL.

$query = “SELECT id, name FROM categories WHERE active=1”;$result = mysql_query($query, $link);

Si en los controles de la declaración de al menos una fila válida antes de continuar y generará un error si no seencuentran filas válida. Suponiendo se encuentran filas válidas, un bucle while se utiliza para llenar las filas dela variable $rows y una vez que el bucle se completa la variable $rows se devuelve.

if(mysql_num_rows($result) == 0)

{trigger_error(“No categories found”);return false;}

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){array_push($rows, $row);}

return $rows;

Eso es todo lo que hay en la clase de categoría y, como se puede ver la estructura de la clase de categoría es

bastante similar a la clase de vídeo en la sección anterior.

Esta es la clase Categoría completado:

<?php

require_once „DatabaseConnector.php‟;

class Categories extends DatabaseConnector{

Page 430: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 430/467

430

/*** get categories* @access remote* @returns array of categories*/function getCategories(){

$rows = array();

$link = $this->getConnection();

$query = “SELECT id, name FROM categories WHERE active=1”;

$result = mysql_query($query, $link);

if(mysql_num_rows($result) == 0){trigger_error(“No categories found”);return false;}

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){array_push($rows, $row);}

return $rows;}}

?> 

Probar las clases 

En este punto, ambas clases de servicio AMFPHP se han escrito. Usted puede rápidamente probar el uso deellos o pasar a la parte de ActionScript el desarrollo de esta aplicación. Prueba de la clase es muy simple:básicamente crear un archivo PHP, llame el vídeo o el método de la categoría, e imprimir el resultado.

Por ejemplo, aquí está una prueba simple, también conocida como unidad de pruebas:

<?php

include „amfphp/services/Videos.php‟;

$videos = new Videos();

$list = $videos->getVideos(1);

print_r($list);

?>

Page 431: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 431/467

431

Si ejecuta este ejemplo en su navegador debería ver una salida similar al siguiente ejemplo:

Array([0] => Array([name] => Sample Video 1:1[src] => sample.flv[vid] => 1[cat] => Category A[description] => Really Cool Video Here[count] => 0)

...) 

Ahora debe tener dos clases completas que se pueden utilizar en el código ActionScript para interactuar con elcontenido de la base de datos. El siguiente paso es construir la porción de ActionScript de la solicitud, que esmanejado por las clases externas para la reutilización.

Desarrollar un reproductor de video avanzado 

En las secciones anteriores de este ejemplo, usted desarrolló la base de datos y tablas. Luego construyó losservicios de PHP que interactúan con las tablas de base de datos. El siguiente paso es desarrollar el ActionScriptque se encarga de mostrar y gestionar el reproductor de vídeo.

Si nos fijamos en el reproductor de vídeo, como se muestra en la Figura 17.4, en el escenario de Flash te daráscuenta de que hay cuatro partes: el principal componente de reproductor de vídeo, caja de información, listade vídeos, y el menú desplegable que almacenará las categorías de vídeo. Si desactiva todo haciendo clic en elescenario o presionando la tecla Esc, una clase de documento con el nombre VideoPlayer aparece.

Esta clase es donde la mayoría del reproductor de vídeo es dirigido desde, en lugar de tener el códigodirectamente en la línea de tiempo. Esto también le da la opción de desarrollar en un editor externo, comoFDT, o puede utilizar el editor independiente que se incluye con Flash.

Crear la clase de documento 

Comience por crear un nuevo archivo de ActionScript con el editor de ActionScript en Flash y el nombre queVideoPlayer.as. Guardar este archivo en el directorio de su aplicación en la FLA está situado a asegurar que elarchivo se cargará. También puede utilizar el archivo de ActionScript que se proporciona en la fuente del libroen el sitio Web.

Page 432: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 432/467

432

FIGURA 17.4Un reproductor de vídeo que ya ha sido diseñado para usted 

Después que este archivo de ActionScript se crea y se guarda, es el momento para empezar a desarrollar elnúcleo de secuencias de comandos que controla el reproductor de vídeo. Empezar por construir la clase deesquema y ampliar la clase de la clase MovieClip, que se requiere para una clase de documento.

package{import flash.display.MovieClip;public class VideoPlayer extends MovieClip{}}

Ahora que se construye el esquema básico de clase, puede empezar a construir la funcionalidad actual. Ademásde la clase MovieClip, necesita importar dos clases. La clase de evento se utilizarán para todos los de gestión deeventos de base, y el paquete net.* incluirá todas las clases necesarias para comunicarse con el servicioremoto.

import flash.events.Event;import flash.net.*;

Esta clase VideoPlayer tendrá que tener algunas propiedades definidas, que se almacenan como privado paragarantizar que sean protegidos y no pueden ser modificados accidentalmente por clases externas. La segunda

Page 433: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 433/467

433

propiedad almacenará el NetConnection activa, que se utiliza para interactuar con el servicio remoto. Vas atrabajar con esto en la siguiente sección de código.

private var gatewayURL:String;private var gateway:NetConnection;private var selectedCatID:Number; 

VideoPlayer constructor 

La función de constructor es responsable de la inicialización de algunas propiedades, que modifica la partevisual de la pantalla del reproductor de vídeo, y llamando al método de la categoría.

function VideoPlayer(){gatewayURL = “http://localhost/amfphp/gateway.php”;getCategories();videoPlayer.visible = false;videoListCombo.enabled = false;}

Método getCategories

El siguiente método en la clase VideoPlayer es getCategories(), que se llama desde el constructor cuando laaplicación se inicializa. Este método comienza por la creación de una nueva instancia del Responder, que seencarga de la respuesta del servicio remoto.

public function getCategories():void{var responder:Responder = new Responder(categoryResponseHandler,onFault); 

}

Una vez definido el respondedor, el siguiente paso es asignar la puerta de entrada a una nueva instancia de laclase NetConnection. Aquí es donde la llamada real al servicio remoto comienza.

public function getCategories():void{var responder:Responder = new Responder(categoryResponseHandler,onFault);

gateway = new NetConnection();

Después que el gateway ha sido debidamente asignado, el siguiente paso es conectar con el servicio remoto,pasando la ruta de puerta de enlace como el único argumento.

public function getCategories():void{var responder:Responder = new Responder(categoryResponseHandler,onFault

Page 434: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 434/467

434

);

gateway = new NetConnection();gateway.connect(gatewayURL);}

El último paso en el método getCategories es hacer la llamada remota. Esto define el servicio que deseaconectarse, así como pasa a lo largo de los encuestados que manejan tanto el éxito y el fracaso respuestas.

public function getCategories():void{var responder:Responder = new Responder(categoryResponseHandler,onFault);

gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Categories.getCategories”, responder);} 

Método categoryResponseHandler  

Ahora que el método getCategories se completa, el siguiente método a desarrollar es elcategoryResponseHandler, que se definió en la instancia Responder. Este método se llama cuando un conjuntode registros válidos se devuelve desde el servicio remoto.

private function categoryResponseHandler(response:Object):void{...}

El contenido de esta clase de manejar la respuesta de los datos del servicio remoto y rellenar el ComboBoxusando estos datos de referencia de vídeo. El primer paso es permitir que el ComboBox, de lo contrario no serácapaz de añadir nuevos contenidos a la misma.

videoListCombo.enabled = true;

Una vez que el ComboBox está habilitada, el siguiente paso es añadir el primer elemento, que informa alusuario seleccionar una opción. Esta opción por defecto tendrá un valor de -1 para alertar de que no es unaidentificación válida. Usted podría utilizar 0, aparte del hecho de que es una identificación válida en la base dedatos.

videoListCombo.addItem({label:‟Choose a Category...‟, data:-1});

Un bucle for each se construye para manejar todos los elementos de respuesta. Este se encargará de cualquiernúmero de elementos de vídeo, que es esencial porque el servicio remoto no devuelve el mismo número cadavez, ya que no todas las categorías tiene la misma cantidad de videos.

for each(var item in response){videoListCombo.addItem({label:item.name, data:item.id});}

Page 435: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 435/467

435

Este bucle se toma cada elemento en el objeto de respuesta y le asigna el nombre y la identificacion de losvalores ComboBox. Esto llena el ComboBox y permite al usuario seleccionar una categoría de vídeo.

El último paso del método categoryResponseHandler es asignar el detector de eventos para el ComboBox. Esteevento se activa cuando el elemento seleccionado de los cambios del componente ComboBox.

videoListCombo.addEventListener(Event.CHANGE, categoryHandler);

Método categoryHandler 

El método categoryHandler se llama cuando el usuario selecciona un elemento diferente en la instancia delcomponente ComboBox.

private function categoryHandler(e:Event):void { ... }

Este método controla el proceso de validación de la categoría seleccionada id. El identificador de categoría realse encuentra en la propiedad selectedItem del el evento passed-in.

var id:Number = e.currentTarget.selectedItem .data;

Este ID de la categoría es validado mediante una sentencia condicional que los controles básicos por un valorde -1, que fue asignado al item por defecto.

if(id == -1) return;

Si el valor no se encuentra, entonces sabes el ID es válido, y el ID de la categoría se asigna a la propiedadselectedCatID facilita el acceso a la categoría actual ID.

selectedCatID = id;

Por último, una llamada al método getVideos se hace para cargar en la lista de vídeo basado en el ID actual.

getVideos();

Método getVideos

El método getVideos se llama cuando se encuentra una categoría válida. Este método se utiliza para hacer laprimera llamada al servicio remoto, que se carga la lista correcta de vídeos a partir de la categoría almacenadosen el método anterior.

La única parte de este método que es diferente del método getCategories son los parámetros pasados a lallamada al método y el éxito de la función asignada al Responder.

public function getVideos():void{var responder:Responder = new Responder(videosResponseHandler,onFault);

gateway = new NetConnection();gateway.connect(gatewayURL);

Page 436: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 436/467

436

gateway.call(“Videos.getVideos”, responder, selectedCatID, „‟);} 

Usted puede crear un controlador de conexión principal y pasar en estas propiedades diferentes, pero parasimplificar, se utilizan varios métodos.

Método videosResponseHandler  

Uno de los principales métodos en esta aplicación tendría que ser el videosResponseHandler.

private function videosResponseHandler(response:Object):void{...} 

Esto se debe a que el método es el responsable de cargar la lista de vídeos y poblar el componente ScrollPanecon la costumbre de los activos de VideoListItem. Estos activos se encuentran en la biblioteca de Flash paraeste proyecto ya que se han completado para usted. Más adelante en este proyecto a desarrollar el código

ActionScript que se adjunta a los activos.

La primera parte de este método es definir la variable nextY que las compensaciones de cada elemento de lalista de vídeo y crea un MovieClip vacío, que se asigna a la propiedad de origen de la instancia de ScrollPane.

var nextY:uint = 5;

var listItem:MovieClip = new MovieClip();videoList.source = listItem;

La mayoría de este método se encuentra en el bucle for..each. Este bucle se ejecuta a través de cada elementode la lista de respuesta de vídeo.

for each(var item in response){...}

Cada paso del bucle se crea una instancia VideoListItem nuevo. Estas instancias de obtener un controlador deeventos que se les asignen y una ubicación única en la lista utilizando la variable de nextY previamentedefinidos.

var videoListItem:MovieClip = new VideoListItem();videoListItem.y = nextY;videoListItem.x = 2;

videoListItem.addEventListener(VideoListItem.ITEM_CLICK,listItemHandler);

La siguiente parte del bucle establece propiedades personalizadas del videoListItem que define el título, ladescripción y vídeo a cargar cuando se hace clic en el artículo.

videoListItem.title = item.name;videoListItem.desc = item.description;

Page 437: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 437/467

437

videoListItem.videoObj = item;videoListItem.setItem(item.vid, „‟, item.src);

Ahora que la instancia VideoListItem se ha completado, el siguiente paso es añadir a la lista de visualizaciónListItem, que lo hace visible en el ScrollPane.

listItem.addChild(videoListItem);

Cada paso de los incrementos de la variable de bucle nextY para asegurar que cada elemento de vídeo secoloca en una posición única. Este valor se determina mediante la adición de la altura del elemento de vídeoactual más un relleno ligero a la variable nextY existentes.

nextY += videoListItem.height + 2;

El último paso del método videosResponseHandler es para actualizar el componente ScrollPane llamando almétodo de actualización. Si usted no llama a este método, la barra de desplazamiento en el ScrollPane noreflejaría el vídeoelemento añadido.

videoList.update();

Como puede ver, el método de videosResponseHandler es responsable de gran parte de la funcionalidad en lalista de vídeo a pesar de que es sólo una parte de la aplicación en general. Se exigía una gran cantidad decódigo personalizado para crear correctamente.

Método listItemHandler  

El método listItemHandler se llama cuando uno de los elementos de vídeo hace clic en el ScrollPane.

private function listItemHandler(e:Event):void{...

}

Este método actualiza la información de vídeo actual en el videoMetaInfo MovieClip encuentran por debajo delreproductor de vídeo.

videoMetaInfo.titleTxt.text = e.currentTarget.videoObj.name;videoMetaInfo.categoryTxt.text = e.currentTarget.videoObj.cat;videoMetaInfo.viewsTxt.text = e.currentTarget.videoObj.count;videoMetaInfo.descTxt.text =e.currentTarget.videoObj.description;  

También es responsable de la sustitución de la fuente del reproductor de vídeo y la reproducción del vídeo

nuevo.

videoPlayer.visible = true;videoPlayer.source = e.currentTarget.source;videoPlayer.play();

Page 438: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 438/467

438

Gestión de errores en respuestas de interacción remota 

El último método de la clase VideoPlayer es un controlador de errores en el servicio remoto. Este método notiene que ser único a menos que prefiera para manejar cada error de forma diferente. Prefiero mostrar elcontenido del error durante el desarrollo porque, como usted recordará, el trigger_error llamadas en el PHP,que devuelve un mensaje de error del usuario.

private function onFault(responds:Object):void{trace(“Debug::Error”);for(var i in responds){trace(“ “ + responds[i]);}} 

Para esta aplicación, el mensaje de error se traza durante el desarrollo y completamente ignorado cuando seejecuta el mundo real. Más adelante en este capítulo, se crea un controlador de errores realista que es similara los encontrados en el vídeo popular de compartir los sitios Web.

Ha completado la clase VideoPlayer entero, que es la mayoría de las aplicaciones de vídeo, al menos para laparte del proyecto de ActionScript.

Esta es la clase VideoPlayer en su totalidad, de esta manera puede mirar por encima de cómo cada uno de losmétodos de interacción con los demás. Este código fuente también está disponible en el sitio Web del libropara que usted pueda cortar y pegar.

package{import flash.display.MovieClip;import flash.events.Event;

import flash.net.*;

public class VideoPlayer extends MovieClip{private var gatewayURL:String;private var gateway:NetConnection;private var selectedCatID:Number;

function VideoPlayer(){gatewayURL = “http://localhost/amfphp/gateway.php”;getCategories();

videoPlayer.visible = false;

videoListCombo.enabled = false;}

public function getCategories():void{var responder:Responder =new Responder(categoryRespHandler, onFault);

gateway = new NetConnection();gateway.connect(gatewayURL);

Page 439: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 439/467

439

gateway.call(“Categories.getCategories”, responder);}

private function categoryRespHandler(response:Object):void{videoListCombo.enabled = true;videoListCombo.addItem({label:‟Choose a Category...‟, data:-1}

);for each(var item in response){videoListCombo.addItem({label:item.name, data:item.id});}videoListCombo.addEventListener(Event.CHANGE,categoryHandler);}

private function categoryHandler(e:Event):void{

var id:Number = e.currentTarget.selectedItem.data;if(id == -1) return;

selectedCatID = id;

trace(“Load Category ID: “ + id);getVideos();}

public function getVideos():void{var responder:Responder =new Responder(videosResHandler, onFault);

gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Videos.getVideos”,responder,selectedCatID,„‟);}

private function videosRespHandler(response:Object):void{var nextY:uint = 5;

var listItem:MovieClip = new MovieClip();videoList.source = listItem;

for each(var item in response){var videoListItem:MovieClip =new VideoListItem();videoListItem.addEventListener(VideoListItem.ITEM_CLICK,listItemHandler);

Page 440: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 440/467

440

videoListItem.y = nextY;videoListItem.x = 2;

videoListItem.title = item.name;videoListItem.desc = item.description;videoListItem.videoObj = item;videoListItem.setItem(item.vid,‟‟, item.src);

listItem.addChild(videoListItem);

nextY += videoListItem.height + 2;

videoList.update();}}

private function listItemHandler(e:Event):void{var info:Object = e.currentTarget.videoObj;videoMetaInfo.titleTxt.text = info.name;videoMetaInfo.categoryTxt.text = info.cat;

videoMetaInfo.viewsTxt.text = info.count;videoMetaInfo.descTxt.text = info.description;

videoPlayer.visible = true;videoPlayer.source = e.currentTarget.source;videoPlayer.play();}

// Error Handlerprivate function onFault(responds:Object):void{trace(“Debug::Error”);for(var i in responds){

trace(“ “ + responds[i]);}}}}

Construir la clase VideoListItem 

El siguiente paso antes de que pueda probar la aplicación es la construcción de la clase VideoListItem. Si intentaejecutar la aplicación en su forma actual, no sólo se obtiene errores, pero tampoco sería capaz de cargarcualquier video porque los artículos no son seleccionables en el momento.

El primer paso es crear un archivo de ActionScript en su editor favorito. Guardar este archivo comoVideoListItem.as en el mismo directorio donde se ubica la FLA. Después de que el archivo se crea, ustednecesita para construir el esqueleto del archivo de clase, que debe extender la clase MovieClip, ya que seadjunta a una instancia de MovieClip en la biblioteca.

package{import flash.display.MovieClip;public class VideoListItem extends MovieClip

Page 441: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 441/467

441

{}} 

Además de la clase MovieClip que se importa, también deberá importar unas pocas clases de otros con el fin dedesarrollar correctamente esta clase. Estas otras clases manejar el texto, eventos, y las partes del ratón sobreinstancias del ítem de vídeo.

import flash.display.MovieClip;import flash.text.TextField;import flash.events.Event;import flash.events.MouseEvent; 

La clase también debe tener algunas propiedades por defecto definida, que será modificado más tarde en laclase. La mayoría de las propiedades son las definiciones de cadena de base. Sin embargo, la última propiedad,ITEM_CLICK, es una especial constante público que se utiliza en el controlador de eventos. Esto se hace públicopara que la variable puede ser accedida fuera de la clase.

public var videoObj:Object;

private var _id:uint;private var _title:String;private var _desc:String;private var _thumb:String;private var _src:String;

public static const ITEM_CLICK:String = “onItemClick”;

VideoListItem constructor  

El constructor de esta clase simplemente establece el alfa del tema hasta el 50 por ciento, pero debido a alfa esun valor de 0 a 1, el 50 por ciento es en realidad 0.5.

function VideoListItem(){alpha = 0.5;} 

Método setItem

El primer método personalizado de esta clase es setItem. Este método se llama en la creación de una nuevainstancia y se establece el id, laminiatura y los parámetros de fuente de vídeo. Para este ejemplo, la opción delthumb (miniatura) no se utiliza, pero se puede ampliar el ejemplo, porque ya se ha añadido.

function setItem(id:uint, thumb:String, src:String){ _id = id; _thumb = thumb; _src = src; } 

La segunda parte del método setItem asigna a los detectores de eventos para el objeto del ratón. Aquí estambién donde se habilita el icono del puntero del ratón cuando el usuario pasa el ratón sobre el elemento devídeo.

Page 442: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 442/467

442

function setItem(id:uint, thumb:String, src:String){_id = id;_thumb = thumb;_src = src;

 buttonMode = true;

useHandCursor = true;addEventListener(MouseEvent.ROLL_OVER, overHandler);addEventListener(MouseEvent.ROLL_OUT, outHandler);addEventListener(MouseEvent.CLICK, clickHandler); }

Métodos de controlador de ratón 

Los métodos de controlador de ratón se utilizan para modificar el valor alfa del elemento de vídeo. En esteejemplo, que básicamente establece el alfa plenamente visible o parcialmente visible. Desde aquí se puedeañadir una interpolación a esta propiedad y tienen la propiedad de Alpha sin problemas el cambio.

private function overHandler(e:MouseEvent):void{e.currentTarget.alpha = 1.0;}

private function outHandler(e:MouseEvent):void{e.currentTarget.alpha = 0.5;} 

El método clickHandler desencadena el evento ITEM_CLICK que alerta a los objetos de escuchar el clic. En estecaso, el acto se notificará al VideoPlayer vídeo específico, y que se cargan.

private function clickHandler(e:MouseEvent):void{dispatchEvent(new Event(ITEM_CLICK));} 

El resto de los métodos de la clase VideoListItem son para obtener y establecer las propiedades previamentedefinidos. Por ejemplo, el título puede ser recuperado llamando a obtener el título, como el:

public function get title():String{return _title;} 

También puede establecer la propiedad de título llamando ser title y que pasar en el título del vídeo.

public function set title(val:String):void{_title = val;titleTxt.text = val;}

Page 443: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 443/467

443

Definición de los métodos getter y setter 

El resto de métodos getter/setter aparecen en el siguiente código y también están en la clase completadisponible en la fuente de código del libro:

public function get id():uint{

return _id;}

public function get source():String{return _src;}

public function get desc():String{return _desc;}public function set desc(val:String):void{_desc = val;descTxt.text = val;} 

Eso es todo lo que hay en la clase VideoListItem. Como puede ver, es en su mayoría autónomos, que hace queeste pequeño objeto reutilizable en otras aplicaciones. En este ejemplo, usted está construyendo unreproductor de vídeo, pero que podría cambiar fácilmente a un visor de productos, visor de documentos, ocualquier cosa que usted puede pensar.

Esta es la clase VideoListItem completa, que se puede estudiar o simplemente copiar y pegar desde el sitioWeb del libro.

package{import flash.display.MovieClip;import flash.text.TextField;import flash.events.Event;import flash.events.MouseEvent;

public class VideoListItem extends MovieClip{

public var videoObj:Object;

private var _id:uint;

private var _title:String;private var _desc:String;private var _thumb:String;private var _src:String;

public static const ITEM_CLICK:String = “onItemClick”;

function VideoListItem(){alpha = 0.5;}

Page 444: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 444/467

444

function setItem(id:uint, thumb:String, src:String){_id = id;_thumb = thumb;_src = src;

buttonMode = true;

useHandCursor = true;addEventListener(MouseEvent.ROLL_OVER, overHandler);addEventListener(MouseEvent.ROLL_OUT, outHandler);addEventListener(MouseEvent.CLICK, clickHandler);}

private function overHandler(e:MouseEvent):void{e.currentTarget.alpha = 1.0;}

private function outHandler(e:MouseEvent):void{

e.currentTarget.alpha = 0.5;}

private function clickHandler(e:MouseEvent):void{dispatchEvent(new Event(ITEM_CLICK));}

public function get id():uint{return _id;}

public function get source():String

{return _src;}

public function get title():String{return _title;}public function set title(val:String):void{_title = val;titleTxt.text = val;}

public function get desc():String{return _desc;}public function set desc(val:String):void{_desc = val;descTxt.text = val;}}

Page 445: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 445/467

445

}

En este punto usted ha completado el reproductor de vídeo Flash y PHP. Ahora puede probar la aplicación, ypodrás ver la misma interfaz que empezamos. La diferencia es, si selecciona una categoría, el ScrollPane sellenará con los videos de esta categoría.

A continuación, hacer clic en un elemento de vídeo y el vídeo comenzará a reproducirse. Tal como está, el

reproductor de vídeo es una aplicación bastante robusto que puede ser ampliado.

En la sección siguiente que usted hará exactamente eso agregando un poco de seguimiento de base. Luego, enuna sección posterior, se agrega un componente de entrada de los usuarios que los resultados en unaaplicación en el mundo verdaderamente real, manteniendo la funcionalidad original del jugador.

Trabajar con seguimiento de video 

En la sección anterior, se construyó un flash completo basado en un reproductor de vídeo de PHP que permiteobtener un resultado dinámico. Esta aplicación permite al propietario proceda a actualizar la base de datos, y laaplicación Flash refleja estos cambios la próxima vez que se carga.

El problema viene cuando el dueño quiere saber qué vídeos son populares. Desea que el proyecto paraayudarle a determinar qué contenido de vídeo es muy popular por lo que puede agregar más contenido similar.

La solución es desarrollar el seguimiento de vídeo que registra cuántas veces un vídeo ha sido visto. Esto sehace por tener una columna en la base de datos que mantiene la cuenta activa. A continuación, añadir el apoyonecesario a las clases de PHP y, finalmente, la actualización de Flash para mostrar el número.

La base de datos no necesita ser actualizado, porque la columna de conteo fue agregado en la sección anterior,aunque no se utilizó. Agregar más columnas que va a utilizar para empezar es común para la aplicación tiene lacapacidad de crecer. Columnas extra también puede ser el resultado de eliminar temporalmente una

característica de una aplicación después de que el esquema de base de datos se crea.

Actualizar la clase de video 

La clase de servicio de vídeos se creó en la sección anterior. Todo lo que tienes que hacer ahora es agregar elnuevo método utilizado para modificar el recuento de vídeo: 

public function updatePlayCount($vid){$link = $this->getConnection();...}

Este método acepta un parámetro, que es una referencia a la id de vídeo que debe ser actualizada.La primera parte de este método crea un enlace a la base de datos utilizando la clase de base de datosexistente, construido en la sección anterior. Esta variable $link se pasa en todas las acciones futuras de SQL eneste método.

Page 446: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 446/467

446

La segunda parte del método es crear una consulta SQL que agarra el recuento de reproducción actual delvídeo deseado.

public function updatePlayCount($vid){$link = $this->getConnection();$query = sprintf(“SELECT count FROM videos WHERE id=%d”, $vid);

$result = mysql_query($query, $link); }

Comprobación de registros válidos 

Después de que el valor está cargado, el siguiente paso es comprobar que un registro válido utilizando lafunción familiar mysql_num_rows.

public function updatePlayCount($vid){$link = $this->getConnection();

$query = sprintf(“SELECT count FROM videos WHERE id=%d”, $vid);

$result = mysql_query($query, $link);

if(mysql_num_rows($result) > 0){...}}

El contenido de esa declaración condicional cuando el valor se actualiza, según el recuento de determinar en laconsulta SQL anterior.

$row = mysql_fetch_row($result);$count = $row[0];

$count++;$queryUpdate = sprintf(“UPDATE videos SET count=%d WHERE id=%d”,$count, $vid);mysql_query($queryUpdate, $link);

La consulta SQL que actualiza la base de datos se ha construido utilizando sprintf para pasar en limpio la cuentay de identificación de vídeo, en lugar de la construcción de una cadena duro de leer, que es más común. El usode sprintf es tanto más importante cuando vuelva a un proyecto más tarde.

En este punto, usted ha hecho todos los cambios en el archivo Videos.php y puede continuar con lasmodificaciones necesarias a las clases de ActionScript.

Adición de seguimiento de vídeo a ActionScript

La característica de seguimiento de vídeo puede ser añadido en uno de los dos lugares. Usted puede agregar laactualización que se ejecuta cuando el vídeo comienza a reproducirse, o bien añadir que lo que el recuentosólo se actualiza después de que el vídeo se ha visto totalmente.

Cada opción tiene sus ventajas. Para este ejemplo, la llamada de seguimiento se hace cuando se solicita unnuevo vídeo, en lugar de esperar a que el vídeo completo. Esta acción es similar a un contador de visitas en un

Page 447: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 447/467

447

sitio Web, con la excepción de que no va a ser único en esta aplicación. Sin embargo, usted puede agregar elcódigo necesario de los ejemplos anteriores para garantizar la actualización es única

Método updateVideoTracking 

Los métodos de seguimiento se pueden agregar nuevas en cualquier punto de la clase VideoPlayer, sino unlugar lógico es sobre el método de onFault. La primera parte de este nuevo método es crear una nuevainstancia de la clase Responder, pasando por el método de control de respuesta como el primer parámetro.

private function updateVideoTracking(vid:uint):void{var responder:Responder = new Responder(updateTrackingHandler,onFault);...} 

Después que se crea una nueva instancia Responder, el siguiente paso es crear la conexión de puerta de enlace

utilizando una nueva instancia de la clase NetConnection. Este proceso es idéntico al de otros remoto llamadasque ha realizado en la sección anterior.

private function updateVideoTracking(vid:uint):void{var responder:Responder = new Responder(updateTrackingHandler,onFault);gateway = new NetConnection();gateway.connect(gatewayURL);}

La actualización final para el método updateVideoTracking es donde se realiza la llamada al servicio remoto. Lapresente convocatoria se pasa a lo largo de la identificación de vídeos al día y la respuesta debe ser el nuevocontador o un error si algo sale mal.

private function updateVideoTracking(vid:uint):void{var responder:Responder = new Responder(updateTrackingHandler,onFault);gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“Videos.updatePlayCount”, responder, vid);

Una vez que se actualiza el recuento, el recuento de nuevo volvió a Flash. Al igual que las llamadas remotoanteriores, un controlador de respuesta es necesaria para la captura de esta respuesta. En este ejemplo, lacuenta de nuevo se envía a la TextField situado en el MovieClip videoMetaInfo para reflejar la cuenta actual.

private function updateTrackingHandler(response:Object):void{videoMetaInfo.viewsTxt.text = response.count;} 

Page 448: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 448/467

448

El último paso para agregar la función de rastreo es la de modificar el método de listItemHandler existentes yañadir en la llamada al método de actualización, tales como las siguientes:

private function listItemHandler(e:Event):void{...updateVideoTracking(e.currentTarget.videoObj.vid);

}

En este punto, la adición de seguimiento es completo. Como puede ver, el proceso de creación original en laprimera sección permite realmente la capacidad de introducir nuevas funciones con actualizaciones mínimas.

Ahora, el reproductor de vídeo puede seguir correctamente los videos y le informará de qué vídeos son máspopulares que otros. Desde aquí se puede desarrollar un panel de administración, donde todos estos datospodría ser visto, o usted puede acceder a su editor de SQL y consultar la tabla de vídeos para la cuenta deactivos de cada vídeo.

Construir un componente de Login de usuario en

Flash 

Ahora que el reproductor de video está bastante llena de características, es bastante seguro asumir el sitioWeb debe exigir el registro para poder utilizar el reproductor. Agregar el registro es una cuestión de crear unaforma básica y la actualización de una tabla de base de datos, nada que unas cuantas líneas de código no sepuede lograr.

La parte más avanzada de esta función es necesario Flash para interactuar con el inicio de sesión de usuario.Para empezar, la aplicación Flash necesita para mostrar un panel de inicio de sesión cuando se inicie laaplicación y también tiene que desactivar la interfaz hasta que el usuario inicia la sesión correctamente.

De acuerdo con la idea de hacer el código reutilizable, vamos a desarrollar el componente de inicio de sesiónen un archivo Flash y luego simplemente dejarlo en su lugar cuando se haya completado.

Comience por abrir la sesión de archivo de arranque de componentes, que ya tiene el diseño terminado parausted, como se muestra en la Figura 17.5. Todo lo que necesitas para estar preocupados es con el código detrásdel componente de inicio de sesión.

Page 449: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 449/467

449

FIGURA 17.5El componente de inicio de sesión que ha sido previamente diseñado

Cuando el componente está abierto notará el movieclip en la biblioteca es asignado a una clase con un nombre

de LoginWindow. No se puede personalizar esa clase por lo que necesita para crear un nuevo archivoActionScript y guárdelo en la carpeta del proyecto con la FLA.

Construir la clase LoginWindow 

Ahora que el archivo se crea puede empezar a construir el código de acceso. El primer paso es construir elesqueleto de la clase y extender el MovieClip, que es el mismo proceso que hemos seguido en los apartadosanteriores.

Esta clase no sólo debe importar la clase MovieClip estándar, pero también va a requerir algunos nuevos. Estasnuevas clases se utilizarán para crear las acciones para deshabilitar la interfaz y el manejo de la interacción conel ratón.

package{import flash.display.MovieClip;import flash.geom.Rectangle;import flash.events.Event;import flash.events.MouseEvent;import flash.net.*; 

public class LoginWindow extends MovieClip

Page 450: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 450/467

450

{function LoginWindow(){...}}} 

Las propiedades de esta clase son los responsables de la gestión de eventos y la creación de referencias a laMovieClips creados en tiempo de ejecución.

public var data:Object;

private var _visible:Boolean = false;private var container:MovieClip;private var blocker:MovieClip = null;

public static var LOGIN_ATTEMPT:String = “onLoginAttempt”; 

LoginWindow constructor  

El constructor de la clase LoginWindow es donde se establece la propiedad de contenedores. Aquí es tambiéndonde se encuentran los controladores de eventos para los botones. Esto se hace para asegurar que losbotones se les asigna la vez visible para el código es estable.

function LoginWindow(){container = this;

loginMC.resetBtn.addEventListener(MouseEvent.CLICK,resetHandler);loginMC.loginBtn.addEventListener(MouseEvent.CLICK,loginHandler);

Método redraw 

El método redraw se llama cuando la interfaz cambia. Esto es principalmente una preocupación cuando elusuario tiene la posibilidad de redimensionar el escenario, aunque la mayoría de aplicaciones de sitios Webtienen un tamaño fijo. Este método tiene que tener algo de lógica en relación con el clip de bloqueo paraasegurar que no se extrae más de una vez. El clip de bloqueo es un movieclip que elimina la interacción de laaplicación que obliga al usuario a iniciar sesión por "bloqueo" de los clics del ratón.

public function redraw():void{

if(blocker == null){...}else{...}...} 

Page 451: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 451/467

451

El contenido de la condicional para cuando el clip de bloqueo es nulo señala a la MovieClip bloqueo realutilizando el incorporado en la API de dibujo.

blocker = new MovieClip();blocker.alpha = 0.5;blocker.graphics.beginFill(0x000000);

blocker.graphics.drawRect(0, 0, stage.stageWidth,stage.stageHeight); 

Una vez que el clip ha sido elaborado, el siguiente paso es asignar los controladores de eventos falsos para elclip de bloqueo.Flash no tiene una interfaz nativa que se puede desactivar, porque el código puede ser personalizado.La forma de evitar esto es crear una pseudo-Disabler. Esto no es más que un MovieClip colocado en elescenario, que atrapa a todas las interacciones con el ratón y lo cancela. Esto evita que el interfaz subyacente yla aplicación que se utilice hasta que este clip de bloqueo se retira.

blocker.addEventListener(MouseEvent.ROLL_OVER, dummyHandler);blocker.addEventListener(MouseEvent.ROLL_OUT, dummyHandler);

blocker.addEventListener(MouseEvent.CLICK, dummyHandler); 

Después de la primera vez que la pantalla se vuelve a dibujar, el bloqueador que ya se han creado. Una anchurasimple y ajuste de altura es la única actualización necesaria. De hecho, si se llama al método estándar de volvera dibujar sin la condicional, cada vez que se vería de otro clip de bloqueo a medida que comienzan aacumularse.

blocker.width = stage.stageWidth;blocker.height = stage.stageHeight;

Independientemente de si este es el primer paso del método de volver a dibujar o no, el clip de bloqueo debeser reubicado. La ventana de inicio de sesión se coloca un punto muerto, lo que significa que puede calcular el

relleno alrededor de ella, multiplica esto para crear un número negativo, y coloque el clip de bloqueoutilizando ese cálculo.

// reverse the offset to position blockerblocker.y = y * -1;blocker.x = x * -1;

Cuando todos los cálculos están completos, puede añadir el bloqueador de MovieClip a la DisplayList, que lehace visible en la aplicación.

addChild(blocker);

NOTA Hacer que todos los cálculos basados en la posición antes de que el clip se agrega a la lista devisualización minimiza el parpadeo y saltar los objetos en su aplicación. 

Colocación de dos MovieClips 

ActionScript 3 no tiene ningún tipo de gestión a fondo como lo que se encuentra en ActionScript 2 y suspredecesores. El equivalente está tomando el id de un clip y de intercambio con otro clip. Esta parece ser lagestión de profundidad, excepto por el hecho muy importante que ActionScript se encarga de la reordenación,cuando se intercambian los niños.

Page 452: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 452/467

452

En este ejemplo, usted quiere asegurarse de que la casilla de ingreso está por encima del cl ip de bloqueo,porque si se coloca por debajo de ella, el usuario no es capaz de interactuar o acceder a la aplicación:

container.swapChildren(loginMC, blocker);

Centrar un MovieClip 

El último paso del método consiste en volver a dibujar el centro de la casilla de ingreso en el escenario paraasegurar que siempre está en el centro. Esta se actualiza constantemente cuando el método redraw (volver adibujar) se llama, porque cambiar el tamaño de la etapa sería la casilla de ingreso sentarse en una posición nocentrado.

loginMC.x = (stage.stageWidth / 2) - (loginMC.width / 2);loginMC.y = (stage.stageHeight / 2) - (loginMC.height / 2);

El cálculo utiliza las dimensiones del escenario y las dimensiones de caja de ingreso para determinar el puntomedio. Aquí es donde el loginMC MovieClip se coloca cuando se completa el cálculo.

Método close 

El método close tiene una tarea: para eliminar la casilla de ingreso actual y permitir la aplicación para serutilizado una vez más. El proceso de eliminación se consigue mediante la eliminación del niño contenedor, quecontiene el cuadro de acceso y bloqueo de MovieClip.

public function close():void{container.parent.removeChild(container);}

Método resetHandler  

El método resetHandler se llama cuando se hace clic el botón de reinicio. Este método borra todos losmensajes de estado y se vacía la información de acceso y campos de contraseña.

private function resetHandler(e:MouseEvent):void{loginMC.username.text = “”;loginMC.password.text = “”;loginMC.responseTxt.text = “”;} 

Método loginHandler  

El método loginHandler se adjunta al evento Click del loginBtn. Este método se llama cuando el loginBtn sehace clic con el ratón.

private function loginHandler(e:MouseEvent):void{...}

Page 453: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 453/467

453

Este método es responsable de comprobar el nombre de usuario y contraseña para campos de datos válidos. Siuno de estos ámbitos está vacía, salir de la función y un mensaje de respuesta aparece debajo del campo de lacontraseña.

loginMC.responseTxt.text = “”;

if(loginMC.username.text == “” || loginMC.password.text == “”)

{loginMC.responseTxt.text = “username & password required”;return;}

Si el nombre de usuario y contraseña son campos con los valores aceptables, los valores se almacenan en lapropiedad data, que será leído por el guión de llamadas en un controlador de eventos personalizados.

data = {username:loginMC.username.text,password:loginMC.password.text}; 

La última parte de este método es disparar un evento personalizado, alertando a la secuencia de comandos dellamada que un nombre de usuario y contraseña han sido capturados y deben ser validados.

dispatchEvent(new Event(LOGIN_ATTEMPT));

Este componente ha sido desarrollado para separar la pantalla y la lógica de la seguridad, lo que significa que elcomponente puede ser reutilizado, porque nada está codificada en la lógica de inicio de sesión real.

El último método real es un setter, que se utiliza para establecer la cadena en el exterior de respuesta. Esteserá llamado desde el loginHandler si la validación falla y no desea mostrar al usuario para que él o ella puedeintentar otra contraseña o nombre de usuario.

public function set responseString(s:String):void{loginMC.responseTxt.text = s;} 

El método dummyHandler no tiene ninguna funcionalidad. Se utiliza para bloquear los eventos de ratón que seproducen en el movieclip de bloqueo. Este método es necesario porque un controlador de eventos necesitauna función válida, y si se define un anónimo, se crea una pérdida de memoria lenta.

private function dummyHandler(e:MouseEvent):void{// no action

En este punto usted ha completado la clase LoginWindow y puede moverse a la siguiente etapa, que es crearalrededor de ActionScript sencillo para probar el componente. Cuando está debidamente probado se puedecrear el servicio de PHP y el componente de inicio de sesión para interactuar con la base de datos querealmente buscan los usuarios reales de intentar iniciar sesión.

Page 454: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 454/467

454

Esta es la clase LoginWindow completa.

package{import flash.display.MovieClip;import flash.geom.Rectangle;import flash.events.Event;import flash.events.MouseEvent;import flash.net.*;

public class LoginWindow extends MovieClip{

public var data:Object;

private var _visible:Boolean = false;private var container:MovieClip;private var blocker:MovieClip = null;

public static var LOGIN_ATTEMPT:String = “onLoginAttempt”;

function LoginWindow(){container = this;

loginMC.resetBtn.addEventListener(MouseEvent.CLICK,resetHandler);loginMC.loginBtn.addEventListener(MouseEvent.CLICK,loginHandler);}

public function redraw():void{if(blocker == null){blocker = new MovieClip();blocker.alpha = 0.5;blocker.graphics.beginFill(0x000000);blocker.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);blocker.addEventListener(MouseEvent.ROLL_OVER,dummyHandler

);blocker.addEventListener(MouseEvent.ROLL_OUT,dummyHandler);blocker.addEventListener(MouseEvent.CLICK,dummyHandler);}

Page 455: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 455/467

455

else{blocker.width = stage.stageWidth;blocker.height = stage.stageHeight;}

// reverse the offset to position blockerblocker.y = y * -1;

blocker.x = x * -1;

addChild(blocker);

container.swapChildren(loginMC, blocker);

loginMC.x = (stage.stageWidth / 2) -(loginMC.width / 2);

loginMC.y = (stage.stageHeight / 2) -(loginMC.height / 2);

_visible = true;

}

public function close():void{container.parent.removeChild(container);}

private function resetHandler(e:MouseEvent):void{loginMC.username.text = “”;loginMC.password.text = “”;loginMC.responseTxt.text = “”;}private function loginHandler(e:MouseEvent):void

{loginMC.responseTxt.text = “”;

if(loginMC.username.text == “” ||loginMC.password.text == “”){loginMC.responseTxt.text =“username & password required”;return;}

data = {

username:loginMC.username.text,password:loginMC.password.text};dispatchEvent(new Event(LOGIN_ATTEMPT));}

public function set responseString(s:String):void{loginMC.responseTxt.text = s;}

Page 456: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 456/467

456

private function dummyHandler(e:MouseEvent):void{//}}}

Probar el componente de login 

El siguiente paso es poner a prueba el componente de inicio de sesión para asegurarse de que todo estáfuncionando correctamente. El primer paso es crear una nueva instancia del componente LoginWindow deforma autónoma FLA, o puede utilizar la muestra que se encuentra el archivo con el código del libro Código.

var login:LoginWindow = new LoginWindow();

Una vez creada la instancia, el siguiente paso es asignar un controlador de eventos para el eventopersonalizado LOGIN_ATTMEPT que se llama cuando el usuario escribe los datos en tanto el nombre de usuarioy los campos de contraseña y luego haga clic en el botón Iniciar sesión.

login.addEventListener(LoginWindow.LOGIN_ATTEMPT, loginHandler);

Después de cargar el componente de ventana de inicio y el controlador de eventos adecuado es asignado, elsiguiente paso es añadir a la lista de visualización, que hace visible.

addChild(login);

Asignar un controlador de evento de escena 

Usted quiere asegurarse de que cualquier modificación a la etapa vuelve a dibujar el componente de acceso, olos artículos que están siendo bloqueados accidentalmente pueden situarse más allá del bloqueo de MovieClip.

stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;stage.addEventListener(Event.RESIZE, stageResizeHandler);

Después que el evento se asigna al objeto de escena, es necesario crear la función que se hace referencia en eldetector de eventos. Para esta aplicación, el controlador simplemente hace una llamada al método de volver adibujar el componente de acceso. En una aplicación en el mundo real puede que tenga más funcionalidad eneste evento, pero por ahora esto está muy bien para las pruebas.

function stageResizeHandler(e:Event):void{login.redraw();} 

Manejo el intento (attempt) de acceso 

La siguiente función se usa para manejar los intentos de acceso. Para simplificar, esta función tiene un nombrede usuario y contraseña predefinidos, que posteriormente se sustituye con un servicio remoto en la siguientesección.

Si se llega a un inicio de sesión válida, se llama el método de cierre de la componente de acceso. Esto elimina elcuadro de inicio de sesión y permite la aplicación de ese período de sesiones.

Page 457: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 457/467

457

function loginHandler(e:Event):void{if(login.data.username == “guest” && login.data.password ==“pass”){login.close();}}

NOTA Esta aplicación no almacena los inicios de sesión, lo que significa el inicio de sesión es válida sólo para lasesión activa. Los usuarios tendrán que iniciar sesión cada vez que visitan la aplicación. 

La función de loginHandler se encarga de los inicios de sesión con éxito, pero no notifica al usuario de unintento de acceso incorrecto. Esto se puede solucionar mediante la adición de una declaración más queactualiza el cuadro de respuesta en el cuadro de inicio de sesión.

function loginHandler(e:Event):void{if(login.data.username == “guest” && login.data.password ==“pass”)

{login.close();}else{login.responseString = “username and password incorrect”;} } 

El último paso es hacer la llamada inicial al evento resize señalar el componente de acceso para la primera vez.Usted también puede llamar al método de volver a dibujar directamente, en lugar de pasar por el eventoresize.

stage.dispatchEvent(new Event(Event.RESIZE));

Aquí está el código completado para esta prueba. La mayoría de los componentes de conexión es manejadointernamente pero ofrece facilidad de uso final.

var login:LoginWindow = new LoginWindow();login.addEventListener(LoginWindow.LOGIN_ATTEMPT, loginHandler);

addChild(login);

stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;stage.addEventListener(Event.RESIZE, stageResizeHandler);

function stageResizeHandler(e:Event):void{login.redraw();}

function loginHandler(e:Event):void{trace(“Do Login”);trace(“Username: “ + login.data.username);trace(“Password: “ + login.data.password);

Page 458: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 458/467

458

if(login.data.username == “guest” && login.data.password ==“pass”){trace(“user logged in”);login.close();}else

{login.responseString = “username and password incorrect”;}}

stage.dispatchEvent(new Event(Event.RESIZE));

Ahora que ha completado el código ActionScript necesario para la muestra, usted puede probar el componentede acceso. Debe aparecer una pantalla de acceso de inmediato y no ser capaz de interactuar con cualquierparte de la película, con exclusión de la pantalla de conexión, como se muestra en la Figura 17.6, hasta queescriba la dirección de acceso.

FIGURA 17.6Ejemplo de aplicación que muestra el componente de inicio de sesión 

Page 459: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 459/467

459

Construir la clase de administrador de login en PHP 

El siguiente paso en la construcción del sistema de acceso para conectarse a la base de datos de los usuarios,ya que un nombre de usuario y la contraseña codificada no es muy práctico y ciertamente no segura.

Creación de tablas MySQL del usuario

El primer paso es crear la mesa del usuario en la base de datos existente:

CREATE TABLE `users` (`id` int(11) NOT NULL auto_increment,`username` varchar(25) default NULL,`password` varchar(40) default NULL,`active` varchar(1) default „1‟,PRIMARY KEY (`id`)) ENGINE=MyISAM; 

Entonces usted puede rellanar la tabla con algunos de los inicios de sesión de la muestra para realizar pruebas:

INSERT INTO users (username, password) VALUES („guest‟,MD5(„pass‟));INSERT INTO users (username, password) VALUES („timmy‟,MD5(„bird‟)); 

Una clara diferencia de los inicios de sesión predefinidos en Flash es que estos inicios de sesión tienencontraseñas encriptadas como un nivel adicional de seguridad.

Antes de que usted puede agregar la lógica de la conexión al servicio, es necesario crear la clase de PHP. Estaclase de verificación para los usuarios válidos, y si se encuentra uno, se volverá un verdadero, lo que significaque el usuario es válido y el cuadro de inicio de sesión puede ser removido.

Construir la clase de usuario 

La clase User.php es como las clases de servicios en que se extiende la clase DatabaseConnector para todas lascomunicaciones de base de datos. Aquí está el esqueleto de la clase de usuario:

<?php

require_once „DatabaseConnector.php‟;

class User extends DatabaseConnector{function User(){...}}

?> 

Page 460: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 460/467

460

Método login 

El primer método, y sólo en esta clase es de acceso. Este método acepta dos argumentos: el nombre de usuarioy contraseña para validar. La primera parte de este método es crear una nueva conexión a la base de datos:

/*** Check user auth

* @access remote* @returns status of user login attempt*/function login($user, $pass){$link = $this->getConnection();}

Cuando se establece la conexión de base de datos, puede marcar el usuario como no conectado. Esto impidecualquier posible intento de hacking que accidentalmente podría hacer un registro de usuario.

$loggedIn = false;

Lo siguiente es la consulta SQL que intenta validar el nombre de usuario y contraseña de combo. La contraseñase pasa a la función md5 ya que Flash envía la contraseña en texto claro, pero la base de datos almacena elresultado de md5.

$query = sprintf(“SELECT * FROM users WHEREusername=‟%s‟ ANDpassword=MD5(„%s‟)”, $user, ($pass)); 

El siguiente paso es hacer la llamada base de datos y almacenar la respuesta en la variable $result, como semuestra en el siguiente código:

$result = mysql_query($query, $link);

Una vez que la respuesta se almacena, una sentencia condicional se usa para determinar si se devuelven filas.Si se devuelve una fila, significa que los datos son válidos y el usuario se ha autenticado basada en lascredenciales que él o ella pasa a lo largo.

Cuando una respuesta válida se encuentra, la variable $loggedIn se establece como verdadera para informar aFlash que el usuario es, en realidad, válida y ha ingresado exitosamente.

if(mysql_num_rows($result) > 0){$loggedIn = true;} 

El último paso es devolver el resultado de manera que Flash puede actuar en consecuencia.

return array(„response‟ => $loggedIn);

Ahora que ha completado la clase de PHP, el siguiente paso es probarlo. Para esta prueba se puede utilizar elnavegador de servicio que se incluye con AMFPHP. Usted encontrará que en el navegador una URL similar a lasiguiente, dependiendo de donde se instaló la fuente de:

Page 461: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 461/467

461

http://localhost/flashphp/amfphp/browser/ 

Por último, aquí es la clase de usuario completa, que debe ser guardado como User.php en el directorio deservicios de la instalación de AMFPHP si no lo han hecho:

<?php

require_once „DatabaseConnector.php‟;

class User extends DatabaseConnector{

/*** Check user auth* @access remote* @returns status of user login attempt*/function login($user, $pass){$link = $this->getConnection();

$loggedIn = false;

$query = sprintf(“SELECT * FROM users WHEREusername=‟%s‟ ANDpassword=MD5(„%s‟)”, $user, ($pass));$result = mysql_query($query, $link);

if(mysql_num_rows($result) > 0){$loggedIn = true;}

return array(„response‟ => $loggedIn);

}}

?>

Agregar remotamente el componete login 

Ahora que ha completado la clase de Usuarios de PHP, el paso siguiente es modificar el componente de accesoexistentes para utilizar esta clase de servicios nuevos.

El primer paso es agregar la variable de puerta de enlace y la URL de donde el archivo gateway.php se puedeencontrar en el servidor de desarrollo.

var gateway:NetConnection;var gatewayURL:String = “http://localhost/amfphp/gateway.php”;

El ejemplo original fue el de validación de usuario directamente en el archivo de Flash. Si bien esto erafuncional, no era muy práctico porque sólo un usuario o la contraseña puede ser utilizado.

Page 462: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 462/467

462

loginHandler method 

Este nuevo sistema modifica la función loginHandler existentes mediante la adición de una llamada de servicioremoto, enviando el nombre de usuario y la contraseña que fue capturado por la ventana de conexión decomponentes.

function loginHandler(e:Event):void

{trace(“Do Login”);trace(“Username: “ + login.data.username);trace(“Password: “ + login.data.password);var responder:Responder = new Responder(loginRespHandler,onFault);gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“User.login”, responder,login.data.username,login.data.password ); }

La clase Responder necesita un controlador de respuesta definida, por lo que la siguiente función controla estarespuesta de servicio. Para este ejemplo, el servicio o bien devuelve un booleano para saber si el usuario estáregistrado o no, o un error si algo sale mal.

function loginRespHandler(o:Object):void{...} 

Una declaración condicional simple se usa para determinar si el usuario se registra en base a la respuesta delservicio remoto.

Controlar la respuesta de login

Si el usuario está conectado, una llamada al método de cierre del componente de conexión es hecha paraocultar la ventana de acceso y permitir la interfaz de la aplicación.

function loginRespHandler(o:Object):void{if(o.response == true){login.close();} }

Una opción más es añadido para manejar los intentos de acceso incorrectos mediante la actualización delmensaje de respuesta del componente de inicio de sesión.

function loginRespHandler(o:Object):void{if(o.response == true){login.close();}

Page 463: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 463/467

463

else{login.responseString = “username and password incorrect”;}} 

Manejo de los errores de respuesta

La última función necesaria para el sistema de acceso es la onFault, que controla los errores en las llamadas deservicio. Por ejemplo, si la secuencia de comandos logrado intento de inicio de sesión con un cheque sinnombre de usuario o contraseña, el SQL sería un fracaso. Este error se incrementará en la clase de PHP yenviado de vuelta a Flash, en el supuesto de que está correctamente manejada.

function onFault(responds:Object):void{trace(“Debug::Error”);for(var i in responds){trace(“ “ + responds[i]);}

Ahora que el código remoto se ha añadido a la anterior componente de ejemplo de acceso, puede probarlo, yrealmente no debería notar ninguna diferencia. El único cambio sería la posibilidad de usar más de un usuario,siempre y cuando se encuentra en la tabla de usuarios que ha creado al comienzo de esta sección.

Aquí está el ejemplo de componentes de entrada con el código adecuado remoto incluido:

var gateway:NetConnection;var gatewayURL:String = “http://localhost/amfphp/gateway.php”;

var login:LoginWindow = new LoginWindow();

login.addEventListener(LoginWindow.LOGIN_ATTEMPT, loginHandler);

addChild(login);

stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;stage.addEventListener(Event.RESIZE, stageResizeHandler);

function stageResizeHandler(e:Event):void{login.redraw();}

function loginHandler(e:Event):void

{trace(“Do Login”);trace(“Username: “ + login.data.username);trace(“Password: “ + login.data.password);

var responder:Responder = new Responder(loginRespHandler, onFault);gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“User.login”, responder,login.data.username,

Page 464: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 464/467

464

login.data.password);}

function loginRespHandler(o:Object):void{trace(“Response: “ + o.response);

if(o.response == true){trace(“user logged in”);login.close();}else{login.responseString = “username and password incorrect”;}}

function onFault(responds:Object):void{

trace(“Debug::Error”);for(var i in responds){trace(“ “ + responds[i]);}}stage.dispatchEvent(new Event(Event.RESIZE));

Finalizar el reproductor de video 

La última sección de este capítulo está ultimando el reproductor de vídeo. Deberá implementar el componentede acceso que construyó en la sección anterior y aprender a utilizar una biblioteca externa.

Uso de un libreria externa 

La ventaja de utilizar una biblioteca externa es que sólo tiene que actualizar un sitio y todas las instancias deque el uso de la biblioteca también se actualizan.

Por ejemplo, imagine que tiene un logotipo con un color específico en él y de repente la empresa decide quequiere cambiar el color del logotipo. En lugar de abrir todos los casos del logotipo y editar, usted puede abrir elmaestro de FLA, a editar y, a continuación, la actualización de los casos, que reflejen automáticamente loscambios.

Usted puede utilizar este concepto para mucho más que un logotipo simple, porque se le carga el componentede inicio de sesión desde el archivo de ejemplo que construyó en la sección anterior.

Agregar el componente login 

Comience por abrir el archivo VideoPlayer.fla si no lo está. A continuación, seleccione Archivo Importar Abrir biblioteca externa.

Page 465: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 465/467

465

En este cuadro de diálogo, usted puede navegar hasta el directorio donde el componente de inicio de sesión sealmacena y seleccione el archivo. Con el archivo seleccionado, haga clic en Abrir.

Arrastre el LoginWindowMC de esta biblioteca en la biblioteca de la FLA VideoPlayer. Ahora debe ver dosMovieClips nuevo en la biblioteca de su archivo de VideoPlayer. Esto es porque el LoginWindowMC tiene unarchivo de apoyo que contiene todo el diseño, que se copia automáticamente cuando se arrastra el padre.

Ahora que se añade el componente de acceso, puede modificar la clase VideoPlayer archivo existente paraañadir esta nueva funcionalidad. Para empezar, agregar la creación de componentes, pero olvídate de la lógicade inicio de sesión.

El nuevo código debe ser añadido a la función constructora, similar a la siguiente:

function VideoPlayer(){gatewayURL = “http://localhost/amfphp/gateway.php”;getCategories();

videoPlayer.visible = false;

videoListCombo.enabled = false;

var login:LoginWindow = new LoginWindow();login.addEventListener(LoginWindow.LOGIN_ATTEMPT,loginHandler);

addChild(login);login.redraw(); }

Antes de probar el código, agregue el método loginHandler para evitar errores de tiempo de ejecución. Puedeagregar este método en cualquier punto en el código. Recomiendo en algún lugar hacia la parte inferior de laclase para mantener el flujo general del archivo.

private function updateTrackingHandler(response:Object):void{...}

 private function loginHandler(response:Object):void {...}

El último paso es importar la clase LoginWindow por lo que la propiedad estática puede ser cargado por elcontrolador de eventos.

package{import flash.display.MovieClip;import flash.events.Event;import flash.net.*;import LoginWindow;

public class VideoPlayer extends MovieClip{

Page 466: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 466/467

466

...}} 

Al probar la aplicación que debe consultar inmediatamente a la ventana de inicio de sesión. Porque no agregarninguna lógica en este momento, no hay manera de cerrar la ventana de acceso, pero se puede ver que estáfuncionando, lo que puede continuar.

La lógica, que es responsable de llamar al servicio remoto, debe ser añadido a la método loginHandlerexistente.

function loginHandler(e:Event):void{var responder:Responder = new Responder(loginRespHandler,onFault);gateway = new NetConnection();gateway.connect(gatewayURL);gateway.call(“User.login”, responder,login.data.username,login.data.password 

); }

El siguiente paso es copiar el loginRespHandler y añadir por debajo de loginHandler en la clase VideoPlayer.

function loginRespHandler(o:Object):void{trace(“Response: “ + o.response);

if(o.response == true){trace(“user logged in”);login.close();

}else{login.responseString = “username and password incorrect”;}}

El código correcto se ha añadido ahora a la clase VideoPlayer, sin embargo, hay una modificación finalnecesaria antes de que el componente de inicio de sesión funcione correctamente.

La variable de sesión que se define en el constructor debe ser una propiedad global, porque tal y como estáahora, ningún otro método de esta clase tiene acceso a ella.

package{

...public class VideoPlayer extends MovieClip{...private var selectedCatID:Number;private var login:LoginWindow;

Page 467: Biblia de Flash y PHP

7/16/2019 Biblia de Flash y PHP

http://slidepdf.com/reader/full/biblia-de-flash-y-php-5634f821bfcbb 467/467

function VideoPlayer(){...login = new LoginWindow();}}

}

Ahora que la variable de sesión está definido correctamente, puede probar la aplicación, como se muestra enla Figura 17.7. Usted debe ser capaz de escribir un nombre de usuario y contraseña válidos, y el componente deinicio de sesión debería desaparecer cuando lo haga.

FIGURA 17.7Reproductor de vídeo con Final caja de ingreso visible