flash and php

362
Companion Site-ul web • Uwnptn, touK * Nn uwful U * V şi mo »« Matthew Keefe Connect Flash cu date şi du-te interactive Elaborarea unui coş de cumpărături sau mini-editor fişier Ad ăuga de urmărire la anunţuri banner dvs. Wiley  Wiley Publishing, Inc Wiley  Wiley Publishing, Inc file:///D:/Documents and Settings/STUDIO/My Documents/Fla 1 of 362 11/9/2

Upload: gogulica

Post on 11-Jul-2015

326 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 1/362

 

Companion Site-ul web

• Uwnptn, touK * Nn uwful U * V şi mo »«

Matthew Keefe

Connect Flash cu date şi du-te interactive

Elaborarea unui coş de cumpărături sau mini-editor fişier

Adăuga de urmărire la anunţuri banner dvs.

Wiley

 Wiley Publishing, Inc

Wiley

 Wiley Publishing, Inc

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

1 of 362 11/9/2

Page 2: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 2/362

 

Flash ® şi PHP Biblie

Publicat de Wiley Publishing, Inc

10475 Crosspoint Boulevard Indianapolis, IN 46256 www.wiley.com

Copyright © 2008 de Wiley Publishing, Inc, Indianapolis, Indiana

Publicat de Wiley Publishing, Inc, Indianapolis, Indiana

Publicat simultan în Canada

ISBN: 978-0-470-25824-8

Fabricate în Statele Unite ale Americii

10 9 8 7 6 5 4 3 2 1

Nici o parte din această publicaţie nu poate fi reprodusă, stocată într-un sistem de regăsire sau transmisă în orice formă sau prin orice mijloace, electronice, mecanicprin fotocopiere, înregistrare, scanare sau altfel, cu excepţia celor permise în conformitate cu secţiunile 107 sau 108 din 1976 Statele Unite ale Americii dreptul de auact, fie fără acordul prealabil scris al editorului, sau autorizarea prin plata este cazul, per-copie comision la Copyright Clearance Center, 222 Rosewood Drive,Danvers, MA 01923, (978) 750-8400, fax (978) 646 -8600. Cererile de Publisher pentru permisiunea ar trebui s ă fie adresată la Departamentul juridic, Wiley PublishinInc, 10475 Crosspoint Blvd., Indianapolis., IN 46256, (317) 572-3447, fax (317) 572-4355, sau on-line la http://www.wiley.com/go/permissions.

LIMITĂ DE RESPONSABILITATE / Disclaimer DE GARANŢIE: Publisher şi AUTORUL FACE NICI O REPREZENTARE sau garan ţie cu privire la exactitateasau deplinatatea continutului acestei lucrări RENUNŢĂ ÎN MOD EXPLICIT ORICE GARANŢIE, INCLUSIV GARANTII NELIMITATE DE POTRIVIRE

PENTRU UN ANUMIT SCOP. GARANŢIE NU poate fi creat sau extins de vânzare sau de materiale promotionale. SFATURI ŞI STRATEGII CONTINUT nu pofi potrivite pentru fiecare situatie. Această lucrare este vândut cu în ţelegerea faptului că editorul nu se angajează în furnizarea CONTABILE JURIDICE,, sau altservicii profesionale. DACĂ nevoie de asistenta profesională , de serviciile unei persoane profesional competent ar trebui căutate. NICI EDITORULUI, niciautorul nu VA FI RESPONSABILI PENTRU DAUNE REZULTATE HEREFROM. Faptul că o ORGANIZARE site-ul sau este men ţionat în această lucrare ca ocitare sau / şi o poten ţială sursă de informatii suplimentare nu înseamnă că autorul sau editorul APROBĂ informa ţii pe care organiza ţia site-ul sau poate furnizsau recomandările pe care le poate face. DE ASEMENEA, cititorii trebuie să fie conştien ţi că site-urile internet enumerate în prezenta lucrare poate aveaSCHIMBAT sau au dispărut între momentul în această lucrare a fost scrisă şi atunci când este citit.

Pentru informaţii generale despre produsele noastre şi alte servicii sau pentru a obţine asistenţă tehnică, vă rugăm să contactaţi Departamentul nostru de Relaţii cuClienţii din cadrul SUA la (800) 762-2974, în afara de la SUA (317) 572-3993 sau fax (317) 572-4002 .

Biblioteca Congresului de numărul de control: 2008925780

Mărci: Wiley, şi logo-ul Wiley, şi rochie legate de comerţ sunt mărci comerciale sau mărci comerciale înregistrate ale John Wiley & Sons, Inc şi / sau filialele sale, înStatele Unite şi în alte ţări, şi nu pot fi folosite fără permisiunea scrisă. Flash este o marcă înregistrată a Adobe Systems Incorporated în Statele Unite şi / sau în alte

ţări. Toate celelalte mărci comerciale sunt proprietatea deţinătorilor lor. Wiley Publishing, Inc, nu este asociat cu orice produs sau furnizor men ţionate în această car

Wiley publică, de asemenea, cărţile sale într-o varietate de formate electronice. Unele conţinutul care apare în imprimaţi să nu fie disponibile în cărţile electronice.

Matthew Keefe este un designer nou-media şi de dezvoltator, cu un fundal puternic în dezvoltarea de aplicatii pentru web si offline. Iniţial, unartist grafic full-time, el a constatat că o mare parte din programare asociate cu munca sa de proiectare era externalizate. Matt înv ăţat repede deprogramare pentru web si a descoperit o indemanare valoros, dar putin cunoscut stabilite în această industrie, ca de calificare fiind abilitatea de aconstrui un site şi, de asemenea, abilitatea de a proiecta o puternic. Acest lucru a fost preferat de către clienţi, deoarece acestea ar putea face întregproiect cu un studio.

Matt a lucrat cu companii precum Delphi, PhotoshopCafe, Interactive Kineticz, şi studiourile Organizaţiei pentru a numi doar câteva. Munca sa afost publicat

ăîn Cum Pentru a Wow cu Flash (Peachpit Press) pentru care el a fost un autor care contribuie

şi editor tehnice. Matt are, de asemenea,

terminat de curând în sus lucra ca redactor tehnic pentru Essential ActionScript 3 (Adobe Dev Library).

Exemple de operei sale pot fi găsite în portofoliul său personal la mkeefe.com.

 Pentru tat ăl meu iubitor.

Senior Editor Achizitii

Stephanie McComb

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

2 of 362 11/9/2

Page 3: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 3/362

 

Proiect Editor Beth Taylor

Tehnică Editor

Navid Mitchell

Copie Editor

Kim Heusel

Editorial Director

Robyn Siesky

Business Manager

Amy Knies

Sr. Marketing Manager

Sandy Smith

Vice President si Publisher Grupului Executiv

Richard Swadley

Vice President şi Executive Distribuitor

Bob Ipsen

Coordonator de proiect

Erin Smith

Grafica si specialisti de produc ţie

Claudia Bell Jennifer Mayberry Ronald Terry

Controlul Calităţii Tehnician

Susan Moritz

Media de Dezvoltare Manager de proiect

Laura Moss-Hollister

Mass-media de dezvoltare Coordonator

 Jenny Swisher

Associate Producer

Shawn Patrick

Corectură

Christine Sabooni

Indexarea

Broccoli Information Management

Vice President si Publisher

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

3 of 362 11/9/2

Page 4: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 4/362

 

Barry Pruett

Macromedia. . . errr Adobe Flash este mâinile în jos unul dintre instrumentele cele mai impresionante şi puternic pentru orice designer atunci cânvine vorba de a aduce o experienţă de un utilizator. Şi aşa cum Flash continua sa evolueze, nu doar web, pentru care a ajuns popular, dar, deasemenea, utilizatorii offline cu evoluţiile platforma, cum ar fi Adobe AIR şi o gamă largă de instrumente terţe care pot fi utilizate.

Dar pentru un dezvoltator de hardcore Flash a avut un rap rău. În principal din cauza faptului că AS 1.0 a fost un limbaj ciudat, stângaci, şi imaturÎn comparaţie cu alte limbi populare atunci când AS 1.0 a fost introdus, şi acesta nu era ceva care urmează să fie luat în serios într-un ochidezvoltatori şi pe bună dreptate aşa. Dar, apoi, dacă este atât de Flash împiedică, de ce am citit chiar şi o prefaţă pentru o carte pe această temă?

Lucrurile s-au schimbat, sa schimbat drastic. AS 3.0 este aici şi este una dintre cele mai bune atunci când în jurul valorii de limbile înţelese. AS 2.0fost un pas în direcţia cea bună, dar ca a depasit 3.0 vise fiecare dezvoltator Flash lui. Dimensiuni mici fişier, performanţă foarte solidă, şi chiarunele prelucrare a datelor, care rivalizează cu Java, astfel încât într-adevăr nu este un dezvoltator care se poate spune că nu mai este un limbaj debeton.

Şi cu AS 3.0-o nouă eră de prelucrare a datelor este introdus în Flash. Şi nu numai cu Flash, dar atunci când porniţi de amestec în PHP5, MySQL 5ASP, AMFPHP, şi alte metode de manipulare a datelor, posibilităţile deschide intr-un taram nou. Datele sunt de luat in AS 3.0, si este doar ochestiune de a citi o carte ca aceasta să o aplice. Sockets, XML, servicii web, şi alte surse de date externe a permite un dezvoltator Flash pentru aobţine cu adevărat murdar într-o sursă de date şi să actualizeze conţinutul, fără să atingeţi din nou fişierele Flash. Beneficiul este să permită maimult timp pentru a dezvolta o experienţă ghidul de angajarea fără a se preocupa repetate modificări, bugetul unui client viitor, etc De fapt, permiun dezvoltator Flash serios pentru a continua să lucreze cu surse de date în care sunt elaborate şi să se concentreze cu privire la beneficiile definessing conţinutul propriu-zis, mai degrabă decât ceea ce este conţinut în momentul de dezvoltare care pot schimba dintr-un capriciu clienti matârziu.

Sunt plecat de zile pe care le va construi site-ul unui client, au o tona de FSI mari, numai pentru ei să aibă nevoie în mod constant update-uri pentfotografii, copia, articolele din catalog, etc În această carte vă va arăta cum să utilizeze metodele menţionate pentru a lărgi de intelegere a scoaterestricţie ul timul Flash puternic cunoaşte, actualizarea fără vreodată republicarea, deschiderea unui FLA, sau îngrijorătoare în cazul în care clientva trimis copy right, imagine, sau alt activ.

Scapa de ideea că un proiect Flash este acum chinuit cu un fişier ce-aşa-schimbare FLA şi îmbrăţişeze ideea de generare de conţinut run-time.

Michael Director minore de Interactive Media invertedCreative.com

Eu ar dori să îi mulţumesc Laura Sinise pentru ca ma ajuti pentru a începe. Aceasta carte nu ar fi fost posibil ă fără următoarele persoane: SeniorAchizitii Editor, Ştefania McComb, Project Editor, Beth Taylor; Copiere redac ţiei, Kim Heusel; redacţiei tehnice, Navid Mitchell, şi Mary Keefe. Adori, de asemenea, să le mulţumesc prietenilor mei Colin, Filip, Brooke, Frank, Jimmy, şi Daz şi Teisha verişoara mea pentru valoarea lor uriaşe dsprijin. Şi, în fine, aş dori să mulţumesc familiei mele pentru înţelegerea şi răbdarea în timp ce am fost încuiat în biroul meu, la orice oră din noap

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

4 of 362 11/9/2

Page 5: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 5/362

 

Despre

Introducere

Partea I: Intelegerea Bazele .......................... 1

Capitolul 1: Noţiuni de bază cu Flash şi PHP ......................................... ..................................... 3

Capitolul 2: Explorarea Flash şi PHP ........................................... ................................................. 37

Capitolul 3: Conectarea

Capitolul 4: Lucrul cu

Capitolul 5: Interacţiunea cu uti lizatorul ........................................... ................................................. 99

Capitolul 6: Lucrul cu Cookies ............................................ .................................................. 113

Partea a II-a: Dezvoltarea de conţinut interactiv .................. 125

Capitolul 7: Întreţinerea de securitate în timp ce de lucru cu User Input ........................................ ........ 127

Capitolul 8: Utilizarea

Partea III: Extinderea Flash si PHP ....................... 189

Capitolul 9: Lucrul cu biblioteci 'terţă parte ......................................... ................................. 191

Capitolul 10: Utilizarea programarea orientată pe obiecte .......................................... ............................ 219

Partea a IV-a: dezvoltarea de aplicatii ....................... 237

Capitolul 11: dezvoltarea de aplicaţii de bază ............................................ .................................... 239

Capitolul 12: Dezvoltarea Real-World Aplicatii .......................................... ............................ 289

Capitolul 13: Utilizarea avansată Real-World Aplicatii ......................................... ....................... 335

Capitolul 14: Debugging

Partea V: Server, Application, şi întreţinere baze de date ...... 393Capitolul 15: Menţinerea unei aplicaţii ............................................ .......................................... 395

Capitolul 16: Menţinerea unui server scalabil şi mai eficient ........................................ ............ 405

Capitolul 17: Aplicatii de constructii complete avansată ........................................... ................... 429

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

5 of 362 11/9/2

Page 6: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 6/362

 

Despre autor ................................. v

Cuvânt înainte ..................................... vii

Mulţumiri ................................ ix

Introducere ................................... x ix

Partea I: Înţelegerea de la 1 Noţiuni de bază

Capitolul 1: Noţiuni de bază cu Flash şi PHP ................. 3

Adăugarea Apache la un server Web ............................................ ................................................ 3

Instalarea Apache pentru Windows .............................................. ...................................... 4

Instalarea Apache pentru UNIX .............................................. ............................................ 9

Modificarea Apache pentru Windows şi UNIX ............................................ .................. 13

Instalarea

Instalarea MySQL pentru Windows .............................................. .................................... 14

Instalarea MySQL pentru UNIX .............................................. ........................................ 25

Protejarea MySQL

Configurarea PHP pe serverul web ........................................... ........................................... 27

Instalarea PHP pentru Windows .............................................. ........................................ 27

Instalarea PHP pentru UNIX .............................................. .............................................. 33

Capitolul 2: Explorarea Flash si PHP ...................... 37

Introducere în Web Server ............................................. ............................................. 37

Lucrul cu htaccess .............................................. ......................................... 37

Protejarea conţinutul dvs. ............................................... ............................................. 38

Colectarea de informaţii despre Apache .............................................. .......................... 40

Utilizarea documentelor de eroare .............................................. .................................... 42

Explorarea Bazele

Înţelegere

Lucrul cu funcţii de ............................................... ............................................. 49

Înţelegerea a structurilor de control ............................................... ............................... 51

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

6 of 362 11/9/2

Page 7: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 7/362

 

Utilizarea de control în PHP de tip ............................................. ......................................... 56

Explorarea Bazele MySQL ............................................. ............................................. 57

Utilizarea declaraţii

Explorarea Flash

Bliţ

Editori Alternative

Flash-a permis

Mutarea transmite

Capitolul 3: Conectarea ......................... 63

Înţelegerea Comunicatiilor in Flash .............................................. .............................. 63

Determinarea statutului de PHP ............................................. ..................................... 64

Lucrul cu diferite tipuri de conexiuni ............................................. ....................... 65

Conectarea Flash pentru a

Conectarea la MySQL PHP .............................................. .................................................. 73

Determinarea statutului de MySQL ............................................. ............................... 73

Conectarea la MySQL ............................................... ............................................... 74

Aducerea pe toate împreună .............................................. ................................................ 77

Capitolul 4: Lucrul cu date ......................... 85

De încărcare a datelor în

Înţelegerea clasele de folosit pentru a încărca date ........................................... ................... 86

Punerea pe toate împreună .............................................. .................................................. 87

Manipulare Loaded

Un mod de încărcare-

Două căi de încărcare

Se incarca XML in Flash

Lucrul cu XML în

Încărcare

Trimitere

Imagini de încărcare cu ajutorul PHP .............................................. .................................................. 95

Configurarea încărcător imaginea ............................................. ......................................... 96

Capitolul 5: Interacţiunea cu utilizatorul ...................... 99

Dezvoltare formă Utilizarea Flash .............................................. ............................................ 99

Crearea unui Formular de contact

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

7 of 362 11/9/2

Page 8: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 8/362

 

Apelarea PHP

A lua legatura cu Stivuitoare formă eveniment .............................................. ...................................... 103

Mailing în

Modul de conectare în

Cod

Intra in Stivuitoare eveniment ............................................... ............................................... 107

Integrarea Server pentru modulul de conectare ............................................. ........................... 110

Capitolul 6: Lucrul cu Cookies ....................... 113

Încărcare

Utilizarea cookie-uri cu PHP .............................................. ............................................ 114

Utilizarea cookie-uri le in Flash .............................................. .............................................. 118

Descoperirea beneficiile de a utiliza cookie-uri PHP ........................................... ............. 122

Partea a II-a: Dezvoltarea de conţinut interactiv 125

Capitolul 7: Întreţinerea de securitate în timp ce de lucru cu User Input ...... 127

Utilizarea Atenţie cu intrare Ghid de uti lizare ............................................. ............................................. 127

De manipulare în condiţii de siguranţă încărcarea fişierelor .............................................. ...................................... 128

Verificarea de intrare valabil .............................................. ............................................ 131

Ghid de curăţare

Igienizarea de date

Curăţare în mod corespunzător de date HTML .............................................. .................................... 136

Depozitarea

Scris în siguranţă într-un fişier ............................................. ............................................. 137

Crearea şi stocarea în condiţii de siguranţă o parolă folosind PHP .......................................... ............ 141

Returnarea

Returnarea în siguranţă date ............................................... ............................................. 143

Folosind o abordare mai sigur pentru returnarea datelor .......................................... .......... 144

Înţelegerea de securitate Flash Sandbox ............................................. ......................... 145

Setarea tipului sandbox .............................................. ............................................ 145

Utilizarea proprietăţii sandboxType .............................................. .............................. 145

Determinarea sandbox activ .............................................. ................................ 147

Asigurarea o cerere nu poate fi partajat ............................................ .................. 151

Capitolul 8: Utilizarea Sockets ........................... 153

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

8 of 362 11/9/2

Page 9: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 9/362

 

Înţelegere

Securitatea în socluri

Implementarea unui server de soclu .............................................. .................................... 154

Înţelegerea mufă .............................................. ........................ 154

Lucrul cu Sockets în PHP ............................................. ............................................... 154

Cautam pentru linia de comandă de versiunea de PHP .......................................... .................... 155

Construirea unui server de soclu .............................................. ............................................ 156

Testarea serverului soclu .............................................. ............................................ 158

Crearea unui server de soclu persistente ............................................. ............................. 160

Lucrul cu Sockets în Flash ............................................. ............................................. 161

Iniţializez o conexiune socket .............................................. .................................. 161

Eveniment Stivuitoare

Conexiunile la distanţă soclu ............................................... ....................................... 163

Folosind o clasa pentru conexiunile soclu ............................................ ............................ 164

Construirea unui client de chat cu prize Utilizarea Flash şi PHP ........................................ ........ 167

PHP server de soclu pentru client de chat ........................................... ............................. 167

Conectarea la server socket ............................................. ................................. 175

Construirea client Flash .............................................. ............................................ 177

Partea III: Extinderea Flash si PHP 189

Capitolul 9: Lucrul cu biblioteci 'ter ţă parte ................ 191

Trecând peste biblioteci 'terţă parte ............................................ .......................................... 191

Alte tipuri de biblioteci 'terţă parte ........................................... ............................... 192

Bibliotecile din

Instalarea biblioteci 'terţă parte ............................................. ........................................... 193

Instalarea bibl iotecilor in Flash CS3 ............................................. ................................. 193

Instalarea bibl iotecilor în PHP .............................................. .......................................... 195

Utilizarea biblioteci 'terţă parte ............................................. ................................................. 196

Lucrul cu biblioteci în Flash CS3 ............................................ ............................ 196

Lucrul cu biblioteci în PHP ............................................. ................................... 197

Aruncând o privire la

AMFPHP pentru Programator PHP şi AS3 ............................................ ........................ 198

Testarea AMFPHP cu un serviciu personalizat ............................................ ...................... 201

Utilizarea AMFPHP in Flash .............................................. ............................................ 205

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

9 of 362 11/9/2

Page 10: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 10/362

 

Construirea unei Real Application-Lumea Utilizarea AMFPHP .......................................... ................ 210

AMFPHP

ActionScript pentru integrare AMFPHP .............................................. ........................ 216

Capitolul 10: Utilizarea programarea orientată pe obiecte .............. 219

Înţelegere

Privire de ansamblu asupra practicilor de OOP .............................................. ........................................ 220

Utilizarea Clase în

Importarea clase în PHP .............................................. .......................................... 226

Mai multe clase

Folosind Clase în Flash

Document al clasei

Biblioteca clase

Utilizarea Flash şi PHP de a construi clasele particularizate .......................................... ........................ 231

Partea a IV-a: Aplicaţii în curs de dezvoltare 237

Capitolul 11: dezvoltarea de aplicatii de bază .................. 239

Înţelegerea Elemente de Aplicaţie ............................................. ........................... 239

Înţelegerea de proiectare cerere ............................................... ........................... 240

Finalizarea etapei de planificare .............................................. .................................... 242

Dezvoltarea unui chat

Flash

PHP pentru chat

Utilizarea PHP pentru a dezvolta o galerie foto ........................................... ................................... 260

Dezvoltarea ActionScript ............................................... ..................................... 261

Galerie foto

PHP pentru galeria foto ............................................. ........................................... 270

Utilizarea PHP pentru a dezvolta un RSS Reader ........................................... ..................................... 274

Importul clase

Încărcarea

Folosind PHP, Flash, si MySQL pentru a dezvolta un anunţ banner dinamic ..................................... 0.279

Deschiderea-o fereastră de browser .............................................. ...................................... 281

În curs de dezvoltare

Întâmplare

Utilizarea PHP pentru a dezvolta un contor ........................................... ..................................... 285

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

10 of 362 11/9/2

Page 11: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 11/362

 

Hit counter

Dezvoltarea Flash hit counter ............................................. ............................... 286

Capitolul 12: Dezvoltarea Real-World Aplicatii .............. 289

Înţelegerea Real-World Aplicatii ............................................. ............................... 289

Utilizarea în PayPal

Folosind datele POST

Utilizarea

Configurarea de comunicare PayPal .............................................. .............................. 294

Utilizarea Flash şi PHP de a construi un cos .......................................... ...................................... 295

Proiectarea cosul de cumparaturi .............................................. ...................................... 296

Clădire PHP

Folosind PHP si Flash pentru a construi o aplicaţie de căutare pe Amazon ........................................ .. 317

Utilizarea Amazon Web Service ............................................. ................................. 317

Simplificarea răspunsul XML .............................................. .................................. 319

Dezvoltarea unui Galerie foto Flickr Utilizarea ............................................ ................................ 326

Interfatarea cu serviciul Web ............................................. ................................. 331

Construirea particularizate documentul XML ............................................. ......................... 332

Capitolul 13: Utilizarea avansată Real-World Aplicatii ............ 335

Construirea unei aplicaţii de desen in Flash ............................................ .............................. 335

API de desen în

Utilizarea HG bibliotecă în

Generarea unei imagini în biblioteca GD ........................................... ......................... 343

Colectarea datelor pixelilor in Flash ............................................ ................................ 345

Utilizarea Flash pentru a dezvolta un monitor site-ului ........................................... ................................... 347

Dezvoltarea PHP pentru site-ul monitorului ........................................... ..................... 347

Utilizarea PHP la e-mail a administratorului .......................................... .......................... 349

Dezvoltarea ActionScript pentru a monitoriza site-ul ........................................... ......... 351

Utilizarea Flash pentru a dezvolta un video player ........................................... ................................... 359

Dezvoltarea unei aplicaţii Poll .............................................. ............................................ 364

Construirea PHP si MySQL ............................................. ..................................... 364

Dezvoltarea ActionScript pentru sondaj ............................................ ...................... 368

Construirea unei Editor Fişier s implu ............................................. ............................................... 373

Capitolul 14: Aplicatii Debugging ..................... 381

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

11 of 362 11/9/2

Page 12: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 12/362

 

Utilizarea Error Reporting în PHP ............................................. ............................................. 381

Afiseaza erori le de depanare .............................................. ................................ 383

Înţelegerea nivelurile de eroare .............................................. .................................. 383

Debugging in Flash

Utilizarea unei alternative Trace .............................................. .................................................. 389

Partea V: Server, Application, şi întreţinere baze de date 393

Capitolul 15: Menţinerea unei aplicaţii ................... 395

Comentând

Înţelegerea stilurilor de a comenta cod ............................................. ............... 396

Scoaterea comentarii şi de ajutoare depanare ............................................. ..................... 399

Administrarea unei ChangeLog

Bug

Suplimentar

Crearea dinamică a modificărilor .............................................. .................................... 400

Gestionarea multiple

Aplicaţii de control al versiunilor ............................................... ..................................... 401

De control al versiunilor de sprijin în CS3 ............................................. ................................... 401

Configurarea controlul versiunii .............................................. .......................................... 402

Utilizarea Biblioteci personalizate

Utilizarea biblioteci personalizate cu control al versiunii ............................................ ................ 403

Publicarea unui

Capitolul 16: Menţinerea unui server scalabil şi mai eficient ....... 405

Rularea unui Actualizat în

Utilizarea actualizărilor automate ............................................... ......................................... 406

Zend

Lucrul cu Instalează Dezvoltare .............................................. .................................... 406

Clădire o altă versiune de Apache în acelaşi sis tem ......................................... 0.406

Lucrul cu sângerare de ultimă oră ............................................ ...................... 407

Caching şi Optimizarea

Optimizarea

Optimizarea

Optimizarea MySQL ................................................ ................................................ 413

Caching

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

12 of 362 11/9/2

Page 13: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 13/362

 

Instalarea memcached pe Linux .............................................. ................................ 416

Instalarea pe Windows memcached .............................................. .......................... 418

Încadrare la instalare pentru Linux şi Windows ........................................... ....... 418

Servere de Management

Backup-uri de manipulare

Fişier de management

De management de rezervă ................................................ .............................................. 421

Utilizarea PHP la spre spate sus baze de date ............................................ .................................. 424

Capitolul 17: Aplicatii de constructii complete avansată ........... 429

Construirea unui video de bază

Construirea unui player video în Flash şi PHP .......................................... .............................. 432

Noţiuni de bază

Remoting integrare ................................................ .............................................. 437

Avansat jucător de dezvoltare filme .............................................. ........................ 446

Construirea clasa VideoListItem .............................................. ................................ 456

Lucrul cu video

Actualizarea clasa video de .............................................. ............................................ 462

updateVideoTracking metoda ................................................ .................................. 463

Construirea unei Componenta Intra utilizator in Flash ........................................... ........................... 465

Dezvoltarea clasei LoginWindow .............................................. .......................... 466

Testarea componenta de autentificare .............................................. ...................................... 473

Construirea managerul PHP clasa de autentificare ............................................ .......................... 476

Adăugarea de remoting pentru componenta de conectare ............................................ .................... 478

Finalizarea Video

Utilizarea unei biblioteci externe .............................................. .......................................... 482

Adăugarea componenta de autentificare .............................................. .................................... 482

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

Tcartea sa este o explorare mai multe părţi în Flash şi PHP Flash a fost folosit pentru orice, de la anunţurile de bază banner pe deplin aplicatii

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

13 of 362 11/9/2

Page 14: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 14/362

 

functionale de pe web şi desktop.

Deseori puteţi găsi informaţii necesare pentru a scrie aplicatii Flash uimitoare sau omologul de server, dar rareori ambele. Această carte se bazeazatât aspecte şi explică procesul de lucru cu PHP in proiecte Flash.

Prima parte a cărţii este un ghid pas-cu-pas de instalare şi procesul de configurare pentru PHP şi toate componentele necesare. Odata cecomponentele sunt instalate, pasul următor este o prezentare generală a PHP şi un ghid pentru ceea ce caracteristicile şi tehnicile pe care le veţi g

 în carte ca să continuaţi prin capitole.

Fiecare capitol incepe cu o prezentare de bază şi apoi se mută rapid în informaţiile relevante, lăsând orice aiurea să vă asiguraţi că sunt obtinerea

toate informaţiile importante imediat.

Partea a II-se axează pe importanţa şi cele mai bune practici de a face aplicaţii mai sigure la menţinând în acelaşi timp funcţionalitatea. Tema desecuritate este repetat în întreaga diferite exemple în această carte, dar această parte, în special, este locul unde veţi găsi majoritatea informaţiilor securitate.

Partea III se extinde Flash şi PHP prin colaborarea cu diverse aplicaţii de la terţi şi biblioteci. Acest capitol se termina cu o prezentare generală aAMFPHP pentru a construi mai avansate si mai usor de intretinut aplica ţii.

Partea a IV-ia toate informaţiile anterioare şi plimbări vă prin procesul de construire complet lumea reala aplicaţii în Flash şi PHP. Aceste aplicaţidin lumea reală va ajuta să vă construi versiuni de personalizat şi în cele din urmă vă permit să creaţi mai multe aplicaţii avansate şi dinamice.

Puteţi găsi toate codul sursă şi fişierele de pornire pentru exemplele din această carte de pe site-ul de mai jos.

www.wiley.com / go / flashandphpbible

ActionScript folosit în această carte nu este avansat, dar o înţelegere de bază a fundamentelor-ar permite să înţeleagă mai bine exemple. Biblia Flaeste un complement perfect pentru această carte şi am foarte recomanda-o.

O înţelegere de bază a practicilor de OOP v-ar ajuta in partea a doua a cartii, dar nu este necesar pentru a intelege exemplele de ansamblu. Esteposibil să doriţi pentru a ridica o carte despre practicile OOP avansate pentru a obţine o înţelegere mai aprofundată a subiectului.

PHP folosit în această carte este presupunând o înţelegere de bază a subiectului. Acest lucru înseamnă că nu vor învăţa doar subiecte avansate, dacum se ajunge acolo cu începere de la început. PHP, de asemenea, vă permite să dezvolte într-un format pe bază de clasă, astfel încât vor fi utiliza

 în capitolele full-aplica ţie pentru a vă asigura că sunt construirea unei aplicări mai complete şi actualizabile.

Ultimul lucru de care veţi avea nevoie este o conexiune la Internet pentru a descărca codul de carte şi de a lucra cu anumite servicii de terţe părţi.Acest lucru nu este utilizat în întreaga carte, dar pentru a ob ţine o experienţă completă conexiunea la Internet vor fi necesare.

Asta este tot ce ai avea nevoie. Acum este momentul pentru a sari inch Capitolul 1 este la numai câteva pagini distanţă.

 În această parte

Capitolul 1

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

14 of 362 11/9/2

Page 15: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 15/362

 

Noţiuni de bază cu Flash şi PHP

Capitolul 2

Explorarea Flash şi PHP

Capitolul 3 Conectarea

Capitolul 4 Lucrul cu date

Capitolul 5

Interactiunea cu utilizatorul Capitolul 6

De lucru cu Cookies

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

15 of 362 11/9/2

Page 16: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 16/362

 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

16 of 362 11/9/2

Page 17: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 17/362

 

Tel procesul de obţinere a început include instalarea si configurarea Apache, MySQL, PHP şi Exemplele din această carte î şi asume instalarea se

face pe plan local; cu toate acestea, aveţi posibilitatea să modificaţi căile şi adresele URL dacă doriţi să utilizaţi un server de la distanţă.

Ordinea în care aţi instalat aceste programe este important, deoarece ei folosesc căi şi variabile de la unul de altul, ceea ce duce la un mediu dedezvoltare complet.

Acest ghid de instalare se referă la sistemele de operare Windows şi UNIX. Dacă aţi decis să lucreze la cartea pe un server existent, puteţi trece lacapitolul 2. Cu toate acestea, există unele de securitate şi informaţii de configurare în cadrul acestui capitol vă pot fi utile.

Primul pas de a lucra cu Flash şi PHP este de a instala componentele necesare. Procesul de instalare este definit prin instalarea Apache, MySQLapoi, în cele din urmă şi PHP. Acest ordin este necesar din cauza PHP are nevoie de cai la Apache si MySQL cu scopul de a oferi acest sprijin.

Puteţi recompila (build) oricare dintre aceste componente în viitor. Cu toate acestea, dacă urmaţi această ordine de instalare se va însemna maipuţin de lucru şi rework în viitor.

Componentele care urmează să fie instalate schimbă din timp în timp, dar procesul de instalare general rămâne destul de constanta. Acest lucru înseamnă că puteţi descărca

 În acest capitol

Apache instalare PHP instalare

MySQL de instalare

cele mai recente fişiere de pe site-urile lor respective de proiect, sau pentru a asigura toate componentele de lucru împreună, puteţi obţine acestefişiere de pe site-ul cărţii.

Ar trebui să aveţi o înţelegere de bază a sistemului pe care se va instala. Este important pentru a rula un sistem de dezvoltare într-o locaţiesecurizată. Cele mai bune de configurare este un computer in spatele unui firewall fizic sau pe o retea interna. Dacă acest lucru nu este posibil, puşi simplu configura Apache nu pentru a permite conexiunile la distanţă şi aveţi posibilitatea să modificaţi numărul de port să-l ascundă pe reţea.

Sistemele de dezvoltare pot ne cesita configurare mai avansate, în funcţie de modul în care au fost constituite. Pute ţi găsi cele mai comune problemexplicat pe site-ul Web al căr ţii.

Instalarea Apache pentru Windows

Odată ce aţi stabilit pe care sistemul pe care îl instalaţi sistemul de dezvoltare poti incepe sa descarcati componentele necesare. Este recomandat utilizaţi fişierele prevăzute cu carte. Am, de asemenea, locaţiile necesare pentru a descărca cele mai recente fişiere.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

17 of 362 11/9/2

Page 18: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 18/362

 

Accesati cea mai recentă versiune de pe site-ul Web apasilor. Este mai uşor pentru a instala versiunea de instalare binare, mai degrabă decâtcompilarea sursei. Cu toate acestea, compilare din sursa nu oferă un nivel mai ridicat de personalizare şi vă permite să înţelegeţi ceea ce se execusub capota.

Clădire din sursa nu este pentru incepatori. Ea are nev oie de un anumit nivel de e xperienţă şi este recomandat numai pentru cei care se simt cuadevărat până la provocare.

Cele mai recente fişiere Windows de instalare pentru Apache binare pot fi găsite la www.apache.org/dyn/closer.cgi/httpd/binaries/win32/.

Instalarea

Începeţi procesul de instalare prin deschiderea fişierului de instalare Windows pe care a fost fie descărcat de pe site-ul carte sau direct de pe site-Apache-ul Web.

Această instalare va fi mai ales vizuale, deoarece programul de instalare Windows este un setup grafic. Cheia pentru o instalare de succes este ateurmătoare şi lectură ecranele pe tot parcursul procesului de instalare întregul. Primul ecran, aşa cum se arată în Figura 1.1, nu necesita modificare

Următoarele două ecrane sunt acordul de licenţă, pe care le poate lua timp pentru a citi sau aveţi posibilitatea să faceţi clic pe Următorul pur şisimplu, deoarece este o informaţie destul de standard.

După aceea, veţi găsi o introducere la Apache, care vă oferă o bună imagine de ansamblu a ceea ce Apache are de oferit, aşa cum se arată în Figur1.2. Ecranul va oferi, de asemenea, link-uri către resurse foarte valoroase incadrand comunitatea Apache.

UTIO

Figura 1.2

Figura 1.1

Primul ecran necesită nici o modificare de ut ilizare. Pur şi simplu faceţi clic pe Următorul pentru a continua procesul de instalare.

Information Server pentru un sistem de dezvoltare nu trebuie să fie reală, după cum arată această cifr ă.

J ^ J Apache HTTP Server 2.0 - Installation Wizard

Information Server 

Te rugăm să introduci informaţiile serverului dvs..

Reţea de domeniu (de exemplu, somenet.com) | m ydomain.com

Nume server (de exemplu, www.somenet.com): Jwww. m y nu m Ain. co m

Administrator al adresei (de exemplu, [email protected]): | Admin @ imydomain, comj

Instalare Apache HTTP Server 2.0 programe şi comenzi rapide pentru:

 ® pentru toţi utilizatorii, pe portul 80, as a Service - Recomandat, Oonly pentru utilizatorul curent, pe portul 8080, atunci când a început manual,

<Înapoi | [Urmatorul> Anula

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

18 of 362 11/9/2

Page 19: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 19/362

 

Instalare de server este în cazul în care vă definesc configuraţia specifică pentru mediul dumneavoastră. Dacă aţi fost instalaţi Apache pe un sistemreal, ar trebui să completaţi, în această pagină cu informaţii corecte, altfel nu ar fi Apache cereri traseu corect. Aveţi posibilitatea să acceptaţiopţiunile implicite pentru o configurare de dezvoltare, cum ar fi acest lucru.

Fiind că această instalaţie este pentru un server de dezvoltare nu trebuie să completaţi în ecranul cu date reale, cu excepţia cazului în care utilizaţacest ghid pentru a instala pe un server live.

Instalare Apache HTTP Server 2.0 si programele de comenzi rapide pentru: opţiune este atunci când doriţi să instalaţi Apache astfel încât doarutilizatorul curent îl pot accesa. Dacă doriţi ca toţi utilizatorii să poată accesa Apache, atunci veţi dori să-l instalaţi ca un serviciu.

Procesul de instalare de Apache se poate face în două moduri, după cum se arată în figura 1.3. Prima opţiune este de a accepta toate setărileimplicite, ceea ce duce la o instalare mai rapidă, dar nu este întotdeauna cea mai bună opţiune.

A doua opţiune mai comun este alternativa particularizată în cazul în care vă spun Apache care sunt instrumentele şi bibliotecile pe care doriţi săinstalaţi. Ocazional, atunci când instalaţi o aplicaţie puteţi experimenta o lipsa de spaţiu pe hard disk.

Apache, pe de altă parte, este atât de mică, cu toate instrumentele de suplimentare instalate care nu ar trebui să aibă o problemă de ao instala.

Figura 1.3

Opţiunea Particularizat este selectată pentru a asigura toate instrumentele de dezvoltare sunt instalate, cum ar fi bibliotecă şi capacitatea de modul de construcţie.

 j ^ i Apache HTTP Server 2.0 - Installation Wizard

Tipul de instalare

Alegeţi tipul de sebup că potriveste cel mai bine nevoilor dumneavoastr ă, AMffT *. eu

Vă rugăm să selectaţi un tip de configurare.O tipice

 j pg Ca ra cte ri sti ci ti pi ce Pr ogr am ul v a fi ins ta la t, (a nte te şi biblioteci pentru

m module compilarea nu vor fi instalate.)

 ® personalizate

ra Alegeţi caracteristicile pe care doriţi să le instalaţi programul şi în cazul în care

va fi instalat. Recomandat pentru utilizatorii avansaţi,

InsfcalShield-

<Inapoi] [Inainte> | [Cancel

Pentru exemplele din această carte, este mai bine să accepte instalarea particularizată şi asiguraţi-vă că toate bibliotecile şi extensiile sunt instalatDe exemplu, unele dintre modulele folosite pentru a modifica ghidul de cererile sunt disponibile numai când instalaţi versiunea completă.

În funcţie de sistem, aceasta poate dura un timp pentru a instala Apache. Chiar dac ă bara de stare se opreşte nu primesc în cauză, unele dintrefişierele dura mai mult decât altele pentru a instala. Aplicaţia vă notifică dacă ceva se întâmplă în timpul procesului de instalare, care este foarterară. Apache va actualiza bara de progres, aşa cum se arată în Figura 1.4, în timp ce instalarea este loc.

Figura 1.4

Starea de instalare Apache

Ultimul ecran ar trebui să vedeţi este un act de faptul că instalarea a fost reuşită. O DOS prompt poate apărea care vă anunţă că serviciul Apache

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

19 of 362 11/9/2

Page 20: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 20/362

 

 începe. Puteţi avea, de asemenea, un avertisment Firewall, şi va trebui să acorde acces Apache-l solicită.

Testarea

Felicitări. Dacă totul a mers bine ar trebui sa ai acum Apache instalat pe computerul dvs. Windows. Pentru a testa instalarea, deschideţi un browsWeb şi punctul în care la serverul local web Apache, care este, de asemenea, cunoscut sub numele de localhost.

http://localhost/

Tu ar trebui să fie prezentat cu un ecran similar cu ceea ce se vede în Figura 1.5, care, practic, v ă informează că Apache este corect instalat şi este

gata să încep să deservesc la conţinut.

În funcţie de procesul de instalare, aveţi posibilitatea să modificaţi această locaţie, care este uneori necesară atunci când sunt instalate pe un servede la distanţă. Tu nu ar putea accesa serverul web Apache pe localhost adresă. În schimb, v-ar punct la adresa IP sau numele de domeniu alsite-ului Web.

Figura 1.5

Ecranul implicit de bun venit pentru Apache

Cu Apache instalat, aveţi posibilitatea să modificaţi pagina prestabilită pentru a vedea cu adevărat cum funcţionează Apache.

Fişierele Web Apache care serveşte se află în documentul radacina. Acest lucru este similar cu public_html sau www care le-aţi văzut cel maiprobabil pe un server Web de la distanţă. Spre deosebire de un server Web de la distanţă, permisiunile pe aceste fişiere sunt adesea disponibilepentru alţi utilizatori care nu vizionează de la computerul personal.

Locul de amplasare a acestui director Web în Windows utilizând o instalare implicită este:

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

Veti vedea mai multe fişiere diferite în acest director, cum ar fi fişierele index aceeaşi în diferite limbi.

Nu vrei să modificaţi oricare dintre aceste fişiere, deoarece ar putea strica miezul de Apache sau de a introduce erori care ar fi foarte greu pentru urmări, a crea astfel un nou fişier.

Folosind editorul de texte favorit, să creaţi o pagină foarte simplu HTML, cum ar fi următoarele:

<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> Pagina mea particularizată </ title> <body>

<h1> Bine ati venit la pagina mea personalizat </ h1>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

20 of 362 11/9/2

Page 21: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 21/362

 

<p> Acesta este un test de personalizare a Apache </ p> Destul de rece nu-i asa?! </ p>

</ Body>

</ Html>

Salvaţi acest fişier nou în Director Web Apache şi nume-l paginamea.html. După salvarea fişierului, deschideţi-l în browser-ul Web de a asisla flexibilitatea în Apache.

Acest lucru nu este exemplul cel mai avansat, dar ar trebui să vă dau o idee de bază a modului de a modifica şi a lucra cu serverul web Apache.Acum este timp pentru a crea mai multe exemple utile, pentru că aveţi elementele de bază în jos.

În acest moment, cu Apache instalat şi testat, puteţi trece la instalarea şi configurarea de PHP, sau puteţi sări înainte de procesul de configurare aApache.

Alternativ, puteţi citi prin instalarea Apache pe UNIX, care este acoperit în sec ţiunea următoare.

Instalarea Apache în UNIX ar fi mai aproape de a lucra cu un server de la distanţă, pentru că veţi găsi că cele mai multe servere Web sunt construpe Linux. Acest lucru nu înseamnă că nu va găsi un server bazat pe Windows Web vii, dar cu siguranţă nu este la fel de comună.

Instalarea Apache pentru UNIX

Procesul de instalare în UNIX este mult mai avansată decât instalarea Windows. Cu toate acestea, instalarea UNIX este adesea scenariu mai comupentru un server de vii.

Primul pas de a instala Apache este descărcarea sursa. Această sursă poate fi descărcat de pe site-ul carte sau direct de pe site-ul Web apasilor.Utilizarea sursa oferite pe site-ul carte vă asigură că rulaţi un sistem aproape identic cu cel utilizat pentru scrierea acestei cărţi.

Veţi găsi sursa, aşa cum se arată în Figura 1.6, direct de la Apache la următorul URL: http://httpd.apache.org/download.cgi.

Figura 1.6

Aici este o listă a versiunilor posibile ale codului sursa pentru a descărca de pe server Apache.

După descărcarea sursă pentru Apache, puteţi începe procesul de instalare.

Preinstalarea

Înainte de instalarea să poată începe, sursă trebuie să fie extras din fişierul descărcat. Acest lucru se face prin simpla uncompressing arhiva fişişi untarring fişier necomprimat.

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

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

21 of 362 11/9/2

Page 22: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 22/362

 

Odată ce ultimele două procese sunt complete, esti plecat cu un director nou care conţine codul sursă.

Înainte de a continua, pentru a schimba acest director, ceea ce înseamnă că va fi în directorul codul sursă se află inch

$ Cd httpd-2.2.6 /

Instalare

Atunci când codul sursă este extras, puteti incepe procesul de instalare. Apache se va instala folosind propriul set de opţiuni, dar aveţi posibilitatde a modifica aceste. Dacă doriţi să configuraţi Apache utilizând setările implicite, de tip pur şi simplu . / Configure.

Cu toate acestea, aceasta este o practică mai bună pentru a ajusta procesul de instalare la mediul dumneavoastră.

Una dintre cele mai importante optiuni puteţi defini este --Prefix, care este în cazul în care va fi instalat Apache. Această opţiune este folosităpe durata de aplicare şi, de asemenea, este folosit mai târziu în timpul instalării PHP şi secţiunea de configurare.

Pentru simplitate un proces de configurare parţial modificată este folosit, dar simţiţi-vă liber să se uite p rin documentaţia Apache pentru a obţinemai bună înţelegere a ceea ce setări pot fi schimbate.

. $ / Configure - prefix = / usr / local / apache - enable-rescrie = comun \ - enable-ortografie = comun

Odată ce începe procesul de configurare, aceasta poate dura câteva minute pentru a finaliza. Cele mai multe ori, veţi vedea de imprimare înprocesul de fereastra terminalului dumneavoastră, dar chiar dacă aceasta nu este, este în execuţie.

După ce comanda configure a finalizat, puteţi rula face pentru a construi pachetul Apache.

$ Make

Din nou, acest proces poate dura în funcţie de sistemul tău, vă rugăm să fie atât de pacient. Odată ce face comandă este completă, ultimacomanda pentru a rula instalează pachetul şi încheie porţiunea de instalare.

$ Make install Testarea

Cu Apache instalat, îl puteţi porni şi testaţi-l în browser.

Apache instalează un instrument foarte util, apachectl, care pot fi găsite în bin / Culegere de locul de instalare. Utilizarea calea aleasăpentru această instalaţie, apachectl Cererea va fi gasit aici.

$ Usr / local / apache / bin / apachectl

Utilizaţi următoarea comandă pentru a porni serverul Apache:

$ Usr / local / apache / bin / apachectl start

Utilizaţi această comandă pentru a opri serverul Apache:

$ Usr / local / apache / bin / apachectl oprire

Pentru a reporni serverul Apache, utilizaţi această comandă:

$ Usr / local / apache / bin / apachectl restart

Testarea în server se face printr-un apel la localhost din browser-ul web la http://localhost/.

După cum puteţi vedea acum, instalarea a fost un succes. Pentru a testa în continuare şi de a înţelege mai bine modul de a modifica fişierele Apacserveşte, creează un fişier nou HMTL şi salvaţi-l în rădăcina web Apache.

Folosind editorul de texte favorit, care, în UNIX va fi cel mai probabil vi, a crea acest fi şier HTML nou. Următoarele comenzi presupun că utilizaţvi.

Crearea unui fişier nou:

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

În scopul de a începe să introduceţi codul HTML, va trebui să-i spuneţi VI a intra în modul Inserare, care se face prin ap ăsarea I. Apasati ESC pena ieşi din modul Inserare.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

22 of 362 11/9/2

Page 23: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 23/362

 

Lipiţi sau tastaţi următorul text exemplul de cod 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> Pagina mea particularizată </ title> <body>

<h1> Bine ati venit la pagina mea personalizat </ h1>

<p> Acesta este un test de personalizare a Apache </ p> Destul de rece nu-i asa!? </ p> </ body> </ html

Odată ce fişierul este creat, apăsaţi ESC şi tastaţi următoarea comandă pentru a salva şi a închide editorul. Notă, : este parte a comenzii.

: Wq

Anumite fişiere să adăugaţi sau să modificaţi necesită repornirea Apache, cu toate acestea, fişierele de bază web nu intră în această categorie. Puteafişa, acum, o nouă pagină prin adăugarea numele fisierului locale-gazdă apel la http://localhost/sampleFile.html.

După cum puteţi vedea, serverul Apache a fost instalat în mod corespunzător şi aţi fost capabil să adăugaţi un fişier personalizat care Apache ser în mod corespunzător. În acest moment, trebuie să aveţi o înţelegere de bază a modului în care funcţionează Apache. Următoarea secţiune(independent de platforma) merge în mai multe detalii despre modul în care puteţi modifica Apache.

Modificarea Apache pentru Windows şi UNIX

Urmatoarele sfaturi, trucuri, şi trucuri pot fi efectuate pe instalaţiile de Windows sau UNIX. Acest lucru se datorează faptului că acestea suntspecifice Apache, şi nu a mediului pe care ruleaza.

Atunci când se lucrează pe sisteme de dezvoltare, nu este rar să se solicite mai mult de o instalaţie de Apache. Acest lucru ar putea fi pentru a testsângerare-margine cod, un sprijin mai plug-inuri, sau doar pentru a asigura un proiect se execută pe o clona a sistemului de vii.

Procesul de instalare al Apache ramane cam la fel. Trebuie doar să schimbaţi opţiunea de prefixul indicând aceasta într-o locaţie nouă / diferite.Puteţi rula mai multe versiuni de Apache, cu toate acestea, au nevoie de locaţii diferite de instalare. Execută mai multe versiuni de Apache, înacelaşi timp folosind numai opţiunile de instalare implicită nu este posibilă. Acest lucru se datorează Apache în curs de înfiinţare pentru a ascultcererile pe portul 80 în mod implicit.

Aveţi posibilitatea să modificaţi portul pe care ascultă pe Apache prin editarea fişierului de configurare. Fişierele de configurare sunt situate înconf / director, care se află în directorul pe care le desemnează în timpul instalării Apache.

De exemplu, aveţi posibilitatea să modificaţi portul pe care ruleaza pe Apache. Începeţi prin deschiderea fişierului de configurare.

Pentru a deschide fişierul de configurare în UNIX, utilizează vi.

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

Pentru a deschide fişierul de configurare în Windows, navigaţi la directorul de instalare şi deschideţi httpd.conf fişierul în editorul de textefavorit.

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

Când fişierul este deschis, defilaţi în jos sau pentru căutare Asculta directivă, care va arata similar cu

cu următorul text: #

# Ascultă: Permite

şi / sau

# Porturile, în loc să

# Directivă.

#

 Asculta 80

Apache se va uita doar la acest fişier în timpul pornirii. Când aţi terminat de editat, asiguraţi-vă că reporniţi serv erul Apache.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

23 of 362 11/9/2

Page 24: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 24/362

 

Schimbarea pe care o valoare vă permite să rulaţi mai multe copii ale Apache. Cu toate acestea, execută mai multe instanţe Apache poate fiprocesorul intensiv, deci asigura-te ca doar executaţi multe cazuri este necesar. În cele mai multe cazuri, va rula doar o instanţă pe un server live.

să vă lega Apache la adrese IP specifice ale implicit. A se vedea, de asemenea, <VirtualHost>

Acum, că este instalat Apache, componenta următor pentru a instala este MySQL. Acest lucru ar fi baza de date care conţinutul dvs. sunt stocate înaplicare şi gestionate folosind PHP.

Instalarea MySQL pentru Windows

La fel ca procesul de instalare Apache, MySQL are un installer pentru Windows care face ca întregul proces mult mai u şor. Programul de instalarvă ghidează prin procesul de instalare a bazei de date de bază şi orice componente suplimentare care aveţi nevoie. Pentru aceasta configurare,instalare implicit este folosit, dar simţiţi-vă liber pentru a personaliza, care este o modalitate foarte bună de a învăţa.

Descărcarea

Primul pas pentru a instala MySQL este descărcarea cele mai recente fişiere de instalare. Aveţi posibilitatea să utilizaţi fişierele oferite pe site-ulWeb al cărţii pentru a asigura compatibilitatea sau puteţi vizita site-ul Web la MySQLs http://dev.mysql.com/downloads/mysql/5.0.html # win32 pentru a obţine cea mai recentă versiune stabilă în acest moment.

Alegeţi programul de instalare Win32 cu Setup pentru a face procesul de instalare mai uşor de ansamblu. Acest lucru vă permite să utilizaţi GUI

locul tradiţional de linie de comandă procesul de versiunile anterioare.

Instalare

După ce descărcaţi şi să deschideţi o pagină de instalare Bine ai venit, urmat de alte pagini care fac parte din procesul de instalare, după cum searată în figura 1.7. Similar cu instalarea Apache, MySQL are, de asemenea, diferitele opţiuni de configurare care trebuie să fie modificate. Cu atenprivească dincolo de paşii de mai jos pentru a asigura baza de date va funcţiona corect.

Alegeti optiunea de instalare tipic, care se instalează componentele de bază necesare pentru a rula şi menţine o bază de date MySQL. Faceţi clic pÎnainte pentru a trece la pasul următor.

În acest moment, MySQL a fost instalat. Pagina finală vă oferă opţiunea de a lansa în secţiunea de configurare atunci când faceţi clic pe Următorul

Asiguraţi-vă că selectaţi această opţiune. Daca inchideti accidental această pagină aveţi posibilitatea să o rulaţi sau deschideţi aplicaţia de

configurare în mysql / director în fişiere de program.

Instalarea de MySQL nu oferă toate că mult în modificarea. Acest lucru se datorează faptului că susţinerea Expertul de configurare cererea se ocupde toate opţiunile de configurare necesare.

Selectaţi opţiunea de configurare detaliata, aşa cum se arată în Figura 1.8. Acest lucru vă permite să reglaţi fin de configurare MySQL, spredeosebire de folosind toate implicite. Faceţi clic pe Înainte pentru a continua.

Dacă selectaţi opţiunea de configurare standard vă sunt prezentate cu o listă mai mic de ecrane de configurare. Aceasta accelerează procesul deconfigurare, dar nu vă permite să particularizaţi funcţionalitatea de MySQL şi ar putea rezulta într-un sistem mai puţin eficient.

Figura 1.7

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

24 of 362 11/9/2

Page 25: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 25/362

 

Această pagină este procesul de instalare. Instalarea poate dura câteva minute, în funcţie de sistem.

Figura 1.8

Selectaţi tipul de configurare.

Tip server determină de memorie, hard disk, şi utilizarea procesorului. Acest lucru a fost instalat pe computerul dvs., astfel încât dezvoltarea dorsă vă asiguraţi că MySQL nu devine excesiv de procesor sau mari consumatoare de resurse. Selectarea opţiunii Masina dezvoltatorului asigurăacest lucru nu se întâmplă.

Celelalte două opţiuni sunt pentru servere dedicate. Masina de opţiune Server ar fi folosit când instalaţi MySQL pe aceeaşi maşină server-ul dvs.Web, cum ar fi Apache, se execută. Aceasta este bine pentru un site de mediu traficului de fiinţe umane, dar puteţi găsi o crestere in utilizarearesurselor, site-ul tău devine mai activ.

Atunci când se întâmplă acest lucru, veţi dori să introducă o maşină dedicată pentru a rula baza de date MySQL, care in acest moment ar trebui săselectaţi opţiunea dedicate Masina MySQL Server. Aceasta optiune spune MySQL este instalat pe o maşină dedicată şi de a utiliza toate resurselede memorie şi care sunt prezente.

Asiguraţi-vă că nu selectaţi accidental Dedicated Server Masina MySQL opţiune atunci când instalaţi pe un server Web. Sistemul dvs. nu va fi capabde a ge stiona resursele în mod corespunz

ător 

şi ar putea e

şua în cele din urm

ă.

MySQL va încerca în mod constant de a aloca toate de memorie liber ori de câte ori este pus la dispoziţie, ceea ce înseamnă că atunci când serveruweb închide o conexiune stătut, MySQL ar putea fura potential că memoria liberă până când nu există nici o cameră pentru mai mult de conectaredisponibile.

După ce selectaţi o opţiune (în acest exemplu dedicate Machine), faceţi clic pe Next (a se vedea figura 1.9).

Figura 1.9

Selectaţi opţiunea Aparat pentru dezvoltatori tip server.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

25 of 362 11/9/2

Page 26: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 26/362

 

Selectaţi opţiunea Bază de date multifuncţional ca tip de utilizare a bazei de date pentru a permite expandabilitatea final al sistemului. Acest lucrpermite MySQL pentru a optimiza atât pentru InnoDB si motoarele de stocare MyISAM. Dacă aceasta este prima dată când instalarea MySQL, ceece este foarte posibil deoarece multe sisteme de navă cu el deja instalat, vi se poate cere modul în care celelalte două opţiuni sunt utilizate.

Opţiunea Baza de date tranzacţională este utilizat doar atunci când vor fi difuzate o mulţime de tranzacţii pe bază de interogări. Acest lucru înseamnă că ar fi ambalaj o grămadă de interogări (UPDATE, SELECT, DELETE, INSERT) într-un singur termen pentru a asigura toatetabelele corespunzătoare şi datele sunt modificate. Dar dacă ceva nu merge bine intr-unul din aceste modificări ar putea distruge datele rămase.

Acest lucru ar însemna o mulţime de editare a datelor inutile şi, în unele cazuri, poate duce la date de proasta calitate. O tranzacţie caută o eroare

sau de a declanşa şi dacă este găsit toate modificările făcute în timpul începutul operaţiunii sunt rulate din nou şi au revenit la starea lornonmodified.

Aici este un exemplu simplu de o tranzacţie pe bază de MySQL, care modifică două porţii separate de date cu privire la aceeaşi masă.

TRANZACTIE START;

UPDATE utilizatori SET credite = credite - 100 WHERE id = 3 002; utilizatorilor UPDATE SET credite =credite + 100 WHERE id = 3 002;

COMMIT;

În timpul procesului a unei tranzacţii aceste intrări sunt disponibile pentru alte sesiuni pentru a asigura datele nu pot fi citite sau modificate întimp ce o tranzactie este de a fi efectuate. Vă puteţi gândi la acest proces ca fiind similare cu pornirea opriţi în casa dumneavoastră să vă asiguraţicineva nu poate răsturna accidental un comutator de lumină în timp ce se lucrează la ceva.

Opţiunea de non-tranzacţională bazei de date numai este selectat când ştiţi că nu va trebui niciodată abilităţi tranzacţie. Acest lucru permite doarmotorul de stocare MyISAM, care pot furniza rezultate mai bune, dar limitele de asemenea, func ţionalitatea generală.

Deseori vă veţi găsi o opţiune de date multifuncţional, după cum se arată în figura 1.10, pentru cea mai buna alegere, dar este, de asemenea, bine ştii ce alte opţiuni o ferta.

Figura 1.10

Opţiunea Baza de date Multifuncţional este selectat ca tip de stocare de date.

MySQL Instanţă Server Asistentul de configurare MySQL Server Instanţă Configuraţie

Configurarea My5QL instanţă Server 5.0 server.

Vă rugăm să selectaţ i utilizarea bazei de date,

® Multifunctional Bază de date

Baze de date cu scop general. Acest lucru va optimiza serverul de utilizare a motorului tranzactionale InnoDB rapid de stocare şi de mare vitezăMylSAM motorul de stocare.

O Tranzactionala bazei de date numai

Optimizat pentru servere de aplicaţ ii web şi aplicaţ ii tranzacţ ionale. Acest lucru va face InnoDB motorul de stocare principal. Reţ ineţ i cămotorul MylSAM poate fi încă folosit,

O non tranzactionala bazei de date numai

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

26 of 362 11/9/2

Page 27: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 27/362

 

Potrivit pentru aplicaţ ii web simple, aplicatii de monitorizar e sau de exploatare forestier ă, precumşi prog rame de analiza. Numai non-tranzactional MylSAM motorul de stocare va fi activat.

[<Inapoi] | Urmatoarea> | [Anulează |

Următoarea pagină vă permite să personalizaţi sistemul de stocare InnoDB, dar este mai bine să plece doar cu setările implicite.

În unele cazuri, este posibil să doriţi să alegeţi o locaţie separată, pe care le puteţi face, făcând clic pe butonul Browse din dreapta a casetei de

instalare. Alegerea o locaţie diferită este necesară numai în cazul în care anunţul Info Unitate în partea de jos a ferestrei raportează o cantitate micăde spaţiu liber pe disc, ceea ce inseamna baza de date ar putea consuma restul de resurse.

Asiguraţi-vă că nu alegeţi o unitate detaşabilă ca locul de depozitare, deoarece ar putea afecta baza de date în cazul în care unitatea nu este ata şată în orice moment.

După cum sa menţionat mai devreme, cel mai adesea cel mai bine este să lăsaţi această opţiune la alegerea implicită, după cum se arată în figura1.11, pentru a asigura funcţiile de baze de date în mod corespunzător

FIGURA 1.11

InnoDB tablespace setările

Următoarea opţiune este o aproximare a modului de multe conexiuni concurente baza de date MySQL va trebui să se ocupe. Deoarece această

instalaţie se a fi efectuate pe un server de dezvoltare, o estimare a nu mai mult de 25 este o ipoteză realistă. De fapt, ar fi rare, pentru a avea maimult de 5, dar 25 este un numar bun de bază.

Selectaţi procesarea tranzacţiilor online (OLTP), în conformitate cu opţiunea "suport de decizie", la poziţia atunci când sunteţi în curs de dezvoltao aplicaţie Web la care publicul are acces. Acest lucru se datorează faptului că aveţi într-adevăr nici o idee cât de mul ţi oameni pot incercare de aaccesa sistemul de la un moment dat. Deoarece cererea dumneavoastră va continua să crească aţi putea avea nevoie chiar de mai multe baze de dlanţ împreună să se ocupe de sarcina, dar de acum o bază de date este suficient, mai ales având în vedere această instalaţie se a fi efectuate pesistemul dumneavoastră local.

Selectaţi opţiunea de setare manuală atunci când doriţi să specificaţi un număr exact. Acest lucru este necesar doar atunci când doriţi control deplasupra aplicării Web. Deseori veţi vedea acest număr setat manual la 300 cu privire la cererile web live. Acest lucru pare să fie un mediu bun, cucapacitatea de a gestiona mai multe conexiuni.

Fiţi atenţi să nu pentru a seta opţiunea de conexiuni concurente, aşa cum se arată în Figura 1.12, prea mare pentru că sistemul nu va avea doar atâde multe resurse care pot fi împărţite şi împărtăşite de fiecare conexiune. Dacă adăugaţi mai multă memorie la cererea dumneavoastră, puteţi creacest număr, dar care nu pot fi întotdeauna cea mai bună opţiune.

Figura 1.12

Setaţi numărul aproximativ de conexiuni concurente.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

27 of 362 11/9/2

Page 28: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 28/362

 

Opţiunile de reţea a determina dacă bazele de date MySQL va fi vizibil pentru alte aparate de dincolo de instalare locale. Pentru a asigurasecuritatea final, dezactivaţi TCP Activează / IP opţiune. Dacă aveţi mai multe masini de dezvoltare, aveţi posibilitatea să îl activaţi şi să alegeţi uport non-standard.

Pentru această instalaţie, reţea este activat, după cum se arată în figura 1.13, şi portul implicit este folosit pentru că eu nu intenţionează să permităaltora să se conecteze, dar serverul meu web este situat in spatele unui firewall hardware pentru un plus de securitate.

Alegeţi un număr de port non-standard, dacă vă instalaţi o altă versiune a MySQL pe acelaşi sistem. Acest lucru nu este foarte comun, dar uneoritrebuie să implementaţi compatibilă medii să testaţi codul dumneavoastră în diverse setari. Aceasta este o alternativa cost-eficiente pentru

construirea şi menţinerea o altă maşină fizice să se ocupe de procesul de testare.

Asiguraţi-vă că selectaţi opţiunea Enable Strict Mode pentru a asigura func ţiile date de p e server în mod corespunzător.

FIGURA 1.13

Setarea opţiunilor de reţea

Pe pagina următoare puteţi selecta setul de caractere implicit utilizat în baza de date. Standard Set opţiune de caractere este selectată pentru acestexemplu (a se vedea figura 1.14), dar de multe ori acest lucru nu este cea mai bună opţiune, deoarece nu permită celor mai compatibilitatea cusistemele existente sau pentru a permite expansiunea a lungul timpului. Pentru acest exemplu, aceasta va funcţiona bine, deoarece nu vei mai avnici un caracter avansat fiind folosite.

Poţi, desigur, selectaţi orice opţiune care se potriveşte cel mai bine utilizarea de către dvs., dar eu prefer cel mai bun suport pentru op ţiuneamultilingvism. Această opţiune permite pentru o mai mare extindere si este foarte recomandat atunci când stocarea textului în mai multe limbidiferite.

Selectaţi Manual selectate implicit Set de caractere / Colectia opţiune pentru momentele rare în care doriţi să specificaţi un anumit personaj setat utilizeze mai degrabă decât o selecţie de alegerea ei. Niciodata nu se va folosi, probabil, această opţiune, deoarece este prea specific, dar estedisponibil dacă este necesar.

Dacă credeţi că veţi fi utilizaţi mai multe limbi, eu recomand a doua opţiune, cel mai bun suport pentru multilingvism, pentru a asigura cereriledvs. va fi capabil să se extindă, şi, de asemenea, vă permite să experimentaţi cu diferite opţiuni mai târziu.

Pagina Opţiuni pentru Windows (a se vedea figura 1.15) determină modul în care MySQL este iniţializat. De exemplu, dacă alegeţi să rulaţi MySQca serviciu, va porni sau opri în mod automat, controlat de sistemul de operare. Dacă aveţi instalată o versiune anterioară de MySQL veţi dori săalegeţi un nume de serviciu diferit. Acest lucru este de a asigura servicii existente nu intră în coliziune cu acesta.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

28 of 362 11/9/2

Page 29: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 29/362

 

Selectaţi Lansare Server MySQL în mod automat opţiunea de a asigura baza de date es te disponibil când sistemul porneşte. Acest lucru nu estenecesară, dar o face astfel încât să nu aveţi pentru a porni serviciul manual de fiecare dată când reporniţi aparatul. Poţi, desigur, acces cerereaserviciu pe sistemul dvs. şi modifica această opţiune în orice moment, precum şi rândul său, şi în afara serviciului până la următoarea maşinăporneşte.

Figura 1.14

Selectarea unui set de caractere implicit

MySQL Instanţă Server Asistentul de configurare

MySQL Server Instanţă de configurare

Configurarea serverului MySQL instanţă 5.0 server.

Va rugam sa selectati setul de caractere implicit.

® Standard Set de caractere

Face Latin 1 setul de caractere de implicit. Acest set de caractere este potrivit pentru limbile englez ă şi alte vest-europene,

O Mai bun suport pentru multilingvism

Asiguraţ i-UTF8 setul de caractere implicit. Acesta este caracterul recomandate prevăzute pentru stocarea de text în multe limbi diferite,

O Manualul selectate setul de caractere standard / colaţ ionare

Vă rugăm să specificaţ i setul de caractere de a utiliza, setul de caractere: | Latin 1j v

dacă[<Inapoi] | Urmatoarea> | [Anulează |

Include Repertoriul Bin în cazul opţiunii PATH, Windows, atunci când este selectat, include suport MySQL din linia de comandă prin simplatastare mysql. Acest lucru înseamnă orice prompt de comandă vă va permite accesul rapid la baza de date MySQL. Puteţi să consultaţi

instrucţiunile de sistem de operare care să modifice acest variabila PATH.

Puteţi adăuga, de asemenea, PHP şi Apache la prezentul variabila PATH, acelaşi, care le-ar expune la promptul de comandă, de asemenea. De fapatunci când instalaţi PHP unele materiale de instruire pentru efectuarea acestei modificări este oferit.

FIGURA 1.15

Opţiunile pentru Windows determină modul în care MySQL este pornit şi accesat.

Configuraţia finală este utilizată pentru a seta o parola de root, după cum se arată în figura 1.16. Root are permisiuni de la nivel mondial în bazelede date, astfel încât vă puteţi imagina cât de importantă asigurarea acest utilizator este. Nu trebuie să alegeţi o parolă, dar în mod implicit, MySQeste instalat cu nici o parola de root, ceea ce înseamnă că oricine are acces la bazele de date.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

29 of 362 11/9/2

Page 30: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 30/362

 

Este cel mai bine este să alegeţi un greu de ghicit parola, reintroduceţi-l încă o dată şi să fie sigur că acces root Activează opţiunea de maşini de ladistanţă nu este selectat pentru a dezactiva capacitatea de a administra bazele de date la distanţă. Aceasta poate părea această opţiune ar permite mai bună utilizare, dar există unele excepţii, dintre care unul este securitatea globală a unui sistem.

Chiar dacă acest lucru este de configurare a fi efectuate pe un server de dezvoltare, cel mai bine este de a menţine securitatea în prima linie aprocesului de instalare. Făcând astfel, va asigura să urmaţi măsurile de precauţie necesare atunci când efectuaţi o instalare similare pentru oconfigurare de la distanţă.

Dacă securitatea nu este o problemă, aveţi opţiunea de a crea un cont anonim. Cu toate acestea, creând un astfel de cont este aproape identic cu unlogin root fără parolă şi vor suferi de aceleaşi preocupări de securitate globală.

Figura 1.16

Opţiuni de securitate pentru MySQL

Ultima pagină, după cum se arată în figura 1.17, este de prelucrare a valorilor de configurare stabilite în paginile anterioare. În cazul în care pentrun motiv oarecare este o eroare întâlnite, MySQL vă va anunţa.

Cele mai multe ori, veţi vedea fiecare punct de marcator, cu un marcaj de selectare aplicată aşa cum este finalizată.

Atunci când prelucrarea este completă, vă sunt prezentate cu un preaviz de a vă informa de configurare a fost finalizată şi MySQL este gata deutilizare.

Aveţi acum cu succes instalat şi configurat MySQL pentru a fi folosite pentru restul acestei cărţi. Faceţi clic pe Terminare pentru a închide pagina configurare şi testare a începe instalarea.

FIGURA 1.17

Afişarea de prelucrare de configurare cu notificările corespunzătoare ca fiecare sarcină este finalizată.

MySQL Instanţă Server Asistentul de configurare

MySQL Server Instanţă de configurare

Configurarea serverului MySQL instanţă 5.0 server. Prelucrarea de configurare, ..

Pregătiţ i de configurare

A scrie fişierul de configurare CCilProgram FilesïMySQLlMySQL Server 5, Obny.inp (2J Pornire serviciu (vj Aplicarea setărilor de securitate

Fişierul de configurare creat. Serviciu Windows instalat MySQL. Serviciul a început cu succes. Setările de securitate aplicate.

Apăsaţ i pe [Fi nish] pentru a închide expertul.

<Înapoi | Finalizare

Testarea

După ce instalaţi MySQL îl puteţi testa. Puteţi vedea starea de funcţionare cu ajutorul monitorului MySQL, care determină dacă serverul de baze date este de până şi să fie difuzate. Aveţi posibilitatea să utilizaţi linia de comandă pentru a vă conecta şi de a investiga baza de date MySQL la feca tine ar fi pe un server de la distanţă.

Pentru a deschide o nouă comandă în prompt, după cum se arată în figura 1.18, apăsaţi tasta Windows + R. Când promptul deschis, tastaţiurmătoarea comandă pentru a vă conecta la:

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

30 of 362 11/9/2

Page 31: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 31/362

 

$ Mysql-uroot-p

 j : ^ J "commanc' nu* F °UNC"You Need pentru a adăuga MySQL la variabila PATH.

O Notă Parolă Introduceţi apare. Tastaţi parola aţi setat în procesul de configurare. i " : T'P i " T ^ - "■" Atunci când tastaţi o parolă prompt nu va ar ănici o actualizări de text.

FIGURA 1.18

Command Prompt cu comanda înscris pentru a vă conecta la serverul de baze de date MySQL

3 CAWIHDOWS \ syslem32 \ cmd.exe - mysql- uroo »-p

"Ajutor; * sau" Tip \ h "pentru ajutor. Tip

În cazul în care conectare este de succes, un aviz care descrie serverul de MySQL apare. Not ă conţine versiunea de MySQL pe care se execută înprezent. Următorul este un exemplu de anunţ:

Bine ati venit la monitor MySQL. Comenzile se termine cu; sau \ g. ID-ul dvs. de conectare este de 5MySQL

Versiune server: 5.0T.4 5-comunitate-NT MySQL Community Edition (GPL)

Odată ce vă conectaţi la MySQL, modificările comanda prompt la mysql>. Din acest punct, până când log out, toate comenzile sunt îndreptate serverul de baze de date.

De exemplu, pentru a vedea ce bazele de date sunt disponibile, tastaţi următoarea comandă:

mysql> baze de date arată;

Pentru a testa instalarea bazei de date, creaţi o bază de date nouă:

mysql> crearea bazei de date flashphp;

Atunci când baza de date este creată, aveţi posibilitatea să selectaţi-l cu următoarea comandă:

mysql> flashphp utilizare;

Aveţi posibilitatea să treci chiar şi în numele bazei de date în timpul fazei de autentificare, cum ar fi:

$ Mysql-uroot-p flashphp

În acest moment, MySQL ar trebui să fie instalat cu succes pe server-ul dvs. de dezvoltare pentru Windows. Următoarea secţiune se referă la mod în care se instalează MySQL pentru sistemele UNIX si UNIX-like. Procesul de instalare PHP este următorul text direct instrucţiunile de UNIX.Simţiţi-vă liber pentru a sări înainte dacă doriţi doar să se concentreze pe un sistem Windows.

Instalarea MySQL pentru UNIX

Puteţi instala MySQL pe sistemul dumneavoastră UNIX folosind codul sursă oferite pe site-ul cărţii, sau puteţi descărca cele mai recente fişiere dla MySQL direct la http://dev.mysql.com/ downloads/mysql/5.0.html # linux.

Versiunea pentru a descărca depinde de mediul pe care îl instalaţi. Consultaţi ghidul de următoarele informaţii suplimentare:http://dev.mysql.com/doc/refman/5.0/en/which-version.html.

După ce descărcaţi fişierele necesare instalării, puteţi începe pregătirea pentru procesul de instalare. Primul pas este să adăugaţi de utilizator şi dgrup mysql MySQL pentru a rula ca. Următoarea comandă creează mysql de grup şi adaugă un mysql ghidul de la faptul că noul grup:

Groupadd mysql $ $ useradd-g mysql mysql

Alegeţi directorul în care doriţi să instalaţi MySQL. Puteţi alege aceeaşi locaţie pe care aţi instalat Apache pentru a păstra toate componentele dedezvoltare în aceeaşi locaţie.

$ Cd / usr / local

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

31 of 362 11/9/2

Page 32: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 32/362

 

 j ^ j ^ J ^ TS * ^ ^ posibil să fie necesar pentru a efectua instalarea MySQL ca r ădăcină în cazul în care directorul este protejată.

Deschideti pachetul de distribuţie şi de a crea un link simbolic la acel director.

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

În cazul în care comanda despachetarea este completă, pentru a schimba directorul de instalare.

$ Cd mysql

Schimbarea de proprietate a fişierelor MySQL rulând o comandă de proprietate recursiv. Prima comandă modificări de proprietate, precum şimodificările doua atributul grupului.

$ Chown-R mysql $ chgrp-R mysql

Dacă nu aţi instalat o versiune anterioară a MySQL de pe acest aparat, trebuie să creaţi MySQL directorul de date şi tabele de finanţare.

scripts / mysql_install_db - user = mysql

Dacă doriţi MySQL să se execute automat atunci când aparatul începe, aveţi posibilitatea să copiaţi mysql.server fişier situat în sprijin /Culegere de la locaţia în cazul în care sistemul dvs. are alte fişiere de pornire. Pentru mai multe informaţii cu privire la locaţia pe care directorul şalte probleme de sistem specifice, mergeţi la http://dev.mysql.com/doc/refman/5.0/en/UNIX-post-installation.html #automat de pornire.

NotiAtunci când totul este corect despachetat şi instalat, puteţi începe testarea.

Pentru a porni serverul MySQL, executaţi următoarea comandă de la mysql directorul de instalare:

$ Bin / mysqld_safe - ghidul = mysql &

Utilizaţi următoarea comandă pentru a verifica serverul este de fapt execută:

$ Bin / mysqladmin versiune $ bin / mysqladmin variabile

De ieşire din mysqladmin versiune va varia în funcţie de versiunea instalată. Aceasta este o proba care sa întors de la comandă:

mysqladmin Ver 14.12 Distrib 5.0.54, pentru pc-linux-gnu pe i686 Copyright (C) 2000 MySQL AB & MySQL ABşi Finlanda TCX DataKonsult AB

Acest software vine cu ABSOLUT NICI O GARANŢIE. Acest lucru este software liber,

şi sunteţi bineveniţi să-l modifica şi redistribui sub licenta GPL

Server versiunea 5.0.54

Protocolul de la versiunea 10

Localhost conexiune prin UNIX soclu

UNIX socket / var / lib / mysql / mysql.sock

Uptime: 0 zile 2 ore 2 min 07 sec

Subiecte: 1 Întrebările: 323 interogări lent: 0 Deschide: 0 tabelele Flush: 1 tabele deschise: 7 deinterogări pe secundă avg: 0.000

Protejarea MySQL

Este important să vă protejaţi utilizatorii MySQL din activitatea de malware. În mod implicit, MySQL instalează rădăcină şi utilizatorii anonimi faparole, care este la fel ca folosind un standard la nivel mondial. Este o practică foarte bună pentru a atribui imediat parolele şi, în unele cazuri,elimina utilizatorii anonimi cu totul.

Setarea unei parole în Windows

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

32 of 362 11/9/2

Page 33: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 33/362

 

Parola pentru contul de root a fost dat o parolă când aţi rulat programul de instalare. Cu toate acestea, dacă din anumite motive pe care doriţi să oschimbaţi, pur şi simplu rulaţi următoarea comandă, înlocuind NEW_PASSWORD cu parola reală pe care doriţi să utilizaţi:

$ Mysql-uroot

mysql> Setare parolă PENTRU 'root'S'localhost' =

PASSWORD (NEW_PASSWORD); mysql> Setare parolă PENTRU ,root '@,% '= PASSWORD (NEW_PASSWORD);

Setarea unei parole pentru UNIX

Instalarea MySQL pe UNIX frunze de conectare rădăcină cu nici o parolă, spre deosebire de instalarea Windows. Este foarte important pentru aatribui o parolă imediat:

$ Mysql-uroot

mysql> SET PENTRU PAROLA = 'localhost', 'root' @

PASSWORD (NEW_PASSWORD); mysql> Setare parolă pentru 'root' @,host_name '= PASSWORD (NEW_PASSWORD);

Înlocui host_name cu numele de gazdă server. Dacă nu cunoaşteţi serverul gazdă, rulaţi această comandă în timp ce conectat la MySQL pentrustabili care informaţii:

SELECT-gazdă, Manual de utilizare DIN mysql.user;

Pentru a elimina cont anonim, în jurnalul de la MySQL şi emite următoarea comandă: UTILIZATOR'';

Utilizaţi prudenţă atunci când scoate ţi un utilizator şi dublu-a verifica ortografia numelui de utilizator înainte de a v ă problemă care comanda.

PHP este componenta finala pentru a instala, în scopul de a finaliza procesul de edificare a sistemului de dezvoltare. Procesul de instalare PHP esimplă, dar este nevoie de cateva personalizare.

La instalarea suport pentru XML şi bibliotecile HG, sistemul dumneavoastr ă ar putea necesita biblioteci suplimentare şi componente.

Instalarea PHP pentru Windows

Instalarea PHP pentru Windows este de fapt destul de simplă. O mulţime de procesul de instalare constă în mutarea fişierelor în jurul valorii şieditarea fişierelor existente. Puteţi găsi fişierele de PHP de instalare de pe site-ul Web al cărţii sau puteţi descărca cele mai recente fisiere direct dpe site-ul de la php.orgwww.php.net / downloads.php.

Instalare

Pentru a începe procesul de instalare PHP, rulaţi aplicaţia de instalare pe care l-aţi descărcat. Pagina de Bun venit pentru expertul de configurareapare, după cum se arată în figura 1.19.

Dosarul sau de sosire, după cum se arată în figura 1.20, este în cazul în care vă instalează PHP În mod implicit, aceasta a ales o cale de director cuProgramul Files în cadrul acestuia. Acest lucru poate provoca probleme pe unele servere. O cale comună este C: \ php sau C: \ php5dacă doriţi să instalaţi mai multe copii ale PHP

DROP

FIGURA 1.19

Bine ati venit pe pagina de instalare PHP

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

33 of 362 11/9/2

Page 34: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 34/362

 

FIGURA 1.20

Alegeţi folderul destinaţie.

Programul de instalare PHP este construit pentru a configura atât PHP şi Apache pentru a lucra împreună. Aceasta include editarea de fişiere deconfigurare a Apache.

Pe pagina Configurare Web Server, după cum se arată în figura 1.21, selectaţi versiunea de Apache pe care aţi instalat anterior. Dacă nu sunteţi sigcare versiune este instalată, aveţi posibilitatea să executaţi următoarea comandă în prompt:

/ Usr/local/apache2/bin/httpd-v

Următorul este un eşantion de ieşire de la comanda de mai sus:

Versiune Server: Apache/2.0.59 Server construit: 31 august 2007 01:58:43

FIGURA 1.21

PHP Web Server Setup Installer pagina

lg PHP 5.2.5 Saiup Web Serv er Setup

Selectaţi tine Web Server vă wi $ h, pentru a seta.

O Apache. i.3S-MMJ (I: ® Ap'ach £ 2 "x 0.0 M.cdule;. O Ap.acHsZKX Modulul-O Apacfiá-CSI; OlI3BM «« £ œ OlISTastÈâl O IIS CGI ONSAfrí OXBSrtfi

O Sambar Ser ^ EE O Otter: de exemplu,,,.

O Nu de configurare, un web; server de

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

34 of 362 11/9/2

Page 35: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 35/362

 

. Înapoi i ./^'.. T:. Eu I anula

Pagina următoare, a se vedea figura 1.22, este în cazul în care vă informează instalatorul amplasarea directorului de configurare Apache. Deexemplu, dacă aţi urmat de ghidul de instalare Apache de la începutul acestui capitol, calea ar fi următoarele:

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

Pe pagina următoare pe care o alegeţi extensiile suplimentare necesare pentru această carte (vezi Figura 1.23). Aceste extensii sunt GD2, EXIF,MySQL, şi PEAR. Puteţi alege, de asemenea, să instalaţi oricare altele care credeţi că pot fi utile.

FIGURA 1.22

Apache Configurare pagină anuar 

FIGURA 1.23

Alegeţi extensiile pe care doriţi să instalaţi în plus faţă de PHP.

Întreaga configuraţie este setat la acest punct, şi aveţi posibilitatea să faceţi clic pe Instalare pentru a începe procesul de instalare PHP Cândinstalarea sa terminat într-o pagină Completed apare.

Aveţi posibilitatea să deschideţi directorul în care este instalat PHP si uita-te la di feritele fişiere. Asemenea, puteţi edita php.ini fişier pentru asatisface nevoile dvs. specifice.

C: \ php5 \ php.ini

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

35 of 362 11/9/2

Page 36: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 36/362

 

Configuraţia implicită a php.ini ar trebui să lucreze pentru o configuraţie de dezvoltare, cu excepţia faptului că ar trebui să permitădisplay_errors. Activarea de afişare a erorilor spune PHP pentru a imprima orice erori pe ecran. Într-o configurare de produc ţie acest lucru aputea fi considerată o preocupare de securitate. Un server de dezvoltare este, în general, numai vazut de spectatori autorizate, ceea ce înseamnă cpermite această opţiune nu este o problemă.

Deschideţi php.ini fişier şi căutare pentru secţiunea referitoare la error_reporting. display_errors = Off

Schimbaţi valoarea la Pe.

display_errors = On

Asiguraţi-vă că reporniţi serverul de web Apache înainte de a continua, deoarece le-aţi făcut unele modificări de configurare Apache.

Testarea

După ce instalează PHP aveţi posibilitatea să creaţi un fişier PHP probă pentru a testa. Un fişier probă comună este phpinfo fişier, care vă permsă vedeţi variabile de configurare pentru instalarea PHP pe server.

Puteţi utiliza Notepad sau orice editor de text pentru a crea acest fişier mostră. Dacă instalaţi Suite Web completă de la Adobe, aveţi posibilitateautilizaţi Dreamweaver pentru a scrie fişiere PHP (a se vedea figura 1.24).

Aici este sintaxa pentru phpinfo fişier.

<? Php

phpinfo ();

Salvaţi acest fişier ca info.php în documentul radacina de instalare Apache. De exemplu, dacă instalaţi Apache în locaţia implicită, fişierul estesalvat în PHP:

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

FIGURA 1.24

PHP fişier mostr ă aşa cum se vede in Dreamweaver CS3

Puteţi deschide acum acest fişier în browserul Web, aşa cum se vede în Figura 1.25.

http://localhost/info.php

Dacă preferaţi, aveţi posibilitatea să creaţi un fişier de PHP pentru a testa dacă PHP este corect de funcţionare, cum ar fi următoarele:

<? Php

: print "Hello, World Acesta este PHP.!";?>

Când executaţi acest fişier în browser-ul, ar trebui să vedeţi mesajul afişat.

à

■ A

B

-

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

36 of 362 11/9/2

Page 37: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 37/362

 

A

FIGURA 1.25

PHP informaţii afişate într-un browser Web

Instalarea PHP pentru UNIX

Instalarea PHP pentru UNIX este mai detaliată şi necesită o configuraţie mai mult. Acest lucru este valabil pentru cele mai multe setări de instalarde linie de comandă. Aveţi posibilitatea de a descărca fişiere de instalare de pe site-ul Web carte sau un oficial site-urile web PHP.

După ce obţineţi fişierele de instalare PHP, poti incepe procesul de instalare. Înainte de a începe instalarea, este o idee bună pentru a opri Apachepentru a se asigura nici unul dintre fişierele devine corupt.

/ Usr / local / apache / bin / apachectl oprire

Pentru a începe instalarea, creaţi un director în cazul în care va fi instalat PHP.

mkdir / usr/local/php5

Se poate substitui PHP5 pur şi simplu pentru php. Cu toate acestea, adăugând numărul de versiune este mai uşor de a avea mai multe instalărşi vor fi mai uşor de a gestiona în viitor.

cd / usr/local/php5

Despachetaţi fişierele şi tipul de directorul de instalare:

gunzip php-5.2.5.tar.gz tar-xvf asupra php-5.2.5.tar CD php-5.2.5

Clădire parametrii de configurare

Următorul pas este de a construi config linie. Aceasta va conţine toate extensiile necesare şi caracteristicile pe care doriţi să le includeţi îninstalaţie. De exemplu, va trebui să includă baze de date şi imagini de sprijin pentru a finaliza unele dintre capitole din această carte, printre altelFiecare opţiune este conţinută într-un set de ghilimele simple (') şi va include calea, dacă este necesar.

/ Configure '.' - Prefix = / usr/local/php5 "" - cu-

apxs = / usr / local / apache / bin / apxs "" - cu-GD "" - enable-exif "" - with-mysql = comun</Usr/local/php5 "" - cu-mysqli = comun, / usr/local/php5/bin/mysql_config "" - cu-libxml-dir = comun, /usr/local/php5 "" - cu-

xsl = comun, / usr/local/php5 "" - cu-jpeg-dir = / usr/local/php5 "" - cu-png-dir = / usr/local/php5 ""

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

37 of 362 11/9/2

Page 38: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 38/362

 

enable-gd- nativ-TTF "" - cu-freetype-dir = / usr/local/php5 '' - with-gettext = comun, / usr/local/php5"

Atunci când procesul de configurare este complet (ceea ce poate dura un timp, în funcţie de sistem), să creaţi şi executaţi programul de instalare:

face

make install

După ce make install comandă este finalizată, PHP ar trebui să fie instalat. Configuraţie

O porţiuni de câteva PHP trebuie să fie configurat pentru a vă asigura că funcţionează perfect cu Apache şi sistemul dvs. de dezvoltare generală.Acest proces este destul de uşor pentru a finaliza, dar modificarea incorectă poate duce la un sistem de spart. De asemenea, atunci când se modififişierele de configurare, este cel mai bine este de a face o copie de rezervă primul.

Primul pas este de a muta php.ini fişier într-o locaţie centrală care PHP va folosi atunci când porneşte în sus.

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

Pentru Apache pentru a încărca fişiere PHP, adăugaţi referinţele necesare modulului:

Php5_module LoadModule modules/libphp5.so AddType application / x-httpd-php php.. Phtml AddTypeapplication / x-httpd-php-source. Phps

Reporniţi Apache pentru a avea aceste modificări intră în vigoare. De fiecare dată când editaţi valorile din PHP sau Apache, trebuie să reporniţi

serverul.

/ Usr / local / apache / bin / apachectl start

Cu totul corect instalate, puteţi testa configurare prin executarea unui fişier PHP mostră:

<? Php

phpinfo ();?>

În acest capitol, ati trecut prin paşii necesari pentru a instala sistemul de dezvoltare complet. Acest proces a inclus instalarea Apache, PHP, si

MySQL pe un server Web Windows sau UNIX. Următorul capitol vă plimba prin procesul de efectuarea acestei configurare de dezvoltare maisigur. Aceasta include asigurarea fişierele de pe server, precum şi configuraţia serverului de ansamblu prin httpd.conf fişier de configurare.

«KTS-'« r-

t-r.-IY; ^ • ;

Y. ji ^''

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

38 of 362 11/9/2

Page 39: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 39/362

 

 _ _ 

méMsM 

SHPV ^ ■ uiiï-.S

R: B; f h * r vKr 

vmv. mt 

k. . JEtSg

T .. J L

 ï,. L »

Euf aţi instalat toate componentele pe server, puteti configura de configurare pentru a fi mai sigur. După ce se explică de securitate, următorul p

este acela de a configura Stivuitoare corespunzătoare de eroare si uita-te la modalităţi de a crea o configuraţie mai usor de utilizat pentruutilizatorul final.

După securitate şi configuraţia serverului Web sunt complete, veti uita la o imagine de ansamblu PHP pentru a înţelege mai bine cum funcţioneatotul. MySQL de utilizare şi de integrare de bază, cu PHP sunt explicate folosind exemple cu diferite descrieri şi explicaţii.

La ultima secţiune explorează Flash, inclusiv de configurare de clasă şi explicaţia IDE global.

În capitolul 1, aţi învăţat cum să înfiinţeze un server de dezvoltare, care a inclus instalarea de PHP, MySQL, şi Apache. Această secţiune este oprezentare generală a modului în care serverul Web este configurat, precum şi modul de a face sistemul mai sigur.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

39 of 362 11/9/2

Page 40: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 40/362

 

Lucrul cu. Htaccess

. Htaccess fişier este folosit pentru a modifica modul în care funcţiile Apache pentru un anumit director. Acest fişier este similar cuhttpd.conf fişier ce se află în configuraţia globală a Apache, cu excepţia faptului că nu este necesară şi poate fi dezactivat la nivel global, cucondiţia ca administratorul modifică setările Web

 În acest capitol

Prezentarea serverul Web Exploring PHP

Explorarea elementele de bază ale M ySQL Explorarea Flash

Sintaxa de acest fişier nu este foarte avansat. Acesta este în esenţă un fişier text care informează serverul Web de modificări specifice.

De exemplu, aţi observat un site web care are extensiile de fişier de specialitate, cum ar fi gazdă Web MediaTemple, care are următorul format?

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

Observaţi modul în care url are o . Mt prelungire. Această extensie nu este o extensie de fişier standard. Această modificare poate fi realizatfolosind . Htaccess fişier:

Utilizarea # extensii particularizate fişier AddType application / x-httpd-php. Mine

Această modificare poate fi, de asemenea, face prin httpd.conf fişier dacă preferaţi să aveţi un server Web întregul putea folosi acest extensie

fişier personalizat.

Apache gestionează solicitările multe în mod implicit şi poate oferi chiar mai mult, cu module suplimentare instalate. Un modul, în special, văpermite să aveţi URL-uri personalizate, de asemenea, denumit în mod obişnuit ca URL-uri curate.

Posibilităţile cu . Htaccess sunt variate şi cu totul depinde de cererea dumneavoastră. Un utilizarea mai frecventă a . Htaccess este de aredirecţiona cererile www şi non-www în aceeaşi locaţie. Acest lucru nu numai limitele de link-uri redundante, dar oferă, de asemenea, o mai bunoptimizare a motorului de căutare.

Un exemplu în acest sens de conversie, folosirea domeniului example.org, va arata ceva similar cu următorul text:

# Forţa www.domain.com la RewriteCond% {domain.com HTTP_HOST} ^www.example.org [NC] RewriteRule A(.*)$http://example.org/ 1 dolar [R = 301, L]

Protejarea conţinutul dvs.Puteţi proteja conţinutul într-un număr de moduri. Puteţi construi un sistem de autentificare personalizat sau de a folosi autentificare de bază careste ambalat cu Apache.

Autentificarea de bază este configurat în două etape. Primul pas este de a crea şi parola de utilizator.

Puteţi utiliza htpasswd fişier pentru a crea fişierul parola. Această comandă de creare de parolă se află în bin / directorul unde aţi instalatApache. De exemplu, cel mai probabil veţi găsi fişierul la următoarea locaţie, presupunând că aţi utilizat calea de instalare a sugerat în capitolul 1

$ / Usr / local / apache / bin / htpasswd

Prima dată când creaţi un utilizator, trebuie să informeze aplicaţia de creare a parolei pentru a crea un fişier parolă nouă. Din acel punct de peomiteţi-c pavilion.

Imposibilitatea de a elimina-c pavilion după configurarea primul utilizator va avea ca rezultat într-un fişier parolă nouă şi va elimina orice utilizatoriloexistenţi.

Deşi nu este necesară, aceasta este o practică bună să susţină această periodic sus, precum şi orice alte fişiere importante, în cazul în care sistemuldvs. întâlneşte un accident neasteptat sau corupere a datelor.

Comandă pentru a crea o parolă este un simplu apel la cererea de parola cu numele de utilizator adăugat la sfârşitul.

$ Cd / usr / local / apache / bin /

$ Htpasswd-c / usr / local / apache / passwd / parole USERNAME Asiguraţi-vă că pentru a înlocui USERNAME cu numele dutilizator real pe care doriţi să adăugaţi.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

40 of 362 11/9/2

Page 41: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 41/362

 

htpasswd aplicaţia vă va cere parola pe care doriţi să asociaţi, şi apoi vă cere să tastaţi aceeaşi parolă din nou pentru ao confirma.

Fişierul parola generata este criptat. Cu toate acestea, ar trebui să stocaţi-l în continuare într-o locaţie sigură. În nici un caz acest fişier să fie stocate în directorul publice, deoarece aceasta ar putea compromite integritatea sistemului dumneavoastră.

Acest lucru nu este la fel de important într-un sistem de dezvoltare, dar aceasta este o practic ă bună să urmaţi toate măsurile adecvate de securitachiar şi într-o configurare de dezvoltare, să se familiarizeze cu ele. După cum veţi continua să lucreze la servere, securitate va deveni oa douanatura. Ar trebui să nu-l pună în afara pentru a economisi timp.

După ce aţi creat fişierul parola, se adaugă controlului de securitate într-o . Htaccess în orice locaţie doriţi să protejaţi prin parolă. De exemp

să adăugaţi autentificare la serverul de întregul, deoarece acest server de dezvoltare şi pe care nu l-ar dori cineva care vizionează.

Adăugaţi următoarele la un nou . Htaccess fişier în rădăcina de director Web.

AuthType de bază

AuthName "Autorizaţia necesară" AuthUserFile / usr / local / apache / passwd / parole valabile săsolicite-ghidul de

Aceasta informează Apache că orice cerere în acest director şi de mai jos necesită autorizare. Ultima linie permite oricărui utilizator în fişierul parpentru a putea pentru a va autentifica

 Necesită valabil ghidul de-

Puteţi adăuga, de asemenea, un nume de utilizator specific, dar acest lucru este mult mai greu de intretinut.

Aceasta este autentificarea de bază aşa că are limitări diferite. De exemplu, nu aveţi posibilitatea să modificaţi caseta de dialog care afişează înbrowser-ul utilizatorului. Nu puteţi modifica valorile eticheta de lângă casetele de intrare şi, cel mai important, nu puteţi permite utilizatoruluipentru a vă deconecta.

Dacă cererea dumneavoastră necesită un sistem de autentificare mai personalizat şi integrat, ar putea fi mai bine pentru a construi un obicei PHP MySQL de configurare, în funcţie de cerinţele dumneavoastră.

Colectarea de informaţii despre Apache

Pe măsură ce continuă să lucreze cu Apache, există unele comenzi şi instrumente care pot duce la mai mult timp pentru a dezvolta o aplicaţie în lde scară mică server.

Pornirea şi oprirea Apache

Uneori, Apache poate actiona pana la fel ca orice altă piesă de software sau hardware-ul pe sistemul dumneavoastră. De multe ori atunci când se întâmplă acest lucru, o repornire simplu va rezolva problema. De exemplu, după cum mai mulţi utilizatori cererea fişiere de la Apache, acestapoate începe să umple memoria internă şi fişiere temporare.

Pentru a reporni Apache puteţi apela pur şi simplu următoarea comandă în UNIX de la linia de comandă sau a reporni serviciul pe Windows:

$ / Usr / local / apache / bin / apachectl restart

NOTĂ ^ ^ ^ I calea către apachectl Aplicaţia poate varia în funcţie de instalare a

Dacă doriţi să opriţi Apache şi nu l -au repornit, utilizaţi următoarea comandă. Acest lucru ar fi făcut cel mai probabil atunci când instalaţi modulenoi sau actualizarea Apache în sine.

$ / Usr / local / apache / bin / apachectl oprire

Pentru a porni serverul din nou după ce a finaliza actualizarea, pur şi simplu utilizaţi opţiunea de a începe:

$ / Usr / local / apache / bin / apachectl start

Determinarea versiunea de Apache

Ocazional, atunci când instalaţi software nou, trebuie să ştiţi ce versiune de Apache se execută în prezent. De exemplu, atunci când instalaţi PHP trebuie sa stii ce versiune de Apache pe care o utilizaţi. Acest lucru este descoperit prin rularea unui comutator de comandă simplu.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

41 of 362 11/9/2

Page 42: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 42/362

 

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

Rezultatul care comanda va fi ceva similar cu figura 2.1.

Determinarea care module sunt instalate în Apache

Puteţi foarte uşor de a determina ce module sunt instalate în mod curent în Apache utilizând următorul text de linie de comandă steaguri în UNIX

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

Pentru a determina modulele în Windows, trebuie să executaţi următoarea comandă:

httpd-t-D DUMP_MODULES

Figura 2.1

Afiseaza de la versiunea curentă de Apache

Un exemplu de răspuns la această comandă este ceva similar cu următorul:

Module Loaded: core_module (static) mpm_worker_module (static) http_module (static) so_module (static)include_module (comun) deflate_module (comun) log_config_module (comun) env_module (comun) expires_modul(comun) headers_module (comun) setenvif_module (comun) ssl_module (partajat ) mime_module (comun)status_module (comun) autoindex_module (comun) info_module (comun)

vhost_alias_module (la comun) negotiation_module (comun) dir_module (comun) imagemap_module (comun)actions_module (comun) userdir_module (comun) alias_module (comun) rewrite_module (comun)

Sintaxa OK

Dacă omiteţi D-DUMP_MODULES pavilion veţi vedea doar Sintaxă răspuns. Acest lucru vă informează dacă ceva este în neregulă sau vă spuntotul este in regula.

$ / Usr / local / apache / bin / apachectl-t

Pentru Windows comanda va fi

httpd-t

Utilizarea documentelor de eroare personalizate

Când vizualizaţi o adresă URL pe un site Web, Apache serveşte o pagină pentru a vă bazate pe cererea ta. În mod implicit, dacă Apache este ruga

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

42 of 362 11/9/2

Page 43: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 43/362

 

să servească unui fişier nu poate găsi, ea returnează o pagină 404 urât că nu este foarte informativ si cauzeaza de fapt, o preocupare de securitatepotenţial.

După cum puteţi vedea în Figura 2.2, Apache a tipărit informaţiile despre serverul pentru ca lumea să vadă. Acum, acest lucru nu este o preocupde securitate mare, dar fiecare bucată de informaţii se pot adăuga până la o problemă majoră.

Figura 2.2

Pagină de eroare default de la Apache

ft connecttophp.sw f 0ÍM

Vezi fişier de control depanare

Exemplu: o schimbare de Flash pentru a PHP

Servef Răspuns: Buna ziua de la PHP, timpul este; 137259104

Call Server |

O problemă mai importantă, cu ajutorul pagini s tandard de eroare este faptul ca utilizatorul este prezentat cu o pagină de inutil. De exemplu,ghidul de acum ştie că fişierul nu există, dar nu are unde să meargă şi nici o idee ce ar putea fi problema. Destul de ciudat, daca un utilizator esteprezentată o pagină 404 el sau ea nu se va lipi de obicei, în jurul valorii, ceea ce înseamnă că un utilizator abandonat pentru site-ul tău.

Modificarea Apache

Din fericire, Apache vă permite să modificaţi această pagină de eroare implicit. Unele gazde vă permit să modificaţi fişierul utilizând panoul decontrol a inclus faptul că le-au instalat atunci când aţi achiziţionat serverul. În acest caz, cu toate acestea, serverul de dezvoltare necesită să văconfiguraţi manual majoritatea de ea.

Utilizarea documentelor de eroare este la fel de simplu ca adăugarea de modificarea într-o . Htaccess fişier. Acest fişier este de obicei stocatedocument root pentru a asigura toate fişierele vor vedea fişierul.

Codul de mai jos este sintaxa necesare pentru a modifica documentul de eroare.

Handler Eroare # personalizate ErrorDocument 2 04 / error.html ErrorDocument 3 01 / 3 02 error.htmlErrorDocument / error.html ErrorDocument 400 / error.html ErrorDocument 4 01 / error.html ErrorDocument 03 / error.html ErrorDocument 4 04 / eroare ErrorDocument html. 500 / error.html ErrorDocument 5 01 /error.html ErrorDocument 5 02 / 5 error.html ErrorDocument 03 / error.html

După cum puteţi vedea, documentele de eroare va fi înlocuit de un singur fişier. Poţi, desigur, la punctul într-un fişier separat pentru fiecare eroa întâlnite. Dacă nu atribuiţi o pagină de eroare specific, Apache revine la valoarea implicita. Lista precedentă este o înregistrare robust al codurilorde eroare posibile, dar aceasta nu este una completă.

Documente dinamice de eroare

Folosind PHP, aveţi posibilitatea să creaţi un sistem dinamic de tratare a erorilor. Ideea este de a apela o pagină aşa cum ai făcut în exemplulanterior, cu excepţia faptului că o variabila va fi transmis de-a lungul a notifica faptul că pagina de eroare care a fost întâlnită.

Începi prin modificarea handler de erori în . Htaccess fişier, cum ar fi:

# Eroare Handler,: Cererea este trimis la un php

ErrorDocument 204 / ErrorHandler. Php?. E =204

ErrorDocument 301 / ErrorHandler. Php?. E =3 01

ErrorDocument 3 02 / ErrorHandler. Php?. E =3 02

ErrorDocument 400 / ErrorHandler. Php?. E =400

ErrorDocument 401 / ErrorHandler. Php?. E =401ErrorDocument 403 / ErrorHandler. Php?. E =403

ErrorDocument 404 / ErrorHandler. Php?. E =404

ErrorDocument 500 / ErrorHandler. Php?. E =500

ErrorDocument 501 / ErrorHandler. Php?. E =501

ErrorDocument 502 / ErrorHandler. Php?. E =502

ErrorDocument 503 / ErrorHandler. Php?. E =503

Acest cod spune Apache pentru a redirecţiona aceste erori la errorHandler.php fişier, care trece în codul de eroare. Următorul pas este de aconstrui fişierul PHP care se va ocupa de coduri de eroare. Acest PHP va aştepta un singur argument şi vor fi destul de inteligent pentru a reveniun răspuns valabil în cazul în care nicio eroare este trecut inch

Prima parte a dosarului surprinde codul de eroare şi initializeaza o variabila pentru a s toca şir de eroare.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

43 of 362 11/9/2

Page 44: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 44/362

 

<? Php

ErrorCode $ = $ _GET ['e']; $ errorString = "";

?>

Atunci când un cod de eroare este găsit, o verificare pentru a vă asigura că e un număr valabil în care se face pentru a păstra aplicaţia de securitat

<? Php

ErrorCode $ = $ _GET ['e']; $ errorString = "";

dacă (is_numeric ($ errorCode)!) {

$ ErrorCode = -1;

}

Un comutator de bază este utilizată pentru a determina care codul de eroare a fost întâlnită. Switch-uri sunt explicate în secţiunea "Exploring BazePHP", mai târziu în acest capitol.

<? Php

ErrorCode $ = $ _GET ['e']; $ errorString = "";

dacă (is_numeric ($ errorCode)!) {

$ ErrorCode = -1;

} switch ($ errorCode)

{

caz 204: / / nr de conţinut (Document gol)

$ ErrorString = "nr conţinut (Document gol)"; break;

caz 301: / / mutat permanent

$ ErrorString = "Mutat permanent"; break;

caz 400: / / Bad Cerere

$ ErrorString = "Solicit Bad"; break;

caz 401: Ghid de utilizare / / neautorizate

$ ErrorString = "Ghid de utilizare neautorizată"; break;

caz 403: / / Forbidden

$ ErrorString = "Interzis"; break;

caz 404: / / Document Nu a fost găsit

$ ErrorString = "Document Not Found"; break;

caz 500: Eroare de server / / internă

$ ErrorString = "Eroare de server internă"; break;

caz 503: / / din resurse

$ ErrorString = "din resurse"; break;

caz -1: / / Nu Error Code

$ ErrorString = "eroare necunoscută";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

44 of 362 11/9/2

Page 45: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 45/362

 

}

Ultimul pas este de a afişa şirul de eroare a utilizatorului, care completeaza particularizată script-ul de tratare a erorilor. Veţi observa că uneledintre codurile de eroare au fost omise de la comutatorul pentru a demonstra faptul că script-ul se mută pe silenţios dacă un cod de eroare esteafişat invalid.

<? Php

ErrorCode $ = $ _GET ['e']; $ errorString = "";

dacă (is_numeric ($ errorCode)!) {

$ ErrorCode = -1;

} Switch ($ errorCode)

{

caz 204: / / nr de conţinut (Document gol)

$ ErrorString = "nr conţinut (Document gol)"; break;

Cazul 3 01: / / mutat permanent

$ ErrorString = "Mutat permanent"; break;

caz 400: / / Bad Cerere

$ ErrorString = "Solicit Bad"; break;

caz 401: Ghid de utilizare / / neautorizate

$ ErrorString = "Ghid de utilizare neautorizată"; break;

caz 4 03: / / Forbidden

$ ErrorString = "Interzis"; break;

caz 4 04: / / Document Nu a fost găsit

$ ErrorString = "Document Not Found"; break;

caz 500: Eroare de server / / internă

$ ErrorString = "Eroare de server internă"; break;

caz 503: / / din resurse

$ ErrorString = "din resurse"; break;

caz -1: / / Nu Error Code

$ ErrorString = "eroare necunoscută";

}

?>

 <h2> apărut o eroare în timpul procesării solicitării dvs. </ h2> <h3> <= $ errorString??> </ h3> 

$ ErrorString variabilă este imprimat pe ecran, informând ghidul de faptul că a intervenit o eroare.

Această manipulare de eroare particularizate prezintă o eroare mult mai bine pentru utilizator. Unele si te-uri web include link-uri relevante deinteres sau de a folosi interogare (în cazul în care a fost o căutare) pentru a returna informaţii relevante. Este regretabil faptul că un utilizator vavedea o pagină de eroare, dar este mai frecventa ca modificări de tehnologie şi sisteme sunt actualizate.

Este o idee bună de a păstra legături permanente, deoarece motoarele de cautare va salva în cache link-uri. În viitor, aceasta va fi benefic ă pentrudumneavoastră dacă traficul care se leagă încă lucrat.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

45 of 362 11/9/2

Page 46: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 46/362

 

Ca un bonus pentru script-ul precedent, care este si tuat pe site-ul pentru această carte, există un sistem complet de tratare a erorilor de sistem careinclude erori localizate (pot fi adaptate la o setare de limbă) şi utilizează şabloane PHP şi un fişier CSS pentru a modificaţi stilul.

PHP (Hypertext Pre-Processor) este un limbaj server-side scripting care ruleaza pe Apache sau alte aplica ţii similare server Web. PHP este unadintre cele mai populare limbaje de scripting server-side, deoarece este destul de simplă pentru a obţine a început în şi poate manipula aplicaţiirobuste.

Structura de codificare se bazează pe C şi pot fi scrise într-o structură de procedură (pas-cu-pas) sau clasa pe bază de (obiecte, proprietăţi, metodeşi aşa mai departe). Odată ce aţi înţeles elementele de bază ale PHP, puteţi începe cu adevărat pentru a vedea adevărata putere care le-a.

Această carte se bazează în jurul valorii de PHP 5, dar o mulţime de următoarele sfaturi, tehnici şi stiluri explicate în această secţiune pot fi folosipentru PHP 4 şi PHP 5, ca versiunile sunt destul de similare.

 Înţelegerea variabile

Variabile, de asemenea, denumit în mod obişnuit vars sau proprietăţi (cand se lucreaza cu clase), sunt, probabil, elementul cel mai utilizat înprogramare. Ele sunt folosite pentru a atribui o valoare într-un loc care poate fi numit într-o alt ă parte a codului. Utilizarea de variabile nu este doo timesaver, dar, de asemenea, face ca programul să mai structurată şi uşor de întreţinut.

Aici este un exemplu foarte simplu de o definiţie variabile în PHP:

$ MyVar = "Hello World";

Exemplul anterior alocate şirul "Hello World" la variabila $ MyVar.

Există câteva lucruri de a păstra în minte atunci când se lucrează cu variabile.

■ Acestea trebuie să fie precedată de un dolar ($) Sign (cu excepţia cazului într-o clasă).

■ Ei trebuie să se termine cu punct şi virgulă (;).

Variabile pot accepta mai multe tipuri de date, inclusiv, dar nu limitat la String, Boolean, şi Array, fiecare dintre care este discutat în secţiunileurmătoare.

Şiruri

Şir de variabile conţin text, cum ar fi:

"Hello, World!"

Puteţi construi, de asemenea, siruri de caractere folosind tehnici de concatenare, cum ar fi:

$ Var = "Hello"; $ var .= ", World!";

imprimare $ var; / / Rezultate: Hello, World!

Booleans

Booleans sunt variabile speciale care pot fi una dintre cele două valori posibile: adevărat sau fals. Ele sunt folosite mai ales în dacă

declaraţii şi alte forme de controale condiţionată, cum ar fi:

$ Loggedin = false;

if ($ loggedin == false) {

de imprimare "Ne pare rău, nu sunt autentificat!";

}

Array

Vectorii sunt structuri complexe de date constând dintr-un grup de elemente care sunt accesate prin indexare. În PHP, acest indice poate fi o valonumerică sau un şir de caractere.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

46 of 362 11/9/2

Page 47: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 47/362

 

Aici este un exemplu de matrice şi cele două moduri de acces la date:

<? Php

$ Array = fructe ("Orange", "Apple", "Strawberry", "struguri"

imprimare $ de fructe [1]; / / Apple

$ Fructe = array (

"Portocaliu" => "Orange", "mar" => "Apple", "capsuna" => "Strawberry", "struguri" => "struguri"

imprimare $ fructe ['portocaliu']; / / Orange

Obiecte

Clase în PHP descrie un obiect sau sunt definirea unui obiect. Ele constau din auto-definit metode şi proprietăţi, care vă permite să creaţifuncţionalitatea personalizate.

Aici este un exemplu foarte de bază a unei clase in PHP cu un apel eşantion la partea de jos a de exemplu: <? Php

clasa de animale de {

Animal function () {

}

vorbesc functiei publice ($ cuvant) {

imprimare $ cuvânt;

}

}

Dog clasa extinde animale de {

Dog funcţia ($ cuvant) {

Animale:: vorbesc ($ word);

}

}

/ / Crearea unui nou câine

$ = Câine Dog nouă ("Buna ziua .. Woof!");?>

Lucrul cu funcţii

Când dezvoltarea de aplicaţii ai tendinta de a repeta diferite sarcini. Având în mod constant să tastaţi aceste măsuri poate fi un proces de lungădurată. Mai important, repetarea cod face o cerere mai putin eficiente.

Funcţii vă permit să plasaţi sarcini repetitive într-un recipient drăguţ pe care le puteţi suna la orice moment, atâta timp cât funcţia este accesibil.

Aici este o funcţie exemplu care adaugă două numere şi returnează suma intre:

addNumbers funcţia ($ num1, $ num2) {

/ / Returnează suma de întoarcere două numere ($ num1 + $ num2);

}

Ai apela o funcţie prin corelarea numele funcţiei şi care trece orice argumente funcţie necesită. Acest exemplu returnează 10 ca suma intre.

Un argument este o valoare care este trecut în funcţia şi mai târziu utilizate în cadrul funcţiei ca o variabilă locală.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

47 of 362 11/9/2

Page 48: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 48/362

 

addNumbers (4, 6); / / ieşiri 10

Funcţii în PHP poate avea un argument implicit alocat, ceea ce înseamnă că nu va solicita ca argument de a fi trecut în, cum ar fi:

addNumbers funcţia ($ num1, num2 $, $ de imprimare = true) {

if ($ de imprimare) {

de imprimare "Suma este:". ($ Num1 + $ num2);

}

else {

întoarcere ($ num1 + $ num2);

}

}

Această funcţie va imprima rezultatul direct pe ecranul sau returnează valoarea în cazul în care $ De imprimare variabilă este false, careeste în mod implicit. Nu puteţi exclude un argument în mijlocul de a defini alte argumente. De exemplu, apelul următoarea funcţie ar fi nulă:

Funcţia spun ($ majuscule = false, $ string) {

if ($ majuscule) {

întoarcere strtoupper ($ string);

}

else {

întoarcere $ string;

}

}

spune ("Hello, World!");

Acest lucru ar atribui şirul a trecut-in la $ Majuscule valoare şi să ignorăm $ String variabilă. Deoarece PHP nu vă faceţi griji despre ce tipde valoare este trecut în, acest lucru duce la o eroare la linia de unde se întoarce şirul.

Clasele au de asemenea, funcţii, numite metode. Metode pot păstra caracteristicile speciale care functiile standard nu se poate.

 Înţelegerea a structurilor de control

Cele mai multe limbaje de programare au structuri de control care oferă fragmente de cod şi să ofere o cale de ansamblu mai dinamice pentru oaplicaţie. Următoarele este o parte din structurile de control mai frecvente, inclusiv cele utilizate în cea mai mare parte a acestei cărţi.

dacă

dacă construct se găseşte în orice limbaj de programare popular, PHP inclus. Acesta permite executarea condiţionată de fragmente de cod. Unexemplu de dacă declaraţie ar fi:

$ Admin = getAdminStatusO;

if ($ admin == true) {

de imprimare "Admin autentificat, arată controalele admin";

}

Puteţi cuib dacă declaraţii cu alte dacă Declaraţii un număr nelimitat de ori. O utilizare mai realistă de imbricare dacă declaraţii este oaplicaţie de conectare, care a variat nivelurile de autentificare.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

48 of 362 11/9/2

Page 49: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 49/362

 

$ Loggedin = true; $ admin = true; $ editabile = true;

if ($ loggedin) {

if ($ admin) {

if ($ editabile) {

/ / Permite pagina care urmează să fie / / editat, deoarece un paşaport valabil / / administrator esteconectat în

}

}

}

altfel

Să presupunem că doriţi să se afişeze un mesaj de eroare a utilizatorilor nu esti logat in şi panoul de control adecvat în cazul în care utilizatorul econectat inch Acest lucru se face folosind un altfel declaraţie, care este executat în cazul în care condi ţia în dacă nu este îndeplinită.

$ Loggedin = false;

if ($ loggedin) {

/ / Afişajul panoului de control

}

else {

/ Formularul de login / afişare şi mesaj de eroare

O altfel nu este necesară şi este plasat după toate condiţionată alte controale, cum ar fi elseif, Care este în secţiunea următoare.

elseif 

elseif este combinaţia dintre o dacă şi un altceva. Această declaraţie este plasat după o dacă şi permite codul pentru a se potrivi o altă

condiţie, care poate fi complet diferită faţă de dacă înainte de a alerga.

 j ^ J T'S / J ^ "^ H 6'Se °r W'" "5e eva'ua*ec"" F ", a Prececondiţionată Ding nu este îndeplinită.

$ Loggedin = false; $ colorOfSky = "blue";

if ($ loggedin) {

/ / Utilizator autentificat în

}

elseif ($ ColorOfSky == "albastru") {

/ / Culoarea cerul este albastru, în jurnalul de ghidul?

}

 în timp ce

în timp ce este un tip de buclă. Codul în acolade {} rulează "în timp ce" condiţie este îndeplinită. Odată ce condiţie nu mai este valabil, bucla sopreşte.

Bucle în PHP poate rula pentru totdeauna dacă nu sunt programate corect. Utilizaţi prudenţă atunci când se lucrează cu bucle şi întotdeauna pentru verifica date v alide primul.

în timp ce ($ x <50) {

de imprimare "x =". $ X. "<br />"; $ X + +;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

49 of 362 11/9/2

Page 50: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 50/362

 

}

pentru

A pentru bucla este bucla de cel mai complex în PHP Iată un exemplu:

for ($ x = 0; $ x <10; $ x + +) {

de imprimare "x =". $ X. "<br />";

}

Prima expresie ($ X = 0) este executat necondiţionat dată, la începutul a buclei. Cea de a doua expresie ($ X <10;) este evaluat pe fiecaretrecere şi va continua până la bucla această condiţie este îndeplinită sau bucla este oprită cu ajutorul unui pauză. La fiecare trecere, a treiaexpresie ($ X + +) este executat. În acest exemplu, se incremente $ X la fiecare trecere.

R7

ION

Puteţi cuib pentru bucle şi chiar definesc variabile multiple, în prima expresie. Acest lucru se poate face codul dvs. mai rapid, dar mai greu decitit.

foreach

foreach buclă este utilizat pentru a itera pes te o matrice. Ai atribui variabilei bucla la matrice dorit, şi pe fiecare pasaport de valoarea care estestocată în variabila bucla.

$ Fructe = array ("Orange", "Apple", "Banana", "Grapefruit");

foreach ($ $ ca fructe fructe) {

de imprimare "Fructe:". $ Fructe;

}

Variabila $ Fructe va exista încă o dată foreach bucla a fost finalizat, astfel că este o idee bună pentru a distruge variabila utilizând unset(), ca unset ($ fructe).

pauză

pauză Controlul se încheie executarea unei bucle, indiferent în cazul în care condiţie este îndeplinită sau nu. Puteţi plasa o valoare numericăopţional informarea PHP de cât de multe niveluri ar trebui să izbucni. Acest lucru este util atunci când aveţi o bucla imbricate care trebuie să-ispuneţi-mamă pentru a ieşi în cazul în care se produce o eroare.

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

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

if ($ utilizatorii [$ i] [$ j] ['valabil'] == false) {

/ / Gasit ghidul de invalid, grupul este compromis / / ieşire atât break bucle 2;

}

}

}

continua

Spre deosebire de pauză, continuă va ieşi din iteraţia curentă a unei bucle, dar permite iteraţii rămase pentru a continua mai departe.

Acest lucru este util atunci când sunt looping printr-o grămadă de date şi doriţi doar să acţioneze în date valide.

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

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

50 of 362 11/9/2

Page 51: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 51/362

 

if ($ utilizatorii [$ i] ['valabil'] == false) {

/ / Invalid de utilizare, continua cu restul de lista continua;

}

Codul de logică / / mai multe aici

La fel ca pauză, continuă va accepta, de asemenea, un argument numeric spunandu-i cat de multe nivele de anexeaza bucle pentru a săripeste.

comutator 

A comutator este similar cu o serie de dacă Declaraţii folosind aceeaşi expresie (variabilă). Ar trebui să utilizaţi, în general, o comutatoratunci când doriţi să testaţi o variabilă împotriva o mulţime de condiţii.

switch ($ userLevel) {

"ADMIN" procedură: de imprimare "Utilizatorul este pauză; cazul" MODERATOR "imprimare" Utilizatorul estepauză; "membru" procedură: de imprimare "Utilizatorul este pauză;

caz "GUEST":

de imprimare "Ghid de utilizare este un oaspete"; break;

}

A pauză este folosit pentru a asigura controalele rămase nu vor fi difuzate, în fapt, dacă vă îndepărtaţi concediu, fiecare condiţie va fi verificată,ceea ce poate cauza probleme dacă intenţionezi să faci o validare mai multe niveluri.

necesita

require () declaraţia încearcă să încarce un fişier şi va ieşi din script-ul cu o eroare fatală în cazul în care dosarul nu este găsit. Această funcţieverifică pentru fişierul împotriva curentului included_path precum şi directorul fişierul se execută inch

cere ("importantFile.php");

Eroare care se afişează (a se vedea Figura 2.3), poate provoca, uneori, o preocupare de securitate potenţial în sensul că va afişa calea de fişier peieşit. O cale mai bună să se ocupe de acest lucru este de a crea un cec pentru primul fişier şi va afişa un mesaj mai curat, mai puţin cruciale pentru

utilizator.

if (file_exists ("importantFile.php")!) {

$ Eroare = "Ne pare rău, una dintre componentele de bază nu a putut fi încărcat";

de ieşire ($ eroare); / / eroare de afişare curat şi script-ul de ieşire rămase

}

cere ("importantFile.php"); / nu / se execută, dacă fişierul nu există

un admin ";

un mod ";

a unui membru ";

FIGURA 2.3

PHP require () eroare aşa cum se vede în browser 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

51 of 362 11/9/2

Page 52: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 52/362

 

include

include () declaraţia este similar cu cel necesita cu excepţia se va afişa o eroare, dar nu opri executarea script-ul.

includ ("optionalFile.php");

require_once

require_once declaraţia se comportă similar cu necesită, cu excepţia faptului că în cazul în care fişierul curent este deja încărcat, nu va încerca să-l încărcaţi din nou. Acest lucru este mult mai util ca va continua pentru a construi aplicaţii mari care au în comun, uneori, mai multefişiere. Acest lucru asigură că nici un cod redundant este încărcată.

require_once ("requiredFile.php");

/ / ... alt cod aici

require_once ("requiredFile.php");

Al doilea require_once nu va rula din cauză că fişierul a fost deja încărcate în porţiunea anterioară a codului.

include_once

include_once () declaraţia este similar cu cel require_once cu excepţia faptului că, dacă fişierul nu este găsit, se afişează doar o eroare dsimplu.

Utilizarea de control de tip în PHP

Spre deosebire de cele mai multe limbi de programare, PHP nu are nevoie de tastarea strictă a variabilelor. Acest lucru înseamnă că nu trebuie sădefiniţi ce tip de date unei variabile se va organiza.

Acest lucru poate părea un lucru bun, deoarece variabilele pot fi partajate. Cu toate acestea, dezavantaj potenţialul de a acestei abordări este că ovariabilă care vă aşteptaţi să fie un şir ar putea arata potential ca o matrice. Acest lucru ar fi cel mai probabil rupe codul sau provoca o porţiune dexploatat de cod. Imaginaţi-vă un cod similar cu următorul text:

$ Id = -1;

if (isset ($ id))

{

/ / SQL apel aici, ID-ul setat la un şir, pentru un motiv oarecare $ id = "ID de utilizator";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

52 of 362 11/9/2

Page 53: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 53/362

 

}

Logică / / mai multe aici

if ($ id == -1) {

/ / Ghidul de nu esti logat în

}

else {

/ / Utilizator autentificat în

}

Acesta este un exemplu extrem de dramatic, deoarece este plin de scenarii cel mai rău caz, dar puteţi vedea cum variabilele netipizat poate provodureri de cap.

Tip funcţii de control

PHP nu oferă unele funcţii speciale care vă permit să verificaţi tipul unei variabile, dar acest lucru nu se opreşte un alt cod de la suprascriereavariabile.

Un exemplu de una dintre aceste funcţii vor fi is_string, care verifică pentru a vedea dacă conţinutul a trecut-in variabilele sunt şir.

$ Spunând = "Hello, World!";

dacă (is_string ($ spune)) {

print "$ spune este un şir";

PHP ofera posibilitatea de a testa pentru tablouri, numere, siruri de caractere, şi valorile gol.

Viitorul versiune de sprijin

Acesta a fost menţionat faptul că versiunile viitoare ale PHP ar putea include verificarea de tip strict, dar de acum, aceste funcţii, atunci când estenecesar, va oferi un nivel mai ridicat de integritate pentru aplicaţia dumneavoastră.

MySQL este aplicaţia de stocare utilizat cu PHP pentru a crea o aplicaţie dinamică. Puteţi stoca destul de mult orice tip de date într-o bază de datMySQL şi au capacitatea de a împărtăşi aceste informaţii cu alte aplicaţii şi sisteme. Deseori, o bază de date este utilizat atunci când căutare trebusă fie făcut sau dacă datele se schimbă frecvent şi mulţi oameni vor fi solicita aceste date actualizate.

Alternativa la o bază de date este un fişier plat (fişier text), care are multe limitari, cel mai devastator fiind faptul că doar atât de multe cazuri defişier poate fi folosit la o dată. O altă limitare este abilitatea de a rapid index şi căutare-un fişier text.

Utilizarea declaraţii

Conţinutul într-o bază de date MySQL sunt stocate în tabele. Aceste tabele sunt stocate în baze de date care fac parte din sistemul de MySQL. Date

stocate în aceste tabele este accesat folosind diferite declaraţii şi condiţii, care sunt numite interogări.

Există numeroase declaraţii care pot fi utilizate în interogări SQL.

SELECT

SELECT Afirmaţia este declaraţia cele mai comune, care spune ceea ce MySQL conţinutul (coloane) pe care doriţi întors dintr-un tabel.

SELECT id, nume, ip, bio de la utilizatori WHERE id = 3

Puteţi selecta date din mai multe tabele folosind virgule (,) Pentru a separa numele de coloană şi de masă.

SELECT users.id, users.name, members.posts, members.subs de la utilizatori, membrii UNDE members.userID users.id ŞI users.id = 3

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

53 of 362 11/9/2

Page 54: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 54/362

 

INSERT

INSERT declaraţia este utilizat pentru a adăuga rânduri noi la un tabel existent. Există mai multe moduri de a defini o INSERT.

Dacă doriţi doar să se actualizeze anumite coloane aveţi nevoie pentru a defini acele coloane.

INSERT INTO membri (nume, bio, ip) VALUES ($ nume, $ bio, $ ip);

O comandă rapidă este folosit pentru a exclude definiţiile coloana. Cu toate acestea, acest lucru este posibil doar atunci când toate valorile suntactualizate sau i-aţi alocat valorile implicite atunci când creaţi tabelul.

INSERT INTO membri ($ nume, $ bio, $ ip);

După o INSERT a finalizat, puteţi face un apel la mysql_insert_id () , Care va returna ID-ul de succes ultima inseraţi.

$ Rezultat = mysql_query ("INSERT INTO membri (". $ Nume ". $ Bio.".. $ Ip • ")");

$ ROWID = mysql_insert_id ($ rezultat);

DELETE

DELETE declaraţia este utilizat pentru a elimina unul sau mai multe rânduri dintr-un tabel. Ca şi alte declaraţii, aveţi posibilitatea să creaţi ocondiţie utilizând WHERE, AND, OR, şi aşa mai departe.

DELETE FROM utilizatori WHERE id = 3

Aveţi posibilitatea să eliminaţi, de asemenea, toate rândurile dintr-o bază de date prin omiterea condiţia: DELETE de la utilizatori

"" FS ^ i ^ S declaraţie DELETE este unul foarte puternic, care ar trebui s ă fie utilizat cu prudenţă extremă.

Starea

Starea în MySQL sunt folosite pentru a limita cantitatea de date care este returnată. De exemplu, o interogare SQL, cum ar fi următorul text vareveni toţi utilizatorii în baza de date:

SELECT * FROM utilizatori

UNDE

Acest lucru ar fi bine dacă asta e ceea ce doriţi să apară. Probabil că doar ar dori să se întoarcă anumiţi utilizatori sau chiar un anumit utilizator.Acest lucru ar fi făcut cu ajutorul UNDE condiţie.

SELECT * FROM utilizatori WHERE id = 3

ŞI

ŞI condiţie este utilizat atunci când aveţi nevoie pentru a se potrivi mai mult de o condiţie. Un exemplu ar fi doriţi pentru a returna o bază de daa membrilor care au fost înregistrate şi au un cont valid.

SELECT * FROM utilizatori WHERE activ = 1 şi înregistrat = "yes"

Puteţi utiliza orice combinaţie a situaţiilor condiţionate, cu excepţia faptului că ar trebui să existe doar un singur UNDE declaraţie.

SAU

SAU declaraţie este utilizat atunci când doriţi o singură condiţie pentru a se potrivi. De exemplu, doriţi ca utilizatorii care au un nivel de adminsau mod. Gândiţi-vă la acest lucru ca o dacă .. altceva pentru SQL.

SELECT * FROM utilizatori WHERE nivel = "admin" sau de nivel = 'mod'

Starea în MySQL nu poate veni la îndemână atunci când încearcă pentru a detalia în jos de date, mai ales atunci când începeţi combinarea acestoraNu este rar de a crea situaţii foarte complexe SQL într-o chestiune de minute.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

54 of 362 11/9/2

Page 55: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 55/362

 

Flash nu este doar o tehnologie, este, de asemenea numele unui instrument de dezvoltare de la Adobe, care este folosit pentru a crea conţinut Flaactivat. Acest conţinut poate fi orice, de la un anunţ de banner simplu tot drumul într-un site Web completă bază de date-condus cu imagini videşi interacţiunea cu utilizatorul.

Flash IDE

IDE Flash (Integrated Development Environment), aşa cum se arată în Figura 2.4, este un instrument de dezvoltare robust, cu multe caracteristiciutile.

Figura 2.4

Flash CS3 IDE cu layout-ul implicit

Unul dintre instrumentele actualizate este editor de cod, de asemenea, mentionat ca panoul de ActionScript. Acest panou, aşa cum se vede în Figu

2.5, este locul unde se scrie codul ActionScript pentru aplicaţiile Flash. Cea mai recentă versiune a finalizării cod robust, depanare avansate, precuşi evidenţierea sintaxei pentru a numi câteva dintre noile caracteristici.

Figura 2.5

ActionScript comisia a constatat in Flash CS3

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

55 of 362 11/9/2

Page 56: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 56/362

 

Acesta este locul unde marea majoritate a vietii tale de dezvoltare vor fi cheltuite. Panoul nu este editorul numai; puteţi crea dosare completeActionScript, aşa cum se arată în Figura 2.6, şi le include în cererea dumneavoastră.

Pentru a crea un obicei ca fişier, alegeţi Fişier C Nou. Alegeţi ActionScript 3 File din coloana din mijloc. Salva ţi fişierul ca Sample.as desktop-uldumneavoastră.

FIGURA 2.6

Externă editor ActionScript inclus cu Flash CS3

Editori Alternative

Veţi găsi mulţi editori ActionScript pe piaţă. Favoritul meu personal este FDT de la putere intermitent la http://fdt.powerflasher.com/Acest editor oferă cea mai mare cantitate de personalizare şi este construit în editorul Eclipse, ceea ce multe alte companii depind.

Creaţi un nou FLA şi salva care desktop-ul dumneavoastră, de asemenea. Acum deschideţi editorul de cod şi adăugaţi codul de mai jos:

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

56 of 362 11/9/2

Page 57: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 57/362

 

# Include "Sample.as"

Această linie de cod include conţinutul de Sample.as în cererea dumneavoastră. Acest lucru înseamnă că puteţi scrie toate ActionScript în fişieextern şi Flash va şti să-l includă, atunci când de testare sau de a construi cererea.

Flash-dispozitive activate

Flash nu mai este un instrument de animaţie simplu folosit pentru a crea grafice ostentative pentru Web. Puteţi găsi acum Flash instalat pe o gamde produse, cum ar fi telefoanele mobile, playere media, şi chiar în unele camere. Tehnologia de telefon mobil este deosebit de interesant, deoareaceste dispozitive tind sa aiba conexiuni la Internet activă, ceea ce înseamnă că vă puteţi dezvolta Rich Internet Applications (RIA) pentru

dispozitive mobile, precum şi spaţiul de lucru.

Mutarea transmite

Trebuie să aveţi acum o înţelegere de bază a ceea ce Flash este şi modul în care a avansat în cea mai recentă versiune. Aceasta carte va explicadiferitele aspecte ale Flash si ActionScript, în ceea ce priveşte lucrul cu PHP şi de gestionare a datelor.

Cu toate acestea, pentru un ghid mai detaliate cu privire la Flash CS3, I highly recommend Adobe Flash CS3 Professional Biblie, publicat de John Wile& Sons, Inc

În acest capitol, ai invatat despre server Web şi cum se modifică fişierele de configurare pentru a configura dezvoltare personalizate sau mediu liAceste informaţii sunt incluse pagini personalizate de eroare, module de aplicaţie specifice, şi cele mai bune practici pentru protejarea conţinutul

Odată ce bazele de lucru cu serverul Web au fost înţelese, urmatorul pas a fost a învăţa cum să lucreze cu PHP. Aceasta a cuprins elementele debază ale PHP, precum şi pentru capitolele specifice din această carte.

A doua jumătate a capitolului a inclus informaţii despre MySQL şi cum să lucraţi cu datele în baza de date.

Ultima parte a fost o imagine de ansamblu a Flash şi cum să lucreze cu mediul de dezvoltare. Pentru o prezentare mai detaliată câteva referiri s-adat.

GTABILIREA conectat este o expresie folosita pentru a descrie procesul de conectare la diverse surse de date. În acest capitol, este procesul deconectare a ActionScript (Flash), PHP, MySQL şi în diverse moduri. Aceste date pot fi un site web simplu sau o bază de date bazate pe sistem demanagement al continutului pentru care Flash devine ecranul front-end.

Dacă aceste trei componente nu sunt deja instalate, se referă la capitolul 1 înainte de a continua cu acest capitol.

Prima parte din fiecare secţiune se concentrează asupra a ceea ce fiecare tip de conexiune are de oferit şi se mută pe exemple pentru a furniza oimagine completă a rezultatului final.

În curs de dezvoltare de sine stătătoare aplicaţii lipsesc anumite funcţionalităţi, în primul rând capacitatea de a lucra cu date dinamice. În aplicaţimai mici, puteţi utiliza fişiere plate, cum ar fi fişiere XML, dar acestea ar constitui o problemă ca un proiect continuă să crească.

Aplicaţii simple bazate pe fişiere de text, de asemenea, suferă de file locking, care pot să apară în cazul în care există prea mulţi oameni la accesarfişierului. Atunci când se întâmplă acest lucru, Apache şi / sau PHP pot arunca o eroare care nu duce la utilizatorii posibilitatea de a utiliza

site-ului.

 În acest capitol

 Înţelegere a de comunicaţii în Flash

Conectarea Flash pentru a PHP Conectarea la MySQL PHP

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

57 of 362 11/9/2

Page 58: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 58/362

 

Determinarea statutului de PHP

Primul pas pentru configurarea unei conexiuni la PHP în Flash este de a determina dacă PHP este corect instalat şi rulează. Acest lucru se face pricrearea unui fişier PHP simplu că ieşirile setările curente de configurare pentru versiunea de PHP instalată.

Funcţia PHP phpinfo () ieşiri informaţiile de configurare prin construirea unui particularizate de pagini HTML, aşa cum se arată în Figura 3.

Lăsarea phpinfo fişier de pe serve r-ul dvs. poate fi un risc de securitate. Cel mai bine este să încărcaţi doar când ave ţi nevoie să se uite la ea, şiapoi ştergeţi-l.

Următorul este un fişier mostră meciului, care face un apel către phpinfo () funcţie.

<? Php

/ / Ieşire php setările de configurare

phpinfo ();

Figura 3.1

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

58 of 362 11/9/2

Page 59: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 59/362

 

Aici este de ieşire din phpinfo funcţie, care prezinta actuale PHP setările de configurare.

Dacă vă sunt prezentate cu phpinfo fişier, care este, în general, în purpuriu şi începe cu versiunea de PHP instalată, atunci totul este instalatcorect.

Cu toate acestea, dacă vedeţi o casetă de dialog pentru a descărca fişierul PHP, înseamnă Apache este configurat necorespunzător sau nu a fostactivată pentru sprijin PHP. Acest nivel de configurare este reglementată în capitolul 1 şi în fişierele de ajutor care nava cu Apache. În cazuri rare,este posibil să fi prezentat cu un server nu a fost găsit pagina, ceea ce ar putea însemna Apache nu este instalat sau rulează.

Presupunând că PHP şi Apache sunt ambele în mod corespunzător de funcţionare, puteţi trece mai departe cu procesul de conectare a Flash pentPHP.

Lucrul cu diferite tipuri de conexiuni

Flash oferă mai multe tipuri diferite de opţiuni de comunicare. Determinarea care comunicarea pentru a utiliza în proiect este realizat de cătrecaracteristica destinate set de această cerere specifice.

 Într-o direcţie de comunicare

Un mod de comunicare-in Flash este procesul de a trimite date la un server Web şi nu caută sau îngrijire dacă un răspuns vine înapoi. Aceasta estcea mai mare parte folosite pentru a deschide un URL, dar ar putea fi, de asemenea, utilizat pentru a actualiza un fişier cu nici o intenţie demanipulare a rezultatului. Acest tip de comunicare sunt adesea folosite pentru ardere pur şi simplu de pe un eveniment sau execută un fel desistem de curăţare.

De exemplu, dacă site-ul dvs. trebuie curăţat periodic fişier (ştergerea, redenumirea, mutarea), este o idee bună pentru a ataşa la acest sistem defront-end, deoarece resursele server-ul dvs. va fi numai în uz atunci când acestea sunt deja furnizează conţinut pentru acest utilizator . Acest lucruar fi început printr-o comunicare într-o direcţie în spatele scenei.

F actualizare, prin vizualizarea conceptului nu ar trebui să fie utilizat pentru soluţii de backup, deoarece o v izionează lent ar putea duce la lipsă debackup.

Aici este un exemplu de un singur fel de comunicare în Flash:

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

var urlRequest: URLRequest = new URLRequest (serverFile);

navigateToURL (urlRequest);

navigateToURL Funcţia acceptă doi parametri. Primul parametru este URLRequest instanţă, şi al doilea parametru este fereastra sau ţintă. Înmod implicit, fereastra este _self, Ceea ce înseamnă noua pagina se va încărca în browser-ul curent, dacă acesta există.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

59 of 362 11/9/2

Page 60: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 60/362

 

Cu toate acestea, în unele cazuri, este posibil să doriţi să deschideţi-o fereastră nouă de browser, care vă poate face prin adăugarea al doileaparametru.

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

var urlRequest: URLRequest = new URLRequest (serverFile); navigateToURL (urlRequest, "_blank");

Parametrul de fereastră poate accepta unul din urmatoarele siruri de caractere, aşa cum se arată în Tabelul 3.1.

Tabelul 3.1

Obiective fereastr ă pentru Link-uri

"_self" Cadru curent în fereastra curentă

"_blank" New window

"_parent" Mamă a cadrului actual

"_top" Top-cadru la nivel în fereastra curentă

Parametrul de fereastră poate accepta, de asemenea, un nume particularizat, cum ar fi numele de-o fereastră cadru sau specifice. De exemplu,presupunând că doriţi să trimiteţi un link la fereastră numită "ChildWindowBox", Codul ar arata blocul următoarele:

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

var urlRequest: URLRequest = new URLRequest (serverFile);

navigateToURL (urlRequest, "ChildWindowBox");

Sunteţi substitut numele precompilate fereastră şi adaugă numele dvs. particularizat. Deşi aceasta este o mica schimbare, oferă anumitefuncţionalităţi adăugată mare.

Deschiderea-o fereastră nouă sau existentă este doar una dintre posibilităţile pentru conectarea cu alte date.

Un alt tip de comunicare într-o direcţie în Flash se poate realiza prin utilizarea sendToURL ().

sendToURL () este folosit pentru a comunica în tăcere, cu un script. Comunicarea Silent este o forma de comunicare într-o direc ţie care nu se încarcă o pagină Web separată. Această formă de comunicare oferă posibilitatea de a trimite date la un server fără a interfera cu experienţautilizatorului de navigare.

Aici este exemplul anterior, cu funcţia de nou adăugat, împreună cu o eroare de bază de manipulare pentru a gestiona cererile de invalid şiindisponibil.

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

try {

sendToURL (urlRequest);

catch (e: Eroare) {

/ / Mâner eroare aici

}

Trimiterea datelor la server 

Pot exista momente când doriţi să nu numai în tăcere solicita un URL, dar trimite, de asemenea, date împreună cu ea. Acest lucru se face folosindURLVariables clasă, care vă permite să creaţi un obiect de perechi nume / valoare. Acestea ar fi identice cu cele găsite într-o cerere standardHTML.

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

 variabile var: URLVariables = new URLVariables (); variables.id = 1004; variables.user = "James";

var urlRequest: URLRequest = new URLRequest (serverFile); urlRequest.data = variabile;

try {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

60 of 362 11/9/2

Page 61: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 61/362

 

sendToURL (urlRequest);

}

catch (e: Eroare) {

/ / Mâner eroare aici

}

Un alt exemplu de o cale de comunicare este de a trimite datele POST orbeşte la un server. Aceasta adaugă un pic mai mult de securitate la cereredvs. prin el iminarea parametrilor din URL-ul, şi se face prin includerea în cadrul parametrilor cererea.

Codul pentru cererea de date POST este pur şi simplu atribuie o valoare a bunurilor metoda de URLRequest instanţă. ActionScript dispune de ovariabilă statică pe URLRequestMethod Clasa care va fi atribuit variabilei metoda.

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

variabile var: URLVariables = new URLVariables (); variables.id = 1004; variables.user = "James";

var urlRequest: URLRequest = new URLRequest (serverFile); urlReguest.method = URLRequestMethod.POST;

urlRequest.data = variabile;

try {

sendToURL (urlRequest);

catch (e: Eroare) {

/ / Mâner eroare aici

}

Aici este o cerere de probă care ar fi trimise la server. După cum puteţi vedea, elementele de conţinut şi POST au informaţii că a fost trimis.Celelalte părţi ale cererii sunt atribute standard de date şi nu sunt specifice pentru acest exemplu.

POST / callLink.php HTTP/1.1 Accept-Language: en Accept-Encoding: gzip, Cookie dezumfle: autentificare =nume de utilizator; session-id = 12 0 67 0l Referer: http://www.example.org/

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/522.11.1 (KHTML, cum ar fi Gecko)Version/3.0.3 Safari/522.12.1 Conţinut: id = 1004% = 2Fuser James

Content-Type: application / x-www-form-urlencoded

Accept: text / xml, text / html; q = 0,9, text / plain; q = 0,8, image / png

Pragma: no-cache

Content-Length: 327

Conexiune: ţine-vie

Realizator: www.example.org

Comunicare în ambele sensuri

În unele cazuri, veţi dori să primiţi un răspuns atunci când trimiteţi date. Una dintre acestea ar fi atunci când se încearcă pentru a încărca dateleunui utilizator specific dintr-o bază de date. V-ar trece un utilizator id şi se aşteaptă să primească un anumit tip de date care conţin informaţii cautilizator.

Răspunsul de o comunicare în ambele sensuri este manipulat prin alocarea un ascultător eveniment şi ataşarea unei incarcatoare funcţie.

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

variabile var: URLVariables = new URLVariables (); variables.id = 1004; variables.user = "James";

var urlRequest: URLRequest = new URLRequest (serverFile); urlRequest.method = URLRequestMethod.POST;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

61 of 362 11/9/2

Page 62: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 62/362

 

urlRequest.data = variabile;

 var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, userResponseHandler);

try {

urlLoader.load (urlRequest);} catch (e: Eroare) {/ / mâner eroare aici

}

/ / Funcţie de manipulare

userResponseHandler funcţie (e: Event): void {

 var urlLoader: URLLoader = URLLoader (e.target);

args var: URLVariables = new URLVariables (urlLoader.data);

trace ("Date de utilizator:" + args.response);

}

răspuns Funcţia este trecut o referinţă la Eveniment. URLLoader şi URLVariables instanţe ocupa de procesul de tragere în afară de

răspunsul şi returnarea doar a datelor care a fost trimis înapoi. Răspunsul vine din nou cu alte valori şi parametri, dar cele mai multe ori vei fiinteresat doar de proprietatea de date a URLLoader instanţă.

Mai multe aplicatii complet întorc adesea format XML, care este reglementat în capitolul 3, cu diverse alte date de încărcare-exemple.

Acum, că aţi înţeles cum se lucrează cu un singur fel şi comunicarea bidirecţională, următoarea secţiune se extinde pe aceste practici prin conectala PHP.

Procesul de conectare Flash la PHP se face folosind clasele precompilate care au fost introduse în secţiunea anterioară. Dacă nu aţi instalat PHP înacest moment, se referă la capitolul 1 pentru a înţelege pe deplin şi instalează PHP.

Pentru a începe acest exemplu, deschideţi fişierul de pornire care este inclus în fişierele sursă carte. Fişierele sursă pot fi găsite pe site-ul Web alcărţii. Fişierul de pornire pentru acest exemplu, are de proiectare şi a componentelor deja adăugată, aşa cum se arată în Figura 3.2, permiţându-văsă se concentreze pe codul care face toate lucrările.

Prima parte a acestui exemplu este de a defini variabila de locul unde este amplasat fişierul PHP pe server-ul dvs. local sau la distanţă.

var phpFile: String =

"http://localhost/connecting/exampleConn.php";

Odată ce locaţia script PHP este definit, următorul pas este de a crea funcţie care este apelată atunci când butonul este apăsat.

callServer funcţie (e: MouseEvent): void {

var urlRequest: URLRequest = new URLRequest (phpFile); var loader: URLLoader = new URLLoader ();

loader.addEventListener (Event.COMPLETE, serverResponse); loader.load (urlRequest);

Figura 3.2

Aici este de proiectare a completat cererea de proba va fi de lucru cu.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

62 of 362 11/9/2

Page 63: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 63/362

 

Această funcţie creează URLLoader şi URLRequest instanţe. phpFile este trecut in pentru a URLRequest pentru a crea obiectul. În cele dinurmă, ascultătorul eveniment este ataşat la încărcător variabila se face trimitere la serverResponse, care este funcţia care se numeşteatunci când datele sunt încărcate.

Funcţia serverResponse (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data); timeTxt.text = variables.returnValue;

}

Serverul de manipulare Funcţia serverResponse () este responsabilă pentru captarea datelor transmise înapoi din dosarul PHP. După ce cădatele este încărcată corect, acesta este trecut în URLVariables clasă pentru a genera un obiect dinamic.

Acest obiect are dinamică a datelor de răspuns a trecut de la server, astfel încât un apel obiect simplu este tot ceea ce este necesar pentru a încărcadate eşantion. În acest exemplu, ca date eşantion va fi UNIX timp ştampila capturate şi returnate de către PHP.

Ultima parte este o manipulare de simplu buton, care solicită callServer funcţioneze atunci când un utilizator face clic pe butonul.

callBtn.addEventListener (MouseEvent.CLICK, callServer);

Codul PHP pentru acest exemplu este un foarte simplu o declaraţie de imprimare. timp () Funcţia este folosită pentru a apuca actualetimestamp UNIX. returnValue variabilă situat în şirul este o definiţie personalizat variabilă, astfel Flash stie ce pentru a apela odată ce datelesunt încărcate.

Această variabilă poate fi numit orice număr de lucruri şi poate fi chiar o serie de acestea:

<? Php

de imprimare "returnValue = Bună ziua de la PHP, timpul este:". time ();?>

Detalii de concatenarea

.= este folosit pentru a concatena sau de a adera mai multe variabile utilizate într-un lung şir. În acest caz, este construirea in precedenta linie penta crea şirul de date de utilizator care vor fi returnate la Flash.

<? Php

$ UserData = "username = James"; $ userData .= "& id = 1004"; $ userData .= "& nivel = Reader";

imprimare $ userData;?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

63 of 362 11/9/2

Page 64: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 64/362

 

Astfel încât vor fi transmise înapoi la Flash va arăta ceva similar cu următorul text:

username = James & id = 1004 & nivel = Reader

Este posibil să observaţi că relaţia nume / valoare este foarte similar cu formatul în care datele POST este trimis. Cu toate acestea tot ce trebuie sastii pentru a lucra cu aceste date în Flash sunt nume de variabile.

Mai multe piese de date

Ia existente serverResponse () Funcţia şi modificaţi-l pentru a include aceste noi variabile fiind trimis de la codul modificat PHP. Următoru

exemplu se intoarce greu cu coduri de valori, cu toate acestea, într-o aplicaţie din lumea reala, faptul că datele ar putea fi cel mai probabilprovenind dintr-o sursă de date dinamice.

Aşa cum aţi învăţat în secţiunea anterioară, formatul de date de Flash devine un foarte simplu şi uşor de utilizat set de obiecte.

Funcţia serverResponse (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data);

userTxt.text = "Bine ai revenit," + variables.username; levelTxt.text = "Nivelul actual este:" + variables.level;

}

O limitare a funcţiei anterioare este variabile var este accesibilă numai în această funcţie. Pentru a asigura datele returnate este accesibil pri  întreaga aplicaţie, aceasta este o idee bună pentru a stoca datele într-o variabila extern.

De exemplu, acest exemplu se va baza pe codul anterior prin adăugarea nouă sarcină variabilă şi definiţie. Prima schimbare este de a crea unObiect variabila care va stoca datele.

var phpFile: String =

"http://localhost/connecting/exampleConn.php"; var storedResult: Object;

callServer funcţie (e: MouseEvent): void {

}

Funcţia serverResponse (e: Event): void {

}

callBtn.addEventListener (MouseEvent.CLICK, callServer);

După nouă Obiect variabilă este definită, următorul pas este de a modifica serverResponse funcţie pentru a stoca datele încărcate învariabila nou creat.

Funcţia serverResponse (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data);

/ / Verifica date valide

dacă (uint (variables.itemLength)> 0) {

storedResult = variabile;

}

userTxt.text = "Bine ai revenit," + variables.username; levelTxt.text = "Nivelul actual este:" +variables.level;

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

64 of 362 11/9/2

Page 65: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 65/362

 

Datele încărcate obiect sunt stocate în cadrul storedResult Obiect, dar numai în cazul în care un paşaport valabil itemLength este găsit.itemLength variabilă este, de asemenea, returnat de PHP şi validat cu ajutorul unui simplu dacă declaraţie.

Cu aceasta noua adaugire la codul pe care îl p uteţi împărtăşi datele încărcate cu alte variabile şi secţiuni în cadrul acestui aceeaşi aplicaţie.

| J "j'SJJ ^ ^ ^ ̂ Datele stocate nu este accesibil până la procesul de încărcare este complet.

Ultimul pas este de a modifica PHP pentru a reveni nou create itemLength variabilă, care se face cu un alt plus faţă de $ UserData şir.

<? Php

$ UserData = "username = James";

$ UserData .= "& id = 1004";

$ UserData .= "& nivel = Reader";

$ UserData .= "& itemLength = 3";

imprimare $ userData;

Acum, că aveţi o înţelegere a modului de a încărca datele statice din PHP in Flash, următoarea secţiune se extinde pe acest format de date staticeintroduce o baza de date MySQL.

Datele de încărcare în Flash dintr-un fisier PHP static este o modalitate foarte bună de a învăţa procesul. Cu toate acestea, o aplicatie in lumea reaeste, probabil, nu va folosi acest format. De date este mereu in schimbare si nimeni nu vrea s ă actualizeze fişierele PHP cu mâna.

Determinarea statutului de MySQL

Înainte de conectarea la MySQL este stabilit, se asigure că MySQL este instalat şi rulează corect.

W instalare implicită de MySQL frunze martor parola. Acest lucru este in regula pentru o testare Y & 5SssHS sITE, dar parola nu ar fi lasat ne completape un server live.

Instalarea cea mai comună de MySQL pentru utilizare în PHP este prin includerea bibliotecii MySQL timpul procesului de instalare PHP. Acestlucru înseamnă informaţiile MySQL vor fi afişate pe phphinfo, care a fost explicat în secţiunea anterioară.

Verificarea pentru MySQL se face pur şi simplu prin crearea unei phpinfo fişier de testare şi rulează-l în browser-ul dvs., aşa cum se arată înFigura 3.3.

<? Php

phpinfo ();?>

Acest rezultat este o pagină HTML care afişează masiv toate informaţiile cu privire la instalarea curentă de PHP Pentru a determina starea deMySQL, pentru căutare "MySQL". Păstraţi în minte ar putea exista mai mult de unul.

Figura 3.3

Aici este partea din phpinfo fişier care explică de instalare MySQL disponibile.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

65 of 362 11/9/2

Page 66: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 66/362

 

T~ Secţiunea M ySQL din fişierul phpinfo nu vor fi vizibile la toate, dacă nu este instalat.

Presupunând că MySQL este corect instalat şi rulează, puteţi trece la secţiunea următoare, care explică modul în care să se conecteze la o bază dedate PHP MySQL.

Conectarea la MySQL

Procesul de conectare la MySQL din PHP este destul de simplă. Primul pas este de a obţine informaţiile de conectare de la admin server-ul dvs.sau, dacă tocmai aţi instalat, detaliile de conectare ar fi implicite.

Aici este foarte de bază, cod nu bibelouri pentru conectarea la o bază de date MySQL. <? Php

$ Host = "localhost"; $ ghidul de = ""; $ treci = "";

$ Link = mysql_connect ($ host, $ user, $ pass);?>

mysql_connect Funcţia accepta trei argumente. hostname este primul argument, care este aproape întotdeauna setat la "Localhost". Aldoilea este numele de utilizator care a fost ales atunci când aţi instalat MySQL, şi în cele din urmă, parola bazei de date MySQL, care este goalăpentru o configuraţie implicită.

mysql_connect funcţia returnează o resursă id, care este o referinţă la care să facă legătura curent MySQL. Acest id pot fi utilizate înviitoarele cereri SQL, cum ar fi mysql_query, şi multe alte funcţii. Dacă se întâmplă să imprimaţi această $ Legătură într- variabilă, veţvedea un cod de resurse. Următoarea mostră de cod care returnează ID-ul de resurse:

<? Php

$ Link = mysql_connect ("localhost", "root", "");

de imprimare "Răspuns:". $ Legătură într-;?>

Blocul anterior de cod produce un răspuns, cum ar fi: Răspuns: Resource id # 32

Persistente de conectare

Standardul mysql_connect Funcţia va închide conexiunea de îndată ce termină de executare script-ul. Cu toate acestea, există unele cazuri încare veţi dori să menţină o conexiune care nu se închide odată cu script-ul este terminat.

Funcţia mysql_pconnect este exact ceea ce face acest lucru. Această funcţie menţine o conexiune după scriptul executa. Avantajul de amysql_pconnect este elimină necesitatea pentru o noua conexiune. Cu toate acestea, dezavantajul este că conexiuni persistente sunt stocate întpiscină şi nu sunt garantate care să facă legătura acelaşi de fiecare dată, care poate produce rezultate neaşteptate.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

66 of 362 11/9/2

Page 67: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 67/362

 

Aici este un exemplu de o conexiune permanentă, în cazul în care singura schimbare este o p în faţa cuvântului "Conectaţi" cu privire la funcde conectare.

<? Php

$ = Legătură într-mysql_pconnect ("localhost", "root", "");

de imprimare "ID-ul de Resurse persistente:". $ Legătură într-;?>

  Închiderea conexiunii

După ce termină de executare SQL, o bună practică este de a elimina conexiunea pentru a elibera resurse şi de memorie. Acest lucru se face prinefectuarea pur şi simplu un apel la mysql_close () , Care inchide conexiunea.

Inchiderea conexiunii nu este întotdeauna necesară, deoarece se va închide automat atunci când script-ul se opreşte de executare. Acestea fiindspuse, într-o cerere mai mare este cel mai bine pentru a elibera resurse cât mai curând posibil pentru a menţine o utilizare responsabilă.

Aici este anterioară mysql_connect () de exemplu cu aproape plus. <? Php

$ Link = mysql_connect ("localhost", "root", ""); de imprimare "Răspuns:". $ Legătură într-;

/ / Inchide conexiunea

mysql_close ($ link);?>

mysql_close Funcţia poate accepta o resursă id de referinţă, care vine la îndemână atunci când aveţi mai multe conexiuni. Acest argument nueste necesară; în mod implicit conexiunea ultima va fi închis.

O conexiune persistente creat de mysql_pconnect () nu poate fi închisă cu ajutorul mysql_close ().

Selectarea bazei de date

După ce stabiliţi conexiunea MySQL aveţi posibilitatea să selectaţi o bază de date. Nu veţi fi în măsură pentru a interoga baza de date până la oconexiune corectă şi de baze de date sunt alese. mysql_select_db Funcţia vă permite să selectaţi baza de date pentru a interoga. Puteţi utilizade asemenea, această funcţie pentru a comuta baze de date.

 j ^ ac"am conectareat 'poate pe au doar o bază de date conectate la un moment dat.

mysql_select_db Funcţia acceptă doi parametri. Primul parametru este numele bazei de date. Al doilea (opţional) parametru este o legătură într-resursa conexiune activă. Acest lucru este important să se folosească atunci când aveţi câteva conexiuni diferite sau doriţi să urmăriţi în modcorespunzător conexiune activă.

Aici este un exemplu folosind codul anterior pentru conectarea si selectarea unei baze de date:

<? Php

$ Link = mysql_connect ("localhost", "root", ""); mysql_select_db ("db_name", $ link);

/ / Inchide conexiunea

mysql_close ($ link);?>

Aducerea pe toate împreună

Aveţi posibilitatea să utilizaţi înţelegerea dvs. de modul de conectare la MySQL din PHP să se extindă pe acest concept şi de a construi o cererecompletă.

Prima parte a procesului de dezvoltare este de a crea baza de date şi tabele, şi-l umple cu date. Acest exemplu va fi începutul unui sit l istare CD îcazul în care utilizatorul solicită un stil gen şi albumele specificate sunt returnate.

Începeţi prin crearea celor două tabele MySQL pentru acest exemplu. Primul tabel este pentru genuri şi al doilea tabel este lista de albume.

CREATE TABLE gen (

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

67 of 362 11/9/2

Page 68: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 68/362

 

id int (11) NULL auto_increment, nume varchar (100)''implicit, int dateAdded (11) default '0 ', PRIMARYKEY (id)) ENGINE = MyISAM;

CREATE TABLE albume (

id int (11) NULL auto_increment, genrelD int (11) NOT NULL default '0 ', artist varchar (200) NOT NULLdefault albumName varchar (200) NOT NULL PRIMARY KEY implicit (id)) ENGINE = MyISAM;

Utilizarea browser-ul sau oricare editor doriţi, creaţi o bază de date de muzică şi se adaugă cele două tabele pentru a începe. După creareatabelelor, le puteţi umple cu date predefinite pentru acest exemplu, care se face cu o serie de MySQL INSERT declaraţiile.

INSERT INTO gen (nume, dateAdded) VALUES ('Blues ", 1197090235);

INSERT INTO gen (nume, dateAdded) VALUES ("Ţara", 1197090146);

INSERT INTO gen (nume, dateAdded) VALUES ("Jazz", 1197090525);

INSERT INTO gen (nume, dateAdded) VALUES ('Rock', 1197090230);

INSERT INTO albume (genreID, artist, albumName) VALUES (4, 'Rob

Thermo ',' Mix RobX lui Rock '); INSERT INTO albume (genreID, artist, albumName) VALUES (4, "Bill

Dato ',' Rock Out Live '); INSERT INTO albume (genreID, artist, albumName) VALUES (4, "Jim

Membrelor "," 37-Woodward '); INSERT INTO albume (genreID, artist, albumName) VALUES (4, "Jason

Alex ',' chitara Mashup '); INSERT INTO albume (genreID, artist, albumName) VALUES (4, "Sam Riley', 'OneLive');

Cu baza de date creată şi tabelele alocate şi completat cu date eşantion, puteţi continua cu partea PHP a cererii.

Conectarea PHP

Codul PHP incepe prin conectarea la baza de date nou create folosind tehnicile învăţate în secţiunea anterioară.

<? Php

$ Link = mysql_connect ("localhost", "username", "parola"); mysql_select_db ("muzică", $ link);

Atunci când o conexiune este stabilit, aveţi posibilitatea să creaţi interogarea care se ocupa de încărcare a datelor album. În primul rând, să creaţigen pentru a căuta prin setarea unei variabile statice. Într-o aplicaţie mai completă, această variabilă va fi cel mai probabil a trecut prin URL-ul saalte forme de apel.

$ GenreID = 4;

$ Query = "SELECT g.name, a.artist, a.albumName"; $ query .= "DIN albume un gen, g"; $ query .= "UNDEa.genreID = g.id"; $ query .= "ŞI g.id =" . $ GenreID;

Un apel la mysql_query () se face, care este responsabil pentru executarea anterioare de interogare SQL. Această funcţie va întoarce o resursăid care urmează să fie utilizate în restul apelurilor SQL.

$ Rezultat = mysql_query ($ Interogare);

Aceste date încărcate album vor fi stocate într-un şir de nume / valoare pentru simplitate, dar un exemplu mai mult din lumea reala ar fi cel maiprobabil, utilizarea XML sau o altă formă de date structurate.

$ R ăspuns = "Resp = încărcat \ n";

I ^ O RSI de date XML de utilizare este explicat ă în capitolul 3. Aceasta include încărcarea şi salvarea de XML

M-^ aiiHM while de lucru cu PHP / MySQL obiecte de date.

În acest moment, conexiunea la MySQL şi apelul ar trebui creat, dar tot nu se poate testa codul, deoarece nimic nu este emise. Următoarea secţiunexplică scoate a datelor folosind un comună în timp ce bucla pentru a traversa datele returnate de la tabelele din muzică baza de date.

Datele vor fi returnate într-un format listă de bază, dar trebuie să existe o modalitate de a diferenţia de date. Acest lucru se face prin crearea unuiunic id pe fiecare instanţă a rezultat şi atribuindu-l nume de valoare.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

68 of 362 11/9/2

Page 69: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 69/362

 

$ Index = 0;

Următoarea parte este carnea de aplicare, care este în timp ce buclă.

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

Conţinutul în timp ce bucla construi răspunsul şir.

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

$ R ăspuns .= "si artist". $ Index. "=". $ Row ['artist']; $ răspuns .= "si albumul". $ Index. "=".R ăspuns $ .= "& gen"; $ row ['albumName']. $ Index. "=". $ Row ['nume']. "\ N";

$ Index + +;

}

Veţi observa $ Răspuns variabile i se atribuie un nume şi o valoare pentru fiecare piesă individuală a datelor returnate din baza de date. Datel întors de la mysql_fetch_array Funcţia vine ca o matrice multidimensională. $ Row magazine variabilă fiecare rând de date, şi utilizaţinumele de coloană pentru a accesa bucată de date specifice, cum ar fi:

$ Răspuns .= "si artist". $ Index. "=" . $ Row ['artist'] ;

Acest proces se repetă pentru fiecare bucată de date pe care doriţi să le capturaţi. Datele care este disponibilă pentru acest în timp ce buclă esdeterminată în interogarea SQL care a fost definită în secţiunea anterioară.

Este posibil să fi observat că interogarea SQL a fost forţat să includă doar coloanele necesare. Acest lucru se face pentru a limita cantitatea de datede a folosi mai puţină memorie, care adauga ca un sistem continuă să crească.

Dacă aveţi nevoie de toate coloanele din tabele se poate utiliza un asterisc (*), Care modifică precedent apel SQL să arate ceva de genul:

$ Query = "SELECT * g., a. *"; $ query .= "DIN albume un gen, g"; $ query .= "UNDE a.genreID = g.id"; $query .= "şi G. id = ". $ GenreID;

Doua scrisori sunt atribuite stele, deoarece acestea sunt referiri la cele două tabele necesare pentru acest exemplu. Folosind mai multe tabele într-singur apel SQL este foarte comun de a păstra relaţia datelor cunoscute, şi de a face acest lucru permite ca datele să fie stocate în mai mici, bucăţimai uşor de gestionat.

Ultima parte a PHP creează o "Totală" valoare care spune cât de mult Flash de date este în curs de returnat. Acest lucru este necesar, deoarece

datele sunt in format sir. Când se foloseşte un tip de date XML sau de Arrays, nu veţi avea nevoie această variabilă suplimentar.

Indicele creat pentru fiecare rând de date devine numărul pentru că a fost numai incrementează atunci când un nou rând de date a fost găsit, ceea înseamnă că este în sincronizare cu cantitatea de date în şir.

$ Răspuns .= "& total =". $ Index;

Ultima parte este imprimare declaraţie, care expune aceste date pentru Flash sau o cerere de Web să se încarce. imprimare $ de răspuns

Aici este un răspuns eşantion: resp = încărcată

& Artist0 = Rob Thermo & album0 = Mix lui Rob Rock & genre0 = Rock & artist1 = Bill Dato & album1 = RockOut Live & genre1 = Rock & artist2 = Jim membrelor & album2 = Woodward a 37-a & genre2 = Rock & artist3 Jason Alex & album3 = Guitar Mashup & genre3 = Rock & artist4 = Sam Riley & album4 = Ones Live & genre4 Rock & totală = 5

Aceasta este aplicaţia completă, care încarcă într-un bloc de date album folosind genul ca tasta.

Aici este tot de cod PHP intr-unul prospectului pentru copiere / lip ire sau să examineze cu atenţie şi de a înţelege mai bine modul în care este tolucrează împreună.

<? Php

$ Link = mysql_connect ("localhost", "username", "parola"); mysql_select_db ("muzică", $ link);

$ GenreID = 4;

$ Query = "SELECT g.name, a.artist, a.albumName"; $ query .= "DIN albume un gen, g"; $ query .= "UNDEa.genreID = g.id"; $ query .= "ŞI g.id =". $ GenreID;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

69 of 362 11/9/2

Page 70: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 70/362

 

$ Rezultat = mysql_query ($ interogare);

$ Raspuns = "resp = încărcat \ n";

$ Index = 0;

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

$ Răspuns .= "si artist". $ Index. "=". $ Row ['artist']; $ răspuns .= "si albumul". $ Index. "=".Răspuns $ .= "& gen"; $ row ['albumName']. $ Index. "=". $ Row ['nume']. "\ N";

$ Index + +;

}

$ Răspuns .= "& total =". $ Index;

imprimare $ răspuns;?>

Clădire Flash

Partea Flash această cerere este responsabil pentru încărcarea de date şi looping prin aceasta să imprimaţi fiecare album. Pentru simplitate, aceastaplicatie este tot ActionScript, ceea ce înseamnă de afişare a datelor se face în panoul Ieşire.

O cerere mai completă ar lua aceste date încărcate şi afişa într-o listă sau o altă componentă de date particularizate.

Primul pas este de a defini fişierul PHP care va fi numit, ceea ce ar arăta similar cu aceasta, în funcţie de modul în care sistemul dvs. este configur

var phpFile: String = "http://localhost/getAlbums.php";

În cazul în care variabila PHP este definit, următorul pas este de a construi funcţia pe care invită pe server.

loadHandler function (): void {

}

Această funcţie primul stabileşte URLRequest exemplu, care trece variabila PHP ca un argument.

var urlRequest: URLRequest = new URLRequest(PhpFile);

URLLoader este utilizat pentru a crea un ascultător eveniment şi pentru a începe procesul de încărcare la finalizarea acestei funcţii. urlRequesvariabilă este trecut în a funcţiei de încărcare a URLLoader instanţă a clasei, ceea ce este necesar pentru orice tip de încărcare de date.

var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, callServerHandler); urlLoader.load (urlRequest);

Funcţia de lângă defini este callServerHandler, care se numeşte o dată de date este trimis înapoi din fişierul PHP scrise în secţiuneaanterioară. Această funcţie este să fi trecut un Eveniment de referinţă care conţine datele încărcate.

callServerHandler funcţie (e: Event): void {

}

Primul pas în această funcţie este de a crea URLLoader exemplu, care este folosit pentru a capta datele încărcate. Instanţa eveniment conţine oţintă de proprietate, care este utilizat aici, prin trecerea într-o nouă URLLoader.

Rezultatul este stocat în locale încărcător variabilă, care vor fi utilizate în restul acestei func ţii. var loader: URLLoader = URLLoader(e.target);

Poate că vă amintiţi de la secţiunea PHP din acest exemplu că datele sunt returnate în perechi obiect nume / valoare. Că datele sunt stocate în dedate proprietate de exemplu încărcător nou creat.

Aceste date este trecut într-o instanţă a URLVariables clasă, care creează un obiect atât de ActionScript alte porţiuni de script-ul sa poatagestiona datele.

var dataObj: URLVariables = new URLVariables (loader.data);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

70 of 362 11/9/2

Page 71: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 71/362

 

Acum, că datele sunt încărcate, îl puteţi testa utilizând un simplu urmă declaraţia că ar trebui să afişeze intrările totale întors.

trace ("Albume Total:" + dataObj.total);

Că urmă apel ar trebui să afişeze următorul text în panoul de ieşire:

/ / De ieşire: Albume total: 5

Aceasta înseamnă că fişierul PHP este chemat şi datele sunt încărcate în mod corespunzător din baza de date folosind PHP deoarece aplicaţia demanipulare a datelor în mijloc.

Ai putea termina script-ul aici, pentru că toate lucrările, dar în continuare cu ajutorul unui pentru., bucla pentru a afişa informaţiile de la fiecaalbum folosind o serie de urmă solicită pentru simplitate.

pentru., bucla este configurată cu ajutorul total proprietate a dataObj pentru a determina cat de multe ori la bucla să ruleze.

pentru (var i: uint = 0; i <dataObj.total; i + +) {

}

Linia intai in pentru., bucla afişează albumul curent este afişat. Numărul albumul curent este creat utilizând eu variabilă a buclei cu 1adăugate la ea. Motivul pentru această afirmaţie este că eu variabilă incepe de la zero, şi pentru scopuri de afişare primul album ar trebui să fie1.

trace ("Album" + (i + 1));

Următor urmă declaraţia este configurat pentru a afişa artistului curent. Valoarea este capturat de la dataObj Exemplu folosind un obiect dereferinţă la obiect dinamic. "Artist" Numele este anexat la eu variabilă, care creează un nume de instanţă.

trace ("Artist:" + dataObj ['artist' + i]);

Situaţiile rămase urmă sunt duplicate de cel anterior, cu numele de instanţă şi descrierea uşor modificate.

trace ("Album:" + dataObj ['album' + i]); urme ("Gen:" + dataObj ['gen' + i]);

În acest moment, bucla este finalizat şi aşa este aplicarea întregului eşantion. Puteţi testa acum exemplu şi ar trebui să vedeţi declaraţiile urma afi în panoul de ieşire, aşa cum se arată în Figura 3.4.

FIGURA 3.4

Aici este un exemplu a datelor album afişat în panoul Ieşire.

Partea ActionScript completă a acestei cereri urmează:

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

71 of 362 11/9/2

Page 72: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 72/362

 

var phpFile: String = "http://localhost/getAlbums.php";

loadHandler function (): void {

var urlRequest: URLRequest = new URLRequest (phpFile); var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, callServerHandler); urlLoader.load (urlRequest);

}

callServerHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

var dataObj: URLVariables = new URLVariables (loader.data);

/ / Simplă urme de exemplu,

pentru (var i: uint = 0; i <dataObj.total; i + +) {

trace ("Album" + (i + 1));

trace ("Artist:" + dataObj ['artist' + i] urmă ("Album:" + dataObj ['album' + i]); urme ("Gen:" + dataOb['gen' + i]);

}

}

loadHandler ();

loadHandler ();

Exemplul anterior ar trebui să-am dat o înţelegere destul de bună de a lucra cu o baza de date MySQL in Flash folosind PHP ca script-ul în mijlocAveţi posibilitatea să se extindă pe acest exemplu pentru a crea o cerere mai robust, deoarece această cerere probă a fost utilizată pentru a ilustraconceptul şi nu se concentreze pe ecran sau pe aplicaţia în sine.

MySQL de date este doar un exemplu de date care pot fi afişate în Flash.

Următorul capitol se extinde pe acest exemplu şi introduce mai multe obiecte de date avansate, cum ar fi XML, împreună cu alte forme de date,cum ar fi fişiere de imagine şi text.

/

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

72 of 362 11/9/2

Page 73: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 73/362

 

BBSS ■

■ ____________ 

• • "■; V

Iii

 ÎÉWWmMt 

Working cu date este procesul de trimitere şi de încărcare de contact pentru ActionScript să interpreteze. Există două tipuri de date care pot fiutilizate în ActionScript. Acestea ar fi statice şi dinamice. În cele mai multe cazuri comune, proces dinamic este de preferat peste static. În principadeoarece datele dinamice includ deseori o componentă de bază de date.

Acest capitol este despre lucrul cu date dinamice, atât în Flash şi PHP. Începi prin încărcarea fişierelor text simple, apoi treci la XML şi de încărcamai avansate. Capitolul se încheie cu o aplicatie demo completă care se încarcă datele imaginii pentru a afişa o imagine redusă şi o imagine dedimensiuni normale.

Datele de încărcare în Flash este o practică foarte comună. În aproape fiecare proiect, pe care dori ţi să aveţi unele dinamice (actualizabile) porţie.Scopul de date dinamice este de a limita cantitatea de necesară actualizarea. De exemplu, dacă te uiţi la un site de ştiri, veţi vedea că cea mai mareparte a conţinutului exterior nu se schimba (logo-uri, navigare, etc). Acest lucru este valabil şi pentru o aplicaţie Flash, unde cel mai probabil veţiavea doar o anumită parte care de fapt trebuie să fie actualizat. Această secţiune vă îndrumă prin procesul de încărcare de date XML din tot drumde imagini şi sunet.

Procesul de încărcare de date în Flash devine familiar destul de repede ca cele mai multe tipuri de date va fi de încărcare avea cerinţe similare.

Începeţi prin a privi la un exemplu simplu, care ar încărca un fişier text. Acest exemplu va căuta fişierul text într-o serie de locaţii diferite în funcţide cazul în care cererea este în curs de a alerga. Dacă executa acest cod în cadrul Flash

 În acest capitol

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

73 of 362 11/9/2

Page 74: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 74/362

 

Cum pentru a încărca date

Trimiterea de date

Se incarca XML

Se incarca imaginile folosind PHP

IDE-l va căuta în acelasi loc FLA este salvat în directorul sau ghidul de temperatură în cazul în care fişierul nu a fost salvat. În cazul în care coduleste compilat într-un SWF, fişierul text va fi încărcat de la acelasi director SWF este stocat inch

var txtFile: String = "sample.txt";

var urlRequest: URLRequst = new URLRequest (txtFile); var loader: URLLoader = new URLLoader ();loader.addEventListener (Event.COMPLETE, loadHandler); loader.load (urlRequest);

loadHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target); urme ("datele încărcate:" + loader.data);

}

Exemplul anterior încarcă un "Sample.txt" fişier şi urme tot conţinutul acestuia la panoul de ieşire Flash, care se deschide automat. O altămodalitate de a deschide sau închide panoul de ieşire este prin alegerea C de ieşire Window.

 Înţelegerea clasele de folosit pentru a încărca dateActionScript in Flash are o serie de clase predefinite, care sunt utilizate pentru a încărca date. Următoarea secţiune va explica funcţia de fiecaredintre aceste clase.

URLRequest

Această clasă este utilizată pentru a configura fişierul care este încărcat. Aveţi posibilitatea să atribuiţi această fie direct la o variabila, sau pentru menţine codul de ansamblu mult mai compact, se atribuie direct în cadrul de încărcare () de URLLoader. De fapt, aveţi posibilitatea săaplicaţi acest proces la multe dintre clase. Acest lucru nu are niciun impact asupra funcţionalităţii a clasei şi nu este un pas necesar.

loader.load (nou URLRequest (txtFile));

URLLoader 

Aşa cum se menţionează în Live Adobe Docs, "The URLLoader descărcări clasă de date dintr-un URL ca date binare de text,, sau URL-codificatvariabile. Este util pentru a descărca fişiere de text, XML, sau alte informaţii care urmează să fie utilizate într-o dinamică de date, determinate decerere. "

URLLoader serveşte două scopuri când trimit şi încărcarea de date în ActionScript. Primul scop al URLLoader este de a stabili conductorulcomplet. Scopul este de a captura alte datele încărcate în conductorul complet. O diferenţă vizibilă a doilea scop este de fapt URLLoader nu areun cuvânt cheie nou în faţa sa.

Configurarea de apel invers

Ultimul pas în instituirea unui încărcător de date este de apel invers. De apel invers este un alt nume pentru "handler" funcţie care este apelatăatunci când datele sunt complet încărcate. Această funcţie este atribuită Event.COMPLETE eveniment pe URLLoader clasă.

var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, loadHandler);

Acest callback funcţie necesită un singur argument de tip Eveniment, care este transferat automat în cazul în care este numit ActionScript.Acest argument este în cazul în care conţinutul datelor încărcate vor fi stocate.

Dacă uitaţi să includeţi argumentul în Handler caz, ve ţi primi o asimetrie argument numărul de eroare.

ArgumentError: Error # 1063: nepotrivire Argument conta pe

sendtophp_fla:: MainTimeline / serverResponse (). Aşteptate 0, a primit 1.

la flash.events:: EventDispatcher / dispatchEventFunction () la flash.events:: EventDispatcher /dispatchEvent () la flash.net:: URLLoader / onComplete ()

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

74 of 362 11/9/2

Page 75: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 75/362

 

Punerea pe toate împreună

Acum, că aveţi o înţelegere a modului în care codul de încărcare de date folosind ActionScript fabrică puteţi trece pe la mai multe exemple specifde trimitere şi de încărcare. În acest exemplu, puteţi experimenta şi construi de la URLLoader clasă, deoarece are o mult mai Evenimente mudecât simpla COMPLET aţi utilizat. De exemplu, există un IOError cazul în care se numeşte atunci când sarcină sau trimite nu reuşeşteCodul pentru di ferite Evenimente este destul de mult la fel; pentru dvs. IOError exemplu, ar arata astfel:

var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, ioHandler);

ioHandler funcţie (e: Event): void {

trace ("Dosarul a fost reziliat de încărcare");

}

Veti observa repede singurul lucru care sa schimbat este Eveniment şir şi incarcatoare funcţie. Mai multe evenimente pot fi, de asemeneaatribuite, şi este adesea o idee bună de a menţine un nivel ridicat de compatibilitate. Puteţi, de asemenea sunt în măsură să depana cod rapid dacvă configuraţi evenimentele propriu-zis.

Alocarea evenimente multiple

Să presupunem că doriţi să se ocupe IOError şi Complet eveniment de exemplu, încărcător. Ai putea introduce fiecare tratare a evenimentulucu toate acestea, acest lucru poate deveni un proces lung atunci când se lucrează cu mai multe încărcătoare. O modalitate de a atinge rezultatuldorit este de a utiliza o funcţie pentru a atribui Stivuitoare. Tu treci practic în obiectivul ca un argument şi să alocaţi dinamic Stivuitoare

evenimentului.

var txtFile: String = "sample.txt";

var urlRequest: URLRequest = new URLRequest (txtFile);

var loader: URLLoader = new URLLoader ();

assignHandlers (încărcător);

loader.load (urlRequest);

assignHandlers funcţie (ţintă: *): void {

ţintă ["addEventListener"] (Event.COMPLETE, completeHandler); ţintă ["addEventListenerM](IOErrorEvent.IO_ERROR, ioErrorHandler);

}

completeHandler funcţie (e: Event): void {

}

ioErrorHandler funcţie (e: Event): void {

}

Un concept nou introdus în această funcţie este mod dinamic de alocare a ascultătorilor eveniment. [] sunt folosite pentru a defini un şir în ei cavariabilă. În acest caz, şirul "AddEventListener" este de fapt metoda de a invoca şi a valorilor cu () sunt argumentele pentru a trece la metodFolosind acest exemplu pentru ascultător eveniment este doar un fel de exagerat, dar dacă lucraţi cu mai multe evenimente devine repede benefi

După utilizarea paşii anteriori pentru a încărca date, veţi dori să utilizaţi aceste date într-un fel. Cu toate acestea, înainte de a te scufunda in lucrulcu datele încărcate aveţi nevoie de o înţelegere a ceea ce este trecut din nou şi cum să lucraţi cu el. În următoarele secţiuni, veţi învăţa cum să seocupe de datele care au fost încărcate. După ce aţi completat această secţiune veţi înţelege pe deplin modul de încărcare a datelor şi de modul delucru cu faptul că datele încărcate.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

75 of 362 11/9/2

Page 76: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 76/362

 

Un mod de încărcare-

Încărcarea unui fişier text sau imagine este considerat a fi unul-cale de încărcare, mai ales pentru că tu nu treci de-a lungul orice reguli sau paşipentru a fişier încărcat. Un apel pentru a încărca o imagine-ar aştepta o imagine care urmează să fie returnate şi nimic mai mult. Acest tip de procede încărcare este cel mai frecvent înţeles dacă vă uitaţi la un site Web. Logo-ul pe care site-ul este solicitat şi este încărcat; nu există datesuplimentare este de a reuşit să realizeze acest lucru.

Două căi de încărcare

Două sensuri de încărcare este procesul de încărcare de date de către trecători de-a lungul argumente că procesul se va ocupa solicitat. De exempun apel la un server de anunţ ar trece de-a lungul ID-ul contului şi cel mai probabil, alte informaţii pentru a determina ce anunţ ar trebui să fieafişat.

Atunci când se lucrează cu aplicaţii PHP scripting sau alte dinamice vă va fi cel mai probabil de-a lungul treci parametri pentru a lucra cu. Chiarmai important este faptul s-ar putea obţine diferite tipuri de date înapoi. De exemplu, vă puteţi aştepta un obiect, ci primi un cod de eroare in locScopul acestei secţiuni este de a dezvolta un mod în care să se ocupe de acest caz.

var phpFile: String = "sample.php";

var urlRequest: URLRequest = new URLRequest (phpFile); var loader: URLLoader = new URLLoader ();

loader.addEventListener (Event.COMPLETE, serverHandler); loader.load (urlRequest);

serverHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

 var variabile: URLVariables = new URLVariables (loader.data);

dacă (vars.response == 'EROARE') {

trace ("A apărut o eroare, răspuns care nu sunt încărcate");

}

else {

trace ("R ăspuns server:" + vars.response);

}

}

Acest handler este foarte similar cu exemplele anterioare, cu excep ţia faptului că variabila de răspuns a fost dat o definiţie netipizat. Acest lucrupermite diverse tipuri de date care urmează să fie stocate în acesta, cum ar fi un şir de o eroare şi un obiect pentru răspunsul aşteptat.

Fiţi atenţi atunci când stabileşte o v ariabilă ca netipizat. Astfel, se elimină verificarea erorilor şi face greu să ştii ce o variabilă conţine.

Mai mult ca sigur te vei gasi de lucru cu o mulţime de date. În mod ideal, aceste date vor fi transmise înapoi în format XML. XML este un standarindustrial; dup

ăce începe

ţi să

lucraţi cu el a

ţi în

ţeles repede de ce. Ea se bazeaz

ăpe etichete pentru a defini obiectele de date, asem

ănător cu un

tablou multidimensional. Dezvoltatorul este permis să se definească etichete personalizate, astfel încât construirea cu uşurinţă un stil utilizabilXML este foarte dureros.

Utilizarea E4X cu XML

Un update major pentru ActionScript 3 este abilitatea de a analiza XML folosind E4X. Acest lucru ne permite sa obtinem rapid datele ascunse adâ în interiorul unui fi şier XML şi cu un cod mult mai puţin decât este necesar în versiunile anterioare.

De exemplu, aveţi posibilitatea să începeţi cu un fişier XML, cum ar fi aceasta:

<store> <item>

<name> Rezervaţi </ name> <section> Learning </ secţiune> <price> 19.95 </ pret> <inStock> da </ instock

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

76 of 362 11/9/2

Page 77: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 77/362

 

</ item> <item>

<name> Fotbal </ name> <section> Sport </ secţiune> <price> 4.99 </ pret> <inStock> nr </ instock> </item> <item>

<name> Bike </ name> <section> Sport </ secţiune> <price> 89.95 </ pret> <inStock> da </ instock> </item> <item>

<name> Baschet </ name> <section> Sport </ secţiune> <price> 8.95 </ pret> <inStock> nr </ instock> </item> <item>

<name> Revista </ name> <section> periodica, </ secţiune> <price> 5.95 </ pret> <inStock> da </ instock></ item> </ magazin>

Acum, doriţi să încărcaţi acest fişier şi afişează numai elementele care sunt în stoc. Folosind E4X aceasta va fi o sarcină foarte simplă.

Puteţi începe cu secvenţa de încărcare standard care a fost văzut în exemplele anterioare. Calea către fişierul XML vrem să încărcaţi în acestexemplu este "storeltems.xml".

var xmlFile: String = "storeltems.xml"; loadXML ();

Funcţia loadXML (): void {

var urlRequest: URLRequest = new URLRequest (xmlFile); var urlLoader: URLLoader = new URLLoader ();urlLoader.addEventListener (Event.COMPLETE, xmlHandler); urlLoader.load (urlRequest);

După ce fişierul XML este complet încărcată funcţia xmlHandler se numeste. Această funcţie este în cazul în care fişierul XML este citit şi punctulcare este utilizat E4X.

Această funcţie este un pic mai avansat decat am vazut in exemple de cod anterior, astfel încât func ţia va fi defalcate în bucăţi mai uşor de gestion

Funcţia xmlHandler (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

/ / Bucla prin toate elementele, arată NUMAI vehicole în vînzare

pentru fiecare {(element var în xml .. articol)

dacă (de coarde (item.. instock) == "da") {

trace ("Produs:" + item.name); urme ("\ tSection:" + item.section); urme ("\ tPrice:" + item.price);

}

}

}

Primul pas în această funcţie este de a apuca de date încărcate şi trece-l la clasa XML, care asigură că veţi fi de lucru cu obiecte XML valide înurmătoarele secţiuni.

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data); A pentrufiecare .. buclă este utilizat pentru a mers pe jos, prin intermediul fişierului XML şi căutaţi elementele care sunt în stoc. Această buclă are, dasemenea, un operator de construcţii .. "Accesor descendent", care este în căutarea pentru fiecare element din obiectul XML. De "accesor urmaşul"fost introdus în ActionScript 3 pentru accesarea descendenţilor sau copii şi a copiilor în cadrul copii. Acest lucru se face cu ajutorul a doi operatorpunct în succesiune (..), urmat de numele elementului descendent.

pentru fiecare element (var în xml .. articol) { ... }

Acesta este un pas uriaş de la ActionScript 2 în cazul în care v-ar configurat bucle imbricate şi traversa întreg documentul XML. Cu toate acestea ulucru de remarcat este faptul că accesor descendent este case sensitive asa ca cel mai bine este să folosiţi o convenţie de denumire consistent.

<items> <item>

 <ObjectName> Exemplu </ ObjectName> 

</ Item> </ articole>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

77 of 362 11/9/2

Page 78: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 78/362

 

Convenţia cele mai comune de denumire pentru numele nodul atunci când se lucrează cu XML este cămilă la caz. Camel-caz începe primul cuvântcu o minusculă şi apoi prima literă a fiecărui cuvânt după care este majuscule.

firstSecondThird

Acum, că, în general pentru fiecare buclă .. este definit următorul pas este de a adăuga în verificarea reale pentru elemente instock. Acest lucru esrealizat prin crearea unei declaraţii condiţionată pentru a merge în interiorul buclei.

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

pentru fiecare {(element var în xml .. articol)

dacă (de coarde (item.. instock) == "da")

{

trace ("Produs:" + item.name); urme ("\ tSection:" + item.section); urme ("\ tPrice:" + item.price);

}

}

Această porţiune se uită la fiecare element în buclă, şi folosind accesor descendent, se pare pentru variabila instock. Variabila instock va fi setatpentru a da sau nu; în cazul în care variabila este setată la Da, atunci noi de imprimare, pur şi simplu poziţia de date. Într-un exemplu mai avansadatele acestea ar fi cel mai probabil a trecut la o funcţie ecran sau, eventual, o componenta DataGrid.

Asta este tot acolo este acela de a cauta rapid printr-un fişier XML şi verificarea valorilor pentru nodul specifice. Aveţi posibilitatea să extindeţiacest exemplu pentru a căuta mai multe tipuri şi de a folosi rezultatele pentru a construi un mini-magazin care ar trebui s ă arate doar elemente casunt în stoc.

Atunci când lucraţi cu XML este o idee bună pentru a menţine un format consecvent. Acest lucru vă permite să lucraţi cu fişiere diferite f ăr ă a finevoie pentru a re construi logica programului global. De asemenea, este o idee bună astfel încât să puteţi lucra cu alţi dezvoltatori de pe acelaşiproiect.

În următoarea secţiune veţi învăţa cum să încărcaţi şi de gestionare a datelor XML folosind PHP. Acest lucru vă va permite să dezvolte mai multeaplicaţii dinamice.

Se incarca XML

Procesul de încărcare XML în PHP pot fi realizate într-un cuplu de moduri diferite. Puteţi lua rapid o privire la utilizarea PHP pentru a încărcaXML, deoarece acest proces este destul de simplu. Te uiti apoi la modul de a construi dinamic şi trimite date XML. Acest proces poate fi realizat

 într-un cuplu de moduri diferite.

De modă veche Dom XML

Dom XML este vechiul mod de a lucra cu XML. Intr-un fel, este foarte similar cu lucrul cu XML în versiunile mai vechi de ActionScript. Ai nevoie da utiliza o serie de bucle pentru a găsi noduri, iar acest lucru necesită pur şi simplu un cod mult mai mult decât este necesar.

<? Php

$ Doc = domxml_open_file ('sample.xml');

Nod $ = $ doc-> document_element () -> first_child (

în timp ce ($ nod) {

if (($ nod-> node_name () == "sampleNode") & &

($ Nod-> node_type () == XML_ELEMENT_NODE)) {

$ Continut = $ nod-> first_child (); $ continut de imprimare-> node_value (); break;

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

78 of 362 11/9/2

Page 79: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 79/362

 

Nod $ = $ nod-> next_sibling ();

}

?>

Codul domxml nece sită PHP 4.3, sau trebuie să ave ţi instalat separat PECL. Puteţi găsi mai multe informaţii pe site -ul PHP (http://us.php.net/manual /en/ref.domxml.php).

Sarcinile anterioare exemplu în fişierul XML şi folosirea Dom XML analizează prin ea pentru a găsi sampleNode. De lucru în cadrul buclei, pecare il cautati pentru nodul ales şi atunci când acel nod este găsit de a imprima conţinutul de pe ecran. Nu este un exemplu foarte elaborat, dar se

prezinta procesul general care ar fi găsit într-un exemplu mult mai avansat.

Simple XML

Lucrul cu Simple XML rapid de încărcare arată cât de uşor pot fi XML. Acest bloc de cod este atingerea acelaşi rezultat ca şi înainte, dar cu omulţime de linii de cod mai putine. Două linii de cod în loc de 13 este o îmbunătăţire considerabilă.

<? Php

$ Xml = simplexml_load_file ('sample.xml'); de imprimare $ xml-> sampleNode;?>

Trimiterea XML

Procesul de trimitere de la PHP XML în Flash este explicat în secţiunea următoare. În general, codul pentru acest lucru este foarte asemănător cu încărcarea XML.

Imprimarea XML dinamice

Deseori veţi dori să lucraţi cu XML dinamice. De obicei, atunci când o bază de date este implicată aceasta devine o practică mult mai comune.Procesul de construire a XML dinamice este foarte simplu: Puteţi seta tipul corect de antetul fişierului şi imprima prime XML. Următorul bloc decod este un exemplu de cum să realizeze acest lucru.

<? Php

header ("Content-Type: text / xml");

<store> \ n ";

<item> \ n ";

<name> Rezervaţi </ name> \ n "; <section> de învăţare </ secţiune> \ n" <price> 19.95 </ pret> \ n ";<inStock> da </ instock> \ n"; </ element > \ n ";

<item> \ n ";

<name> Fotbal </ name> \ n "; <section> Sport </ secţiune> \ n"; <price> 4.99 </ pret> \ n "; <inStock>nr </ instock> \ n"; </ element> \ n ";

<item> \ n ";

<name> Bike </ name> \ n "; <section> Sport </ secţiune> \ n"; <price> 89.95 </ pret> \ nM; <inStock> Da

</ instock> \ nM; </ Element> \ nM;

item aici

$ XmlData = "$ xmlData .=

XmlData $ $ xmlData xmlData $ $ $ xmlData xmlData $ xmlData

XmlData $ $ xmlData xmlData $ $ $ xmlData xmlData $ xmlData

XmlData $ $ xmlData xmlData $ $ $ xmlData xmlData $ xmlData

/ / Adauga mai multe

$ XmlData .= "</ magazin> \ n";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

79 of 362 11/9/2

Page 80: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 80/362

 

de imprimare "de răspuns =". $ XmlData;

?>

Linia de magie în acest exemplu ar fi imprimare funcţie care trimite XML la buffer-ul de ieşire şi în cele din urmă trece de-a lungul Flash. Dupăcum puteţi vedea, acesta este un exemplu destul de simplu.

XML dinamice din baza de date

Presupunem că doriţi să construiască XML dintr-o bază de date MySQL apel. O bază de date este o abordare mult mai comună atunci când o

aplicaţie în curs de dezvoltare, deoarece datele sunt adesea dinamic. Imprimă static, în cazul nu ar fi foarte usor de intretinut. Aici este codul, carevor fi defalcate şi trecut prin.

<? Php

header ("Content-Type: text / xml");

$ Query = "SELECT * FROM magazin de unde instock = da";

$ Link = mysql_connect ("localhost", "ghidul", "pass") $ rezultat = mysql_query ($ query, $ link);

XmlData $ = ""; $ xmlData .= "<store> \ n"

mysql_fetch_array ($ rezultat)

 <item> \ n ";

 <name> "$ row ['nume'].." </ name> \ n "; <section>". $ Row ["secţiune"]. "</ Secţiune> \ n" $ row['pret']. "</ Pret> \ n";. $ Row ['instock']. "</ Instock> \ n"

în timp ce ($ row {

XmlData $ $ xmlData xmlData $ $ $ xmlData xmlData $ xmlData

}

 <price> "<inStock>." </ element> \ n ";

$ XmlData .= "</ magazin> \ n";

de imprimare "de răspuns =". $ XmlData;?>

Te-ai uitat la încărcare a conţinutului unei baze de date în capitolul 2, şi pentru cea mai mare parte este acelaşi proces. De fapt, singura diferenta sgăseşte în interiorul în timp ce buclă. Acesta este punctul în care aţi construi structura arbore XML şi de imprimare în cele din urmă cărăspunsul înapoi la Flash.

Nu-l ai, mai multe moduri de a trimite şi a încărca date XML în ambele PHP si Flash. Puteţi lua aceste exemple simple şi de a construi aplicaţiicomplete. De fapt, vă va fi bazându-se pe acest exemplu, în capitolul 11 privind exercitarea Mini Cos de cumparaturi.

ActionScript pot încărca mult mai mult decât un text simplu şi fişiere XML. Un concept mai avansate este de a încărca imagini, dar că va lua un pamai departe şi imagini de sarcină determinată de un fisier PHP.

Încărcaţi fişierul de pornire, care poate fi găsit pe site-ul Web cărţi. Acest fişier are un UILoader şi verticale TileList să deţină imagini, aşacum se arată în figura 4.1. Conţinutul acestui fişier nu sunt deosebit de importante pentru acest exemplu, dar poti experimenta cu alte componenpentru a construi aplicaţii mai avansate.

Figura 4.1

Rezultate aplicare completat cu imagini încărcate

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

80 of 362 11/9/2

Page 81: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 81/362

 

Configurarea încă

rcă

tor imaginea

Primul pas pentru construirea loader imagine este de a construi porţiunea ActionScript a cererii, ceea ce este prezentat aici. Codul de mai jospresupune thumbSP ScrollPane este deja amplasat pe scena.

var xmlFile: String = "http://localhost/ch03/loadImages.php"; ImageDir var: String =" imagini / ";

callServer funcţie (e: MouseEvent): void {

var urlRequest: URLRequest = new URLRequest (xmlFile); var loader: URLLoader = new URLLoader ();loader.addEventListener (Event.COMPLETE, xmlLoaded); loader.load (urlRequest);

}

Funcţia xmlLoaded (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data);

var thumbContainer: TileList = thumbSP;

thumbContainer.removeAll ();

thumbContainer.sourceFunction = sourceHandler; thumbContainer.addEventListener (Event.CHANGE,loadMainImage);

pentru fiecare (var element: XML în xml .. produsului) {

var smImage: String = item.smImage.toString (); var lgImage: String = item.lgImage.toString ();thumbContainer.addItem ({sursa: {mp: smImage, LG: lgImage}});

}

}

sourceHandler funcţie (element: Object): String {

întoarcere imageDir + item.source.sm;

}

Funcţia loadMainImage (e: Event): void {

imageUI.source = imageDir + e.target.selectedItem.source.lg;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

81 of 362 11/9/2

Page 82: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 82/362

 

}

callBtn.addEventListener (MouseEvent.CLICK, callServer);

Acest exemplu are unele cod pur pentru lucrul cu componentele, pe care nu trebuie să înţelegem în acest moment. Cu toate acestea, încărcătorxmlLoaded Funcţia este focalizarea. Prima dintre ele, xmlLoaded, este utilizat pentru a mers pe jos, prin intermediul fişierului XML încărcat şlocul imagini în miniatură, în TileList componente.

Veţi observa XML este folosind E4X să găsiţi cele nodurile imagine. Acest exemplu presupune nodurile care urmează să fie numit produs, care es în cazul în care sursele de mici si mari imaginea poate fi găsit.

Puteţi utiliza addItem metodă de a trece într-un obiect care conţine surse de mici şi mari imaginea. Acest lucru economiseşte timp atunci cândscrieţi logica pentru a face clic pe o miniatură. TileList incendiile de pe un SCHIMBAREA eveniment atunci când se face clic pe un element.Acest lucru este utilizat pentru a ataşa conductorul, care încarcă imaginea mare.

thumbContainer.addEventListener (Event.CHANGE, loadMainImage);

Funcţia loadMainImage (e: Event): void {

imageUI.source = imageDir + e.target.selectedItem.source.lg;

}

sourceFunction handler este utilizat pentru a adăuga în calea spre imagini. Această funcţie este numită de fiecare dată când un element esteadăugat la TileList.

thumbContainer.sourceFunction = sourceHandler;

sourceHandler funcţie (element: Object): String {

întoarcere imageDir + item.source.sm;

În acest capitol aţi învăţat cum să trimiteţi şi încărca date folosind PHP si Flash Sunteţi apoi sa extins la aceasta prin trimiterea şi încărcarea de datXML, care a permis să dezvolte o aplicatie mult mai dinamic.

Trebuie să aveţi acum o înţelegere destul de bună a modului de a lucra cu date în Flash şi PHP. Ai învăţat, de asemenea, câteva motive diferite de

ce ar trebui să utilizaţi o formă specifică a datelor în aplicaţia dumneavoastră.

o

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

82 of 362 11/9/2

Page 83: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 83/362

 

An aplicare vor de multe ori au un anumit nivel de interac

ţiune cu utilizatorul final de a îmbog

ăţi experien

ţa aplicarea general

ă. Acesta este cel

mai frecvent o persoană de contact sau un alt tip de formular, care permite proprietarul site-ului pentru a permite comunicarea fără a furniza oadresă de e-mail sau care necesită ca utilizatorul să aibă un client de e-mail. O altă formă pe care le-ar găsi într-o aplicaţie este un formular deautentificare, care vă permite să limiteze accesul la anumite aspecte sau secţiuni ale cererii dumneavoastră.

Acest capitol va explica procesul de construire a formelor în Flash şi cum să le facă interactiv folosind PHP. Veţi obţine, de asemenea, o vedere deansamblu a trimite date folosind Flash; cu toate acestea, va recomand sa se uite la capitolul 4 pentru a înţelege complet procesul de trimitere şi

 încărcarea de date.

Forme, în general, constau în Dulapuri de intrare, butoanele, casetele listă, şi de butoane radio, aşa cum se arată în Figura 5.1. Fiecare dintre acestelemente este disponibil ca o componentă în cadrul Flash. Poţi accesa panoul de Components prin alegerea Componente Window C. Folosind undintre aceste componente precompilate este la fel de simplu ca făcând clic şi trăgându-l într-un strat în documentul dvs. Flash.

 În acest capitol

Formă de dezvoltare în curs de dezvoltare un formular de contact Crearea unui modul de conectare

Figura 5.1

Formă de propoziţii construit folosind componente implicit că nava cu Flash

Simplă Formular de contact

Yoi ^ Tarife

Sutiij'ect

Mesaj

| SendMp ^ sagg J

 În cazul în care componenta nu apare pe scena, asigura stratul nu este blocat afi şează o pictogramă în lista Layer.

Dacă aţi rulat acest film Flash, veţi vedea unele componente se răcească pe scena, dar le-ar fi nefunctional. Procesul de utilizare a ei este foartesimplă. Ai atribui un nume de instanţă la componenta de referinţă şi numele în ActionScript dumneavoastră.

De exemplu, dacă aţi avut o Textlnput si a vrut sa-l prefill, trebuie să adăugaţi codul de mai jos: textlnstance.text = "va rugam saintroduceti numele dvs.";

Fel de util ca acest cod este, ar trebui, de asemenea, de captare de date introduse de utilizator. Acest lucru se realizează prin adăugarea uneicomponente buton Remitere la etapa.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

83 of 362 11/9/2

Page 84: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 84/362

 

userName.text = "va rugam sa introduceti numele dvs.";

submitBtn.addEventListener (MouseEvent.CLICK, submitHandler);

Funcţia submitHandler (e: MouseEvent): void {

trace ("input Utilizator:" + userName.text);

}

Aveţi posibilitatea să extindeţi acest exemplu pentru a adăuga verificarea erorilor şi aplicarea câmpurile obligatorii:

Funcţia submitHandler (e: MouseEvent): void {

dacă (userName.text.length == 0) {

trace ("Te rugăm să introduci un nume!");

}

}

Foarte des, veţi dori să obţineţi un feedback de la un vizualizator de site-ul tău. Acest lucru este realizat prin adaugarea unui formular de contact,care, în general, constă dintr-un formular Flash care vorbeşte într-un fişier PHP.

Pentru această secţiune, vei folosi fişierul de pornire care este inclus pe site-ul Web al cărţii. Acest fişier are toate componentele situate încontactMC MovieClip deja pe scena si a fost atribuit numele de instanţă pe care le vor folosi în ActionScript.

Aici este complet ActionScript formularul de contact:

var phpFile: String = "http://localhost/ch04/contact.php"; Formă var: MovieClip = contactMC;

Funcţia SendMessage (e: MouseEvent): void {

/ / Întâi trebuie să verificaţi câmpurile

var nameStr: String = form.nameTxt.text;

var subjectStr: String = form.subjectTxt.text;

var messageStr: String = form.msgTxt.text;

allFields var: Boolean = true;

/ / Verifica numele

dacă (nameStr.length <2) {

allFields = false;

}

/ / Verifica obiectul

dacă (subjectStr.length <2) {

allFields = false;

}

/ / Verifica mesaj

dacă (messageStr.length <2) {

allFields = false;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

84 of 362 11/9/2

Page 85: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 85/362

 

}

dacă (allFields!) {

trace ("Toate câmpurile obligatorii completate nu!");

form.statusTxt.htmlText = "<culoarea fontului = \M# FF0000 \M>M+

"Toate câmpurile obligatorii nu completate în </ font>!"; Returnare;

}

 variabile var: URLVariables = new URLVariables (); variables.name = nameStr;

 variables.subject = subjectStr; variables.msg = messageStr;

 var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.method = URLRequestMethod.POST;urlRequest.data = variabile;

 var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, sendHandler);loader.load (urlRequest);

}

sendHandler funcţie (e: Event): void {

 var loader: URLLoader = URLLoader (e.target);

 variabile var: URLVariables = new URLVariables (loader.data);

dacă (variables.resultCode == "trimis") {

/ / Mesaj trimis

form.statusTxt.htmlText = "font color = \" # 009933 \ "> E-mail" + "a trimis, v ă mulţumesc </ font>.";

}

else if (variables.resultCode == "ERROR") {

/ / Mesaj nu au fost trimise

form.statusTxt.htmlText = "font color = \" # FF0000 \ "> E-mail" + "nu a trimis, v ă rugă m să încercaţidin nou </ font>.";

}

else {

/ / Necunoscut răspuns

form.statusTxt.htmlText = "font color = \" # FF0000 \ "> Unknown" + "EROARE </ font>";

}

}

form.sendBtn.addEventListener (MouseEvent.CLICK, SendMessage);

Accentul acestei secţiuni va fi pe SendMessage şi sendHandler funcţii. SendMessage Funcţia atribuie variabilele care sunt trecut la PHP,instanţiază claselor necesare, şi stabileşte ascultătorii eveniment.

Funcţia SendMessage (e: MouseEvent): void {

 variabile var: URLVariables = new URLVariables (); variables.name = nameStr; variables.subject =subjectStr; variables.msg = messageStr;

 var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.method = URLRequestMethod.POST;urlRequest.data = variabile;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

85 of 362 11/9/2

Page 86: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 86/362

 

 var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, sendHandler);loader.load (urlRequest);

}

Apelarea PHP

Apelul la PHP este rupt în trei clase: URLVariables, URLRequest, şi URLLoader clase, locurile de muncă de care trebuie să instituie uncontainer pentru datele din formular de contact, a face un obiect cerere, şi în cele din urmă apelul fişierul PHP.

URLVariables clasa stochează datele formularul de contact într-un format obiect name.value, care este apoi ataşat la de date proprietateURLRequest.

URLRequest stabileşte o metodă de cererea folosind statice POST proprietate a URLRequestMethod clasă, care spune dacă Flash pentru atrimite datele din EEG sau POST format. EEG trimite datele din ataşată la sfârşitul URL-ului:

file.php? vari valuei = & var2 = value2

POST trimite datele din cerere, care, în cele mai multe cazuri este mai sigur.

Ultima clasă folosite în acest formular de contact este URLLoader. Aceasta clasa adaugă ascultător cazul în care se numeşte atunci când PHP escomplet încărcată, precum şi orice răspunsul aşteptat a fost returnat. Aceasta clasa de asemenea, face un apel către de încărcare () Metoda,care trece de-a lungul o trimitere la URLRequest. Acest lucru face ca în cele din urmă apelul la PHP şi trece de-a lungul variabilele formularul contact le-aţi alocat. Asta este tot ce este necesar pentru a configura şi de a face apel la PHP

A lua legatura cu Stivuitoare formă eveniment

Următorul pas în acest proces este de a crea de tratare a evenimentelor care se numeşte atunci când PHP trimite un răspuns.

Funcţia sendHandler(E: Event): Void {

 var loader: URLLoader = URLLoader (e.target);

 variabile var: URLVariables = new URLVariables (loader.data);

dacă(Variables.resultCode == "trimis")

{

form.statusTxt.htmlText = "<font color=\"#009 Email 933\">" + "a trimis, vă mulţumesc </ font>.";

}

altceva dacă(Variables.resultCode == "ERROR")

{

form.statusTxt.htmlText = "<font color=\"#FF0000\"> e-mail" + "nu a trimis, vă rugăm să încercaţi din no</ font>.";

}

else {

form.statusTxt.htmlText = "<culoarea fontului = \M# FF0000 \M> NecunoscutM + "EROARE </ font>";

}

}

Veti observa repede că URLLoader clasă este folosit din nou, dar de data aceasta pentru a regăsi răspunsul PHP. Aceasta este apoi plasat înURLVariables clasa a scoate rezultatul din răspunsul global. PHP este configurat pentru a răspunde pur şi simplu cu un SENT sau EROARE drăspuns, cu toate acestea, se utilizează, de asemenea, o altfel declaraţie pentru a prinde orice răspunsuri necunoscut, dintre care unele ar puteinclude erori de reţea sau simple erori în analiza codul PHP.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

86 of 362 11/9/2

Page 87: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 87/362

 

O componentă Label este situat în formularul de contact MovieClip, care este în cazul în care răspunsul este trimis pentru utilizator să vadă.Într-un scenariu mai avansate v-ar reveni cel mai probabil, un număr de rezultat şi se lasă răspunsul textul în Flash, care ar permite capacitatea deadapta răspunsurile la anumite limbi, de asemenea, numit de localizare.

Cu ActionScript configurat, puteţi trece la codul PHP: <? Php

error_reporting (0); / / dezactiva toate set_time_limit de raportare a erorilor (120); / / să rulezescript-ul pentru nu mai mult de 2 minute

$ EmailTo = "[email protected] ";

$ Nume = $ _POST ['nume']; $ de la = $ _POST ['fromEmail']; $ subiect = $ _POST ['subiect']; $ msg = $ _POST ['msg'];

if (empty ($ _POST)!) {

$ Headers = ""; $ headers .= "";

j, Y ", de timp ()); / / Ia data de astăzi" Mai jos este informaţii de contact şi vizitatori

$ Data = data ("I $ email_info .= mesaj. \ N \ n", $ email_info .= $ email_info .= $ email_info .= $email_info .=

"Info vizitatori: \ n";

- \ N "

"Nume:". "Data trimiterii:

$ Din. "\ N"; "$ data.." \ N \ n ";

$ Email_info .= "Mesajul \ n";

$ Email_info .= "----------------------------------------- \ n ";

$ Email_info .= "". $ Msg. "\ N";

/ / Mail anteturile, nu alterează

$ Mailheaders = "From:". $ Din. "<". $ Nume. "> \ N"; $ mailheaders .= "Reply-To:". $ Din. "\ N \ n";

dacă(Mail ($ emailTo, $ subiect, $ email_info, $ mailheaders))

{

de imprimare "resultCode = SENT";

}

else {

de imprimare "resultCode = EROAREM;

}

}

Mailing în PHP

Cele mai multe din această PHP este similar cu ceea ce aţi lucrat cu în secţiunile anterioare, cu unele excepţii, desigur. Excepţia cea mai notabilăeste introducerea e-mail () funcţie, care are o serie de argumente:

e-mail ($ catre, $ subiect, $ emailBodyInfo, emailHeaders $);

Primele două sunt pe e-mail pentru a trimite la şi subiectul e-mail, care este destul de standard. Ultimele două sunt cele mai importante: $EmailBodyInfo conţine conţinutul dvs. de e-mail, şi $ EmailHeaders defineşte fişierul ca un e-mail. Această variabilă deţine informaţii derutare, răspunde-la, şi toate celelalte pe e-mail specifice variabile care un server de e-mail caută.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

87 of 362 11/9/2

Page 88: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 88/362

 

Globals

Ai atribui variabile să deţină datele din trecut în Flash, care se realizează prin utilizarea la nivel mondial $ _POST Detalii de matrice. GLOBALS PHP se ocupa de informaţiile site-ul de ansamblu şi de valorile pe care orice script-ul are acces la. Tu du-te peste motivele pentru care globalspoate fi o abordare greşită, în capitolul de securitate.

Revenind la e-mail script, utilizează la nivel mondial $ _POST date variabile pentru a accesa variabilele din trecut de la Flash.

$ EmailTo = "[email protected]"; $ Name = $ _POST ['nume']; $ de la = $ _POST ['fromEmail']; $ subiect $ _POST ['subiect']; $ msg = $ _POST ['msg'];

Asta-i tot codul care este necesar pentru a dezvolta o formă de contact pe deplin funcţional folosind Flash şi PHP, puteţi extinde pe acest exemplusă dea formularul de contact funcţionalitate mult mai mult. Câteva lucruri să se gândească despre adăugarea ar fi un proces de validare mai robumai multe câmpuri formă, şi, eventual, mai multe răspunsuri informativ pentru utilizator.

Ţineţi cont de securitate

Un element foarte important de reţinut despre acest exemplu, formular de contact este codul nu-şi onorează procedurile de securitate şi de fapt,permite utilizatorului să treci orice date la PHP. Un exemplu mai robust şi de a trăi ar necesita un nivel mult mai puternică de securitate, totuşi, înscopuri demonstrative de securitate generală a fost lăsat pe dinafară.

Mai des decât nu veţi dori să aibă o porţiune securizat la un si te Web. Un exemplu foarte popular de aceasta ar fi o secţiune reexaminare pentru ufotograf în cazul în care un client se poate loga in si uita-te la fotografii.

Partea formă de această cerere este aproape identic cu formularul de contact. Ai nevoie de o casetă Nume de utilizator şi parola şi un butonRemitere la foc în largul rutina tratare a autentificare.

Aici este un aspect eşantion care pot fi găsite în fişierul de pornire, sau aveţi posibilitatea să îl creaţi de la zero.

Numele exemplu, pentru acest exemplu sunt prezentate în Tabelul 5.1.

Tabelul 5.1

Componente Formular pentru Modulul Intra in

usernameTxt Nume de utilizator care urmează să fie conectat în

passwordTxt Parola pentru a fi încercat

resetBtn Butonul Reset, şterge câmpurile

loginBtn Butonul Login, incendiu loginHandler

Acum, că aveţi formularul vizual complet puteţi trece pe la ActionScript, ceea ce face ca forma func ţională.

Codul de schelet

În exemplele anterioare, te-ai uitat la toate de cod într-o secţiune de lungă, dar uneori care pot fi copleşitoare. Privind la scheletul de cod vă oferămodalitate rapidă de a evalua variabilele programului, funcţii şi alte elemente.

Aici este scheletul de cod pentru modulul de autentificare: stop (); / / opri playhead

var phpFile: String = "http://localhost/ch04/login.php"; Formă var: MovieClip = loginMC; var loggedin:Boolean = false;

loginHandler funcţie (e: MouseEvent): void {...} resetHandler funcţie (e: MouseEvent): void {...}clearIndicators function (): void {...} sendHandler funcţie (e: Event): void {. ..}

form.usernameTxt.tablndex = 1; form.passwordTxt.tablndex = 2; form.resetBtn.tablndex = 3;form.loginBtn.tablndex = 4;

form.passwordTxt.displayAsPassword = true;

form.resetBtn.addEventListener (MouseEvent.CLICK, resetHandler); form.loginBtn.addEventListener(MouseEvent.CLICK, loginHandler);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

88 of 362 11/9/2

Page 89: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 89/362

 

Intra in Stivuitoare eveniment

Similar cu exemplul formularul de contact, ave ţi nevoie pentru a atribui Stivuitoare eveniment care se ocupă de autentificare, de compensare, şischimbări UI pentru modulul de conectare.

Tratare a evenimentelor este primul loginHandler, care este responsabil de asteptare serverul de date şi asigurarea valid este transmis laserver. Sarcina sa este de a atribui ultima rutina de tratare pentru evenimentul rezultat.

loginHandler funcţie (e: MouseEvent): void {

clearIndicators ();

 var ghidul de: String = form.usernameTxt.text; treci var: String = form.passwordTxt.text; allFields var:Boolean = true;

dacă (user.length <2) {

allFields = false;

form.userRequiredIndicator.alpha = 1,0;

}

dacă (pass.length <2) {

allFields = false;

form.passRequiredIndicator.alpha = 1,0;

}

dacă (allFields!) {

form.statusTxt.htmlText = "font color = \" # FF0000 \ "> Nume de utilizator" + "şi parola necesare </font>!"; returnare;

}

variabile var: URLVariables = new URLVariables (); variables.user = ghidul de; variables.pass = treci;

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.method = URLRequestMethod.POST;urlRequest.data = variabile;

var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, sendHandler);loader.load (urlRequest);

}

Această manipulare incepe prin atribuirea campurile nume de utilizator şi parola pentru a variabile interne. Aceste noi variabile sunt apoi verificde lungime valabile, care stabileşte dacă este corect allFields variabilă. Acest allFields variabilă este utilizată pentru a determina dacămesajul de eroare ar trebui să fie afişată şi funcţia ar trebui să fie ieşit. Dacă allFields nu este setat puteti stabili în continuare apelul la serverAceastă porţiune este identic cu cel din exemplul formularul de contact. De fapt, veţi observa repede ca ActionScript are un format foarte similarepentru toate tipurile de încărcare şi trimiterea de date.

Incarcatoare viitoare cand se va concentra pe este clearHandler, care este atribuit resetBtn. Rolul său este de a elimina toate câmpurileformularului şi să facă un apel la clearlndicators funcţie, care te uiţi la într-o clipă.

Funcţia resetHandler (e: MouseEvent): void {

form.usernameTxt.text = ""; form.passwordTxt.text = ""; form.statusTxt.htmlText = "";

clearIndicators ();

}

clearIndicators Funcţia schimbă opacitatea alfa dintre pictogramele care pot fi găsite la dreptul de numele utilizatorului şi parolaTextlnput componentelor în fişierul starter. Dacă creaţi acest modul de la zero, cel mai probabil v-ar omite această funcţie şi apelul la aceasta înresetHandler.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

89 of 362 11/9/2

Page 90: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 90/362

 

clearIndicators function (): void {

form.userRequiredlndicator.alpha = 0; form.passRequiredlndicator.alpha = 0;

}

Conductorul ultima necesare pentru acest modul este sendHandler, care se numeşte atunci când codul de PHP trimite înapoi un răspuns.

sendHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data);

dacă (variables.resultCode == "LOGGED_INM) {

loggedin = true; gotoAndStop (2);

}

else if (variables.resultCode == "NOT_LOGGED_IN") {

form.statusTxt.htmlText = "<culoarea fontului = \M# FF0000 \M>M+ "Nume de utilizator / Parola nu estecorect </ font>.";

}

}

Răspunsul a trecut de la PHP este evaluat pentru a determina dacă utilizatorul este valabilă şi dacă sau nu pagina de securizat ar trebui să fieafişate.

dacă (variables.resultCode == "LOGGED_IN") {

loggedin = true; / / user conectat,

gotoAndStop (2); / / proba are pagină sigură pe rama 2

}

else if (variables.resultCode == "NOT_LOGGED_IN") {

form.statusTxt.htmlText = "<font color=\"#FF0000\">" + "Nume de utilizator / Parola nu este corect </font>.";

}

Presupunând că utilizatorul este logat, setaţi un loggedin variabilă şi a trece la al doilea frame, care în exemplu este o secţiune de top-secret, acum se arată în Figura 5.2. Exemplu dvs. cel mai probabil va avea un motiv mult mai important sa fii autentificat pentru, dar poate nu.

Figura 5.2

Pagina exemplu, securizat, care este vizibilă numai în cazul în care utilizatorul este conectat în

U Login.swf 000

Vezi fişier de control depanare

Exemplu: Intra in modulul

Bine aţi venit lo parte din secretul această demonstraţie, care este a ccesibil doar cu o usernarrm val abil si parola.

O cerere reală ar putea avea unele chestii cooler disponibile în acest moment.

Server pentru integrarea modulului de autentificare

Codul PHP pentru modulul de conectare este următoarea parte în acest proces. <? Php

error_reporting (0); / / dezactiva toate de raportare a erorilor

$ User = $ _POST ["utilizator"]; $ treci = $ _POST ['treci'];

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

90 of 362 11/9/2

Page 91: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 91/362

 

/ Răspuns parolă / probă, în mod normal / / ar fi trimis din baza de date

$ StoredPassword = "83e4a96aed96436c621b9809e258b309";

if (empty ($ _POST)!) {

if ($ ghidul de == "clienţilor" & & md5 ($ pass) == $ storedPassword) {

de imprimare "resultCode = LOGGED_IN";

}

else {

de imprimare "resultCode = NOT_LOGGED_IN";

}

} ?>

Concentrarea în această secţiune este pe $ _POST de date şi check condiţionată pentru a determina dacă parola este corectă sau nu. Acest rezultaeste apoi trimis înapoi la Flash, unde este folosit pentru a seta autentificaţi în statut şi orice altceva un utilizator valid ar vedea.

Un exemplu mai robust ar fi PHP fi evaluate pe baza unei baze de date în loc de un şir de statică. $ StoredPassword variabilă are o md5 ()hash şir. MD5 este un algoritm dispersie, care este disponibil în mai multe limbaje de programare, dintre care unul este PHP si este cel mai frecve

utilizat atunci când stocarea parolelor într-o bază de date. Veţi uita la MD5 un pic mai mult în profunzime în capitolul de securitate, dar pentrumoment cel mai important lucru de reţinut este faptul că şirul trunchiată este parola ta.

Acum aveţi un modul de conectare complet, folosind Flash si PHP. Ai putea extinde cu uşurinţă acest exemplu pentru a include integrarea bazei date şi, mai important, un nivel suplimentar de securitate.

În acest capitol aţi învăţat cum să construiască forme în Flash şi cum să le facă interactive utilizand PHP ca un proiect mai avansat aţi creat apoi ocomponentă de autentificare folosind informaţiile anterioare aţi învăţat despre dezvoltarea formă generală.

Cookies sunt foarte frecvente în navigarea pe Web. De fapt, v-ar găsi foarte greu pentru a naviga pe Internet în modul în care suntem obişnuiţi săcookie-urile dacă nu mai funcţionează. Acest capitol este modul de a lucra cu cookie-urile în ambele Flash şi PHP. Acesta acoperă încărcarea şiexpedierea de cookie-uri şi investighează modul în care o cookie este şters.

A doua jumătate a capitolului este despre obiectele partajate, care sunt cookie-urile in Flash. Ele acţionează aproape la fel ca cookie-urilebrowser-ul standard, cu unele diferenţe, care va investiga.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

91 of 362 11/9/2

Page 92: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 92/362

 

După ce aţi completat acest capitol veţi înţelege pe deplin cum să lucreze cu cookie-uri şi de ce acestea sunt importante pentru o aplicare cu succeşi experienţa utilizatorului.

A cookie este un fişier mic plasat pe computerul utilizatorului de către un server Web. Acest fişier este apoi trimis înapoi la server neschimbate defiecare dată când utilizatorul accesează serverul. Cel mai adesea un cookie va contine numele de utilizator pentru un site Web. Un cookie poate fide asemenea, utilizat pentru a salva setările utilizatorului şi a oricărei alte piese mici de informaţii.

Procesul de cookie-uri de încărcare este explicat în mai multe piese pentru a înţelege mai bine modul în care acestea funcţionează. Veţi observa căprocesul de cookie-uri de încărcare este foarte similar cu alte forme de încărcare a datelor.

 În acest capitol

Utilizarea cookie-uri în PHP

Utilizarea cookie-urile in Flash

 Înţelegere a obiectele partajate

Utilizarea cookie-uri cu PHP

Utilizarea cookie-uri cu PHP este necesară pentru a dezvolta o aplicaţie Web uşor de utilizat. Veţi găsi multe oportunitati de a pune în aplicare

sprijin de la cookie-ul de conectare la ghidul de stiluri şi multe alte întrebuinţări.

Pe măsură ce începeţi să lucraţi cu date dinamice mai des veţi dori să salvaţi porţiuni la maşina utilizatorului. Făcând acest lucru permiteprogramului să vă conectaţi în mod automat un utilizator sau modifica un stil pe baza setărilor utilizatorului.

Cookie-urile sunt salvate pentru fiecare domeniu şi director. Acest lucru înseamnă că orice pagină din acelaşi domeniu sau calea de faptul că poaciti cookie. Acest lucru este foarte util atunci când se construiesc mai multe exemple şi înseamnă, de asemenea un alt site Web nu poate citicookie-uri de pe un site diferit.

Soluţie comună pentru schimbul de cookie-uri pe un domeniu este de a crea un subdomeniu. Un cookie este doar specifice domeniului de ansambluşi ignor ă pur şi simplu poteci, parametri, şi subdomenii.

 Încărcarea unui cookie

Acum, că aveţi o înţelegere a ceea ce este un cookie, aruncăm o privire la modul de încărcare şi de a lucra cu una în PHP: Codul următor încearcă încarce un modul cookie şi a afişa răspuns, astfel cum se arată în figura 6.1.

<? Php

$ Username = "Jimmy"; if (isset ($ _COOKIE ["utilizator"])!) {Setcookie ("ghidul", $ username); deimprimare "Bine aţi venit". $ Username;

}

else {

Print "Bine ai revenit,". $ _COOKIE ["Utilizator"];

} ?>

Controalelor anterioare Codul pentru existenţa cookie "Ghidul" în matrice de cookie-uri la nivel mondial. În cazul în care cookie este găsit,utilizatorul este primit inapoi. În cazul în care cookie-ul nu este găsit, cookie-ul este setat şi utilizatorul este binevenită pentru prima dată.

$ _COOKIE variabilă este un array multidimensional, care pot contine cookie-uri diferite. Această variabilă este completat în mod automat de căPHP şi nu are nevoie de tine pentru a adăuga la acesta.

Figura 6.1

Declaraţia de imprimare aşa cum sunt afişate în fereastra browser-ului

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

92 of 362 11/9/2

Page 93: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 93/362

 

Salvarea unui cookie

Setarea sau salvarea unui cookie în PHP este foarte simplu: vă face un apel la setcookie funcţie. Primul argument este numele cookie, iar aldoilea argument este valoarea cookie. De exemplu, presupunem că doriţi să setaţi o time_logged_in cookie.

setcookie ("time_logged_in", timp ());

Oricând doriţi să salvaţi un cookie puteţi apela setcookie funcţie. În cazul în care cookie-ul există, aceasta este actualizată, iar dacă aceasta nuexista, el este creat.

Un cookie capacitatea de a se salva, depinde dacă este sau nu un utilizator permite cookie-uri.

setcookie Funcţia acceptă mai mult de două argumente, dar, de fapt necesită doar primul argument, care este numele.

Cookie expirare

În mod implicit, un cookie va expira atunci când sesiunea se termină sau ghidul inchide browser-ul. Modul în care o sesiune se termina este de ocantitate de timp predefinită de pe server. În mod implicit, această sumă este 0 secunde, deoarece sesiunea se încheie atunci când browserul se

 închide. În mod normal, voi ca dezvoltatorul nu trebuie să ştiu cât timp o sesiune durează. Tu ar fi, desigur, să fie mai interesaţi şi, dacă nu existăsau cookie-ul.

Ocazional, veţi dori să se asigure un cookie este şters după o anumită perioadă de timp. Acesta este cazul atunci când se lucrează cu date siguresau un sistem de management de conţinut. Să spunem că doriţi cookie să expire la scurt timp după cookie este creat.

setcookie ("nume utilizator", "adminDave", (time () + 7200));

Acest lucru spune browser-ul utilizatorului pentru a şterge cookie-ul la 2 ore după cookie este creat. Perioadă de expirare a unui cookie este încâteva secunde, asa ca pentru acest exemplu 7200 este de 2 ore. Un alt mod de a privi la ea este (60

* 60 * 2).

Aţi deschis vreodată browser-ul, a vizitat un site, şi au fost introduse la conţinut personalizat pe care aţi avut aplicat într-o sesiune anterioară?Aceste date au fost determinate de către un cookie salvat de pe maşina dvs., care nu a fost şters atunci când sesiunea sa încheiat.

Uită-te la un exemplu de cookie care nu expiră de trei luni. <? Php

DaysBeforeExpiration $ = 90; $ secondsInDay = 86400;

setcookie ("userStylePref", "blueTheme", (timp () + ($ * $ SecondsInDay daysBeforeExpiration));

?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

93 of 362 11/9/2

Page 94: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 94/362

 

Vei începe prin stabilirea numărului de secunde într-o zi - 86400. Apoi setul nostru $ DaysBeforeExpiration variabilă, ce este exploataţia câzile doriţi cookie să trăiască. Ultimul pas este pentru a seta cookie. Inmultiti secunde de zile, adaugă la timp () funcţie, iar acest lucru devinedata expirării.

Trei luni este doar un exemplu, puteţi seta un cookie să expire ani mai târziu. Cu toate acestea, utilizatorii au tendinţa de a curăţa până Depozit lobrowser. Deci, niciodată nu ar trebui să permită o aplicaţie să se bazeze pe existenţa unui cookie.

Ştergerea unui cookie

La un moment dat în cererea dumneavoastră veţi dori probabil să ştergeţi un modul cookie. Cu toate acestea, browser-ul Web local ca ghidul de

dvs. este pe nu permite unui server Web pentru a şterge în mod direct un cookie. În schimb, setaţi data de expirare din spatele data curentă şipractic face cookie-ul expiră. Acest lucru spune browser-ului Web pentru a şterge cookie, deoarece nu mai este în uz.

setcookie ("time_logged_in", "", (time () - 300));

Alocarea cookie-uri multiple

Procesul de atribuire cookie-uri multiple este destul de simplă. Tu faci practic apeluri multiple pentru a setcookie Funcţia asigurându-se căfiecare cookie are un nume unic.

<? Php

$ Username = "Jimmy"; $ UserID = 5; $ loggedInTime = timpul ();

setcookie ("nume utilizator", $ username); setcookie ("userid", $ UserID);

setcookie ("logged_in_since", $ loggedInTime);?>

Codul anterior stabileşte trei cookie-uri prin efectuarea trei apeluri unic la setcookie funcţie. Ai putea, de asemenea, loc setcookie apel într-o funcţie particularizată în cazul în care codul a trecut-in necesită mai multă securitate. De exemplu, aveţi posibilitatea să creaţi osaveCookie Funcţia asigură că datele sunt curat.

<? Php

saveCookie funcţia ($ nume, $ valoare, $ expira = 0) {

if ($ nume == "") {

de imprimare "Nume care nu sunt prev ăzute, cookie nu au fost salvate";

}

if ($ value == "") {

de imprimare "Valoarea nu cu condiţia, cookie nu au fost salvate";

}

setcookie ($ nume, $ valoare, $ expira);

}

$ Username = "Jimmy"; $ UserID = 5; $ loggedInTime = timpul ();

saveCookie("Username", $ username); saveCookie("Userid", $ UserID);

saveCookie("Logged_in_since", $ loggedInTime);?>

Dumneavoastră saveCookie Funcţia este folosit ca un proxy pentru a precompilate setcookie funcţie. Acest lucru vă permite să verificaţitrecut în datele şi să se asigure că acesta este completat în mod corespunzător. În exemplul anterior, imprimaţi o eroare daca numele sau valoareaeste gol. Ai putea să ia această garanţie simplă a verifica un pas mai departe prin asigurarea de date este, de fapt, un şir şi nu conţine nici unpotential periculos

cod. Pe măsură ce începe pentru a dezvolta aplicaţii Web vă va învăţa să urmeze liniile directoare rigide în ceea ce priveşte securitatea.

Acum, că aţi uitat la modul de utilizare a cookie-urile în PHP, poti sa te uiti la utilizarea cookie-urile in Flash. Procesul de utilizare a cookie-uriloin Flash este foarte asemănătoare, dar oferă unele avantaje pe care le va uita la.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

94 of 362 11/9/2

Page 95: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 95/362

 

Utilizarea cookie-urile in Flash

Cookie-urile in Flash sunt de fapt numite obiectele partajate şi atributele cotă similară a cookie-urile în PHP. Unele dintre aceste atribute includcapacitatea de a stoca cantităţi mici de date la nivel local şi de a prelua lor de către orice fişier în acelaşi domeniu de bază. La fel ca cookie-urile înPHP, în care utilizatorul este capabil de a le dezactiva pe site-ul sau la nivel global. Cu toate acestea, ele au unele diferente distincte. Un avantajmajor la obiectele partajate este abilitatea de a lega pentru a le. Acest lucru înseamnă mai multe filme au posibilitatea de a viziona fişierul şi de a alertat atunci când este actualizat. De exemplu, presupunem că aveţi un joc multiplayer şi doriţi ca fiecare client să urmărească scorul însincronizare. Cu obiecte partajate puteţi permite fiecare dintre clienti de a avea citire / scriere de acces şi ceilalţi va actualiza scorul cum se schim

Se incarca obiectele partajate

Codul de mai jos încearcă să încarce un obiect comun şi creează una, dacă aceasta nu exista. După cum puteţi vedea, de încărcare un obiect comuneste destul de simplă şi necesită doar o linie de cod. Cookie-urile în PHP nu oferă posibilitatea de a crea un nativ în cazul în care nu există, vatrebui să verificaţi pentru cookie-ul şi să-l creaţi.

 var, astfel: SharedObject = SharedObject.getLocal ("probă");

trace ("Obiectul este" + + so.size "bytes in marime");

Salvarea obiectele partajate

Procesul de economisire a unui obiect comun este, de asemenea, simplă. Începeţi prin crearea unui nou de instanţă SharedObject clasă.

var, astfel: SharedObject = SharedObject.getLocal ("probă");

După ce obiect este creat, aveţi posibilitatea să ataşaţi date la obiect partajat prin adăugarea de elemente de de date obiect, cum ar fi:

var, astfel: SharedObject = SharedObject.getLocal ("probă"); so.data.user = "clienţilor";

Puteţi apela şi reamintească faptul că blocul de cod de mai sus şi valoarea nu va fi salvată doar încă. Motivul este că aveţi nevoie pentru a alertaobiect pentru a scrie la sistemul de fişiere local apelând metoda culoare.

var, astfel: SharedObject = SharedObject.getLocal ("probă");

so.data.user = "clienţilor";

so.flush ();

Când utilizaţiflush (),

a verifica dacă

utilizatorul a dezactivat Depozit locale, folosind Manager Setă

ri(www.macromedia.com/support/documentation/en/ flashplayer/help/settings_manager07.html).

Dacă obiectul nu există, unul este creat. În unele cazuri, veţi dori să ştie dacă există obiect partajat. Mod de a realiza care este prin verificareadimensiune proprietate.

var, astfel: SharedObject = SharedObject.getLocal ("probă");

dacă (so.size == 0) {

/ / Obiect la comun nu există. trace ("Obiect comun nu exista.");

}

Presupunând că s-au întors de încercare dimensiune egală cu zero, ai şti obiect partajat nu exista. Puteţi apoi să ia acest rezultat şi să înlocuiască

linia simpla cu codul pentru a crea obiectul.

var, astfel: SharedObject = SharedObject.getLocal ("probă");

dacă (so.size == 0) {

/ / Obiect la comun nu există, so.data.user = "clienţilor";

}

Ştergerea unui obiect comun

Spre deosebire de PHP, obiectele pot fi partajate în mod explicit şters din sistemul de stocare locale. Efectuarea unui apel la clare () metodăelimină obiect partajat şi a datelor sale, dar referirea la obiect va rămâne.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

95 of 362 11/9/2

Page 96: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 96/362

 

var, astfel: SharedObject = SharedObject.getLocal ("probă"); so.data.user = "clienţilor";

trace ("Nume de utilizator este:" + so.data.user); / / clienţilor so.clear ();

trace ("Nume de utilizator este:" + so.data.user); / / nedefinite

Urma două returnează nedefinite, deoarece apelul anterior la clare () a eliminat valoarea. Aveţi posibilitatea să realocaţi acum valoarea. Cutoate acestea, nu aveţi nevoie pentru a şterge un obiect să le retrocedeze. Puteţi pur şi simplu să-l rescrie.

Aducerea pe toate împreună

Acum, că aţi uitat la fiecare concept individ, pun totul într-un ultim exemplu. Acest exemplu se va crea, salva, edita şi şterge un obiect comun.

Începeţi prin deschiderea fişierului de pornire, care poate fi găsită pe site-ul Web al cărţii, care a fost pre-construite pentru acest exemplu.

După deschiderea fişierului în Flash, deschideţi panoul de acţiune (apăsaţi F9 sau Alt + F9) şi se adaugă ActionScript.

var soDomain: String = "proba"; var, astfel: SharedObject = null;

Funcţia loadObject (): void {

aşa = SharedObject.getLocal (soDomain); urme ("la comun de Object Loaded");

}

Funcţia addDataToObject (nume: String, valoare: String): void {

în cazul în care (aşa == null) {

trace ("Tu trebuie să se încarce mai întâi obiectul comun");

}

so.data [nume] = valoare; so.flush ();

trace ("Valoarea adăugată:" + so.data [nume]);

}

deleteObject function (): void {

în cazul în care (aşa == null) {

trace ("Tu trebuie să se încarce mai întâi obiectul comun");

}

so.clear ();

trace ("Object comun elimină");

}

Funcţia readObject (nume: String): void {

în cazul în care (aşa == null) {

trace ("Tu trebuie să se încarce mai întâi obiectul comun");

}

else {

trace ("la comun de valoare obiectului:" + so.data [nume]);

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

96 of 362 11/9/2

Page 97: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 97/362

 

Funcţia loadHandler (e: MouseEvent): void

loadObject (); saveHandler funcţie (e: MouseEvent): void

addDataToObject ("test", valueTxt.text); deleteHandler funcţie (e: MouseEvent): void

deleteObject (); readHandler funcţie (e: MouseEvent): readObject void ('test');

loadBtn.addEventListener (MouseEvent.CLICK, loadHandler); saveBtn.addEventListener (MouseEvent.CLICK,saveHandler); deleteBtn.addEventListener (MouseEvent.CLICK, deleteHandler); readBtn.addEventListener(MouseEvent.CLICK, readHandler);

Cele mai importante părţi ale acestui cod sunt addDataToObject funcţia şi două variabile, care sunt referiri la obiect comun: numeleproprietăţii, precum şi valoarea de stocare.

var soDomain: String = "proba"; var, astfel: SharedObject = null;

Funcţia addDataToObject (nume: String, valoare: String): void {

}

addDataToObject funcţia de verificări pentru a vă asigura că obiect partajat este încărcată corect şi încercări de a atribui valoarea folosind unobiect dinamic.

Funcţia addDataToObject (nume: String, valoare: String): void {

în cazul în care (aşa == nedefinit) {

trace ("Tu trebuie să se încarce mai întâi obiectul comun");

}

so.data [nume] = valoare;

so.flush ();

}

După ce addDataToObject funcţie este numită, il puteti citi in obiect comun de a face pur şi simplu un apel la obiect de date.

trace ("Data la comun de obiect:" + so.data.test);

Asta este tot ce este de lucru cu obiectele partajate în Flash. Stii acum cum să se încarce, salva, şi a şterge obiectele partajate şi cookie-urile in Flash

 j ^ obiecte JShared J poate fi, de asemenea, utilizat într-un cadru de la distanţă, dar necesită un sistem mai avansat.

Descoperirea beneficiile de a utiliza cookie-uri PHP

Acum, că aţi uitat la utilizarea cookie-urile în ambele PHP si Flash, uita-te la câteva motive pentru care folosirea cookie-urile în PHP este o opţiunmai bună. Atunci când se lucrează în Flash-ar părea că obiectele partajate sunt cea mai bună opţiune, dar acestea nu sunt întotdeauna.

Cookie-urile în PHP oferă posibilitatea de a le împărtăşi intre cele doua site-uri HTML si Flash. Obiecte partajate sunt accesibile numai dininteriorul Flash, care pot fi atât bune şi rele. Partea buna este ca nici o altă aplicaţie poate schimba cookie-urile. Pe partea rea, de asemenea,

 înseamnă

nu le pot partajaşi a ad

ăuga un nivel de coeren

ţăîntre aplica

ţii.

Există o soluţie destul de comune la această problemă, însă, şi că este de a folosi cookie-uri periodice in Flash prin care trece-le printr-unintermediar PHP.

În primul rând, uita-te la codul PHP care va trece datele cookie înapoi la Flash.

<? Php

if (isset ($ _POST ['act']) & & $ _POST ['act'] == 'getcookie ") {

if (isset ($ _COOKIE [$ _POST ['cookiename']])) {

de imprimare "resp =". $ _COOKIE [$ _POST ['Cookiename']];

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

97 of 362 11/9/2

Page 98: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 98/362

 

}

else {

de imprimare "resp =". "Cookie_not_found";

}

} ?>

Acest cod asigură buna POST Datele sunt transmise înainte de a continua. Presupunând că datele valid este transmis, următorul pas este de adetermina dacă cookie-ul are, de fapt, există. Utilizaţi un test condiţionată pentru a determina dacă datele cookie sau un mesaj de eroare va fi trimla Flash.

if (isset ($ _COOKIE [$ _POST ['cookiename']])) {

de imprimare "resp =". $ _COOKIE [$ _POST ['Cookiename']];

}

else {

de imprimare "resp =". "Cookie_not_found";

}

Oricum, variabila a trecut în Flash este "Resp". În acest fel puteţi cu uşurinţă programul ActionScript să se ocupe de răspuns în consecinţă.

Motivul pentru care le utilizaţi isset () în primul dacă declaraţie este atât de PHP nu poate trimite accidental un anunţ Flash alertareavariabila nu este trimis. Acest tip de aplicaţie este un candidat foarte bun pentru XML, care este explicată în detaliu în capitolul 3. XML ar face aclucru decât valoarea pe care sunt interesaţi vor fi returnate. Pentru acest exemplu simplu, va continua cu o întoarcere de imprimare standard, bazpe.

Acum, că aveţi PHP în loc puteţi trece pe la ActionScript. ActionScript face un apel la PHP şi se aşteaptă o prajitura sau o eroare care urmează să freturnat.

var phpFile: String =

"http://localhost/ch05/cookies/loadCookie.php";

variabile var: URLVariables = new URLVariables (); variables.act = 'getcookie'; variables.cookieName ='probă';

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.method = URLRequestMethod.POST;urlRequest.data = variabile;

var loader: URLLoader = new URLLoader ();

loader.addEventListener (Event.COMPLETE, serverHandler); loader.load (urlRequest);

serverHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data);

dacă (variables.resp == "cookie_not_found") {

trace ("Nu a solicitat Cookie Found");

}

else {

trace ("Date Cookie:" + variables.resp);

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

98 of 362 11/9/2

Page 99: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 99/362

 

}

Apelul global la server este similar cu celelalte apeluri în această carte. Concentrarea asupra acestui apel este de variabilele trecut la PHP şirăspunsul. Puteţi utiliza URLVariables clasă pentru a atribui actul şi cookiename variabile. act variabilă PHP spune că cererea dvs. estevalidă, şi cookiename variabilă conţine numele cookie pe care il cautati pentru.

variabile var: URLVariables = new URLVariables (); variabile. Act de = 'Getcookie'; variabile.cookiename= 'Proba';

La fel ca exemple Buldoexcavatoare altele, aveţi nevoie pentru a atribui o funcţie să se ocupe de răspuns server. Aceasta este funcţia care este numdupă PHP trimite înapoi nici cu cookie-ul sau un mesaj de eroare. Începeţi prin utilizarea URLLoader clasă pentru a obţine datele conţinute în

răspuns. Ai face apoi un apel la URLVariables clasă, care returnează un obiect de variabile de răspuns. În acest caz, pe care il cautati pentru"Resp" proprietate. În primul rând, verificaţi pentru a vedea dacă răspunsul este "Cookie_not_found", Care este auto-explicativ. Mai multdecât probabil, cookie-ul va fi setat şi declaraţia urme doilea ar primi numit, dar nu este niciodată de programare bine să-şi asume acest lucru.Acesta este motivul pentru care declaraţia se adaugă condiţionată.

serverHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data);

dacă (variables.resp == "cookie_not_found") {

trace ("Nu a solicitat Cookie Found");

}

else {

trace ("Date Cookie:" + variables.resp);

}

}

Puteţi lua acest exemplu la pasul următor prin setarea cookie dacă nu este găsit, sau chiar treci de-a lungul unei matrice sau obiect de nume cookpentru a încărca rapid toate cookie-urile pentru un site. AMFPHP, pe care le vor analiza în capitolul 8, ar fi o modalitate foarte bună de a încărca îcookie-uri multiple.

După cum puteţi vedea acum, există mai multe modalităţi de a lucra cu cookie-urile în ambele PHP si Flash. Ai dezvoltat chiar şi un mod comuncare ambele PHP şi Flash pot partaja aceleaşi date cookie.

Schimbul de date cookie are inca limitarea că PHP trebuie să fie pe domeniul pe care îl încarcă de la cookie-urile. Un lucru să fie conştienţi de cu acescript este faptul că acest exemplu simplu nu este verificarea de intrare a trecut la PHP. Tu ar dori cu siguranţă să adauge că la o cerere din lumeareală.

În acest capitol aţi învăţat cum să încărcaţi şi să lucreze cu cookie-urile în Flash şi PHP. Pentru a începe aţi învăţat cum să încărcaţi un modul cookexistent de la maşina utilizatorului şi apoi a învăţat cum să modifice şi să actualizeze că cookie.

Tu ar trebui să înţeleagă acum cum să lucreze cu cookie-uri în Flash şi PHP şi de a înţelege de ce sunt importante atunci când vă dezvolta oaplicaţie.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

99 of 362 11/9/2

Page 100: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 100/362

 

 În această parte

Capitolul 7

Me nţinerea de securitate în timp ce Lucrul cu intrare Ghid de utilizare

Capitolul 8

Utilizarea Sockets

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

100 of 362 11/9/2

Page 101: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 101/362

 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

101 of 362 11/9/2

Page 102: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 102/362

 

Working cu ghidul de intrare se concentrează pe cele mai bune practici de stocare de date şi care se întorc în acelaşi timp menţinerea unui nivel

ridicat de securitate.

Acest capitol este împărţit în secţiuni care se concentrează asupra unui aspect specific de prelucrare a datelor de utilizator. Acest lucru nu este unghid pas-pe baza de lucru cu datele utilizatorului, care pot fi găsite în Capitolul 4. În schimb, acest capitol se concentrează pe specificul desecuritate atunci când manipulează datele.

Subtopic acoperite în acest capitol este de lucru cu şi înţelegerea sandbox in Flash. Practic, sandbox este un container care fiecare aplicatiefunctioneaza, dar secţiunea intra in detaliu mai mare şi oferă exemple vizuale pentru a explica mai bine sandbox şi modul în care aceasta afecteazaplicaţii.

 În acest capitol

Utilizarea precauţie cu datele introduse de utilizator de curatare de date sau ghidul Stocarea datelor date Întoarcerea

 Înţelegere a de se curitate Flash sandbox

Practicile prevăzute în prezentul capitol pot fi adaptate la cererile viitoare voi dezvolta. Menţinerea unei cereri de securizat este la fel de importaca blocarea de acasă înainte de a pleca. O cerere va funcţiona în continuare punct de vedere tehnic în cazul în care nu este sigur. Cu toate acestea,durata de viata a acestei cereri nu este sigur. Sunt multe aspecte de securitate într-o cerere: Detalii de igienizat, login-uri sigure, de stocare defişiere, şi exploatabilitate, pentru a numi câteva. În acest capitol, accentul este securitatea introduse de utilizator. Ghid de intrare este orice bucat ăde date utilizatorul poate modifica. Această listă include date de cookie-uri, login-uri, sesiuni, şi încărcarea fişierelor.

Datele utilizatorilor se extinde mult dincolo de o casetă text simplu pe un formular de contact. Acum, că ştii ce este considerat de date introduse dutilizator, probabil te intrebi cum ceva la fel de inofensiv ca un sistem de fişier de încărcare prezintă un risc de securitate.

Ca şi în cele mai multe de securitate, acesta nu este tehnologia sau caracteristică care este defectuoasă, dar modul în care aceasta este pusă înaplicare.

De manipulare în condiţii de siguranţă încărcarea fişierelor 

De exemplu, să presupunem există un fişier de bază PHP care acceptă încărcări de fişiere şi stochează informaţii despre un fişier încărcat într-o bade date.

Prima întrebare care se pune este ce parti ale acestei aplicaţii simple sunt problemele potenţiale de securitate?

■ Forma în sine?

■ Componenta de baze de date?

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

102 of 362 11/9/2

Page 103: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 103/362

 

■ Fişierul a fi încărcat?

Verificarea pentru extensii de fişier valid

Fişierul încărcat ar fi punctul cel puţin evidentă de o încălcare a securităţii, dar uita-te la unele mostre de cod, care explică modul în care se poatefoarte usor deveni o problemă. O încercare foarte frecvente, dar înşelătoare pentru a asigura procesul de încărcarea fişierului este de a verificapentru o extensie validă, cum ar fi:

<? Php

$ File = $ _FILES [0];

"]," ifCstrposCifileE'name jpg "). == false!)

{

dacă (fişier move_uploaded_file ($ ['tmp_name'],! "Depozit / ')) {

de imprimare "File încărcat";

}

} ?>

După cum puteţi vedea, codul este configurat pentru a căuta . Jpg extensia fişierului. strpos funcţie este utilizată pentru a reveni indicele sa

de plasare din valoarea verificate, care în acest exemplu este Jpg.. La prima vedere acest lucru pare destul de sigur şi ar trebui să oprească încărcarea malware, dar nu. Acest cod nu grijă în cazul în care extensia fişierului este, deci ai putea avea imagename.jpg.php ca nume de fisiesi ea va trece. Chiar mai rău, dacă aceasta este pentru o galerie foto accesibile publicului, că dosarul poate executa PHP primare, deoarece este depe server. Abilitatea de a executa cod arbitrar devine o preocupare majoră atunci când utilizatorul rău intenţionat este capabil de a plasa coduldirect pe un server nu bănuieşte nimic.

Imaginaţi-vă o imagine fiind încărcat, care este de fapt un fişier cu cod PHP, cum ar fi următoarele:

<? Php

error_reporting (E_ALL); phpinfo ();

mysql_connect ('localhost', 'anyuser', 'anypass');?>

De raportare a erorilor poate fi for ţat în afara prin dezactivarea display_errors directivă în php.ini fişier. Acest lucru asigur ă de raportare aerorilor nu poate fi accidental întors pe.

Atunci când este accesat prin intermediul browser-ului, acest cod ar permite toate erorile să fie vizibil, afişa informaţii server de vitale, forţa o încercare nu a reuşit să bazei de date expunerea adevărata cale de fişier, după cum puteţi vedea în figura 7.1, şi de a determina dacă există o bazăde date.

Folosind o modalitate mai bună de a verifica pentru extensiile fisierelor 

Revenind la exemplul simplu de încărcare, să adăugăm mai multe măsuri de securitate robuste. Schimbare majoră la codul este dacă declaraţiecare verifică pentru o extensie de fişier valid. În loc de a privi pentru existenţa de un tip de fişier, se pare, la sfârşitul numelui de fişier şi preiaextensia reală corectă.

dacă(Strrpos ( $ File ['nume'], "jpg".) == Fals!) {

}

Figura 7.1

Mesaj de eroare atunci când a revenit bază de date este setat în mod inten ţionat să eşueze în conexiune

phpinfoQ Windows Internet Explorer 0ËÏ0 ( CJT-, "B http:/jf 192.168.1.107/dients/Book/Red5tar/example/ch% 2006yexploit/Sample.php v| * f; | X: php changelog P -

& IFR JG phpinfoQ O '0 # "[i ^ Page - ^ Unelte▼

 _StKVfcK | . ifcKVtK_FJAMt J IU2. mo. i.

 _SERVER ["SERVER_PORT"] SO

SERVER ["SERVER_SIGN ATURE"] < Add RES S> Ap. ache/1.3.33 Seiver la 192.168.1.102 Por t 8Q </ ADRESA =>

. SERVER

rSERVER_SOFTWARE "]

Apache/1.3.33 (D arwin! PHP/5.2.0 mod_ssl/2.8.24 OpenSSUO.9.71

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

103 of 362 11/9/2

Page 104: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 104/362

 

 _SERVER

[HG ATEWA Y_l NTE R F E AC "]

CGI/1.1

SERVER ["S ERVE R_PROTOCOL" "] HTTP/1.1

 _S E RVERf'REQU E ST_M ETH 0 D "] EEG

S _ E RVE R ["Q U ERY_STRI H G"] nici o valoare 

 _SERVER ["REQUEST_URI"] Id-ul adicăNopti / B OOK / Re d stele / mp EXA I e / ch% 2 00 6 <exp I. OIT / S amperi I e. ph p

 _S E RVE R ["SCRIPT_HAM E" 1 Id-ul adicăNopti / B OOK / Re d stele / mp EXA I e / ch 0 B / EXP I OIT / S amperi I e. p h p

 _SERVER

f PATH_TRAN Programat "]

/ Li brary/ WebServe R / D o eu m ents / cli e SNT / Bo ok/ Re dSta r / m EXA pi e / ch 0 6/expl o itiSa mp I ep hp

 _SERVER ["PHP_SELF"] fclients / Rezerva ţ i / Redstar / exemplu / c h 06/exploitiSample.php

 _SERVER ["REQUEST_TIME"] 1197259271

PHP Licenţă

Acest program este software liber, îl puteţ i redistribui ancora modifica sub termenii licenţei PHP publicat de trie PHP Group şi inclus în distribuţ ia în fisierul: LICENŢĂ

Acest program este distribuit în speranţa că va fi folositor, dar FĂRĂNICI O GARANŢIE: nici chiar garanţ ia implicită de VANDABILITATE sau POTRIVIRE PENTRU UN ANUMIT SCOP.

Dacă nu aţ i primit o copie a licenţei PHP, s au aveţ i orice întrebări cu privire la licenţ iere PHP, vă rugăm să contactaţ i [email protected].

Atenţie: mysqf_connect () [function.mysql-conecta]: Acces interzis pentru "anyuser" ghidul @ 'localhost' (folosind parola: DA) in / LibraryA / VebServer / Documente / clienti / BookyReciStar / exemplu / ch06/exploit/Sample php pe linia 7.

La prima vedere se pare că nimic nu sa schimbat, dar, de fapt, le-a. strpos Funcţia a fost înlocuit cu mai puţin frecvente strrpos, care cautătipul de fişier începând de la sfârşitul şirului şi se deplasează spre partea din faţă. Acest lucru asigură extensia finală este găsit şi nu unul îngropa

 în numele.

Ca şi în cazul codului, în general, de securitate pot fi extinse, iar acest exemplu permite o mare de expansiune. Aici este o metoda mult mai dinamde a căuta pentru tipurile de fişiere valide care pot fi uşor plasat într-un proiect existent sau a unui proiect nou-nouţ.

<? Php

Funcţia checkForFileType ($ file, $ tip) {

$ FileTypePos = strrpos ($ file ,'.'); dacă ($ fileTypePos === false) return "Fişierul nu a fostvalabil.";

dacă(Substr ($ file, ($ fileTypePos +1), strlen ($ file)) == $ Tip)

întoarcere "tip de fişier valid"; altceva

întoarcere "tip de fişier nevalid sau malware detectate.";

}

checkForFileType ("sample.jpg", "jpg");?>

Codul de mai sus este o funcţie particularizată care acceptă două argumente. Primul argument se referă la dosar pentru a valida, iar a doua esteextinderea la recunoască. Această soluţie extensibilă returnează un şir de a stabili dacă tipul de fişier este găsit sau nu. Mai puţin comună este atreia posibilitate, un meci nul. Un meci nevalid înseamnă dosarul a trecut-in nu are un nume de fişier valid, la toate.

Acum, că porţiunea de încărcare a codului este securizat, următorul punct de securitate este forma în sine. Această parte va fi cel mai probabilformat din fişier de încărcare Dulapuri cu caseta şi de intrare pentru date suplimentare. În general, un atac automat (calculator configurat pentru aexploata site-uri Web) este dezvoltatorii de securitate cauză sunt cele mai interesate cu, ci o forma de intrare in Flash pot prezenta, de asemenea, urisc de securitate.

Verificarea de intrare valabil

Verificarea termenului de valabilitate a Dulapuri cu intrare este un început bun. Un exemplu de control de intrare în ActionScript este ceva cum afi următoarele:

dacă (lungime (fileNameTxt.text)> 0) {

/ / Numele fişierului este valabil

}

Aceasta este verificarea pur şi simplu fileNameTxt variabilă pentru o lungime care este mai mare decât 0, adică caseta de intrare are o anumităcantitate de text în el. Acum, că caseta de intrare este cunoscut a fi valabil, un apel la server se face şi acest lucru duce la PHP fiind numit. PHPpentru un exemplu simplu neasigurate ar putea arata ceva de genul asta.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

104 of 362 11/9/2

Page 105: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 105/362

 

<? Php

$ Nume = $ _POST ['filename']; / / baze de date meciului merge aici ...

mysql_query ("INSERT INTO Încărcări (nume) VALUES (" $ nume..?>

Aceasta este practic a lua numele de fişier şi introduceţi-l direct în baza de date. Aţi putea fi întrebaţi în acest moment cum în cazul în care fişierueste validat in Flash acest lucru ar putea fi o problemă de securitate. Problema nu este în datele din trecut în Flash, dar mai important, faptul c ăPHP ar putea fi numit de către o altă metodă. Acesta este unul dintre cele mai importante motive pentru a asigura în mod corespunzător toatepunctele unei cereri.

O alternativă mai sigură de cod anterior ar fi <? Php

$ Nume = $ _POST ['filename']; / / baze de date meciului merge aici ...

în cazul în care (numele gol ($ nume) & & strlen ($!)> 0) {

mysql_query ("INSERT INTO Încărcări (nume) VALUES (" $ nume..

} ?>

Acest cod nu este numai de verificare pentru o valoare validă, dar, de asemenea, asigurarea faptului că valoarea este de o lungime valabil.

dacă (! Gol($ Nume) & & strlen($ Nume)> 0)

Într-o aplicaţie reală, lumea v-ar verifica, probabil, pentru o valoare de cel puţin două sau trei personaje, dar că totul depinde de utilizareaprevăzută. Acest mic update la cod se asigură că un apel de la Flash sau orice altă metodă, vor fi asigurate.

Validarea codurile ZIP

Desigur, securizarea datelor nu se limitează la câmpuri de formular de bază. Să presupunem că este un cation parte care acceptă un cod de cincicifre ZIP atunci când utilizatorul depune o imagine. Modul de a codul poştal este de testare pentru o valoare numerică şi o lungime valabil.

<? Php

Cod poştal $ = $ _POST ['zip'];

dacă(Is_numeric($ Cod poştal) & & strlen ($ cod poştal) == 5)

{

/ / Cod postal valid găsite

} ?>

is_numeric () Funcţia accepta o variabilă ca un argument care este testat pentru a determina dacă sau nu faptul că valoarea este un număr.Această funcţie va întoarce un răspuns adevărat / fals astfel încât să poată fi utilizat cu uşurinţă într-o dacă declaraţie sau ai putea atribuirezultatul unei variabile.

Cautam valabil pentru tipurile de

Dacă doriţi să efectuaţi această validare anunturi aceeaşi bază în Flash, trebuie să utilizaţi typeof şi lungime funcţii. typeof Funcţiareturnează o valoare şir definirea a ceea ce este tipul de element-a trecut în. Această funcţie poate fi utilizat pentru mai mult numărul de validaredoar, dar func

ţioneaz

ăperfect pentru acest exemplu:

dacă (typeof (cod poştal) == "numărul" & & zipCode.toString (). lungime == 5) {

/ / Cod postal valid găsite

}

Acum, că aveţi o mai bună înţelegere a securităţii în aplicaţia dumneavoastră, următorul pas este de asanare sau curăţa mai multe date avansateinainte de a fi stocate.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

105 of 362 11/9/2

Page 106: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 106/362

 

la apli-asigura un paşaport valabil

Procesul de stocare a datelor se referă atât la utilizarea bazei de date şi o abordare mai simplă de a utiliza fişiere de text standard. Avantajul lafişierele text standard este faptul nu aveţi nevoie de acces la baza de date. Dezavantajul acestei abordări este că este o soluţie mai puţin robuste,care conduce la posibilităţi de căutare mult mai lent. Cel mai adesea v-ar folosi o bază de date, daca nu a fost o aplicaţie destul de mici care nu aunevoie de potenţialul de a scala în la o cerere mai mare.

Igienizarea de date

Primul pas la datele dezinfectare sunt acoperite în secţiunea anterioară, care este de a asigura faptul că cel puţin datele sunt valabile. Acest proce

este necesar ca diferitele funcţii care interacţionează cu o bază de date sau sistem de fişiere va crea erori destul de substanţiale în cazul în care setude date sunt folosite goale.

Procesul de dezinfectare de date ar trebui să fie realizată în PHP pentru că este întotdeauna o practică bună să-şi asume orice date a trecut-in-ul esmurdar. Acest lucru înseamnă că, chiar dacă datele au fost trimise din aplicaţia Flash ar fi putut fi falsificat în procesul de transmitere.

Datelor trimise de la Flash este usor de vizualizat utilizând Charles, care este discutat în capitolul 13. Charles poate fi folosit pentru a fi 100 la sut ăsigur că ceea ce de date e ste trimis de la Flash.

Există o serie de functii foarte utile în PHP, care pot asista în procesul de dezinfectare a datelor inainte de a fi stocate. Prima func ţie esteaddslashes () , Care va scăpa de caractere, precum ghilimele şi slash-uri în datele transmise de acesta. Următorul fragment de cod arată cumaddslashes  în mod corespunzător igienizează de date.

<? Php

$ Quote = "Sper să termin de" cool "aplicatii Flash vreodată, care va utiliza Flash şi PHP.";

?>

Crearea de interogări SQL în condiţii de siguranţă

Dacă aţi rulat codul precedent, aceasta ar genera o eroare, deoarece procesorul PHP nu permite citate în ghilimele. Cu citate multiple, nu ar ficapabili de a determina în cazul în care un şir începe şi se termină altul. Presupunem $ Citat variabilă este completat dinamic printr-un apel dla Flash. Variabilă va fi completat în mod corespunzător în timpul execuţiei, deoarece compilatorul nu validează conţinutul de pe acoperi; cu toaacestea, introducerea de date în SQL care va cauza o eroare. Chiar mai rău, în unele cazuri, şirul ar putea fi introdus parţial. Aici este un real-lumede interogare SQL în cazul în care puteţi vedea cu uşurinţă problema cu citate unescaped.

$ Sql = 'UPDATE utilizatori SET de afaceri = lui Tom Diner WHERE id ='. $ ID-ul;

Încă o dată, execută codul cu el anterior a intrat în PHP cauzeaza o eroare, dar î şi asumă acest şir este construit dintr-un $ _GET cerere. La începcererea pare a fi în siguranţă, dar Notă interogare SQL începe cu un citat simple (') şi există un apostrof în Diner lui Tom. Real apel SQL vadeveni:

Utilizatorii de afaceri $ sql = 'UPDATE SET = Tom

Acesta stabileşte în principiu orice nume de afaceri în cererea de Tom, care nu este, probabil, rezultatul destinate. Ar fi, de asemenea, foarte greu revină cu excepţia cazului în aplicare a luat copii de rezervă corespunzătoare. Acest exemplu este destul de extremă, pentru că un citat dublu estemai frecventă pentru un apel de SQL, dar puteţi vedea cu siguranta modul în care datele unsanitized ar putea cauza o zi foarte proasta pentruadministratorul de sistem.

Acum, că ştiţi cât de rău pot fi date unsanitized, mergeţi înapoi la faptul că addslashes () Funcţia şi vezi ce apelul SQL se transformă în:

$ De afaceri = addslashes ($ _GET ['nume']);

$ Sql = 'UPDATE utilizatori SET de afaceri ='. $ De afaceri. "În cazul în id = '. $ ID-ul;

Propriu-zisă sanitizate apel SQL arată ceva de genul:

$ Sql = 'UPDATE utilizatori SET de afaceri = Tom \' s Diner WHERE id = '. $ ID-ul;

Uită-te la un alt apel malformate SQL, care are rezultate drastice. Aceasta se ocup ă cu înregistrarea într-o parte securizată a unei pagini Web. Unapel SQL pentru autorizare ar arata cam asa:

<? Php

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

106 of 362 11/9/2

Page 107: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 107/362

 

$ User = "admin";

$ Treci = "parola de aici";

$ Query = "SELECT * FROM WHERE ghidul de personal = '". $ User. "Şi treci = '". $ Treci. "" ";

?>

Observaţi cum din nou SQL acceptă orbeşte valorile. Aceasta într-adevăr devine o problemă atunci când un utilizator introduce o parolă, cum ar f

$ Treci = "" SAU''='";

Rezultată apel SQL este o parolă de gol, deoarece Citate forţa să se încheie cu SQL şi SAU  îi permite să se egal. Se creează o parolă goală, ceea ce înseamnă doar numele de utilizator este de oprire pe cineva de la ce vă autentificaţi, dar de nouă ori din zece, admin este un nume de utilizatorvalid.

SELECT * FROM angajat, atunci când ghidul = "admin" şi se trece =''SAU''=''

Această simplă \ înseamnă diferenţa dintre un apel eficient SQL şi unul foarte periculos. Această funcţie este doar un mod posibil de asanare dedate.

Funcţia următoare, când se lucrează cu o bază de date, este mysql_real_escape_string, care igienizează datele înainte de a intra in aceastbaza de date. Când utilizaţi această funcţie, trebuie să facă mai întâi o conexiune la baza de date, altfel veţi primi o eroare.

Sintaxa pentru mysql_real_escape_string este destul de mult la fel ca addslashes () . Tu treci în valoarea pe care doriţi curăţate şi,

opţional, un mysql legătură într-. Dacă o legătură nu este trecut, ultima legătură într-SQL este folosit.

<? Php

/ / Conectarea la baza de date, genera $ legătură într-

$ De afaceri = mysql_real_escape_string ($ _GET [,nume '], $ link);

$ Sql = 'UPDATE utilizatori SET de afaceri ='. $ De afaceri. "În cazul în id = '. $ ID-ul;

?>

Avantajul de a utiliza această funcţie este că ea are grija de toate scăpa diferite, care merge dincolo de ghilimele simple şi duble. Problema evideneste nevoie de o legătură într-MySQL, deci nu poate fi utilizat cu excepţia cazului în datele vor fi stocate într-o bază de date. Sau, cel puţin, trebui

să aveţi acces la o bază de date. O utilizare incorectă a acestei funcţii va duce la o eroare, aşa cum se vede în Figura 7.2.

Figura 7.2

Mesaj de eroare afişat atunci când o legătur ă într-baza de date MySQL nu este disponibil

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

107 of 362 11/9/2

Page 108: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 108/362

 

Cur ăţare în mod corespunzător de date HTMLFuncţia finală este să se uite la htmlentities () . Practic, aceasta functie are caractere HTML şi le converteşte în valori numerice. Acestea sunmai bine pentru ca lucruri de genul "" devin " şi acest lucru destul de mult elimină nevoia pentru dezinfectarea de date avansate.

<? Php

$ Str = "" roşu "vulpea <b> sarit </ b>";

/ / "Roşu" vulpea <b> sarit </ b> echo htmlentities ($ str, ENT_QUOTES);

Al doilea argument în htmlentities () Funcţia determină dacă Citate atât single şi duble ar trebui să fie convertite, valori posibile pentruacest al doilea argument sunt prezentate în tabelul 7.1.

Tabelul 7.1

Stiluri disponibile CitatConstant Nume Descriere

ENT_COMPAT Converteşte ghilimele duble; frunze Citate unică în monoterapie

ENT_QUOTES Converteşte atât ghilimele duble şi single

ENT_NOQUOTES

Frunze atât ghilimele duble şi single neconvertit

Este o idee bună pentru a rula toate cele trei dintre aceste func ţii pentru a asigura datele dumneavoastră este cât mai curat posibil. Este nevoie dedoar puterea de procesare un pic mai mult, dar poate face diferenta dintre un sigur şi o cerere nesigur.

Mai important, cum veţi continua să practici aceste concepte bune de securitate veţi petrece mai puţin timp şi patch-uri de depanare în viitor.

Baza de date nu este singura metoda de stocare, după cum se explică la începutul acestei secţiuni. Puteţi utiliza, de asemenea, fişiere text simplepentru a stoca informaţii, precum şi majoritatea etapelor dezinfectarea ar lucra aici, de asemenea. Singura excepţie estemysql_real_escape_string, care, după cum a declarat mai devreme, necesită o legătură într-SQL.

Scris în siguranţă într-un fişier 

Un exemplu simplu de siguranţă, scris într-un fişier ar merge ceva de genul acesta. În primul rând, validarea datelor înainte de a deschide fi şieru

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

108 of 362 11/9/2

Page 109: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 109/362

 

Făcând acest lucru asigură că fişierul nu poate fi accidental scrise.

<? Php

if ($ fileContents = ""!) {

Mâner $ = fopen ("sample.txt", "w +"); fwrite ($ mâner, fileContents $);

}

else {

de imprimare "conţinutul fişierului nu scris, date incorecte";

}

?>

Lucrul cu datele într-o ordine logică

Este important să se păstreze o ordine logică atunci când lucrează cu date. De exemplu, în cazul în care addslashes () sa executat înainte dedacă declaraţie, lungimea de conţinut ar putea fi aruncat de pe şi produce un rezultat fals. În acelaşi timp, în cazul în care fişierul este deschis

 înainte de datele fiind validate, un exploata rău intenţionat ar putea injecta potential de conţinut într-un fişier deschis. Gândiţi-vă la el ca la aceleaprecauţii să luaţi atunci când logarea pe un site Web securizat într-o locaţie publică.

Crearea unei clase să se ocupe de igienizare

La acest punct, ar trebui să înţeleagă pe depl in cum de asanare de date care pot fi salvate într-o bază de date sau un fişier text simplu. Aveţiposibilitatea să se extindă pe cele mai bune practici pentru a crea un set de instrumente mai reutilizabile. De exemplu, aţi putea crea o clasăigienizare care are grijă în mod automat a procesului. O clasă de bază ar fi ceva similar cu următorul:

<? Php

Lichide clasa {

Funcţia cleanSQL ($ str) {

întoarcere mysql_real_escape_string ($ str);

}

cleanHTML funcţia ($ str) {

htmlentities retur ($ str, ENT_QUOTES);

}

Funcţia cleanText ($ str) {

$ S = $ str;

dacă (ini_get ("magic_quotes_gpc")!) {

$ S = addslashes ($ s);

}

întoarcere $ s;

}

checkLength funcţia ($ str, $ acceptableLength) {

if (strlen ($ str)> = $ acceptableLength) {

return true;

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

109 of 362 11/9/2

Page 110: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 110/362

 

else {

return false;

}

}

} ?>

Clasa defineşte trei metode, fiecare fiind un înlocuitor pentru o tehnica înv ăţate în secţiunea anterioară. Această abordare oferă posibilitatea de a freutilizabile cât veţi continua să lucreze la mai multe aplicaţii. Clasa conţine, de asemenea logică mai mult decât cel utilizat anterior pentru căaddslashes adauga la linii oblice slash-uri existente. Rezultatul va fi de trei slash-uri evadarea fiecare oferta.

O bar ă oblică dublă va face un caracter slash în faţa citat, deoarece spune compilatorului pentru a scăpa de sSaSSS slash si nu cred ca e cod.

Vulpea \ \ \ 'rosu \ \ \' a sarit.

Lucrul cu opţiuni magic_quotes

Există o setare în PHP, numită magic_quotes_gpc, care este responsabil pentru a scăpa de date în mod automat, aşa cum se arată în Figura 7

Figura 7.3

O valoare de probă magic_quotes_gpc proprietate cum se vede în phpinfo () listare

PhpinfoO şi Windows Internet Explorer 

V-" "* ■ g] http: tf 192.168.1.107Jdients/Book/RedStarJexampleJch%

2008/amf php ̂ phpinf  o , PhpV | * Tl X

MOF

"P-

% -

& A | A ByMoa BE Eu A - A ¿¡Fe » ¡T ̂» Pagina▼ "J Instrumente▼

evidenţ ia, în comentariu tf  # FF8: 0

evidenţ ia, implicit SClOOOBB S0000BB

evidenţ ia, html #000000 #000000

highlightkeyword #007700 #007700

evidenţ ia, string # DDOOOO rfDDO.OOO ohtml_errors Pe Pe

ignore_re peated_errors De pe De pe

ignore_re pe la ed_s ourc e De pe De pe

ignore_u ser_a Bort De pe De peimplicit_flush De pe De pe

lnclu <Je_path :. / Usr/local/php5/lib/pfip :. / Ustflocal/php5/lrb/php

Jog_errors Pe Pe

Jog_errors_max_len 1024 1024

¡#2magic_quotes_runtime De pe De pe

magic_quotes_syt »ASE De pe De pe

mail.force_extra_parameters nici o valoare nici o valoare  

maxde executie timp 30  30

max_inpLtt_time 60  60

memory_limit 16M 16M

open_basedir  nici o valoare nici o valoare  

outputbuffering 4096 4096

output_handler  nici o valoare nici o valoare  

post_max_size 8 M SM

precizie 14 14

realpath_cache_size 16K 16K

realpath_cache_ttl 120 120

register_argc_argv De pe De pe

register_globais De pe De pe H

Dezactivarea magic_quotes

În mai puţin configuraţii server de comune, această caracteristică nu poate fi oprit. Un test rapid pentru a determina dacă această setare este activaasigură slash-uri suplimentare nu vor fi adăugate.

if (!ini_get ("magic_quotes_gpc"))

{

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

110 of 362 11/9/2

Page 111: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 111/362

 

$ S = addslashes ($ s);

}

Celelalte două funcţii în clasa de igienizare curat pur şi simplu de date a trecut-in şi să îl returnaţi.

Utilizarea obiectelor partajate

Pe măsură ce începem să construim mai multe aplicaţii completă vă va veni la un punct în cazul în care depozitarea unor cantităţi mici de date pemaşina utilizatorului devine necesar. Aceste bucati mici de informaţii deţin, în general, un utilizator id sau sesiune care hărţi într-o bază de date

de intrare pe server live. Un cookie comun de Flash Object este utilizat în acest caz, deoarece este o mică bucată de date stocate pe computerulutilizatorului, dar nu este necesar pentru punerea în aplicare pentru a rula.

Atunci când aplicaţia care face uz de obiect partajat redeschide, ar fi configurat pentru a căuta pentru această mică bucată de date şi de a efectua uapel la un server bazat pe rezultate. Cu toate acestea, la fel ca cookie-uri normal ca browser-ul dvs. utilizează, un obiect la comun poate fi editatăcătre utilizatorul final, care poate avea rezultate dăunătoare.

După cum sa menţionat în secţiunea anterioară, cel mai bine este să nu aibă încredere de date pe care un utilizator inscrise. Această linie directoarcomună asigură o aplicare mai sigură şi mai globală face mai uşor de a lucra cu.

 j ^ J J "Jma'Ority "1°'es 'n o cerere sunt exploatate de către utilizator a prezentat date.

Imaginaţi-vă o aplicaţie exemplu, care ar putea fi folosit pentru a lucra cu un obiect comun. Această cerere ar putea fi înfiinţat pentru a deschide uobiect comun şi care treci date la un server de la distanţă.

Odată ce obiectul a fost încărcat la comun, un apel la serverul de la distanţă se poate face trecerea de-a lungul mică bucată de informaţii de la obiecomun. În acest exemplu, mica bucata de informaţii ar putea fi un ID de utilizator care ar fi fost salvate într-o utilizare anterioară.

Utilizarea PHP pentru a gestiona datele de la obiectele partajate

Codul PHP este responsabil pentru încărcarea această bucată de informaţii şi interogarea bazei de date. Cu toate acestea, înainte de un apel la bazde date este făcută, ghidul de id este validat asigurarea că e un număr valabil şi în raza de acţiune.

<? Php

$ UserID = $ _GET ['user_id']; $ idRange = 500;

dacă (is_numeric ($ UserID) & & $ UserID> 0 & & $ UserID <$ idRange) {

/ / Conectarea la baza de date la acest punct mysql_connect ("localhost", "ghidul", "pass");mysql_select_db ("db_name");

$ R = mysql_query ("SELECT * FROM ghidul de WHERE = UserID" $ nume de utilizator.);

în timp ce ($ row = mysql_fetch_array ($ r)) {

de imprimare "resp = succes & username =". $ Row ['username']. "& Userlevel =". $ Row ['user_level']. "&Userstyle =". $ Row ['user_style'];

}

}

else {

de imprimare "resp =". "ID-ul utilizator nu a fost găsit sau este invalid";

} ?>

Presupunând ghidul de id este valabil, un bloc de informaţii este transmisă înapoi în format text simplu. Aceste date sunt apoi încărcate întrmatrice şi utilizate în restul cererii. În cazul în care ghidul de id nu este valabil, un şir este returnat informează utilizatorul că sa întâmplat ceşi sesiune existente nu poate fi încărcată. În cele mai multe cazuri, în cazul în care sesiunea existente nu pot fi încărcate, aplicatii Flash ştie să

 înceapă peste mai degrabă decât a încerca să utilizaţi date incomplete sau eronate.

l Y'r / l"T ^ '" ^! ActionScript 3 corelib de la Adobe (extern bibliotecă), are o MD5 clasă, care poate fi MeSj & sk ^ ^ este SeaiB folosite în loc de PHP..

Crearea şi stocarea în condiţii de siguranţă o parolă folosind PHP

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

111 of 362 11/9/2

Page 112: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 112/362

 

Procesul de modificare a unei parole care pot fi stocate este destul de simplă. Puteţi crea mai întâi o conexiune la fişierul PHP care trece de-a lungparola text clar. Cu toate acestea, acest proces nu este cel mai sigur şi ar fi mai bine să returneze un md5 Răspunsul a parolei atunci când o tentatde conectare în care se face.

Pentru a explica acest proces, aici este un exemplu de simplu (mai puţin securizat) opţiune:

var phpFile: String = "http://localhost/md5creator.php";

interogare de var: String = "treci =?". "Parola";

var urlRequest: URLRequest = new URLRequest (phpFile + interogare); var urlLoader: URLLoader = newURLLoader ();

urlLoader.addEventListener (Event.COMPLETE, de răspuns); urlLoader.load (urlRequest);

funcţia de răspuns (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

param var: URLVariables = new URLVariables (loader.data);

trace ("Informaţii despre utilizator Loaded"); urmă ("\ tUser:" + param.username); urme ("\ tLevel:". +param userlevel); urme ("\ tStyle:" + param.userstyle);

}

Un apel la PHP pe server se face folosind un de bază URLRequest, care ar trebui să fie familiar pentru tine de la exemplele anterioare şi capitoOdată ce URLRequest este stabilită, o funcţie callback este atribuit să se ocupe de răspuns server. Acest exemplu va conţine fie un md5 string so eroare.

PHP pur şi simplu controale pentru un şir de valabil şi returnează un md5 hash (string criptat). Dacă un şir incomplet sau gol este trimis de laFlash, PHP returnează un mesaj de eroare.

<? Php

$ String = $ _GET ['string']; if (strlen ($ string) == 0)

{

de imprimare "de răspuns =". "Nu String furnizate.

}

else {

Md5 $ = md5 ($ string); de imprimare "de răspuns =". Md5 $;

}

?>

Acest lucru ar fi un exemplu destul de simplă, pentru crearea unei md5 hash. În lumea reală de utilizare ai vrea să seminţelor, md5 de criptarepentru a face răspuns mai unic şi mai greu de a sparge deschide.

O sămânţă este o valoare cunoscut faptul că este utilizat în md5 proces. Dacă doriţi să creaţi o samanta cu adevărat aleatoriu, cu ajutorul timp este o idee bună, deoarece aproape fiecare apel produce un rezultat diferit.

Hash pentru acest exemplu trebuie să fie verificabile atunci când utilizatorul încearcă pentru a va autentifica Pentru acest exemplu, numele deaplicaţia utilizată va fi "Securepass".

cfcd2 0 849 5d5 65ef66e7dff9f98764da

De seminţe este anexată la şirul existente, care vor fi criptate, fie la începutul sau la sfârşitul.

Md5 $ = md5 ($ string + "Securepass");

Poziţia a seminţelor trebuie să fie consecvente, deoarece va fi re-create atunci când utilizatorul încearcă să vă conectaţi data viitoare.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

112 of 362 11/9/2

Page 113: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 113/362

 

Codul PHP cu seminţe de unic aplicat ar arata ceva de genul: <? Php

$ String = $ _GET ['string'];

if (strlen ($ string) == 0) {

de imprimare "de răspuns =". "Nu String prevăzute.";

}

else {

 Md5 $ = md5 ($ string + "securepass");

de imprimare "de răspuns =". Md5 $;

} ?>

In acest moment, în cererea de seminţe este creată, şi puteţi continua cu procesul de stocare acea valoare într-un obiect comun.

Este sigur să se presupună că vă va dori să fie date înapoi revenirea la Flash la un moment dat în cererea dumneavoastră. Preocuparea securităţiiglobale în acest proces este similar cu trimiterea de date, cu excepţia faptului că exploateaza mai mult ar fi încercat privind returnarea de date.

Detalii de siguranţă se întorc

Ideea de a trece în siguranţă date înapoi la Flash este o mult mai pu ţin vorbit despre subiect. Acest lucru se datorează faptului că Flash-ul nu arenevoie sa fie sigure, cu toate acestea, este încă o practică bună pentru a se asigura că este.

Dacă nu reuşesc să validarea datelor vin înapoi în Flash se poate deschide o gaura de securitate care ar putea, de exemplu, permite unui utilizatosă acceseze o secţiune privată a unei cereri. Chiar mai rau, poate avea efecte negative asupra experienţei utilizatorului, şi utilizatorii dvs. pot piercredinţa în cererea dumneavoastră.

Datele vin inapoi in Flash poate fi modificat în acelaşi fel de date se poate ieşi. Pentru exemplul anterior, un şir de date este returnata, dar nu esteniciodată verificat pentru a vă asigura că datele sunt valabile. Să se extindă asupra exemplul anterior pentru a adăuga acest plus de securitate.Funcţia de răspuns este singura secţiune de cod care trebuie să fie modificată, deoarece cererea va fi aceeaşi.

funcţia de răspuns (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

param var: URLVariables = URLVariables (loader.data);

var nume de utilizator: String;

var userLevel: uint;

var userStyle: String;

var validData: Boolean = true;

dacă (param.username = ""!)

username = param.username;

altfel

validData = false;

dacă (param.userlevel = ""!)

userLevel = param.userlevel; altceva

validData = false; dacă (param.userstyle = ""!)

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

113 of 362 11/9/2

Page 114: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 114/362

 

{

userStyle = param.userstyle;

}

else {

validData = false;

}

dacă (validData!) {

trace ("Date utilizator nu a fost încărcată corect");

}

else {

trace ("Informaţii despre utilizator Loaded"); urmă ("\ tUser:" + param.username); urme ("\ tLevel:". +param userlevel); urme ("\ tStyle:" + param.userstyle);

}

}

Practic, acest cod initializeaza prima variabile pentru a stoca datele de utilizator şi apoi verifică fiecare valoare a trecut-in pentru o intrare validă.Variabilă de validare este atribuită adevărat de la început pentru că dacă oricare dintre dacă declaraţii nu va fi schimbat la fals. Acest proces estconsiderat logică inversă, dar funcţionează destul de bine pentru rutine de validare.

Folosind o abordare mai sigur pentru returnarea de date

În exemplul anterior aţi învăţat cum să lucreze în siguranţă cu datele returnate. Problema cu această abordare simplificată este faptul că există altemodalităţi de a intercepta informaţiile transmise între Flash şi server.

Utilizarea r ăspunsuri unice

Există câteva opţiuni pentru a crea o cerere si mai sigure, care toate depind de timpul de dezvoltare şi de cost. Este un gând comun de a ignora co

cu o schimbare pentru a asigura securitatea final, dar acest lucru este pur şi simplu nu este posibil tot timpul. Deseori vei lucra la un proiect careajunge la o "destul de bun" punct şi aplicaţia va fi livrat cu probleme; acest lucru este un dezavantaj pentru dezvoltarea de aplicaţii, dar foartefrecvente.

Cel mai bun mod de a păstra cost cu o schimbare realist este să se uite la toate opţiunile. O opţiune este de a folosi md5 pentru a crea coduri unicde răspuns şi de a asigura datele sunt valabile, care va lucra, dar nimic nu se opreşte "hacker" de la decompilarea SWF si uita direct la cod.

Securizarea fişierelor dvs.

În versiunile anterioare de ActionScript aţi fost capabil de a crea obfuscated fondurilor suverane, ceea ce însemna că cele mai multe aplicaţii nu leputea decompila. Cu toate acestea, la momentul scrierii acestui instrument nu există pentru aplicatii AS3.

Sandbox în determină Flash ce fişiere pot fi accesate în funcţie de locul în care se află fişierul SWF. Un fişier SWF funcţii diferit atunci cândfuncţionează la nivel local pe maşina utilizatorului decât o face pe un server.

De exemplu, un SWF în sandbox locale nu pot avea acces la ambele obiecte locale şi la distanţă. Acest lucru impune un nivel de securitate cuprivire la aplicare pentru a asigura surse care nu pot trece unul pe altul.

Fişierele locale pot fi plasate într-una din cele trei nisipuri mici:

■ locale-cu-sistem de fişiere: Acest lucru asigură că ghidul de conţinut locale nu pot fi trimise accidental la o reţea sau partajată.

■ locale-cu-networking-sandbox: Permite fondurile suverane locale de a accesa obiecte la distanţă, dacă un fişier valid politică este găs

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

114 of 362 11/9/2

Page 115: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 115/362

 

■ locale-sigura: Un SWF în acest sandbox pot accesa datele de oriunde, atât local cât şi la distanţă. Numai utilizatorii si administratorii potmuta un SWF la acest sandbox.

locale-sigura sandbox nu poate fi stabilit de către accidental un SWF stand-alone. Acest lucru este făcut pentru a asigura nivelul de securitatun utilizator ar aştepta.

În scopul de a permite accesul la un domeniu de la distanţă, trebuie să adăugaţi mai întâi să-l Securitate clasă printr-un apel la allowDoma().

Security.allowDomain ("www.example.org");

Puteţi utiliza, de asemenea, un fişier de cross-domain politică, care permite accesul de la anumite domenii sau toate domeniile folosind un joker("*").

<allow-access-from-domain="*" />

Setarea tipului sandbox

Atunci când publică un SWF, puteţi alege tipul de sandbox specificat în funcţie de resursele necesare, în care utilizează. Pentru a seta tipul sandburmaţi aceşti paşi:

1.Alegeţi Fişier C Publicare Setări.

2.Faceţi clic pe tab-ul Flash.

3.În lista verticală, faceţi clic pe Securitate redare.

4.Faceţi clic pe OK.

Utilizarea proprietăţii sandboxType

Un fişier SWF poate utiliza static read-only Security.sandboxType de proprietate pentru a determina care sandbox Flash player a alocat SWcurent.

În unele cazuri, veţi dori să utilizaţi valoarea curentă a sandboxType de proprietate în programare pentru a determina modul în care o cerere atrebui să interacţioneze. Folosind un switch simplu, vă puteţi construi o funcţie particularizată care va trasa de tip sandbox actuale, aşa cum se ar

 în Figura 7.4.

Figura 7.4

Fereastr ă de ieşire care afişează un rezultat de exemplu din whichSandbox funcţie

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

115 of 362 11/9/2

Page 116: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 116/362

 

Funcţia whichSandbox (): String {

str. var: String = "";

comutator (Security.sandboxType) {

Security.REMOTE caz:

str = "Acest SWF este dintr-o adresă URL pe Internet."

+ "Nu se poate accesa fişierele locale";

pauză;

Security.LOCAL_WITH_FILE caz:

str = "Acest SWF este locală, dar nu sigura de" + "ghidul nu are acces la." + "fişierelor la distanţă.";break;

Security.LOCAL_WITH_NETWORK caz:

str = "Acest lucru poate comunica cu SWF la distanţă"

+ "Fişiere, dar poate cu fişierele locale."; Break;

Security.LOCAL_TRUSTED caz:

str = "Acest SWF a fost sigura de catre utilizator." + "Se poate citi fisiere atât local cât şi ladistanţă."; break;

}

str. întoarcere;

}

trace ("Verificarea de tip sandbox curent.");

trace (whichSandbox ());

Determinarea sandbox activăDeterminarea tip sandbox actual nu este limitată la un răspuns simplu urmă. Puteţi prezenta ghidul, cu un ecran de avertizare care fac notificareape el sau ea că SWF actuala nu poate accesa resurse de la distanţă, deoarece acesta funcţionează la nivel local. De asemenea, puteţi opri cu forţa dla un film care rulează în cazul în care un sandbox local este găsit, ceea ce înseamnă că filmul nu mai rulează de pe site-ul Web. De exemplu, unfilm care rulează la nivel local ar fi putut fi furat de la site-ul dvs., astfel că este o idee bună pentru a verifica acest lucru şi să acţioneze înconsecinţă.

Aplicaţii care rulează în sandbox locale

Acest exemplu arată în Figura 7.5 verifică tip sandbox şi afişează o numărătoare inversă în cazul în care filmul se execută la nivel local.

Figura 7.5

Exemplu de aplicare completat arată o număr ătoare inversă activă

ft SanriboxCheck.swf View File de control depanare

Exemplu sandboxType

Acest film va determina sandbox

H un sandbox local este găsit, număr ătoarea inversă va începe.

Odată ce temporizatorul a expirat film va fi descărcat.

Nevalid acces detectat!

Timp r ămas:

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

116 of 362 11/9/2

Page 117: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 117/362

 

2 secunde

Pentru a începe, deschideţi fişierul de pornire, care poate fi găsit pe site-ul acestei cărţi.

Activele de acest exemplu au fost deja finalizate astfel încât să vă puteţi concentra pe programare. Primul pas este de a crea variabile necesare.

var Timer: Timer;

var nisip: String;

var startingTime: uint = 5;

Dupa ce variabilele sunt alocate, puteţi construi funcţia iniţială init, care este numit de îndată ce începe filmul.

funcţia init (): void {

timerMC.alpha = 0;

sandbox = Security.sandboxType;

dacă (sandbox.indexOf ("local") == -1) {

startTimer ();

}

}

Partea principală a acestei funcţii este dacă declaraţie, care verifică prezenţa a şirului "Locale" din tipul sandbox. Aceasta se referă la oricaredintre variante locale şi determină filmul nu se execută pe sandbox de la distanţă. Dacă un sandbox locală este detectat, un apel la startTimerface, care initializeaza şi începe temporizatorul.

dacă(Sandbox.indexOf ("local") != -1)

{

startTimer ();

}

startTimer Funcţia initializeaza întâi nouă timer instanţă şi apoi adaugă un ascultător eveniment, care se numeşte fiecare milisecunda. Ultimacţiune în această funcţie este pentru a afişa textul timer, prin setarea proprietăţii alfa la 1.0 care o face pe deplin vizibil.

Folosind o actualizare timer de 1 milisecunda pentru o perioadă lungă de timp, poate crea un film care nu r ăspunde. Pentru o ve rificare imediată, cuar fi în acest exemplu, aceasta nu este o mare preocupare.

Funcţia startTimer (): void {

startingTime *= 1000;

timer = new timer (1, 0);

timer.addEventListener (TimerEvent.TIMER, tickHandler);

timer.start ();

timerMC.alpha = 1,0;

}

Tratare a evenimentului în secţiunea anterioară atribuie o funcţie pentru fiecare apel la contorul de timp. Această funcţie este că handler.Argumentul a trecut in-ul este o referinţă la obiect timer. Puteţi, de asemenea, de referinţă la nivel mondial Eveniment; cu toate acestea, acestlucru este mai uşor de înţeles dacă va intoarceti la acest cod în viitor.

Funcţia tickHandler (e: TimerEvent): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

117 of 362 11/9/2

Page 118: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 118/362

 

var timp: Timer = e.target ca temporizator;

var Milli: uint = (startingTime - getTimer ()); var sec: uint = Math.round (milli / 1000);

timerMC.timerTxt.text = String (sec) + ((sec == 1) "a doua":? "secunde");

dacă (sec == 0) {

timer.stop (); stage.removeChildAt (0);

}

}

Obiectivul de a obiectului eveniment este exprimate ca Timer. Încă o dată, acest pas nu este necesar, dar face mai uşor să lucreze cu codul.

Ideea este de a afişa secunde rămase, care se determină cu ajutorul milisecunde rămase. The milisecunde rămase sunt obţinute cu ajutorulgetTimer () funcţie, care returnează milisecunde filmul curent a fost difuzate. startingTime este scade de această valoare, iar rezultatul estotal de milisecunde.

var Milli: uint = (startingTime - getTimer ());

: iTrir ^-'''^ 9ETTeumer () Funcţia returnează întotdeauna timpul total filmul curent a fost

de funcţionare. Acest lucru înseamnă că, dacă acest test se face mai târziu în procesul de redare valoarea nu ar fi corect afişate.

The milisecunde rămase sunt apoi convertite în câteva secunde folosind matematica de bază. Valoarea actuală a Milli variabilă împărţit cu 100este egală cu secundele rămase.

var sec: uint = Math.round (milli / 1000);

Odată ce sunt determinate de secunde, o valoare care este trimis la timerTxt textfield pe scena. Pentru afişarea corectă gramatical, sec variabeste utilizată pentru a determina dacă două sau secunde ar trebui să fie

afişate. Că sec variabilă este testat pe fiecare rulând de această funcţie pentru a determina când cronometrul ar trebui să fie oprită şi să descarce  întreaga aplicaţie.

dacă (sec == 0)

{

timer.stop (); stage.removeChildAt (O);

}

Descărcarea unei cereri

Acţiunea de descărcare întreaga aplicaţie se face printr-un apel la removeChildAt pe scena instanţă. În acest caz, tot filmul ar trebui să fieeliminate, astfel încât 0 este trecut de la sensul cuvântului index 0 şi în jos.

dacă (sec == 0) {

timer.stop (); stage.removeChildAt (O);

}

Ultimul pas a codului este de a face un apel la init, care începe întregul proces. init ();

Aceasta este aplicaţia completă, care va rula în cazul în care sandbox curent este locală. Puteţi adapta logica de ansamblu în această cerere şiadăugaţi-l în propria dumneavoastră să vă asiguraţi filmul nu este necorespunzător alerga.

Aici este codul de completat:

var Timer: Timer;

var nisip: String;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

118 of 362 11/9/2

Page 119: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 119/362

 

var startingTime: uint = 5;

funcţia init (): void {

timerMC.alpha = 0;

sandbox = Security.sandboxType;

dacă (sandbox.indexOf ("local" {

startTimer ();

}

}

Funcţia startTimer (): void {

startingTime *= 1000; timer = new timer (1, 0);

timer.addEventListener (TimerEvent.TIMER, tickHandler);

timer.start ();

timerMC.alpha = 1,0;

}

Funcţia tickHandler (e: TimerEvent): void {

var timp: Timer = e.target ca temporizator;

var Milli: uint = (startingTime - getTimer ()); var sec: uint = Math.round (milli / 1000);

timerMC.timerTxt.text = String (sec) + ((sec == 1) "a doua":? "secunde");

dacă (sec == 0) {

timer.stop (); stage.removeChildAt (0);

}

}

init ();

În acest moment ar trebui să aveţi o bună înţelegere a modului în care Flash securitate sandbox funcţionează şi ceea ce este. După cum puteţi vedcutia cu nisip se poate dovedi a fi o problemă în unele cazuri, dar în general scopul său este de a proteja utilizatorul. În ultimul exemplu, codul afost extins şi acum cutia cu nisip este în măsură de a proteja proprietarul de continut precum şi ghidul.

Puteţi lua practicilor şi tehnicilor învăţate în această secţiune şi începe să le adapta în propriile aplicaţii.

Asigurarea o cerere nu poate fi partajat

Ca un bonus la această secţiune, ultimul exemplu va fi de a crea un anunţ similar verificare stil sandbox, dar de data aceasta folosind obiectivul pcare un film nu ar trebui să fie vizibile pe alte s ite-uri, cu excepţia celei a fost construit pentru.

Acest lucru este realizat prin utilizarea url proprietate asupra loaderlnfo obiect. Această proprietate este accesibil pe orice obiect încărcat.Pentru acest exemplu, obiectul va fi încărcat de pe scenă, pentru că este Afişează Object rădăcină. Codul pentru a determina locaţia curentă unuifilm rulează este:

stage.loaderInfo.url

Acest cod returnează un şir de caractere care afişează în cazul în care un film se execută. Un exemplu de răspuns dintr-un film care rulează la nivelocal ar fi:

file: / / / MacPro% 20HD/Library/Server/Documents/DomainCheck.swf

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

119 of 362 11/9/2

Page 120: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 120/362

 

Folosind această proprietate vă poate afişa un mesaj de avertizare aşa cum sa procedat în testul sandbox. Pentru scopuri demonstrative, undomeniu invalid este furnizat de a provoca filmul care urmează să fie eliminate imediat.

if (String (stage.loaderInfo.url) indexOf ("example.org"). = -1!) {

stage.removeChildAt (O);

}

Presupunând codul anterior se execută într-un film care nu se află pe example.org domeniu, filmul în sine, elimină şi cererea nu mai esteaccesibil. Pentru o aplicare mai completă vă vor verifica pentru versiunea www şi non-www ale site-ul Web. Ai putea extinde, de asemenea, înacest cod şi verificaţi pentru o listă de site-uri valide, care ar putea fi realizat cu ajutorul unui simplu pentru buclă şi o serie de domeniiacceptate.

Această verificare nu e ste 100 la sută sigur datorită limitărilor în modul în care o adresă URL poate fi accesat.

Acum ar trebui să aveţi o înţelegere a modului de a asigura punerea în aplicare dumneavoastră, şi se adaugă un nivel de protecţie pentru a oprialte site-uri şi locaţii de a beneficia de conţinutul dvs. fără permisiune.

În acest capitol aţi învăţat cum să dezinfecteze în mod corespunzător datele de utilizator fiind în acelaşi timp conştienţi de modul în care aceastapoate afecta functionalitatea de cerere. Apoi au învăţat cum să încărcaţi în mod corespunzător şi curat datele utilizatorului pentru a asiguraprocesul de stocare nu vor fi prejudiciate. Stocarea datelor in depl ina siguranta a fost introdusă următoarea cu exemple de modul în care solicită

simplu SQL poate provoca dureri de cap în apl icaţiile dumneavoastră.

Următorul pas care a fost introdus a fost procesul de retrocedare a datelor pentru a flash şi analiza aceste date pentru a se asigura că a fostmanipulat în mod corespunzător.

Ultima sectiune a fost o introducere şi privire de ansamblu asupra sandbox Flash şi modul în care aceasta poate afecta aplicaţiile. Ca un bonus aţi învăţat cum să creaţi o aplicaţie care se va elimina în cazul în care nu se execută pe domeniul corect.

Wgăină de lucru cu aplicaţii multiutilizator, există modalităţi diferite de a trimite şi primi date. Aveţi posibilitatea să utilizaţi o metodă de livrarbazat pe XML. O altă alternativă la standard de livrare este de a construi un "pull" aplicaţie care verifică pentru actualizări prin intermediul unuitimer.

Sockets permite o metoda "push" care iese din actualizările cronometre şi numai atunci când date noi sunt trimise în întreaga. Utilizarea de prize nse limitează la date simple; ai putea construi de fapt o cerere de desen multiutilizator care ar trece coordonatele in diverse autentificaţi clienti.

Acest capitol este împărţit în două părţi. Prima parte explică prize. A doua parte este o aplicaţie simplă bazate pe memorie flash de chat folosindpriza ca de l ivrare a mesajelor.

A priză este o comunicare parte endpoint sau pe calculator a unei reţele conectate la un alt computer pe acelaşi protocol. Diferenţa între o conexiuntradiţională (internet) şi o priză este abilitatea de a face o distincţie între care maşini cu care vorbiţi.

Când solicitaţi o site-ul Web de pe Internet, veţi obţine pagina pe care aţi solicitat, dar pe Internet nu poate împinge date noi direct la tine (client),fără a cere-l încă o dată.

O priză oferă această comunicare directă, permiţând conectarea comandantul pentru a trimite date noi pentru tine (clientul). Acest lucru este cel m

frecvent utilizate în aplicaţii legătură directă, cum ar fi mesagerie instant, aplicatii video, mediile de colaborare şi de echipă.

 În acest capitol

 Înţelegerea prize

Lucrul cu prize în PHP

Lucrul cu prize în Flash

Construirea unui client de chat cu prize folosind Flash şi PHP

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

120 of 362 11/9/2

Page 121: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 121/362

 

Securitatea în socluri

Utilizarea de prize are nevoie de o conexiune mai direct, ceea ce înseamnă securitatea este o preocupare mai mare. În general, indiferent deinstrument pe care îl utilizaţi să pună în aplicare client socket sau un server permite un nivel de securitate în mod direct în cadrul bibliotecaproprie. De exemplu, Flash necesită o încredere care urmează să fie înfiinţat într-o alt domeniu care permite ambelor părţi să autorizaţi conexiuneÎn contrast, o conexiune simpla făcute de linie de comandă nu are nici implicite de securitate dincolo de limitele protocol standard.

J T'rj "f ^ ii ^''''"^oc'<E'poate s "5e o Pstare de noapte alegere atunci când puse în aplicare în anumite sisteme sau configura ţii din cauza H ^ K ^ ^ JkUiSiSBBaQS natura lor cone xiune dire ctă.

Implementarea unui server de soclu

Serverul master socket poate fi implementat folosind mai multe limbaje de programare comună.

Pentru un soclu persistente sau de producţie de nivel, ar trebui să-l executaţi cel mai probabil de la un server de vii pentru a se asigura alţiutilizatori se pot conecta la ea şi limitarea riscului de o conexiune deschisă pe sistemul dumneavoastră local.

 Înţelegerea muf ă

Priza de conectare în următorul exemplu, va fi responsabil pentru comunicarea cu utilizatorul. Următoarele secţiuni explică acest proces.

Păr ţi dintr-un soclu

O conexiune socket este format din două bucăţi. Prima parte este să facă legătura comandantul sau server, iar a doua parte este clientii care seconecteaza la master. Clientii pot vorbi direct cu maestrul, dar nu se poate vorbi în general, la alţi clienţi. Dacă doriţi ca clientii sa vorbeasca unul altul v-ar pune în aplicare un sistem în cadrul Panoului de răspunsuri comandantului.

ObligatoriuPriza Comandantul este obligat să o anumită adresă IP şi portul. Acest lucru înseamnă să facă legătura maestru se face trimitere la acest punctspecifice pentru a asigura conexiunea este unic. Clientii care doresc să comunice cu serverul respectiv soclu trebuie să se conecteze la aceeasi adreIP şi portul ca master.

Ascultare

Acest lucru este similar cu serverul de web standard. Odată ce serverul de soclu începe, ascultă de clienti activi si cei noi care doresc să seconecteze. Aceşti clienţi sunt apoi adăugate la coadă şi începe să primiţi de la grup.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

121 of 362 11/9/2

Page 122: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 122/362

 

Construirea unui server de soclu în PHP nevoie de unele de configurare anterior. Un server soclu în PHP nu pot fi rulate de la versiunea standardgrafice, datorită conexiunii sale persistente. Un browser bazat pe Web conexiune standard ar fi expirat sau, eventual, accident de maşina gazdă.

O conexiune socket-ar fi rulat cu ajutorul nongraphic de linie de comandă de versiunea de PHP (CLI). Primul pas pentru a lucra cu prize în PHPeste de a determina dacă aveţi această versiunea CLI a PHP instalat, deoarece nu este în mod normal, inclus într-un pachet server Web.

Cautam pentru linia de comandă de versiunea de PHP

Versiunea de linie de comandă (CLI), dacă este instalat, este, de obicei, accesibil direct de la Terminalul de pe un Mac sau promptul de comandăun PC (a se vedea figura 8.1).

Pentru a determina dacă aveţi această versiune, pur şi simplu deschideţi linia de comandă. În Windows, faceţi clic pe Start, apoi Run. Tip cmdExecutare în caseta de dialog şi faceţi clic pe OK. Dacă sunteţi utilizator de Mac, deschideţi Finder, navigaţi la Applications / Utilities, şi deschideTerminal.

Figura 8.1

Exemplu de promptul de comandă în Windows XP

Cu linia de comanda deschis, tastaţi următoarele: $ Php-v

Această comandă îi spune PHP de a raporta informaţiile despre versiune şi de ieşire. Rezultatele ar trebui să arate ceva similar cu următorul text:

PHP 5.2.5 (CLI) (construita: 20 decembrie 2007 02:55:52) Copyright (c) 1997-2007 Grupul PHP

Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Dacă primiţi un răspuns similar la următorul text, înseamnă că versiunea PHP poate fi instalat, dar nu toată lumea accesibilă de la orice linie decomandă şi va necesita configurare.

-Bash: php: comanda nu a fost găsit

Veţi avea nevoie pentru a localiza versiunea de linie de comandă sau să-l instalaţi pentru a continua cu acest capitol.

 j Cj'^'""' f-^ raj Consultaţi Capitolul 1 pentru informaţii despre cum să instalaţi versiunea de linie de comandă a PHP.

Construirea unui server de soclu

Pentru a construi un server socket simplu, folosind PHP, începe prin crearea unui fişier şi salvarea într-o locaţie de obicei accesibil. Acest fişier nuare nevoie să fie în directorul Web şi, probabil, va fi doar mai greu de a lucra cu dacă acesta este.

Vrei să asigure fişierul soclu nu este vizibil pe Web, deoarece ar putea provoca PHP astfel încât s ă nu funcţioneze corect dacă un utilizator r ăuintenţionat a încercat să rulaţi fişierul.

Pentru a înţelege mai bine cum prize de lucru, începe cu un exemplu foarte simplu server de soclu.

Simplă PHP bazate pe socketul serverului

Prima parte a serverului soclu este de a determina adresa IP a serverului şi numărul portului. Dacă se execută pe server local nu aveţi nevoiepentru a determina adresa ta de IP fizice. În schimb, puteţi utiliza adresa locală.

<? Php

$ Host = "127.0.0.1"; $ port = "8888";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

122 of 362 11/9/2

Page 123: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 123/362

 

Numărul de port nu este specific, dar aceasta trebuie să fie unic pe aceeaşi maşină pentru a se asigura că nu se va ciocni cu orice altă aplicaţie pesistemul dvs. sau de reţea (dacă este utilizat de la distanţă).

Acest script va trebui să informeze PHP pentru a continua să fie difuzate, deoarece are nevoie pentru a verifica şi de a gestiona conexiunile petermen nelimitat. Acest lucru este realizat prin trecerea set_time_limit o funcţie de valoarea 0, înseamnă că acest script nu trebuie să seoprească până în mod corespunzător ieşit.

set_time_limit (0);

Cu configuratia din cale, aveţi posibilitatea să creaţi o conexiune socket maestru.

$ Ciorap = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);

Cele trei argumente trecut în socket_create Funcţia defini ce tip de conexiune este şi sunt constante PHP. Pentru acest exemplu, ei nu suntimportante, dar ele vor fi explicate mai târziu în acest capitol.

$ Ciorap variabilă conţine acum o resursă activă id soclu. Următorul pas este de a lega soclu la portul definite în prima parte a codului.

socket_bind ($ Ciorap, $ host, $ port);

După ce priza este legat de portul, puteţi începe de ascultare pentru conexiuni. Primul argument este $ Soclu variabilă, care deţine ID-ul deresurse soclu. Al doilea argument este o variabilă PHP restante care spune câte mesaje la coadă înainte de o eroare este trecut la client. Acest

variabilă este o sugestie, deoarece anumite sisteme vor defini sau suprascrie această valoare. De exemplu, Windows seturi de această bazează pefurnizorul de servicii de bază şi ignoră practic orice ghidul de-inscrise valoare.

socket_listen ($ şosete, 4);

În acest moment, aţi construit un server socket care nu face nimic. Acest lucru înseamnă în esenţă server incepe si asteapta pentru conexiunile deintrare, dar nu se ocupe de ei în nici un fel. Următorul pas este de a crea partea de server de soclu care se ocupa de conexiuni de intrare.

Trebuie să vă creaţi un alt socket care se ocupa de conexiunile de intrare printr-un apel la socket_accept care trece în $ Soclu ID-ul deresurse.

$ ChildSocket = socket_accept ($ ciorap);

Din acest punct $ ChildSocket variabilă este utilizată pentru a se ocupe de toate de comunicaţii client. Datele trimise de la o conexiune estecitit cu ajutorul socket_read funcţie.

$ IncomingData = socket_read ($ childSocket, 2048);

Aceasta functie are doua argumente. Primul argument este soclu tratare a clientului, iar al doilea argument este num ărul de octeţi pentru a citi declient. Acest lucru poate fi util atunci când se încearcă să se execute pe un server socket mai eficient. De asemenea, este o idee bună de a limita deieşire pe partea de client (dacă este posibil).

socket_read funcţie continuă pentru a încărca de informaţii în $ IncomingData variabile până la limita de date este lovit sau unul dintrecaracterele următoare se găseşte: retur de car (\ N), În fila (\ T), sau \0. PHP tratează ca cele de sfârşit de intrare de caractere şi se mutăurmătoarea linie din script-ul atunci când unul este găsit.

Răspunsul la conexiune client

După ce datele sunt încărcate, pasul următor este să acţioneze în care datele şi, în cele mai multe cazuri răspunde la client. De exemplu, următorutext este o simplă întrebare / răspuns demo care a PHP a răspunde la o întrebare:

if (substr ($ incomingData, 0, -2) == "sunt ti-e foame?") {

$ Raspuns = "Răspuns server> Mi-am putea manca \ n!"; Socket_write ($ childSocket, $ răspuns, strlen ($răspuns));

}

socket_write functie are trei argumente. Primul este la priza de copil resursa ID-ul; al doilea argument este răspunsul fiind trimis către client.treilea argument, care este opţional, este lungimea $ Răspuns. Acest exemplu trimite doar un raspuns inapoi la client atunci când vă întreb daPHP este foame. După cum puteţi vedea, aceasta nu este o aplicaţie foarte practic, dar nu explică în mod clar modul în care prizele sunt înfiinţatecum să interacţionăm cu ei.

Ultimul pas la cererea de proba, înainte de testare ea, se închide cele două conexiuni priza pentru a elibera resursele şi pentru a permite noiconexiuni care urmează să fie făcute.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

123 of 362 11/9/2

Page 124: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 124/362

 

 j J J Pal* rece'am conectareations ce-ar vrea doar să eliminaţi childSocket $

socket_close ($ childSocket); socket_close ($ ciorap);

Prize poate fi închis în orice ordine, dar este o practică bună de a închide ultima maestru în cazul în care aveţi la bucla prin mai multe conexiuniclient primul.

Testarea serverului soclu

Testarea a serverului soclu se poate face folosind un prompt sau un terminal simplu, aşa cum se arată în Figura 8.2. Cu linia de comanda deschis, începe versiunea de linie de comandă a PHP, care trece în dosarul eşantion, utilizând -F opţiune.

$ / Calea / catre / php-f / calea / catre / soclu / proba / simpleSocket.php

Figura 8.2

Serverul de soclu simplu execută în promptul de comandă

^ O © php - bash - 82x19

Ultima autentificare: Joi 03 ianuarie 10:56:16 pe ttypl S

Bine aţi venit la Darwin!

mJ-: eefe: mkeefei php5 - e £ / L IB rar y / Ueb S vreodat ă / Documente / clienti / Rezervaţi / Reds tar / ex-amper le

  / Ch \ 07/simpleSocket.php

Incepand Server Socket ...

Veţi observa că indicatorul promptă şi dispare fişierul PHP rapoartele nu există actualizări. Acest lucru nu poate fi un rezultat foarte de doritpentru că nimic nu este permiţându-vă să cunoaşteţi serverul este în curs de desfăşurare. Aveţi posibilitatea să adăugaţi o declaraţie de imprimarfoarte simplu în partea de sus a fişierului, cum ar fi:

<? Php

$ Host = "127.0.0.1"; $ port = "8888";

set_time_limit (0);

de imprimare "Server Socket Incepand ... \ n";

Dacă vă opriţi şi porniţi serverul soclu ar trebui să vedeţi mesajul imprimat, similar cu următorul:

$ / Usr / bin / php-f / calea / catre / simpleSocket.php Incepand Server Socket ...

Dacă reporniţi serve rul soclu de multe ori este posibil să vedeţi o avertizare menţionând că portul este în uz. Pute ţi încerca, either din nou sau alegun alt port pentru a continua testele.

Când serverul de soclu este corect execută aveţi posibilitatea să deschideţi un prompt de noi şi să încerce să se conecteze clientul cu serverul desoclu.

$ Telnet 127.0.0.1 8888

După o conexiune cu succes un mesaj similar cu următorul text trebuie să apară:

$ Telnet 127.0.0.1 8888 Încercând 127.0.0.1 ... Conectat la localhost. Caracter de evacuare este

Această aplicaţie acceptă un singur mesaj să fie trimis înainte de a fi încheiată. Dacă tastaţi altceva decât "sunt ti-e foame?" nu veţi vedea un răspucu excepţia cazului aţi modificat la întrebarea care este soli citat în cererea de soclu.

Aici este codul complet pentru acest exemplu:

<? Php

$ Host = "127.0.0.1"; $ port = "8888";

set_time_limit (0);

de imprimare "Server Socket Incepand ... \ n";

$ Ciorap = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

124 of 362 11/9/2

Page 125: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 125/362

 

socket_bind ($ ciorap, $ host, $ port); socket_listen ($ şosete, 4);

$ ChildSocket = socket_accept ($ ciorap); $ incomingData = socket_read ($ childSocket, 2048);

if (substr ($ incomingData, 0, -2) == "sunt ti-e foame?") {

$ Raspuns = "Răspuns server> Mi-am putea manca \ n!"; Socket_write ($ childSocket, $ răspuns, strlen ($răspuns));

}

socket_close ($ childSocket);

socket_close ($ ciorap);?>

Conexiunea se termină în mod automat atunci când mesajul este returnat deoarece nu există nici un sistem, în loc să se uite pentru mesajelesuplimentare. O cerere mai realist-ar asuma un fel de buclă este, în loc să se uite pentru mai mult de un mesaj.

Crearea unui server de soclu persistente

Serverul de socket persistente ar fi foarte asemănător cu exemplul anterior, cu excepţia unui control looping pentru mesaje noi.

Bucle recursive

PHP nu oferă un sistem asincron (bazat pe evenimente) ca v-ar găsi în ActionScript, dar aveţi posibilitatea să creaţi o buclă pentru a obţine acelaşirezultat.

De exemplu, aici este un foarte simplu în timp ce similar cu cel care va fi folosit în exemplul de conexiune permanentă bucla:

x = 0;

în timp ce (x <50) {

x + +;

}

Gestionarea de comunicaţii multiple

Cheia pentru a permite unui utilizator să trimită mai mult de un mesaj pe conexiunea este de a încheia socket_read apelurile care suntresponsabile pentru verificarea de mesaje noi într-o buclă.

do {

/ / Uite pentru mesaje noi

$ IncomingData = socket_read ($ childSocket, 2048);

if (trim ($ incomingData) == "sunt ti-e foame?") {

{R ăspuns = "R ăspuns server> Mi-am putea manca \ n!"; Socket_write ($ childSocket, {răspuns, strlen ($răspuns));

}

else if (trim ($ incomingData) == "ieşire") {

{R ăspuns = "La revedere \ n!";

socket_write ($ childSocket, {răspuns, strlen ($ răspuns));

socket_close ($ childSocket); break;

}

else {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

125 of 362 11/9/2

Page 126: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 126/362

 

$ R ăspuns = strtoupper (trim ($ incomingData)). "\ N"; socket_write ($ childSocket, $ răspuns, strlen ($răspuns));

}

}

while (true);

Dacă testa exemplu, conexiunea rămâne activă până când închideţi fie promptul sau tastaţi "exit", atunci când este conectat la cerere, careinformează serverul de soclu pentru a închide conexiunea. De asemenea, aveţi posibilitatea să tastaţi nimic în afară de "ieşire" sau la întrebarea

anterioară şi răspunsul va fi de intrare în majuscule.

Acest exemplu simplu nu are suport pentru mai mulţi clienţi, astfel încât odată ce clientul este închis, serverul se termină, de asemenea. În a douaparte a acestui capitol vă construi un soclu complet pe bază de aplicaţie de chat multiutilizator, care, prin definiţie, vor permite mai mult de oconexiune la un moment dat.

Tu ar trebui să înţeleagă acum, cum prize de muncă în PHP, precum şi cum să le pună în aplicare în moduri diferite, în funcţie de aplicaţie.Următoarea parte explică modul în care funcţionează în cadrul Flash prize. Apoi, în capitolul final, se combină Flash si PHP pentru a trimite / priinformatii folosind prize.

Flash este considerat partea de client a unei conexiuni socket. Acest lucru înseamnă că nu se poate implementa un server de soclu direct de la Fla

datorita faptului ca Flash este o aplicaţie client-side. Fiind capabil de a utiliza Flash ca un server socket, dacă a fost posibil, nu ar fi foarte benefic,datorită faptului că Flash este o aplicaţie grafică. Aceasta ar fi în esenţă, o risipă de resurse de a utiliza Flash într-un mediu de linie de comandă.

Acestea fiind spuse, Flash face un excelent client server de soclu. Telnet a fost folosit în secţiunea anterioară, care este o modalitate de a initializa conexiune client la un server socket. Flash permite conexiuni TCP, care necesită mai mult cod şi de configurare mult la început.

Cea mai mare parte a codului de conectare în secţiunea următoare ar putea fi construit într-o clasă comună sau bibliotecă pentru a minimizacantitatea de cod necesar pentru a crea o conexiune socket.

Iniţializez o conexiune socket

Prima parte a initializarea o conexiune socket este de a defini gazdă şi port pentru a conecta mai departe.

var gazdă: String = "127.0.0.1"; var portul: uint = 8 888;

Aceste două variabile vor trebui să fie la fel ca codul PHP scris de tine în secţiunea anterioară. Sau, dacă sunteţi folosind codul furnizat, puteţi săpăstraţi proba valorile doar afişate.

Odata ce variabile sunt definite, să creaţi o instanţă a clasei Socket. Constructorul acestei clase acceptă doi parametri. Primul este gazda, iar al doieste portul pentru a conecta mai departe.

var socket: Socket = new Socket (gazdă, port);

Pe măsură ce continuă să lucreze cu surse dinamice de date, vă găsiţi rapid că Stivuitoare buna eveniment face mai uşor de înţeles modul în careceva nu e de lucru. Acest lucru înseamnă că adăugarea ascultătorii eveniment la procesul de soclu este o idee bună. Începeţi prin construireaapeluri, şi de a crea apoi Stivuitoare eveniment mai târziu.

socket.addEventListener (Event.CLOSE, closeHandler); socket.addEventListener (Event.CONNECT,

connectHandler); socket.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); socket.addEventListene(SecurityErrorEvent.SECURITY_ERROR,

securityErrorHandler); socket.addEventListener (ProgressEvent.SOCKET_DATA, socketDataHandler);

Eveniment Stivuitoare

Funcţiile eveniment handler utilizat în această cerere eşantion urmări erorile în fereastra de ieşire. O cerere mai realist ar necesita o logică să seocupe de aceste erori şi să răspundă pentru utilizator în consecinţă.

closeHandler funcţie (eveniment: Event): void

trace ("Conexiunea la [" + + gazdă "] închise");

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

126 of 362 11/9/2

Page 127: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 127/362

 

ioErrorHandler funcţie (eveniment: IOErrorEvent): urme nule (event.text);

securityErrorHandler funcţie (eveniment: SecurityErrorEvent): urme nule (event.toString ());

Stivuitoare speciale

Acest exemplu are două Stivuitoare speciale eveniment. Rutina de tratare a primul eveniment de construcţii se numeşte atunci când o conexiuneeste de succes, care vă informează că mesajele pot fi trimise la server socket. Mesajele trimise înainte de o conexiune care se face ar putea duce laerori sau mesaje pierdute.

connectHandler funcţie (eveniment: Event): void {

trace ("Connected to [" + + gazdă "]");

}

connectHandler Funcţia este locul la orice apel de pe server ar trebui să fie. Acesta ar fi un loc bun pentru a adăuga apelul mesaj probă, cum afi:

connectHandler funcţie (eveniment: Event): void {

trace ("Connected to ["

try {

socket.writeUTFBytes

}

catch (e: IOError) {

trace (e);

}

}

Tratare doilea eveniment de construcţii se numeşte atunci când un răspuns este complet s-au adunat de pe server soclu. Aceasta este utilizatăpentru a asigura că mesajele parţiale nu sunt evaluate, astfel cum acestea ar putea provoca erori de programare, care ar fi greu pentru a urmări.

socketDataHandler funcţie (eveniment: ProgressEvent): void {

trace ("Socket Server Response Loaded");

}

Aceasta este funcţia în cadrul căreia toate cod de răspuns ar trebui să fie plasat, similară cu următoarea:

socketDataHandler funcţie (eveniment: ProgressEvent): void {

str. var: String = socket.readUTFBytes (socket.bytesAvailable); urme ("Socket R ăspuns Server:" + str);

}

După cum puteţi vedea, de lucru cu prize in Flash nu este diferit de orice alt obiect de date. Consecvenţa codul de pe pachetele diferite este unaspect foarte mare de ActionScript.

Conexiunile la distanţă soclu

Exemplul anterior a fost conectarea la o priză locale (pe aceeaşi maşină), dar este mult mai realist ca cererea dumneavoastră ar fi conectarea la opriza de la distanţă. Acest lucru înseamnă că trebuie să instituie un încredere între client şi serverul care execută aplicaţia server socket.

+ + Gazdă "]")

(("Sunt ti-e foame \ n?");

De securitate încredere

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

127 of 362 11/9/2

Page 128: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 128/362

 

O încredere utilizează crossdomain.xml fişier cu porturile care sunt permise, cum ar fi:

<Xml version = "1.0"?>

<! DOCTYPE cross-domain-politica SISTEM

"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy>

<Permit accesul-din-domeniu = "*" pentru a-porturi = "8888" /> </ Cross-domain-politică>

Acest fişier de acces este să permită oricărui client să se conecteze pe portul 8888 şi nu altele. Puteţi defini, de asemenea, un domeniu în cazul încare această cerere soclu va fi accesibil doar de pe un alt site Web, cum ar fi.

<Xml version = "1.0"?>

<! DOCTYPE cross-domain-politica SISTEM

"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy>

<Permit accesul-din-domeniu = "anothersite.com " pentru a-porturi = "8888" /> </ cross-domain-politică>

A doua parte a încrederii de securitate este o chemare la allowDomain în fişierul Flash. Această metodă a clasei de securitate este responsabilpentru definirea unui domeniu care este permis să se conecteze la acest client. Această conexiune va avea loc numai în cazul în care site-ul de ladistanţă are o buna crossdomain fişier.

Security.allowDomain ("example.com");

 Încărcarea fişierelor de politică

În cazuri rare, fişierul de cross-domain politică nu este în locaţia implicită, astfel încât un apel la loadPolicyFile pot fi făcute pentru a informaFlash, unde să găsiţi cele mai crossdomain.xml fişier.

Security.loadPolicyFile ("http://example.com/newloc/crossdomain Xml ").;

Tu ar trebui să ştie acum cum să setaţi o conexiune client bazate pe socket in Flash. După cum puteţi vedea, cea mai mare parte a codului utilizat într-o conexiune socket este tratată de către Flash.

După cum sa afirmat la începutul acestei secţiuni, codul folosit pentru a construi o conexiune socket poate fi reutilizat în întreaga proiecteledumneavoastră.

Folosind o clasa pentru conexiunile de soclu

Pentru a înţelege mai bine conexiuni socket in Flash, haideti sa incepem prin a construi un exemplu de bază socket. Apoi, o dată elementele de basunt în vigoare, următoarea secţiune va acoperi complet construirea unui soclu aplicatii bazate pe chat-ul folosind Flash şi PHP

Soclu clasa de bază

Aici este o clasă de bază socket, care defineşte elementele pur personalizabil. Pur şi simplu a salva acest cod într-un fişier ActionScript cu numeleSimpleSocket în acelaşi director ca documentul Flash probă.

Pachetul {

flash.errors de import .*; flash.events de import .*; import flash.net.Socket;

publice clasa SimpleSocket extinde Socket {

gazdă publice var: String; var publice portuare: uint; soclu var privat: Socket;

public static var SOCK_CONNECTED: String = "onSockConnect"; SOCK_IOERROR publice var static: String ="onSocklOError";

Funcţia SimpleSocket (h: String, p: uint) {

gazdă = h; port = p; socket = aceasta; super (gazdă, port); initListeners ();

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

128 of 362 11/9/2

Page 129: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 129/362

 

a functiei publice SendMessage (str: String): void {

dacă (conectat) {

socket.writeUTFBytes (str + "\ n");

}

else {

trace ("Nu conectat, nu mesaj trimis!");

}

}

Funcţia readMessage publice (): void {

dacă (conectat) {

var str: String =

socket.readUTFBytes (socket.bytesAvailable); urme ("Server Socket Răspuns:" + str);

else {

trace ("nr citi mesajul, care nu au legătură!");

}

}

initListeners privat function (): void {

socket.addEventListener (Event.CLOSE, closeHandler); socket.addEventListener (Event.CONNECT,connectHandler); socket.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler);

}

closeHandler private function (eveniment: Event): void {

trace ("Conexiunea la [" + + gazdă "] închise");

}

ioErrorHandler private function (eveniment: IOErrorEvent): void {

dispatchEvent (nou Eveniment (SOCK_IOERROR));

}

connectHandler private function (eveniment: Event): void {

trace ("Connected to [" + + gazdă "]"); dispatchEvent (Eveniment nou (SOCK_CONNECTED));

}

socketDataHandler private function (eveniment: ProgressEvent): void {

readMessage ();

}

}

} / / Ultimele două bretele sunt aliniate pentru tipărire

Utilizarea clasa SimpleSocket

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

129 of 362 11/9/2

Page 130: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 130/362

 

Procesul de utilizare a SimpleSocket clasă este destul de simplă. Începeţi prin crearea unui nou film Flash. Acest film face un apel de import,care este responsabil pentru încărcarea clasa personalizat.

SimpleSocket de import;

var ciorap: SimpleSocket;

Pentru a crea o conexiune socket, începe prin a face o nouă instanţă a SimpleSocket de clasă, care trece în gazdă şi informaţiile portul pentruserverul de soclu pe care doriţi să vă conectaţi.

ciorap = new SimpleSocket ('127 .0.0.1 ', 8888);

În cazul în care conectarea apelului socket este terminat, veţi dori să atribui ascultătorii la evenimentele particularizate. Aceasta clasa simplu aredoar evenimente pentru o conexiune de succes şi un altul pentru orice eroare de conexiune. Aveţi posibilitatea să extindeţi clasă şi se adaugă maimult Stivuitoare eveniment după cum este necesar.

sock.addEventListener (SimpleSocket.SOCK_CONNECTED, conectat); sock.addEventListener(SimpleSocket.SOCK_IOERROR, IOError);

Ultimul pas este de a defini funcţiile tratare a evenimentului, cum ar fi:

Funcţia IOError (e: Event): void {

trace ("Nu se poate conecta la" + + sock.host "pe portul" + sock.port);

}

funcţie legată de (e: Event): void {

sock.sendMessage ("sunt ti-e foame?");

}

Puteţi rula acum filmul şi ar trebui să vedeţi urmatoarea iesire: dacă construit sau încărcate codul serverul socket si serverul este în curs dedesfăşurare.

"Conectat la [127.0.0.1] Răspuns Server Socket: esti acolo?"

Aceasta clasa poate fi extins pe pentru a permite cerinţe mai specifice, dar trebuie să aveţi o înţelegere de bază a modului în care funcţioneazăsistemul de soclu in Flash. În acest moment ar trebui să ştiţi, de asemenea, cum să construiască o clasă personalizat să se ocupe de majoritatea muşi comunicarea procesului.

Secţiunea finală se concentrează pe construirea un obicei client de chat multiutilizator folosind datele de învăţat în secţiunile anterioare.

În secţiunile anterioare, aţi învăţat cum să construiască un simplu server de PHP soclu. Ai construit apoi un client flash de bază pentru a comuniccu serverul de soclu PHP. În această secţiune, se combină paşii într-o singură aplicaţie din lumea reala. Aplicaţia vă va fi clădirea este un client dechat multiutilizator care rulează în Flash cu un server socket PHP să se ocupe de conexiuni.

Această aplicaţie multiutilizator chat-ul va permite mai multe conexiuni client pentru a vorbi unul cu altul cu admin a putea trimite mesajespecifice cu privire la statutul si detaliile conexiunii.

PHP server de soclu pentru client de chat

Partea PHP a cererii va fi de două fişiere: real de Class Server socket si pagina de asteptare pentru a porni serverul soclu.

Serverul de socket Scheletul de clasă arată ca următorul bloc de cod. După cum puteţi vedea, clasa soclu are multe metode. Breaking-le în sus înuşor de a menţine porţiuni va crea un produs mai bun în cele din urmă.

clasa ChatServer {

ChatServer funcţia ($ ip = '192 .168.1.110 ', $ port = 8888) {}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

130 of 362 11/9/2

Page 131: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 131/362

 

startServer funcţia publică () {}

stopServer funcţia publică () {}

initLoop private function () {}

createMasterClient private function () {}

notifyClient funcţie privat ($ sockID, $ tampon) {}

notifyClients privat funcţia ($ clienti, şosete $, $ tampon, $ admin) {}

handleError funcţie privat ($ str, $ err) {} endSocket funcţie privat ($ sockID = null) {} funcţiaserverMessage privat ($ str) {}

}

Chat proprietăţi

Prima parte să se concentreze asupra în clasă este proprietăţi, care sunt responsabile pentru stocarea diverse mesaje de eroare, precum şi detalii dconectare.

privat $ AdresăIP = null; privat $ port = null;

privat $ masterClient = null; privat $ clientii;

/ / Server Mesaje

private static $ SOCKET_CREATE_FAIL = "socket_create () nu a reuşit"; private static $ SOCKET_BIND_FAIL "socket_bind () nu a reuşit"; private static $ SOCKET_LISTEN_FAIL = "socket_listen () nu a reuşit";private static $ SOCKET_ACCEPT_FAIL = "";

privat $ LINE_ENDING = "\ n";

private static $ SHOW_ERRORS = 1; / / afişare erori (0 = off, 1 = pornit)

Aceste metode sunt toate stabilite ca fiind private pentru a se asigura că acestea nu sunt accesibile accidental la alte scripturi. Aveţi posibilitatea sconfiguraţi getters şi setteri, dacă vă decideţi că doriţi să partajaţi aceste proprietăţi sau orice într-o clasă.

Utilizaţi prudenţă atunci când permit metode si proprietati care urmează să fie accesibile în întreaga lume. Imposibilitatea de a bloca în mod

corespunzător în jos aceste elemente pot duce la defecte majore de securitate.

Metoda constructorul este responsabil pentru stocarea gazdă şi informaţii portuare. Această metodă creează, de asemenea, o gamă nouă care vastoca informaţii legate de clienti. Veţi observa că valorile cele mai comune in constructor sunt predefinite. Acest lucru înseamnă că, dacă nu gazdăsau port este definit de script-ul de asteptare aceste valori implicite sunt utilizate:

ChatServer funcţia ($ ip = '127 .0.0.1 ', $ port = 8888) {

$ This-> IPAddress = $ ip, $ this-> port = $ port;

$ This-> clienti = array ();

}

Funcţia următoare este numit de către fişierul PHP al doilea şi este în cazul în care serverul funcţia de master, precum şi funcţia de sistemul deascultare sunt numite de la. stopServer Funcţia este lăsat gol, deoarece serverul de soclu este oprit atunci când conexiunea se termină. Ai puteadăuga mai multe logica care poate să permită turnoff de la distanţă sau, eventual, chiar oprire la un moment dat.

startServer funcţia publică () {

$ This-> createMasterClient (); $ this-> initLoop ();

}

stopServer funcţia publică () { / * Gol * / }

initLoop funcţie, care se numeşte atunci când serverul începe, este nucleul a serverului soclu. Această funcţie este responsabil pentru iniţializaconexiuni noi şi de ascultare pentru mesajele trimise de la conexiunile existente. Această funcţie se referă la marea majoritate a acestei aplicaţii. Vuita la ea in unele parti.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

131 of 362 11/9/2

Page 132: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 132/362

 

Primul pas al acestei funcţii este de a reseta $ SocketsChanged variabilă care deţine lista modificată de conexiuni socket activă.

initLoop private function () {

$ SocketsChanged = null;

while (true) {

/ / Conectare şi bucla mesaj

}

Conţinutul în timp ce buclă este locul unde marea majoritate a clientului şi de verificare mesaj apare. socket_select Funcţia esteresponsabil pentru a schimba starea de citire a unei prize de date noi în cazul în care este găsit, pe care-l marchează şi adaugă priza la gama deprize care urmează să fie actualizat prin intermediul looped. Acest lucru este folosit pentru a limita verificarea datelor în foreach bucle.

 j ^ J JSoc'IET- Funcţia ^ selectaţi modifică matrice. Este o idee bună să faceţi o copie mai întâi.

în timp ce {

SocketsChanged $ = $ this-> clienti;

$ A scrie = NULL; $, cu excepţia NULL =;

socket_select ($ socketsChanged, $ a scrie, cu excepţia $, NULL);

foreach ($ socketsChanged ca $ socket) {

}

}

Ai putea extinde această funcţionalitate la mai multe metode in clasa, dar este o idee bună de a păstra toate codul relevant împreună.

foreach bucla trece prin fiecare conexiune socket activă. Este verificat împotriva serverul master şi apoi verificate pentru a se asigura un clientactiv există. Dacă nu există client activ ieşirile de script-ul pentru ca ceva a mers gresit si acest cod nu va putea continua.

foreach ($ socketsChanged ca $ socket) {

if ($ socket == $ this-> masterClient) {

if (($ client = socket_accept ($ this-> masterClient)) <0)

{

$ This-> handleError (ChatServer:: SOCKET_ACCEPT_FAIL, continua;

}

else {

array_push ($ this-> clienti, $ client);

}

}

else {

}

În cazul în care clientul a fost adăugată şi instanţa serverul master există, altfel porţiune a codului este rulat. Această parte verifică tamponmesajului pentru un mesaj valabil. Dacă nu se găseşte tampon valabil, care să facă legătura clientii se termină. Aceasta rutina curăţire asigură căresursele nu sunt irosite.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

132 of 362 11/9/2

Page 133: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 133/362

 

Excluzând serverul master de la comunicare

Presupunând că un mesaj valabil este găsit, valoarea este stocată într-o variabilă şir nou şi serverul master este eliminat din matrice. Acest lucrueste făcut pentru a asigura orice mesaje sau de întreţinere nu va avea loc pe care să facă legătura maestru. De exemplu, un mesaj difuzat informarclientilor al serviciului nu este ceva serverul master trebuie să primească.

array_shift Funcţia elimină primul element şi rekeys matrice, schimbarea practic toate elementele de unul.

if ($ socket == $ this-> masterClient) {

}

else {

$ Buffer = / / completat de către socket_recv (nedocumentat)

$ Bytes = socket_recv ($ socket, $ tampon, 2048, 0);

if ($ bytes == 0) {

$ This-> endSocket ($ socket);

}

else {

 Allclients $ = $ this-> clienti; array_shift ($ allclients); / / elimina masterat specialString $ = $tampon;

}

}

Parametri speciali de chat

Când un mesaj valabil este găsit, acesta este verificat pentru parametrii de construcţii. Acest lucru ar putea fi o simplă "Ieşire" cerere sau unpavilion admin mult mai avansate, care este folosit pentru a notifica clienţii cu mesaje de serviciu. Tipurile de construcţii mesaj sunt doar un cazexemplu de utilizare. Aveţi posibilitatea să modificaţi cu uşurinţă, să adăugaţi, eliminaţi sau mesaje speciale, în funcţie de modul în care va setatclientul dumneavoastra de chat.

/ / Cauta far admin

if (substr ($ specialString, 0, 7) == "[admin]") {

$ This-> notifyClients ($ allclients, $ soclu, substr ($ tampon, 7), true);

"Ieşire" Mesajul este numit de către un client care vrea să ieşi din chat. În cazul în care utilizatorul închide pur şi simplu filmul Flash, serverusoclu elimină ghidul din lista de pe paşaport bucla următoare. Aceasta ofera utilizatorului o modalitate de a părăsi sistemul de curat şi de a vedeo "La revedere" mesajul ca el sau ea este iesirea.

else if (substr ($ specialString, 0, 4) == "ieşire") {

$ This-> serverMessage ("Connection inchiderii:". $ Socket); $ this-> notifyClient (soclu $, "Goodbye");$ this-> endSocket ($ socket);

}

O aplicatie de chat mult mai avansate ar fi, probabil, documentaţia pe site-ul Web. Acest "Ajutor" comandă vă arată o altă modalitate de a livracomenzile mai frecvent utilizate direct pentru clienţii dumneavoastră conectat. Veţi observa această comandă este foarte asemănătoare cu "Om"comandă care se găseşte în terminale UNIX.

else if (substr ($ specialString, 0, 4) == "ajutor") {

$ This-> notifyClient ($ socket, "Chat Ajutor: \ n" "Tastaţi exit pentru a părăsi chat".);

}

Dacă nici un mesaj de construcţii este găsit, apoi pur şi simplu difuzat mesajul nemodificat la toate alţi clienţi. Acest sistem va afişa chiar

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

133 of 362 11/9/2

Page 134: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 134/362

 

comentariul tau inapoi la tine. O cerere mai completă ar trebui să fie configurat pentru a exclude autorul comentariu de la curs de actualizare.

else {

$ This-> notifyClients ($ allclients, soclu $, $ buffer);

}

După cum puteţi vedea, initLoop Metoda are o mulţime de responsabilităţi şi gestionează o bună parte a serverului soclu întregul.

Masterat client de conectare

createMasterClient Metoda se numeşte atunci când serverul soclu începe. Această metodă iniţializează serverul de soclu şi creează legăturade master la care toti ceilalti clienti se conecteze.

createMasterClient private function () {

if (($ this-> masterClient = socket_create (AF_INET, SOCK_STREAM, SOL_TCP)) <0)

{

$ This-> handleError (ChatServer:: SOCKET_CREATE_FAIL, $ this-> masterClient);

Opţiunile socket sunt setate pentru a permite reutilizarea adresa locale, care informează că PHP suprascrierea care să facă legătura existentă estepermisă. Tu ar stabili acest lucru fals dacă doriţi să păstreze o legătură unică.

socket_set_option ($ this-> masterClient, SOL_SOCKET, SO_REUSEADDR, 1);

Înainte de conectarea iniţială se poate face, trebuie să vă asiguraţi că adresa este disponibil, şi nu în utilizarea de către o aplicaţie existentă.

if (($ bindRes = socket_bind ($ this-> masterClient, $ this-> AdresăIP, $ this-> portul)) <0)

{

$ This-> handleError (ChatServer:: SOCKET_BIND_FAIL, bindRes $);

}

Presupunând că adresa este disponibil, un apel la socket_listen se face, ceea ce face soclu pregătit să primească solicitările de conectare.

Odată ce conexiunea este facuta, clientul principal este adăugat la client matrice şi procesul de iniţializare este complet.

if (($ r = socket_listen ($ this-> masterClient, 5)) <0) {

$ This-> handleError (ChatServer:: SOCKET_LISTEN_FAIL, $ ret);

}

$ This-> clienti = array ($ this-> masterClient);

Ultimul pas în createMasterClientmetoda este de a trimite un mesaj server care informează operatorul cu serverul care un server de chatnou a fost iniţializat. În acest exemplu, operatorul este tine, deci se va observa o declaraţie de imprimare în prompt atunci când porniţi serverul.

$ This-> serverMessage ("Server Chat începute");

}

Notificare a unui anumit client

Există două tipuri de notificări clientului în această aplicaţie de chat. Primul tip este o notificare la nivel mondial şi al doilea tip este pentru unsingur utilizator. Notificarea pentru un singur utilizator este cel mai frecvent folosit pentru a trimite mesaje de stare pentru un client.

Metoda de un singur utilizator acceptă doi parametri care definesc ID-ul soclu specifice şi pentru a trimite mesajul la acel client. A foreach buceste folosit pentru a găsi specifice ale clientului, şi, dacă este găsit, un apel la socket_write se face, trimite mesajul.

notifyClient funcţie privat ($ sockID, $ tampon) {

foreach ($ this-> clienti ca $ client) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

134 of 362 11/9/2

Page 135: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 135/362

 

if ($ client == $ sockID) {

socket_write ($ client, tampon $ $ this-> LINE_ENDING.);

}

}

}

Notificare tuturor clientilor 

Notificarea la nivel mondial este similar cu metoda de un singur utilizator, cu excepţia faptului că se verifică pentru a vedea dacă mesajul estetrimis să fie marcată ca un mesaj de admin. Drapelul admin poate fi setat atunci când un apel la notifyClients se face. Valoarea implicită estfalse, asigurându-se că mesajele client nu pot fi marcate ca provenind de la admin.

notifyClients privat funcţia ($ clienti, şosete $, $ tampon, $ admin) {

foreach ($ clienti ca $ client) {

if ($ admin == true) {

socket_write ($ client, "ANUNŢ ADMIN:". $ buffer);

}

else {

socket_write (. $ client, $ ciorap ", a scris:" $ tampon.);

}

}

}

Manipulare erori

Deoarece cererea va continua să funcţioneze, aceasta este obligată să aibă o eroare sau două. Mai degrabă decât arunca aceste erori departe, aceast

este o idee bună să-i prindă şi cel puţin să le afişa la server. Un exemplu de un handler de eroare de bază poate fi vazut aici:

Funcţia handleError privat ($ str, $ err) {

în cazul în care (ChatServer:: SHOW_ERRORS) {

$ This-> serverMessage (($ str ": un motiv:" $ err) $ this-> LINE_ENDING...);

}

}

handleError metodă verifică mai întâi că erorile ar trebui să fie afişate prin verificarea statică SHOW_ERRORS de proprietate, definite la partea dsus a fisierul clasei. Mesajul a trecut-în eroare este transmis la serverMessage metodă, care se imprimă.

Ai putea apela serverMessage metoda de direct, dar folosirea acestui sistem releu vă permite să capcană erorile şi să păstraţi codul curat. Nuavea sens pentru a avea SHOW_ERRORS condiţie în serverMessage pentru că un mesaj nu este întotdeauna o eroare.

Terminarea unei conexiuni

Conexiunea se încheie în cazul în care clientul inchide browser-ul sau aplicarea. Cu toate acestea, utilizatorul poate închide, de asemenea,conexiunea prin trimiterea de construcţii "Ieşire" parametru. O metodă de reziliere soclu este utilizată pentru a asigura matrice de conexiuniactive este corect manipulat. Această metodă va elimina, de asemenea, comandantul dacă nu există clienti activi, care se încheie în cele din urmăconectare la server socket sine.

array_search funcţie este utilizată pentru a găsi ID-ul soclu pentru a închide. Această funcţie returnează ID-ul de la matrice. Acest lucru esteutilizat pentru a elimina conexiunea din listă şi a termina conexiunea socket specifice.

endSocket funcţie privat ($ sockID = null) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

135 of 362 11/9/2

Page 136: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 136/362

 

/ / Master închide în cazul în care nu este definită soclu

if ($ sockID == null) {

SockID $ = $ this-> masterClient;

}

$ Index = array_search ($ sockID, $ this-> clienti);

unset ($ this-> clienti [$ index]);

socket_close ($ sockID);

}

Monitorizare server 

Ultima metodă a clasei chat-ul este folosit pentru a imprima mesaje despre serverul soclu direct la activ prompt, în general, care rulează pe serverWeb la care clientii sunt de conectare.

Funcţia serverMessage privat ($ str) {

imprimare $ str. $ This-> LINE_ENDING;

}

Conectarea la serverul de soclu

Conexiunea la clasa chat-ul construit în secţiunea anterioară este tratată de către al doilea fişier PHP. Acest fişier va fi cel pe care îl va suna atuncicând doriţi să porniţi serverul de chat. Construirea sistemului, în acest mod vă permite să părăsească clasa chat-ul pe cont propriu şi douăexemplare, care să facă legătura, fără modificarea codului.

Construirea fişierul de conexiune

Aici este o conexiune de exemplu pe localhost domeniu, de asemenea, denumit în mod obişnuit la adresa loopback a aparatuluidumneavoastră sau pe un server.

# / Usr! / Bin / php-q <? Php

include "ChatServer.php";

Prima linie este utilizat pentru a defini comanda la terminal. Acesta nu este necesară, dar nu înseamnă că puteţi exclude switch-uri, în acest caz -care este utilizat pentru a suprima antetul HTTP de ieşire, atunci când apelaţi php fişier. Următoarea linie include ChatServer clasă,permiţându-i să fie sunat din acel punct.

Odată ce fişierul este inclus în mod corespunzător puteţi face o instanţă de chat nou, care trece în gazdă şi portul pe care doriţi să înceapă peascultare. În acest exemplu, gazda local este utilizat şi este obligată la portul 8888. Numărul portului nu trebuie să fie la fel, ci doar trebuie să fiedeschisă. Este o idee bună de a alege un număr de port care nu vor fi utilizate de către alte aplicaţii de pe sistemul dumneavoastră.

$ ChatServer = new ChatServer ("127.0.0.1", 8888);

Ultimul pas este de a porni server şi permite altora să se conecteze la ea. Pentru a opri serverul puteti inchide terminalul sau apăsaţi Ctrl + C, care

 în cele mai multe terminale se va termina procesul de activ.

$ ChatServer-> startServer ();

Aici este codul complet pentru acest test simplu:

# / Usr! / Bin / php-q <? Php

include "ChatServer.php";

$ ChatServer = new ChatServer ("127.0.0.1", 8888);

$ ChatServer-> startServer ();?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

136 of 362 11/9/2

Page 137: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 137/362

 

Testarea conexiunii

Pentru testarea simplu, aveţi posibilitatea să ataşaţi la serverul de chat folosind metoda telnet, după cum se arată în figura 8.3, care a fost explicatla începutul capitolului. Această metodă reprezintă o limitare grafic si usurinta in utilizare, astfel încât următoarea secţiune este procesul dedezvoltare a cererii Flash, care se va conecta la acest server soclu PHP.

Figura 8.3

Exemplu de serverul de chat se execută în command prompt

Construirea client Flash

Flash chat-ul client este utilizat pentru a interacţiona cu serverul de soclu. Această aplicaţie client poate fi utilizat la nivel local sau pe un site Web în funcţie de modul în care este configurat serverul de soclu. Pentru acest exemplu, codul presupune că serverul de soclu se execută la nivel loca

Partea de proiectare a clientului Flash a fost finalizată pentru tine, aşa cum se arată în Figura 8.4. Acest fişier de pornire poate fi găsită pe site-ulWeb pentru această carte, împreună cu codul pentru toate celelalte secţiuni.

Prima parte a codului Flash initializeaza gazdă şi informaţiile de port, care este trecut într-o nouă instanţă a Priză clasă.

var gazdă: String = "127.0.0.1"; var portul: uint = 8 888;

var socket: Socket = new Socket (gazdă, port);

Figura 8.4

Cererea completată, care pot fi găsite pe site-ul Web al căr ţii

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

137 of 362 11/9/2

Page 138: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 138/362

 

După ce conexiunea este facuta, atribuiţi ascultătorii eveniment, care se va numi atunci când date noi sunt trimise sau înc ărcate.

socket.addEventListener (Event.CLOSE, closeHandler); socket.addEventListener (Event.CONNECT,connectHandler); socket.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); socket.addEventListene(SecurityErrorEvent.SECURITY_ERROR,

securityErrorHandler); socket.addEventListener (ProgressEvent.SOCKET_DATA, sockHandler);

Clientul are de asemenea nevoie de chat Stivuitoare eveniment care va fi atribuit la caseta de mesaj şi butoanele textului prezentarea de intrare, cuar fi:

msgTxt.addEventListener (Event.CHANGE, inputHandler);

clearBtn.addEventListener (MouseEvent.CLICK, clearButtonHandler); sendBtn.addEventListener(MouseEvent.CLICK, sendButtonHandler);

De tratare a evenimentelor din urma vor fi alocate la tastatură pentru a permite utilizarea a tasta Enter pentru expedierea mesajelor. Acest lucru neste un pas necesar, dar adaugă funcţionalitate la cerere.

addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler);

Tratare a evenimentului funcţii

Funcţiile pe care sunt atribuite Stivuitoare eveniment pot fi vazute in codul de mai jos. După cum puteţi vedea, aceste Stivuitoare eveniment aufuncţionalitate de bază pentru acest exemplu, dar ar putea fi extins într-o aplicaţie mai lumea reală.

closeHandler funcţie (eveniment: Event): void {

statusMessage ("Conexiunea la [" + + gazdă "] închis",

"# FF0000"); disableInterface ();

}

connectHandler funcţie (eveniment: Event): void {

statusMessage ("Connected to [" + + gazdă "]", "# 006600"); sendRequest ();

}

ioErrorHandler funcţie (eveniment: IOErrorEvent): void {

statusMessage (event.text, "# FF0000");

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

138 of 362 11/9/2

Page 139: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 139/362

 

}

securityErrorHandler funcţie (eveniment: SecurityErrorEvent): void {

statusMessage (event.toString (), "# FF0000");

}

sockHandler funcţie (eveniment: ProgressEvent): void {

readResponse ();

}

Capcane taste apăsate

De tratare a evenimentelor-cheie are cod special. Acest eveniment capcane tasta în prezent presat şi controale pentru a vedea dacă acesta este petasta Enter. Pentru acest exemplu, tasta numai pentru a căuta este Enter. Daca aveti nevoie de mai mult de una, le-ai putea defini într-o matrice sauutilizaţi o Comutator caz .. declaraţie.

În cazul în care tasta Enter este apasata, o chemare la dispatchEvent se face, forţând clic pe butonul Remitere.

keyDownHandler funcţie (e: KeyboardEvent): void {

dacă (e.keyCode == Keyboard.ENTER) {

sendBtn.dispatchEvent (nou MouseEvent (MouseEvent.CLICK));

}

}

Trimiteti un mesaj pentru manipulare

Manipulare de tasta de apelare pentru a face un eveniment faceţi clic pe butonul Remitere, care este atribuit următoarea funcţie. Această funcţieverifică lungimea msgTxt TextInput şi, în cazul în care lungimea este mai mare decât zero, mesajul este pregătit şi trimis.

Ultimul pas a acestei functii este de a goli caseta de mesaj pentru a se asigura acelaşi mesaj nu este retrimis. Ai putea adăuga acest cod decompensare în conductorul de stare. Acest lucru ar clar domeniul Odată ce ştii mesajul a fost trimis. Acest lucru vă permite să păstreze mesajul şi

evita mesajele pierdut din cauza la erori în reţea.

sendButtonHandler funcţie (e: MouseEvent): void {

dacă (msgTxt.text.length> 0) {

writeLine (msgTxt.text);

clearBtn.dispatchEvent (nou MouseEvent (MouseEvent.CLICK));

}

}

Ştergerea de intrare mesajul

clearButtonHandler funcţie este numită ori de câte ori doriţi să ştergeţi câmpul de introducere a textului şi dezactiva butonul Remitere pânăun mesaj nou este înscris. Butoanele vor fi dezactivate atunci când expedierea eveniment CHANGE în secţiunea următoare.

clearButtonHandler funcţie (e: MouseEvent): void {

 msgTxt.text = "";

 msgTxt.dispatchEvent (nou Eveniment (Event.CHANGE));

}

Verificarea lungimea de introducere a textului

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

139 of 362 11/9/2

Page 140: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 140/362

 

Când un mesaj nou este înscris sau în caseta de intrare este debifat ă, un apel la SCHIMBAREA eveniment de pe msgTxt caseta în care se face. Aceveniment este responsabil pentru verificarea lungimea textului în caseta de intrare şi activarea sau dezactivarea Remitere şi butoane clare, aşa cuse arată în Figura 8.5, în funcţie de rezultatul controlului lungime.

inputHandler funcţie (e: Event): void {

dacă (e.target.text.length> 0) {

clearBtn.enabled = true; sendBtn.enabled = true;

}

else {

clearBtn.enabled = false; sendBtn.enabled = false;

}

}

FIGURA 8.5

Rezultate aplicare, în statul cu handicap

Mentinerea o interfaţă stabilă

Pentru a crea o aplicaţie stabilă, interfata si butoanele sunt dezactivate atunci când o conexiune nu este prezent.

Funcţia enableInterface (): void {

 msgTxt.enabled = true; bodyTxt.enabled = true;

}

Funcţia disableInterface (): void {

 bodyTxt.editable = false; msgTxt.enabled = false; clearBtn.enabled = false; sendBtn.enabled = false;

}

Aceste permite şi dezactivaţi Funcţiile sunt denumite de la alte porţiuni de cod, în funcţie de rezultatul conexiune activă. De exemplu,disablelnterface funcţie este numit de closeHandler, care este expediat atunci când o conexiune activă este încheiată.

closeHandler funcţie (eveniment: Event): void {

disableInterface ();

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

140 of 362 11/9/2

Page 141: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 141/362

 

Trimiterea cererea iniţială

sendRequest funcţie este apelată atunci când o conexiune care se face. Această funcţie trimite date la funcţia de starea şi şterge orice informaţiiexistente în coada de aşteptare care să facă legătura soclu.

Funcţia sendRequest (): void {

statusMessage ("Trimite cerere iniţială a [" + + gazd ă "]", "# 006600"); socket.flush (); enableInterfac();

}

Trimiterea de mesaje către server soclu

Procesul de a trimite efectiv mesaje server socket este manipulat în writeLine funcţie. Acest writeLine Funcţia este numit de la intrare şi sdepună Stivuitoare, care sunt definite în partea anterioară a codului.

Funcţia writeLine (str: String): void {

}

Prima parte a funcţiei este adăugarea o noua linie la mesajul, pe care le poate aminti este sfârşitul de indicator de mesaj în PHP.

str + = "\ n";

Această funcţie face, de asemenea, utilizarea încercaţi .. captură stil de programare pentru a asigura erori în procesul de trimitere în mocorespunzător sunt capturate şi ascunse din partea utilizatorului. Pentru simplitate, eroarea este afişată în fereastra de ieşire. Într-o aplicaţie mairealist, ce-ar vrea să informeze utilizatorul în cazul în care mesajul nu a fost trimis, precum şi stoca mesajul să încerce să-l trimită din nou maitârziu.

try {

socket.writeUTFBytes (str);

}

catch (e: IOError) {

trace (e);

}

Manipulare actualizări de stare

Aceasta aplicatie are o casetă de stare, care este folosit pentru a notifica utilizatorul de conectare sau posibile p robleme de mesaj. Toate acesteactualizări de stare sunt trimise la statusMessage funcţie, care intrări-le în caseta de statutul şi culori le în consecinţă.

Funcţia statusMessage (str.: String, culoare: String = "# 000000"): void {

statusTxt.htmlText + = "<font color=\"" + culoare + "\">" + str + "</ font>";

}

O culoare implicită

care se aplică

în cazul în care apelantul uită

la o defini. Imposibilitatea de a include o culoare implicită

ar putea duce la text neste adăugat.

Funcţia ultima în această aplicaţie de chat bazate pe soclu se numeşte atunci când un mesaj nou este primit de la serverul de soclu.

Funcţia readResponse (): void {

}

Prima parte a acestei funcţii preia mesaj nou de la clasa de socket si atribuie-l la str. variabilă, care este folosit în partea rămasă din aceastăfuncţie.

str. var: String = socket.readUTFBytes (socket.bytesAvailable);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

141 of 362 11/9/2

Page 142: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 142/362

 

Înainte de mesaj poate fi afişat, trebuie să eliminaţi orice noi linii suplimentare care ar putea afecta modul de afişare a textului. Acest lucru serealizează cu ajutorul unui foarte de bază substring funcţie care returnează mesajul cu excepţia ultimele două caractere, care, în acest caz, ar f"\ R \ n".

/ / Benzi off line feed-uri

dacă (str.substring ((str.length-2), str.length) == "\ r \ n") {

trace ("gasit \ \ n \ \ r");

str. str.substring = (0, (str.length-2));

}

După ce liniile noi au fost înlăturate, următorul pas este de a determina dacă acest mesaj a fost trimis de la un admin. Acest exemplu permiteoricărui utilizator * * să fie un admin. Într-o aplicaţie mai completă, ce-ar vrea să solicite autentificare înainte de un cont de administrator ar puteautilizate. Dacă mesajul este de la un admin, conţinutul mesajului sunt colorate în roşu, pentru a face mesajele admin iasă în evidenţă.

dacă (str.substring (0, 12) == "NOTICE ADMIN") {

bodyTxt.htmlText + = "<font color=\"#FF0000\">" + str + "</ font>";

}

Dacă mesajul este standard, atunci este pur şi simplu adaugă la Textarea şi funcţia de capete, de aşteptare pentru următorul mesaj pentru a fi

preluat.

else {

bodyTxt.htmlText + = "<font color=\"#000000\">" + str + "</ font>";

}

Asta este tot ce există la client de chat bazate pe memorie flash cu un server socket în PHP. În acest moment, pute ţi porni serverul soclu (dacă nueste deja de funcţionare) şi testa client de chat, după cum se arată în figura 8.6. Fiind că acest sistem este destinat pentru mai multe conexiuni, putsuna peste o parte din prietenii dvs. şi le-au ao testa.

Sau, aveţi posibilitatea să modificaţi codul pentru a permite conexiunile la distanţă şi permite utilizatorilor să se conecteze mai multe printrimiterea unui legătură într-aplicatii Flash.

Aici este codul complet pentru exemplul de client de chat:

var gazdă: String = "127.0.0.1"; var portul: uint = 8888;

var socket: Socket = new Socket (gazdă, port);

socket.addEventListener (Event.CLOSE, closeHandler); socket.addEventListener (Event.CONNECT,connectHandler); socket.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); socket.addEventListene(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; this.scaleMode = StageScaleMode.NO_SCALE;

Funcţia writeLine (str: String): void {

str + = "\ n";

try {

socket.writeUTFBytes (str);

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

142 of 362 11/9/2

Page 143: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 143/362

 

catch (e: IOError) {

trace (e);

}

}

Funcţia sendRequest (): void {

statusMessage ("Trimite cerere iniţială a [" + + gazdă "]", "# 006600"); socket.flush (); enableInterfac();

}

Funcţia readResponse (): void {

var str: String = socket.readUTFBytes (socket.bytesAvailable); / / benzi off line feed-uri

dacă (str.substring ((str.length-2), str.length) == "\ r \ n") {

trace ("gasit \ \ n \ \ r");

str. str.substring = (0, (str.length-2));

}

dacă (str.substring (0, 12) == "NOTICE ADMIN") {

bodyTxt.htmlText + = "<font color=\"#FF0000\">" + str + "</ font>";

}

else {

bodyTxt.htmlText + = "<culoarea fontului = \M#000000\M>M + Str. + "</ font>";

}

}

Funcţia enableInterface (): void {

msgTxt.enabled = true; bodyTxt.enabled = true;

}

Funcţia disableInterface (): void {

bodyTxt.editable = false; msgTxt.enabled = false; clearBtn.enabled = false; sendBtn.enabled = false;

}

Funcţia statusMessage (str.: String, culoare: String = "# 000000"): void {

statusTxt.htmlText + = "<culoarea fontului = \MM + Culoare + "\n>n + Str. + "</ font>";

}

clearButtonHandler funcţie (e: MouseEvent): void {

msgTxt.text = "";

msgTxt.dispatchEvent (nou Eveniment (Event.CHANGE));

}

sendButtonHandler funcţie (e: MouseEvent): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

143 of 362 11/9/2

Page 144: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 144/362

 

dacă (msgTxt.text.length> 0) {

writeLine (msgTxt.text);

clearBtn.dispatchEvent (nou MouseEvent (MouseEvent.CLICK));

}

}

inputHandler funcţie (e: Event): void {

dacă (e.target.text.length> 0) {

clearBtn.enabled = true; sendBtn.enabled = true;

}

else {

clearBtn.enabled = false; sendBtn.enabled = false;

}

}

closeHandler funcţie (eveniment: Event): void {

statusMessage ("Conexiunea la [" + + gazdă "] închis",

"# FF0000M); DisableInterface ();

}

connectHandler funcţie (eveniment: Event): void {

statusMessage ("Connected to [" + + gazdă "]", "# 006600"); sendRequest ();

}

ioErrorHandler funcţie (eveniment: IOErrorEvent): void {

statusMessage (event.text, "# FF0000");

}

securityErrorHandler funcţie (eveniment: SecurityErrorEvent): void {

statusMessage (event.toString (), "# FF0000");

}

sockHandler funcţie (eveniment: ProgressEvent): void {

readResponse ();

}

keyDownHandler funcţie (e: KeyboardEvent): void {

dacă (e.keyCode == Keyboard.ENTER) {

sendBtn.dispatchEvent (nou MouseEvent (MouseEvent.CLICK));

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

144 of 362 11/9/2

Page 145: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 145/362

 

/ / Dezactiva interfaţa conectate până la disableInterface ();

FIGURA 8.6

Chat aplicaţie care rulează în browser 

În acest capitol, ati invatat ceea ce este un server socket şi modul în care acestea sunt construite. Apoi au învăţat cum să construim un server sockesimplu şi se conecteze la acesta folosind Flash. Odată ce aţi avut o înţelegere a porţii Flash şi PHP a procesului, ultimul pas a fost să construiascăaplicaţie completă de chat multiutilizator cu un server socket în PHP care rulează în spatele scenei.

Puteţi lua informaţiile de învăţat în acest capitol şi să se extindă pentru a crea o aplicaţie de chat pe depl in funcţional. Aveţi posibilitatea să

adăugaţi caracteristici cum ar fi moderaţie, membri, cronometre, camere de chat, şi aşa mai departe. Este important să realizăm că sistemele deservere soclu nu sunt limitate la chat-ul aplicaţii. Puteţi utiliza această tehnologie pentru a construi o aceeaşi cerere de desen multiutilizator sauchiar a construi o monitorizare multipunct arhitectura server.

După cum puteţi vedea, prize de curent pot fi folosite într-o varietate de moduri. Odată ce aţi învăţa elementele de bază, imaginatia ta este limitadoar la dezvoltarea ta.

 În această parte

Capitolul 9

Lucrul cu biblioteci 'ter ţă parte

Capitolul 10

Utilizarea orientate-obiect

Programare

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

145 of 362 11/9/2

Page 146: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 146/362

 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

146 of 362 11/9/2

Page 147: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 147/362

 

Tel utilizarea de biblioteci 'terţă parte continuă să crească ca aplicaţii mai soli citante sunt în curs de dezvoltate. Terţe părţi bibliotecile rezolva de

multe ori o problemă sau a face o activitate comună mai uşor de manevrat, care permite focalizarea dezvoltatorul asupra aspectelor mai importanale cererii.

Prima parte a acestui capitol este dedicat explicării ceea ce terţe biblioteci sunt, cum să le folosească, şi ceea ce este necesar pentru a instala într-obibliotecă.

A doua parte a acestui capitol se concentrează pe utilizarea de AMFPHP in Flash. AMFPHP este de fapt o bibliotecă de PHP, care oferă o legăturăcomună între flash şi o bază de date, precum şi alte tipuri de date.

O bibliotecă de terţi este un pachet personalizat sau o bucata de cod care este dezvoltat de o companie sau organizaţie pentru a lucra cu un altprodus al companiei. De exemplu, dacă te uiţi la browser-ul Firefox, există o serie de plug-in-uri şi accesorii, care sunt eliberate de către

dezvoltatorii care nu lucrează pentru Mozilla.

Dezvoltatorii au opinii diferite cu privire biblioteci 'terţă parte, una dintre cele mai importante preocupări cu privire la aceste biblioteci estesecuritatea. Trebuie sa fii atent de lucru cu alte porţiuni de cod, mai ales dacă nu aveţi timp sau expertiza pentru a investiga modul în carefuncţionează bine cod.

Preocupările de securitate sunt şi mai importante atunci când nu ştiţi partid care a dezvoltat bibliotecă sau în cazul în care biblioteca în sine esteconectat la unele aspecte sigură a cererii dumneavoastră.

De exemplu, nu este o idee bună să utilizaţi un cookie sau bibliotecă sesiune de la un dezvoltator necunoscut. Acest lucru poate introduce gauri dsecuritate in aplicatiile dumneavoastra.

 În acest capitol

Trecând peste biblioteci 'ter ţă parte

Instalarea biblioteci 'ter ţă parte

Utilizarea biblioteci 'ter ţă parte

Aruncând o privire la AMFPHP

Există câteva excepţii notabile de a lucra cu biblioteci 'terţă parte şi aplicaţii sigure. De exemplu, dacă sunteţi construirea unui magazin de aplicaţaceasta este o presupunere rezonabilă că va fi interactiunea cu unele sub forma unui sistem de comerciant, cum ar fi Authorize.net, Miva, sauPayPal.

Aceste sisteme oferă biblioteci 'terţă parte care vă puteţi conecta cu uşurinţă la cererea dumneavoastră şi sunt cunoscute a fi in deplina siguranta,deoarece acestea au fost testate amănunţit în diverse medii.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

147 of 362 11/9/2

Page 148: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 148/362

 

Alte tipuri de biblioteci 'ter ţă parte

Aceste biblioteci externe nu sunt limitate la securitate sau de prelucrare a datelor. Acest lucru se datorează faptului că Flash este un program deproiectare, de asemenea. Există multe excelent terţe biblioteci disponibile pentru a accelera dezvoltarea şi a procesului de proiectare.

În unele cazuri, aceste biblioteci externe oferă funcţionalitate, care nu este posibilă în mod direct în Flash / ActionScript.

Biblioteci comerciale Flash

Există unele biblioteci construite, care au licente comerciale, ceea ce înseamnă că veţi obţine codul de mai extensiv dezvoltate. Tu nu vor avea unsprijin problemă pentru obtinerea acestor biblioteci.

De exemplu, gskinner.com are un robust vraja verifica-bibliotecă şi a s tabilit componenta care este disponibil pentru cumpărare. Această bibliotecvă permite să construiască în timp real spel l-check motorul în aplicaţia dvs. cu doar câteva linii de cod. Puteţi găsi mai multe informaţii desprebiblioteca de check gskinner ortografică la site-ul Web al companiei la www.gskinner.com/products/spl/.

Bibliotecile deschise Flash source

Veţi găsi, de asemenea, o mare selecţie de biblioteci open source pentru toate aspectele legate de dezvoltare de aplicatii si de implementare. Unexemplu de bibliotecă open source este AMFPHP, care este examinat în detaliu în secţiunea "Aruncând o privire la AMFPHP"

Există multe alte biblioteci open-source disponibile, cum ar fi MCtweener, care este similar în bibliotecă Tween inclus cu mai multă funcţionalitatDe asemenea, documentaţia de proiect conţine o mulţime de cod de exemplu.

Câteva alte biblioteci open source disponibile pentru a asista în procesul de dezvoltare dvs. sunt prezentate în tabelul 9.1.

Tabelul 9.1

Biblioteci Open Source

RED5 Open Source Flash Server   http://osflash.org/red5

Papervision3D Open Source 3D motor  http://code.google.eom/p/papervision3d/

as3core lib AS3 bib liotecă pentru mai multe utilităţi de bază http://eode.google.eom/p/as3corelib/

Aceasta este doar o mică parte din întreaga linie de biblioteci open source disponibile pentru ActionScript 3. Ar trebui să vă dau o idee bună de anu numai modul în care extensibile ActionScript 3 este, dar, de asemenea, cât de mul ţi dezvoltatori au petrecut ore întregi în curs de dezvoltareaceste instrumente minunat. Chiar mai uimitor este faptul aceste biblioteci sunt gratuite, ceea ce înseamnă mai mult dezvoltatori, inclusivdumneavoastră, se pot crea mai mult continut interesant şi captivant, fără costuri supl imentare.

Biblioteci în PHP

Există, de asemenea, multe biblioteci disponibile pentru PHP, care includ de gestionare a sesiune, manipularea imaginii, conectivitate baze de daşi de gestionare a serverului de ansamblu a numi doar câteva. Practic, PHP este construit folosind biblioteci 'ter ţă parte, deoarece PHP, în sine, esun proiect open source. Acest lucru înseamnă mulţi dezvoltatori diferite contribuie la codul de proiect.

Unele dintre cele mai frecvente biblioteci PHP includ biblioteca GD, care este discutat Capitolul 12. Tabelul 9.2 alte liste comune biblioteci PHP pcare le vor folosi în procesul de dezvoltare a dumneavoastră.

Tabelul 9.2

Bibliotecile comune PHP

Bibliotecă Descriere SursăPăr O bibliotecă structurate de cod opensource http://pear.php.net/

ImageMagick Suita de software pentru a crea, edita, compune şi imagini bitmap www.imagemagick.org/

PDF Library PDF bibliotecă pentru crearea de PHP www.php.net / pdf

Trebuie să aveţi acum o înţelegere a ceea ce terţe biblioteci sunt disponibile pentru tine de a utiliza în dvs. ActionScript 3 de dezvoltare.

Procesul de instalarea acestor biblioteci terţă parte este foarte asemănătoare, indiferent care este bibliotecă.

Am Verificaţi cerinţele v ersiune privind bibliotecile pentru a se asigura că vor lucra cu

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

148 of 362 11/9/2

Page 149: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 149/362

 

pBSiiaRnKaaM & SraSSB-ActionScript 3 sau ve rsiunea de PHP se întâmplă să fie folosind.

Biblioteci Instalarea in Flash CS3

După ce selectaţi bibliotecile terţe părţi pe care doriţi să o utilizaţi, urmatorul pas este de a le instala. Procesul de instalare o bibliotecă de cod înCS3 depinde de clasa de specifice.

Instalarea ca un fişier MXP

Un mod de-o bibliotecă sau un set componente pot fi distribuite pentru portabilitate este în formatul MXP. Aceste fişiere sunt încărcate în ExtensiManager că navele cu Flash CS3 si multe alte aplicatii Adobe (a se vedea figura 9.1).

Avantajul de a utiliza această aplicaţie sunt incluse pentru a gestiona biblioteci este că aveţi posibilitatea să activaţi, dezactivaţi, sau actualizabibliotecile individuale dintr-un GUI frumos, uşor de gestionat. Această aplicaţie conţine, de asemenea link-uri directe către site-ul Web pentrudezvoltatorii de sprijin sau documentaţia on-line.

Figura 9.1

Navele Extension Manager cu Flash CS3 şi alte aplicaţii Adobe.

Instalarea ca un pachet standard de clasă

Cealaltă metodă de instalare mai comune este de a adăuga manual clase la classpath de Flash CS3. De asemenea, trebuie să copiaţi fişierele de clapentru a directoarele de partajare Flash care ştie să caute în terţe părţi pentru biblioteci.

Este o idee bună pentru a crea un folder nou pe o parte separată a computerului dvs., astfel încât să nu modifice accidental clasele implicit că navcu Flash CS3.

Crearea unui personalizate classpath

Pentru a adăuga un obicei classpath, trebuie să creaţi mai întâi un director de pe computer pentru a stoca clase. După ce determinaţi ce director vfolosi, adăuga această cale nouă pentru listarea classpath existente.

Pentru a adăuga un nou classpath la lista existentă, urmaţi aceşti paşi:

1. Selectaţi Editare C Preferinţe (Windows). Pe un Mac, alege Flash Preferences C pentru a deschide caseta de dialog Preferin ţe.

2.Faceţi clic ActionScript în lista Categorie, apoi face ţi clic pe Setări ActionScript 3.0.

3.Faceţi clic pe Răsfoire calea, şi navigaţi la directorul pe care doriţi să adăugaţi. Faceţi clic pe OK.

Puteţi adăuga, de asemenea, o classpath la proiectul Flash specifice prin modificarea setarilor ActionScript în caseta de dialog Publicare Settings.Adăugarea classpath la un proiect are avantajul că se va muta cu FLA, ceea ce înseamnă că acest fişier poate fi împărtăşite şi classpaths globale nuva trebui să fie modificate.

 Implicit classpaths

Implicit classpath a tuturor documentelor Flash pot fi modificate, astfel încât să nu trebuie să actualizeze fiecare fişier Flash individ. Următoarelesunt locaţiile în care se aşteaptă Flash pentru a găsi fişierele de clasă, bazat pe o instalare implicită.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

149 of 362 11/9/2

Page 150: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 150/362

 

Windows: Hard Disk \ Documents and Settings \ utilizator \ Local Settings \ Application Data \ Adobe \ Adobe Flash CS3 \ limba \Configuration \ Classes.

Macintosh: Hard Disk / Utilizatori / user / Library / Application Support / Adobe / Adobe Flash CS3/language / configurare / clasele.

Nu ştergeţi classpath absolută la nivel mondial. Flash foloseşte această classpath pentru a accesa built-in clase. Dacă ştergeţi accidental acestclasspath aveţi posibilitatea să îl adăugaţi din nou, utilizând următoarea bucată de cod ca o cale noua clasa: $ (LocalData) / clasele.

Instalarea bibliotecilor în PHP

Biblioteci PHP sunt adesea compilate direct în procesul de instalare PHP. Cu toate acestea, cu utilizarea de PEAR şi alte sisteme comune debibliotecă structurate, puteţi instala biblioteci noi după instalarea iniţială a fost finalizată.

Un exemplu de o biblioteca extern, care este frecvent utilizat şi poate fi adăugat după instalarea PHP este biblioteca MySQL. Această bibliotecă esfolosită pentru a comunica cu o baza de date direct în PHP

Primul pas este de a deschide php.ini fişier, decomentaţi mysql fişier bibliotecă, şi să modifice locaţia de calea de socket MySQL şi portul încazul în care alegeţi un altul la instalarea MySQL.

[^ ^ JEHQ jlUl.jjii ^ ^ S " MUS' res'AR* T 'le Serverul Apache după ce se modifică php. ini fişier.

Dacă odată ce reporniţi Apache, MySQL şi încă nu funcţionează corect, atunci este posibil să aveţi instalată o versiune învechită. Aceasta înseamncă puteţi avea să recompilaţi PHP

eu r , "RJ r" f> RV Pentru a afla mai multe despre recompilarea PHP, a se vedea capitolul 1.

Primul pas pentru a lucra cu biblioteci 'terţă parte este de a descarca fisierele biblioteca de pe site-ul dezvoltatorului. Odată ce aţi descărcat cusucces fisierele biblioteca de clasă, următorul pas este de a instala şi configura bibliotecile terţe părţi.

În mod normal, biblioteca va veni cu un kit de testare pentru a se asigura totul func ţionează corect. Acest pas nu este necesar, dar nu a minimizadepanare necesare în cererea dumneavoastră finală.

Dacă biblioteca nu vine cu un kit de testare, aveţi posibilitatea să creaţi rapid unul, care este explicat în secţiunea următoare.

Lucrul cu biblioteci în Flash CS3

Pentru a determina dacă clasele sunt încărcate în mod corespunzător, puteţi construi o aplicaţie pentru a testa o anumita portiune a unei clasecuprinse în bibliotecă.

Pentru acest exemplu, biblioteca as3CoreLib de la Adobe este utilizat. Aceasta clasa contine o serie de clase de utilitate pentru tot, inclusivmanipularea imaginilor toate mod de securitate, cum ar fi crearea de instrumente de MD5 hash.

Aici este o aplicaţie exemplu utilizând funcţionalitatea MD5: com.adobe.crypto.MD5 de import;

Funcţia createHash (e: MouseEvent): void {

responseTxt.text = MD5.hash (origStrTxt.text);

}

createBtn.addEventListener (MouseEvent.CLICK, createHash);

Prima parte a acestei cereri importurilor claselor necesare. În acest exemplu, care ar fi MD5 clasa găsit în crypto pachet.

Funcţia se numeşte atunci când butonul este apăsat. Odată ce funcţia este numit, următorul pas este de a crea un hash nou prin apelarea staticehaşiş metoda de MD5 clasă. În cele din urmă, şirul nou creat este returnat la responseTxt TextInput componentă situat pe scena.

Aceasta este aplicaţia completă. Este o utilizare foarte simplu, dar vă informează în cazul în care clasele corespunzatoare sunt instalate şifuncţionează în mod corespunzător.

Munca în acest stil unitate este foarte frecvente în dezvoltarea, deoarece dacă o aplicaţie devine prea mare, este mult mai greu pentru a depana şi a gestiona.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

150 of 362 11/9/2

Page 151: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 151/362

 

Lucrul cu bibliotecile în PHP

Bibliotecile în PHP sunt foarte similare cu porţiuni elaborate de PHP, dar totuşi ar trebui să le încercare după ce instalaţi o bibliotecă nouă. Aveţi mod normal, va trebui, de asemenea, să reporniţi Apache pentru ca modificările să PHP să intre în vigoare. Deseori instrucţiunile de instalarepentru o bibliotecă se va menţiona acest lucru, dar nici modul în care trebuie făcut.

Testarea bibliotecii MySQL

Pentru testarea de sprijin MySQL nu trebuie să creaţi un exemplu elaborat, în fapt, aveţi posibilitatea să creaţi un script care nu este garantat penta rula în mod corespunzător, dar vă va informa dacă MySQL este instalat corect sau nu.

practică foarte comună, dar în interesul de testare rapidă, funcţionează foarte bine.

După ce a rula cod pe care ştiţi că este de gând să nu este o idee bună pentru a şterge e roarea busteni astfel încât acestea să nu vă confundaţi maitârziu pe jos pe drum.

Aici este codul pentru test simplu.

<? Php

/ / Nu parolă este sigur de a eşua, / / excepţia cazului în care este vorba de o instalare implicită

mysql_connect ("localhost", "root", "");

Cererea simplu încearcă să se conecteze la baza de date, iar dacă sunt afişate ghidul de invalid sau nu baza de date selectată, atunci ştiţi MySQLeste instalat corect.

Cu toate acestea, dacă vedeţi o eroare fatală: nu a găsit funcţia de ... înseamnă MySQL nu a fost configurat corect instalate sau de a lucra cu PHP.

Aveţi posibilitatea să creaţi o rapid phpinfo fişier pentru a determina dacă sau nu MySQL a fost instalată şi pentru a urmări în jos de eroarespecifice.

Instalarea bibliotecii MySQL

Biblioteca MySQL este în mod normal, inclus în PHP, dar nu vine activat, în mod implicit. Primul pas este de a deschide php.ini fişier pentruversiunea de PHP pe care le-aţi instalat.

Veţi găsi o secţiune în fişierul php.ini cu de la rubrica "[mysql]". Acest lucru este în cazul în care v-ar configura instalarea de MySQL.

După configurare este finalizată, următorul pas este acela de a decomentaţi linia în listă bibliotecă care are numele de "mysql", în cadrul acestuia.

Aceasta nu este o

În acest moment configurare este complet; ultimul pas este de a reporni Apache şi de testare script-ul precedent, încă o dată, care ar trebui să afişeo eroare de conexiune şi nu Eroare PHP Fatal.

AMFPHP este o implementare open source a formatului mesajului de acţiune (AMF). AMF permite serializare binare de obiecte ActionScript careurmează să fie trimise la server-side script-uri.

AMFPHP pentru Programator PHP şi AS3Dezvoltatorii PHP poate îmbunătăţi experienţa lor PHP prin conectarea la date cum ar fi serviciile Web şi de baze de date. AMF permitecartografierea tipurilor de date native obiect şi complexe între client şi server. AMFPHP este unul dintre protocoalele cele mai populare şi mairapidă de comunicare client server disponibil pentru dezvoltatorii de Flash Player. Comunicarea este aranjat în format binar, care este, în general,mult mai compact decat celelalte reprezentări.

AMFPHP şi ActionScript 3

ActionScript 3 permite de compresie de comunicaţii, ceea ce înseamnă producţia mai repede de apeluri şi performanţa generală mai bună. În plusAMF3, care este disponibil în ActionScript 3, comprimă, de asemenea, comunicarea binare pentru creşterea performanţei.

Instalarea AMFPHP

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

151 of 362 11/9/2

Page 152: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 152/362

 

Instalarea AMFPHP este simplu. Script-urile necesită un server PHP şi nu au nevoie de servicii suplimentare sau biblioteci instalate. Acest lucruoferă avantajul de configurare instant apropiat, ceea ce permite dezvoltatorului să se concentreze pe aplicarea e fectivă în loc să vă îngrijoraţi despceea ce se întâmplă în spatele scenei.

Pentru a instala AMFPHP, descărcaţi mai întâi cea mai recentă versiune, care este disponibil gratuit de pe site-ul Web de la SourceForgehttp://sourceforge.net/project/showfiles.php?group_id=72483 # fişiere. SourceForge este cel mai mare deschis dedezvoltare web Web site-ul sursă, care găzduieşte un număr de proiecte diferite cum ar fi AMFPHP.

Conţinutul arhivei descărcate sunt plasate în directorul rădăcină pentru server-ul Web într-un director nou, cum ar fi flashservices sau oricealt nume pe care o alegeţi.

AMFPHP este aproape gata de scos din cutie. Fişier de care aveţi nevoie este de a modificagateway.php, care se află în rădăcină de directorulinstalare. În acest caz, calea ar fi flashservices / gateway.php. În unele cazuri, puteţi lăsa toate setările de pe implicite, care este ceea cese utilizează pentru acest exemplu.

Testarea instalaţiei

Când totul este instalat corect, puteţi testa instalarea AMFPHP prin deschiderea gateway.php din browser-ul Web. De exemplu, presupunând cinstalarea se face la nivel local, URL-ul ar fi http://localhost/flashservices/gateway.php.

Un ecran, aşa cum se arată în Figura 9.2, ar trebui să apară pe care vă informează că instalarea a fost reuşită. Dacă apare o eroare, o eroare de PHPsau o serie de erori pare că vă vor ajuta să determina ce, eventual, a mers prost.

AMFPHP depanare unelte

Înainte de a începe orice dezvoltare, uita-te la unele dintre instrumentele de depanare şi vizionează că nava cu AMFPHP. Aceste instrumentediferite pot fi utilizate pentru a depana serviciile tale.

| ' scoateţi-vă că aceste instrumente de depanare pe un serv er v iu pentru a minimiza problemele de securitate.

FIGURA 9.2

Exemplu de mesaj de bun venit de la data vazut AMFPHP de asteptare gateway.php din browser-ul Web

AMFPHP serviciul de browser 

Browserul serviciu AMFPHP, aşa cum se arată în Figura 9.3, este o aplicaţie flash de bază care vă permite să vizualizaţi servicii individuale şi de examina îndeaproape metodele şi proprietăţile lor. Puteţi utiliza, de asemenea, browser-ul de serviciu pentru a testa noul cod înainte de a scrieActionScript din Flash.

Utilizarea acestor instrumente de depanare adaugă vă permite să dezvolte aplicaţii mai rapid şi să testeze noi concepte cu mai puţin deasupracapului. Ele ajuta, de asemenea, în depanarea de cod.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

152 of 362 11/9/2

Page 153: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 153/362

 

AMFPHP depanare gateway-ul

Gateway Debug este script-ul care stă în Flash şi între gateway.php fişier să încheie erori. Este o bună practică de a utiliza acest script atuncicând depanare sau în curs de dezvoltare la nivel local. Singura modificare în codul tău este să punctul de a debuggateway.php fişier în loc destandard gateway.php fişier.

Figura 9.3

Aici este un serviciu de exemplu cum se vede din browser-ul de serviciu AMFPHP.

Următoarele sunt câteva puncte importante pentru a păstra în minte cu folosirea acestui gateway-ul de specialitate:

Sesiunile ■ nu va funcţiona corect.

■ cURL trebuie să fie activate în PHP

■ Serverul va cunoaşte o scădere a performanţelor.

■ Ar trebui să fie utilizat doar pe un sistem de dezvoltare.

Testarea AMFPHP cu un serviciu personalizat

Cu AMFPHP instalat corect, puteţi testa un serviciu foarte simplu, folosind browser-ul de serviciu. Mai târziu, vă construi o aplicaţie de căutaremici în Flash şi PHP.

Un serviciu de AMFPHP este un fisier PHP standard care este construit într-o ordine cunoscută. De exemplu, prima parte a unui fişier de serviciueste tabelul de metoda, care este folosit pentru a expune metodele disponibile şi să definească restricţii de acces a acestui serviciu.

Un tabel este o metodă matrice multidimensională care conţine fiecare dintre metodele. Acest tabel mostră metodă defineşte metoda getDate,care returnează timestamp-ul curent UNIX din PHP tabelul Metoda este situat în constructorul clasei văzut în următoarea porţiune de cod.

$ This-> methodTable = array (

"GetDate" => array (

"Acces" => "la distanţă",

"Descriere" => "Exemplu, returnează timestamp-ul Unix"

)

);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

153 of 362 11/9/2

Page 154: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 154/362

 

Continuând cu acest exemplu, veţi crea clasa proba PHP, care va deveni serviciul AMFPHP. Aici este clasa de proba, care con ţine o metodă şiconstructor.

<? Php

Clasa Exemplu {

Exemplu function () {

$ This-> methodTable = array (

"GetDate" => array (

"Acces" => "la distanţă",

"Descriere" => "Returnează data curentă."

)

);

}

/**

* Returnează Data curent * /

getDate function () {

/ / Retur data curentă

întoarcere "Data curent:". data ("F j, Y", de timp ());

}

Comentariul de deasupra getDate Funcţia va fi văzut de browser-ul de serviciu şi a afişa mai jos metoda. Acest lucru nu este necesar ă, dar ea teajută să înţelegi ceea ce o

dintr-o privire.

Salvaţi acest fişier ca Example.php în / Servicii Culegere de găsit în rădăcina directorului AMFPHP.

Aici este locaţia de acest fişier dacă instalaţi AMFPHP pe rădăcină al serverului Web: http:// localhost / flashservices /servicii / Example.php.

Acum, că acest serviciu este creat simplu îl puteţi testa prin a merge la browser-ul de serviciu. Veti vedea Dvs. de servicii nou, situat in l ista destanga, împreună cu orice alte servicii deja instalate. Dacă nu vedeţi serviciul, faceţi clic pe Reîmprospătare sau reîncărcaţi pagina de răcoritoare d

browserul.

Pentru a testa acest serviciu, faceţi clic pe numele din lista de pe partea stângă, care încarcă de serviciu din panoul Explorarea la dreapta. Numelemetodei este situat în fila de testare, care în acest exemplu este numit getDate.

Faceţi clic pe butonul Apel pentru a executa serviciul. Veţi vedea de ieşire servicii în fila Rezultatele situat pe partea de jos a panoului Exploring

De ieşire de serviciu probă ar trebui să fie data curentă în format şir de caractere, cum ar fi.

"Data curent: 05 octombrie 2007"

Filele alte sunt pentru vizualizarea de servicii de date, care ar fi utilizat pentru urmărirea depanare şi globale de servicii de dumneavoastră.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

154 of 362 11/9/2

Page 155: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 155/362

 

Acest exemplu este des tul de simplă. Ea nu are parametri şi nu creează nici un cod real. Puteţi extinde pe serviciul precedent prin adăugarea altămetodă, care valorifică prima literă a fiecărui cuvânt găsit în şir. Partea de valorificare a codului se face utilizând o funcţie built-in de PHP, numitucwords. Această funcţie acceptă un parametru şi returnează şirul capitalizate.

<? Php

Clasa Exemplu {

Exemplu function () {

$ This-> methodTable = array (

"GetDate" => array (

"Acces" => "la distanţă",

"Descriere" => "Returnează data curentă."

),

"UpperCaseWords" => array (

"Acces" => "la distanţă",

"Descriere" => "arg conversia în majuscule"

)

. data ("F j, Y", de timp ());

/**

* Returnează Data curent * /

getDate function () {

/ / Data întoarcere curent return "Date actuale:"

}

upperCaseWords funcţia ($ str) {

ucwords retur ($ str);

}

}

După noua metodă se adaugă acesta este vizibil in browser-ul de serviciu (după un refresh). Dupa ce uita la browser-ul de serviciu, ve ţi observa avantaj al metodei este că tabelul AMFPHP adaugă automat celule text cu numele de variabil pentru fiecare argument găsite.

Noua metoda accepta un argument astfel cum sunt definite în codul de servicii. Dacă tastaţi un text în TextBox şi să execute metoda, şirul suntcapitalizate.

De exemplu, dacă utilizaţi şirul "Hello World", Veţi vedea de ieşire următorul text: "Hello World"

Servicii de AMFPHP poate, desigur, au mai mult de un argument într-o metod ă. Creaţi un alt nouă metodă care are trei argumente. Primulargument este un şir de caractere, al doilea un cuvânt pentru a căuta, iar al treilea este cuvântul de înlocuire. Practic, vă creaţi un PHP pe bază decăutare-şi-înlocuire metoda.

Incepeti prin actualizarea tabelului metoda.

$ This-> methodTable = array (

"GetDate" => array (

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

155 of 362 11/9/2

Page 156: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 156/362

 

"Acces" => "la distanţă",

"Descriere" => "Returnează data curentă."

),

"UpperCaseWords" => array (

"Acces" => "la distanţă",

"Descriere" => "arg conversia în majuscule"

) ,

"SearchAndReplace" => array

(

"Acces" => "la distanţă",

"Descriere" => "Căutări şi înlocuieşte textul"

)

);

În cazul în care tabelul metoda este actualizată, noua metodă, se adaugă. Tu nu sunt limitate la codul în cadrul metodei. AMFPHP vă permite săapelaţi alte metode şi proprietăţi în cadrul aceleiaşi

clasă sau chiar include alte fişiere PHP pentru funcţionalitate adăugată. /**

* Căutări şi înlocuieşte textul * /

searchAndReplace funcţia ($ carul cu fân, ac $, $ înlocuire) {

$ String = str_replace ($ ac, de înlocuire $, $ carul cu fân); return $ this-> upperCaseWords ($ string)

}

 În cazul în care creaţi o nouă metodă şi nu îl adăugaţi tabelul metoda, aceasta nu va fi exportate pentru remoting. Acest lucru este util atunci cânddoriţi să ave ţi metode privat, cum ar fi baze de date sau straturi de securitate globală.

După noua metodă, se adaugă, îl puteţi testa printr-un refresh browser-ul de serviciu. Notă metode sunt enumerate în ordine alfabetică. Nouametodă ar trebui să fie găsit în mijlocul li stei orizontale.

NU

¡SII conectivitate,

Browser-ul de serviciu adaugă un câmp de text pentru fiecare argument, în acest caz există trei. Scrieţi un şir de caractere în câmpul de text înprimul rând, alegeţi unul dintre cuvintele de la care şir ca acul, şi introduceţi apoi că în al doilea Textfield. În cele din urmă, tastaţi înlocuirecâmpul de text al treilea. După ce toate cele trei domenii de text sunt completate, aveţi posibilitatea să faceţi clic pe butonul de apelare şi de ieşirese vedea în fila rezultate.

Presupunând că aţi utilizaţi şirul "Hello World" cu acul de "Lume" şi o înlocuire de "Pământ", Ar trebui să vedeţi următoarele rezultate.Cuvântul este înlocuit şi prima literă a fiecărui cuvânt este capitalizată folosind upperCaseWords metodă.

"Buna ziua Pământului"

Acum, că aţi testat cu atenţie serviciile AMFPHP, puteţi trece la instalarea clasele necesare pentru Flash pentru a fi de fapt în m ăsură să facă uz deaceastă configurare. Acest proces este explicat în secţiunea următoare.

Utilizarea AMFPHP in Flash

Spre deosebire de versiunile anterioare, ActionScript 3 are toate clasele necesare pentru remoting si interactiunea cu AMFPHP deja instalate.Încărcaţi pur şi simplu aceste clase şi să scrie în ActionScript, care este tot destul de simplă. Această secţiune vă îndrumă prin procesul de construa unei aplicatii Flash simplu pentru a înţelege mai bine procesul de lucru cu AMFPHP în Flash.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

156 of 362 11/9/2

Page 157: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 157/362

 

 Încărcarea clasele remoting

Primul pas pentru a lucra cu AMFPHP în Flash este de a încărca clase. Acest lucru este necesar pentru orice proiect AMFPHP vă construi, deoarecconţine de bază ale sistemului de remoting.

flash.net de import .*;

În cazul în care clasele sunt încărcate, aveţi posibilitatea să definiţi o variabilă care indică la fişierul gateway-ul AMFPHP.

var gatewayURL: String =

"http://localhost/flashservices/gateway.php";

Următorul pas este de a crea NetConnection exemplu, care este atribuit variabilei gateway-ul. În acest moment, pute ţi seta, de asemenea, laevenimentele metoda, care sunt numite atunci când un buton este apăsat.

var gateway-ului: NetConnection;

getDateBtn.addEventListener (MouseEvent.CLICK, getDate); searcBtn.addEventListener (MouseEvent.CLICK,searchAndReplace); upperCaseWordsBtn.addEventListener (MouseEvent.CLICK,

upperCaseWords); debugTxt.wordWrap = false;

Aici este scheletul pentru Stivuitoare butonul care va fi creat în partea următoare. Fiecare dintre aceste funcţii face un apel la serviciul de AMFPH

Funcţia getDate (e: MouseEvent): void {

}

Funcţia searchAndReplace (e: MouseEvent): void {

}

Funcţia upperCaseWords (e: MouseEvent): void {

}

Prima metodă pe care să se concentreze este getDate, care va face un apel la serverul cu nici un argument şi primeşte un şir de data curentă.Responder clasa este folosit pentru a manipula răspuns obiect atât pentru succes şi eşec apeluri.

var răspuns: răspuns = new Responder (onResult, onFault);

Partea următoare a funcţiei atribuie o nouă instanţă a NetConnection clasă. Un apel la conectaţi Metoda se numeşte trece în gateway-uurl variabilă. Odată ce conexiunea este stabilit, este făcut un apel în cazul în care primul argument este numele de serviciu şi metodă. A douavariabilă este o referinţă la Responder clasa de exemplu.

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL); gateway.call ("Example.getDate",responder); Aici este complet getDate responsabile pentru stabilirea conexiunii şi AMFPHP de asteptare de serviciul solicitat funcţia.

Funcţia getDate (e: MouseEvent): void {

var răspuns: răspuns = new Responder (onResult, onFault);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL); gateway.call ("Example.getDate",

responder);

}

Celelalte două funcţii sunt foarte similare, cu excepţia numelui metodei şi argumentele trecut la serviciu.

searchAndReplace Funcţia accepta trei argumente.

■ argl: Şir de căutare în

■ arg2: Cuvântul de căutare pentru

■ Arg3: Înlocuirea cuvântului

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

157 of 362 11/9/2

Page 158: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 158/362

 

Serviciul situat in configurare AMFPHP este responsabil pentru derularea searchAndReplace metoda, dar, de asemenea, face un apel cătremajuscule metodă înainte de a reveni şir.

Funcţia searchAndReplace (e: MouseEvent): void {

var răspuns: răspuns = new Responder (onResult, onFault);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call("Example.searchAndReplace", responder, "Hello World", "lume", "pă mânt"

);

}

Funcţia finală este upperCaseWords, care are un singur argument şi returnează un şir nou cu prima literă a fiecărui cuvânt convertite înmajuscule. Restul a funcţiei este aceeaşi ca şi ultimele două. Acesta este un exemplu bun de AMFPHP fost capabilă să realizeze ceva care nu estenativ în ActionScript, care, desigur, este porţiunea majuscule.

Funcţia upperCaseWords (e: MouseEvent): void {

var răspuns: răspuns = new Responder (onResult, onFault);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call("Example.upperCaseWords", Responder, "Hello World");

}

După cele trei funcţii de răspundere de asteptare pentru serviciile sunt definite, următoarea parte este de depanare şi funcţii de rezultat, care sunnumite atunci când serviciul returnează un răspuns valabil.

onResult Funcţia se numeşte atunci când un mesaj este primit de succes. În acest exemplu simplu, conţinutul brut de ieşire sunt trimise laTextarea componentă situat pe scena. Puteţi înlocui, de asemenea, Textarea porţiune a codului cu o simplă urmă () Declaraţii pentrutestarea mai repede.

Funcţia onResult (răspunde: Object): void {

debugTxt.text = "Răspuns:" + răspunde;

}

Dacă apare o eroare, a onFault funcţie este numită, care conţine eroarea specifice. Pentru a vizualiza mai bine de eroare, conţinutul obiectuluisunt conduse printr-un pentru .. în buclă, care afişează fiecare element. Această funcţie elimină, de asemenea, Textarea pentru a asiguradate veche nu este amestecat în, ceea ce ar putea crea confuzie în timp ce încerca pentru a depana o aplicaţie.

appendText metodă este de înlocuire a AS3 " + = "Mod de concatenarea siruri de caractere în versiunile mai vechi de ActionScript. Aceastămetodă este mult mai rapidă, ceea ce înseamnă executarea de cod mai rapid.

Funcţia onFault (răspunde: Object): void {

debugTxt.text = "";

debugTxt.appendText ("Debug:: Eroare \ n");

pentru (var i răspunde în) {

debugTxt.appendText ("" + răspunde [i] + "\ n");

}

}

Cifre 9.4, 9.5, 9.6 şi răspunsurile exemplu arată în cererile de probă în cadrul AMFPHP, puteţi extinde pe aceste exemple pentru a construi o cerermai completă, care se face în secţiunea următoare.

Primul exemplu este afişează răspunsul de la getDate metoda de clase AMFPHP proba. Acest exemplu se va reveni la data curentă în format ş

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

158 of 362 11/9/2

Page 159: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 159/362

 

FIGURA 9.4

Aici este un r ăspuns eşantion de la prima metodă de serviciu AMFPHP.

Al doilea exemplu acceptă un singur argument şi înlocuieşte textul. Toate acestea este un exemplu simplu, arată procesul de lucru cu argumenteAMFPHP

FIGURA 9.5

Aici este un r ăspuns de la proba a doua metodă de serviciu AMFPHP.

Treilea şi ultim exemplu este un răspuns de carbon. Este nevoie practic şirul a trecut-in şi întoarce-l exact aşa cum a fost trimis.

FIGURA 9.6

Aici este un r ăspuns eşantion de la a treia metodă de serviciu AMFPHP.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

159 of 362 11/9/2

Page 160: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 160/362

 

Acum, că aţi văzut utilizarea serviciului AMFPHP şi cum să-l pună în aplicare în Flash, puteţi continua prin construirea unei cereri de lumea realUn bun exemplu a unei cereri de lumea reală este un flash aplicaţii bazate pe cota album, care este explicat în următoarele secţiuni.

Baza de date utilizate pentru acest exemplu, este acelasi care se creează în capitolul 2. Dacă nu aţi completat acest capitol, la acest moment, amrecomandăm să începeţi acolo.

Servicii de AMFPHP

Serviciile AMFPHP necesare pentru acest exemplu sunt responsabile pentru interogarea bazei de date bazate pe trecut-in argumente. Acest lucrunecesită, de asemenea, un sistem de conexiune de baze de date care vor trebui să fie securizat. Acest lucru înseamnă metode nu vor fi exportate sa

vizualizate de către AMFPHP.

Pentru simplitate, toate din această funcţionalitate este conţinută într-un singur serviciu. Cu toate acestea, într-o aplicare mai completă, ce-ar vrea se separe în clase de servicii diferite pentru o soluţie mult mai portabil. Figura 9.7 prezinta de cerere completat.

Figura 9.7

Aici este completat de cerere, de exemplu din lumea reala.

ftAlh um.swf sale de control Debug Vizualizare

Testarea AMFPHP:: Date album | Date de încărcare Al bum]

Artist Gen Album

Rob Thermo Rocă Lui Rob RockMix

Bill Dato Rocă RockOut live

Jim membrelor Rocă Woodward a 37-a

Jason Al ex R ocă Guitar Mashup

Sam Riley Rocă Cei live

Prima parte a cererii este de servicii AMFPHP. Aici este scheletul de clasă pentru serviciul de album, care vă oferă o mai bună înţelegere afuncţionalităţii

<? Php

Albume clasa {

ElBB

Albume function ()

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

160 of 362 11/9/2

Page 161: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 161/362

 

funcţiei de conectare ()

Funcţia getAlbumByGenreID ($ genreID)

} ?>

Începutul pentru orice proiect de AMFPHP ar trebui să fie metoda tabelul fie incluse în dosarul acelaşi serviciu sau într-un fişier separat, care esteinclus. Avantajul de a utiliza acelaşi fişier este ca poti face rapid modificările şi nu trebuie să menţină un alt fişier.

Tabelul de metodă în acest exemplu este inclusă în funcţia constructor de serviciu. conexiune metodă este setat la privat pentru a asigura unnivel mai ridicat de securitate.

Albume function () {

$ This-> methodTable = array (

"Connect" => array (

"Acces" => "privat"

),

"GetAlbumByGenrelD" => array

(

"Acces" => "la distanţă"

)

);

}

conexiune metodă verifică mai întâi pentru o conexiune existentă pentru a limita resurselor. Dacă o existent

conexiune nu este găsit, unul nou este creat şi stocate în variabila privat _connection. / **

* @ Acces privat

* @ Desc Conectarea la baza de date - ** ** PRIVATE

*/

funcţiei de conectare () {

if ($ this-> _connection == null) {

$ This-> _connection = mysql_connect ($ this-> dbHost, $ this-> dbUser, $ this-> dbPass

);

mysql_select_db ($ this-> DBNAME, $ this-> _connection);

}

Parametrii de conectare sunt stocate în variabile private în cadrul clasei. Pentru un nivel suplimentar de securitate, variabilele sunt făcute privatepentru a interzice accesul externe ale prerogativelor bazei de date sensibile.

/ / Baza de date info privat $ dbHost = "localhost"; $ privat dbUser = "username"; privat $ dbPass ="parola"; privat $ dbname = "Numele bazei de date";

privat $ _connection = null;

Ultima metodă a clasei de serviciu este getAlbumByGenrelD, care întoarce o matrice de date album pe baza ID-ul trecut în genul ca un singurargument. Partea a funcţiei stabileşte o conexiune la baza de date folosind privat connect () metoda definită în etapa anterioară.

Funcţia getAlbumCatID ($ genreID) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

161 of 362 11/9/2

Page 162: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 162/362

 

$ This-> connect ();

}

Odata ce conexiunea de date este stabilit, următorul pas este de a construi $ Sql şir.

$ Sql = "SELECT g.name, a.artist, a.albumName DIN albume un gen, g = UNDE a.genreID g.id ŞI g.id =". $GenreID;

$ Sql şir este trecut în a mysql_query () cu conexiune de date ca al doilea argument.

$ Rezultat = mysql_query ($ sql, $ this-> _connection);

Ultimul pas al functiei este de a crea tablou asociativ de date album. $ Rânduri = array ();

în timp ce ($ row = mysql_fetch_array ($ rezultat, MYSQL_ASSOC)) {

array_push ($ rânduri, $ row);

}

întoarcere $ rânduri;

O alternativă la crearea unui array in PHP cu ajutorul unui în timp ce bucla este să treacă ID-ul de resurse înapoi la Flash şi de a folosi unobicei de clasă stabilească un nou record pentru a parsa rând datele de rând. Fac acest lucru în Flash ia o parte din tulpina de pe a serverului şi a

face o mai bună utilizare a maşinii clienţilor.

Versiunile anterioare de Flash au avut un vorbitor nativ de Recordset clasă. În AS3, va trebui să creaţi clasa ta. Aceasta clasa a fost adăugată laconţinut suplimentar disponibil pe site-ul Web al cărţii şi imită în mod corespunzător AS2 Recordset clasă.

Primul pas în lucrul cu Recordset clasa este de a modifica album metodă. /**

* Lista de albume pentru înregistrări * /

Funcţia getAlbumByGenreID ($ genreID) {

$ This-> connect ();

$ Sql = "SELECT g.name, a.artist, a.albumName DIN albume un gen, g = UNDE a.genreID g.id ŞI g.id =". $GenreID;

 mysql_query retur ($ sql, $ this-> _connection);

}

Aici este finalizată Album clasa: <? Php

Albume clasa {

/ / Baza de date info privat $ dbHost = "localhost"; $ privat dbUser = "username"; privat $ dbPass ="parola"; privat $ dbname = "db name";

privat $ _connection = null;

Albume function () {

$ This-> methodTable = array (

"Connect" => array (

"Acces" => "privat"

),

"GetAlbumByGenreID" => array (

"Acces" => "la distanţă",

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

162 of 362 11/9/2

Page 163: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 163/362

 

"Descriere" => "Lista de albume din categoria

ID-ul ").

}

/**

* © acces privat

* @ Desc Conectarea la baza de date - ** ** PRIVATE * /

funcţiei de conectare () {

if ($ this-> _connection == null) {

$ This-> _connection = mysql_connect ($ this-> dbHost, $ this-> dbUser, $ this-> dbPass

);

mysql_select_db ($ this-> DBNAME, $ this-> _connection);

}

}

/**

* Lista de albume de la ID-ul genului. * /

Funcţia getAlbumByGenreID ($ genreID) {

$ This-> connect ();

$ Sql = "SELECT g.name, a.artist, a.albumName DIN albume un gen, g = UNDE a.genreID g.id ŞI g.id =". $GenreID;

$ Rezultat = mysql_query ($ sql, $ this-> _connection);

$ Rânduri = array ();

în timp ce ($ row = mysql_fetch_array ($ rezultat, MYSQL_ASSOC)) {

array_push ($ rânduri, $ row);

}

întoarcere $ rânduri;

}

/**

* Lista de albume pentru înregistrări * /

getAlbumByGenreID_recordset funcţia ($ genreID) {

$ This-> connect ();

$ Sql = "SELECT g.name, a.artist, a.albumName DIN albume un gen, g = UNDE a.genreID g.id ŞI g.id =". $GenreID;

mysql_query retur ($ sql, $ this-> _connection);

}

} ?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

163 of 362 11/9/2

Page 164: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 164/362

 

ActionScript pentru integrare AMFPHP

Următorul pas este de a construi porţiunea Flash a cererii, care este responsabil pentru afişarea datelor într-un album precompilate DataGridcomponente.

Singurele modificări de funcţii sunt în cadrul funcţiei onResult pentru acest exemplu mai complete.

Funcţia onResult (răspunde: Object): void {

albumsDG.removeAll ();

pentru (var i: uint = 0; i <responds.length; i + +) {

albumsDG.addItem (răspunde [i]);

}

}

De compensare rezultate vechi

onResult functie sterge toate datele existente în DataGrid printr-un apel la removeAll metoda de DataGrid componente.

albumsDG.removeAll ();

După ce DataGrid a fost eliberat un pentru., buclă este folosit pentru a introduce datele de rând din baza de date. addltem accepta unobiect ca argument. DataGrid este, de asemenea, destul de inteligent pentru a se potrivi în sus nume de obiecte care urmează să fie utilizate catitluri de coloană.

pentru (var i: uint = 0; i <responds.length; i + +) {

albumsDG.addItem (răspunde [i]);

}

Restul de exemplu, este aceeaşi ca aplicarea dovada-of-concept. Desi nu este un adaos la cerere, denumirea metodei de serviciu trebuie să fiemodificate în cazul în care vă decideţi să utilizaţi Recordset modul de afişare a datelor rând.

Aici este sursa completă de exemplu de aplicare album.

flash.net de import .*;

var gatewayURL: String =

"http://localhost/flashservices/gateway.php"; Gateway-var: NetConnection;

Funcţia loadAlbumData (e: MouseEvent): void {

var răspuns: răspuns = new Responder (onResult, onFault);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call ("Albums.getAlbumByGenreID", responder, 4);

}

Funcţia onResult (răspunde: Object): void {

albumsDG.removeAll ();

pentru (var i: uint = 0; i <responds.length; i + +) {

albumsDG.addItem (răspunde [i]);

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

164 of 362 11/9/2

Page 165: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 165/362

 

Funcţia onFault (răspunde: Object): void {

pentru (var i răspunde în) {

trace ("[" + i + "] \ t" + răspunde [i]);

}

}

loadAlbumBtn.addEventListener (MouseEvent.CLICK, loadAlbumData);

După cum puteţi vedea, de lucru cu datele dinamic folosind AMFPHP are multe avantaje fata de metodele normale de lucru cu date.

Această secţiune ar trebui să-am dat o bună înţelegere a modului de a lucra cu AMFPHP în ActionScript 3. Pute ţi lua conceptele învăţate în aceastsecţiune şi se bazeze pe alte informaţii în această carte pentru a crea o aplicaţie foarte robustă.

Ai invatat procesul de lucru cu biblioteci 'terţă parte, în prima parte a capitolului. Apoi, în partea a doua au fost introduse pentru a vă cum văinstalaţi în mod corespunzător bibliotecile terţe părţi. După instalarea iniţială şi procesul de instalare a fost finalizată, următorul pas a fost săconstruiască unele cod particularizat pentru a lucra cu bibliotecile instalate.

Partea finală a capitolului axat pe colaborarea cu AMFPHP pentru a crea mai multe aplicaţii robuste şi de a consolida conceptele de lucru cubibliotecile.

Tsău capitol se concentrează pe clase şi programarea orientată pe obiecte. Înţelegerea modului în care clasele de muncă şi în cazul în care acesteatrebui să fie utilizate vă va ajuta să scrie cod mai eficient. Cheia pentru a scrie cu succes într-un format de programare orientate-obiect (OOP) este a evalua în mod corespunzător aplicaţia vă va fi scris.

Acest capitol începe prin a explica aspectele individuale ale OOP atât în Flash şi PHP. Ultima secţiune a acestui capitol este construirea unei clasede exemplu pentru a consolida înţelegerea dumneavoastră de practici învăţate în secţiunile anterioare.

Este important să reţineţi că acest lucru nu este un ghid în profunzime în OOP, care de fapt ar necesita carte proprie, dar este mai mult o imagine dansamblu pentru a sprijini uzanţele în această carte.

Cheia pentru a înţelege programarea orientată pe obiecte (OOP) este să ne gândim la fiecare element ca o foaie separata. In traditionale deprogramare, codul de fluxurile de la linia 1 până se ajunge la sfârşitul documentului, cu funcţia ocazional pentru a îndeplini sarcini repetitive.Problema cu această abordare este de scalabilitate, sau abilitatea de a permite unui program să crească este evoluează în viitor.

Sunt sigur ca te intrebi de ce ar trebui să grijă în cazul în care o cerere este scalabil sau nu. Acesta este de fapt o preocupare foarte importantă, careeste adesea trecute cu vederea în aplicaţii. Efectuarea unui program de scalabil de la începutul înseamnă refacerea mai puţin cod şi editarea înviitor. Într-un fel, OOP şi codul de scalabil, de fapt merg împreună destul de bine atunci când sunt utilizate în mod corespunzător.

 În acest capitol

 Înţelegere a clase în PHP

Clase de înţelegere în Flash

Utilizarea metodelor 

Utilizarea proprietăţi

Scrierea unei clase personalizat

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

165 of 362 11/9/2

Page 166: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 166/362

 

Privire de ansamblu asupra practicilor de OOP

Acum, că aveţi o înţelegere a ceea ce OOP este si cum se poate beneficia codul, poti sa te uiti la ceea ce este implicat în scris ea. Ö în primul OOPeste pentru "obiect" sau o colecţie de informaţii conţinute într-o uşor de-a gestiona piesă.

Pe măsură ce începeţi să lucraţi cu practicile OOP veti intelege rapid cat de usor este punerea în aplicare şi va fi folosind OOP tot timpul.

Clase

A clasă este o definiţie de toate obiectele de un anumit tip specificat. Clasa defineşte structura obiectelor şi comportament. Această abordare nunumai că permite codul care urmează să fie distribuite, dar, de asemenea, vă permite să menţină un anumit nivel de securitate.

Pentru a înţelege mai bine clase, aici este un exemplu foarte de bază:

 public class Salut {

Funcţia Hello () {

}

getSaying funcţia publică (): String {

return "Hello World!";

}

}

Codul anterior este un exemplu simplu de o clasă şi este doar menirea de a demonstra vizual modul în care o clasă este construit. public înain

de clasa defineşte ca intreaga clasa accesibile în întreaga lume. În anumite cazuri, acest lucru nu este rezultatul dorit. Aveţi posibilitatea să atribuide asemenea, fiecare metodă şi a bunurilor ca tipuri publice, private, sau alte în funcţie de cerinţele.

Aici este un exemplu de aplicare a comun de protecţie într-o clasă pentru a asigura securitatea:

{public class Userlogin

Userlogin function () {

}

Intra in funcţia publică (): void {

callDatabase ();

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

166 of 362 11/9/2

Page 167: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 167/362

 

}

 privat callDatabase function (): void {

}

Este sigur să se presupună că dacă nu doriţi callDatabase Metoda care urmează să fie numit direct, deoarece un apel rău intenţionat ar puteadăuna efectiv baza de date şi să slăbească integritatea generală a cererii. Forţarea metoda ca fiind private asigură metoda nu poate fi numit.Utilizatorul trebuie să sune la login metodă în cazul în care vă puteţi valida cererea înainte de baza de date se numeşte. Acest lucru este, desiguo utilizare foarte simplu de tipuri de public şi privat, dar ar trebui să vă ajuta să înţelegeţi de ce acestea sunt importante.

Constructor 

Metoda prima dintr-o clasă este, în general, constructor. Constructorul este automat numit de către sistem şi nu se pot întoarce de date. Acesta estde obicei, în cazul în care sarcinile de iniţializare va avea loc, cum ar fi un obiect de desen pe scenă sau de asteptare o bază de date.

Pachete

Pachetele sunt containere pentru mai multe clase care oferă posibilitatea de a împărtăşi informaţii în cadrul containerului la nivel mondial. Acestlucru este similar cu angajaţii într-un birou care face schimb de informa ţii în cadrul departamentului propriu, dar în acelaşi timp, poate transmiteinformaţii de-a lungul a managementului superior fără să părăsească organizaţia. Într-un fel, un pachet este o organizaţie de clase.

Există două modalităţi de a defini un pachet. Primul este directorul curent, care tocmai devine:

 pachet {

Clasa Exemplu {

Exemplu function () {

}

}

}

Cealaltă opţiune este de a defini o structura pachet, de obicei definit de dezvoltator sau numele firmei de domeniu, în ordine inversă, cum ar fi:

com.companywebsite.projectname

Structura este plasat după pachet cuvinte cheie.

pachet com.companywebsite.projectname {

Clasa Exemplu {

Exemplu function () {

}

}

}

Un pachet de cale inversa de domeniu este folosit pentru a asiguraţi-vă că pachetul este unic. De asemenea, este utilizat pentru a defini în modcorespunzător cererii sau bibliotecă. Un alt avantaj la utilizarea acestei abordări este când se opreşte de clasă

coliziuni, care este atunci când două clase diferite au acelaşi nume. Acest lucru se întâmplă mai des atunci când terţe biblioteci sunt utilizate într-aplicaţie, deoarece aveţi nici un control asupra denumirile utilizate în aceste clase. În cazul în care biblioteca este bine construit, acesta va avea ostructură pachet unic, pentru a evita coliziunile.

Importarea

Importul atunci când se lucrează cu clase se referă la încărcare, în, sau conectarea clase împreună. De exemplu, în Flash etapă este o instanta aDisplayObject clasă. Cu toate acestea, atunci când creaţi o movieclip, care este o instanţă a MovieClip de clasă, este, de asemenea, de

 încărcare într-o instanţă a DisplayObject, împreună cu o mulţime de alte clase şi a pachetelor.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

167 of 362 11/9/2

Page 168: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 168/362

 

Aveţi posibilitatea să plasaţi import în clasă astfel încât acestea sunt vizibile numai de catre clasa, sau le puteţi încărca în pachet care să le permităsă fie partajate în întregul pachet. De exemplu, dacă aţi avut o Membru clasă este sigur să se presupună că v-ar dori întotdeauna că acreditărilemembrii vizibil să le valideze în diferite porţiuni ale cererii. V-ar începe prin definirea Membru clasa si apoi de import UserCredentials clpentru validare, cum ar fi:

UserCredentials de import;

public class membre {

Membru function () {

}

}

Acest lucru ar permite UserCredentials pentru a fi vizualizate de către orice metodă sau proprietate în Membru clasă. Cu toate acestea, existunele cazuri în care v-ar dori toate clasele de a împărtăşi o altă clasă.

Pachetul {

UserCredentials de import;

public class membre {

Membru function () {

}

}

}

În ActionScript 3 nu trebuie să vă faceţi griji cu privire la importul unei clase mai mult decât o dată, deoarece AS compilator este destul deinteligent pentru a importa numai o singură dată. PHP, pe de altă parte, aruncă o eroare dacă încercaţi să încărcaţi o clasă mai mult decât o dată.Acest fapt nu este un lucru rău şi pot fi uşor evitate de către toate clasele de încărcare într-un singur fişier. Gândeşte-te de acest master-class camamă a tuturor celorlalte. Următoarea secţiune se va concentra pe diferenţele şi asemănările de clasă în PHP şi Flash.

Metode statice şi proprietăţi

O metodă statică este una care nu are nevoie de un exemplu de clasă să fie numit. Acesta permite, de asemenea codul de a avea un anumit nivel dcoerenţă. De exemplu, există un Data de clasă, şi în care o metodă care returnează zile ale săptămânii. Este sigur să-şi asume zi a săptămânii nu va schimba, astfel încât să puteţi accesa această metodă prin simpla asteptare direct.

Date.getDaysOfWeek ();

O metodă statică este numit în felul următor: Class.method. Nu este nevoie de un nume de exemplu, sau a constructorului, în fapt, unconstructor nu este chiar necesară în acest tip de clasă. Cu toate acestea, este o bună practică pentru a avea un constructor pentru compatibilitatecompletă.

O proprietate statică este similar cu o metodă statică, în sensul că pot fi accesate fără o instanţă. Cu toate acestea, ea are un atribut de construcţii, dtipul acesteia şi de date nu poate fi schimbat, cu excepţia evidentă a unei matrice sau obiect, care poate nu au elemente de adăugat la acesta.

trace ("Zilele în Săptămâna:" + Date.dayslnWeek);

Codul anterior ar avea acces la proprietate statică daysInWeek, care ar putea returna o valoare numerică reprezentând numărul total de zile într-o săptămână. O proprietate statică este utilă atunci când au o valoare care nu se schimba niciodata, cum ar fi o adresă URL sau o societate deinformaţii care urmează să fie utilizate într-o cerere.

Singletons

Un Singleton este un model de design. Subiectul a şabloanelor de proiectare necesită carte propriu, dar în principiu acestea sunt regulile şipracticile format între dezvoltatori diferite. Nu sunt obligaţi să urmeze orice model de design, dar acest lucru oferă codul de mai curate şi maiscalabile. The Singleton este probabil modelul de proiectare cele mai comune. Acesta este frecvent utilizat pentru a trece în jurul valorii de o bucade informaţii pe care nu se schimba niciodata si va fi nevoie de destul de un pic în timpul unei cereri.

C ^ ^ RI NB1 În cele mai multe limbi de programare, este comună de a de clara constructorul une i 3f * «kiiii ¡SjliXiShjS privat Singleton. Acest lucru tinedezvoltatorii de la crearea accidental mai mult de o instanţă a unei Singleton. Cu toate acestea, ActionScript nu are suport pentru constructori privat

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

168 of 362 11/9/2

Page 169: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 169/362

 

Aşa cum aţi învăţat anterior, o instanţă a unei clase se face prin utilizarea nou cuvinte cheie. Aceasta este o modalitate puteţi accesa o clasă, altaeste să reutilizeze instanţe existente, cum ar fi:

public class User {

exemplu private static: Ghid de utilizare; Ghid de utilizare function () {}

a functiei publice getInstance static (): Ghid de utilizare {

dacă (exemplu == null) {

exemplu = Utilizator nou ();

întoarcere instanţă;

}

exampleName funcţia publică (): String {

întoarcere "Joey";

}

}

Cea mai mare parte a acestei clase este acelaşi ca exemplele anterioare, cu excepţia adăugarea de getlnstance metodă. Aceasta metoda estefolosita pentru a se asigura că o instanţă unic al clasei este întotdeauna utilizat. Orice apel la această clasă se face prin intermediul getlnstancmetodă, cum ar fi:

Ghid de import;

trace ("Call Exemplu:" Manual de utilizare +.getInstance ()ExampleName).;

Prima dată se face referire clasă exemplu unic este generat. Orice apel de la acel moment se întoarce pur şi simplu instanţe existente. Acest lucruasigură orice modificări la această clasă va fi vazut de toti apelantii. Magia din spatele acestei clase este metoda statică şi proprietăţi, care suntutilizate pentru a pune în esenţă, o poartă între metodele şi apelantului. Toate apelurile trec prin getlnstance De asemenea, vă permit să plasun control de autorizare cu privire la toate apelurile.

Un Singleton ar trebui să fie folosite numai atunci când este nevoie. Pornirea fiecare clasă se creează într-un singleton nu este o practică bună, înfapt, majoritatea programelor au o Singleton care stochează toate informaţiile necesare.

Getters şi organisme de

Poate că aţi observat că o mulţime de utilizare de clasă este axat pe trecerea de date înainte şi înapoi. Într-adevăr, că este destul de mult ceea cetoate de programare este, într-un fel. Ideea din spatele un getter si setter este de a avea acces la proprietati private. De fapt, acesta este un pariudestul de sigur că cele mai multe dintre proprietati vor fi private, pentru că este un fel de ideea unei clase. Aici este un exemplu de un getter sisetter, folosind un schelet de clasă ca un exemplu:

Oamenii din clasa {

 privat _person var: String;

funcţia publică obţine persoană(): String {

întoarcere _person;

}

a functiei publice set persoană(U: String): void {

dacă (u.length> 0 & & u.length <25) {

_person = u;

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

169 of 362 11/9/2

Page 170: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 170/362

 

Codul precedent returnează doar valoarea curentă a privat _person proprietate. Sau, un apel la persoană va modifica faptul că proprietateaprivată în cazul în care noua valoare este de cel puţin 1 şi nu mai mult de 25 de caractere în lungime. Pute ţi adăuga orice nivel de modificare desecuritate sau a datelor la aceste setteri. Avantajul utilizării unui setter este abilitatea de a bloca accesul la proprietăţile private, de asemenea, num

 încapsulare. Acest lucru asigură cod nu poate fi rupt prin trecerea în date incorecte, sau, mai rău, a compromite un sistem ca urmare a unei clase ddeschis.

Acum, că aţi înţeles ceea ce un getter si setter sunt, probabil că este un pariu sigur să spun, de asemenea, probabil, veţi dori să ştie cum să lenumim. Asta se face prin accesarea variabila publice, cum ar fi:

oameni var: Oameni = Oameni noi (); people.person = "Timmy";

trace ("Persoana nou este:" + people.person);

Ca cele mai multe aspecte de programare, este responsabilitatea dezvoltatorului de a stabili unde şi când utilizarea unui getter / setter este o idebună. Cel mai simplu mod de a determina acest lucru este prin crearea mai întâi un contur aplicarea corespunzătoare.

Acum, că aveţi o înţelegere a ceea ce este OOP si cum functioneaza, urmatorul pas se uita la di ferenţele de clasă în Flash şi PHP.

Pentru a începe, aici este un exemplu rapidă a unei clase în PHP:

<? Php

Clasa Exemplu {

publice $ eşantion = "Hello, World!";

Exemplu function () {

întoarcere $ probă;

}

} ?>

Acesta este modul de bază, să înfiinţeze o clasă în PHP. Principalele aspecte sunt proprietatea definiţii care încep cu public, privat, sau protejate. proprietate va necesita în continuare $, La fel ca în codul standard de PHP. Singura diferenţă alte real este faptul PHP nu declară tipul de

 întoarcere. De fapt, PHP într-adevăr nu-i pasă strict ceea ce tastaţi un deţine variabilă, care nu este de fapt un lucru bun. Dezvoltatorul poate pierdabilitatea de a şti ce tip de date unei variabile deţine.

Importarea clase în PHP

Importarea unei clase în PHP se face prin încărcarea fişier folosind include sau necesită. Utilizarea include va încerca să încarce fişierudar va continua dacă fişierul nu este găsit. Necesită, pe de altă parte, de asemenea, caută fişierul, dar iese script-ul cu o eroare fatală dacăfişierul nu este găsit, după cum se arată în figura 10.1. Utilizarea necesita oferă posibilitatea de a opri un script, dacă fişierele propriu-zisă nugăsesc. Aici este un exemplu de încărcare-o clasă prin solicitarea ca aceasta:

<? Php

if (file_exists ('Interface.php ")!)

{

de imprimare "de clasă" interfaţă "care nu sunt încărcate, iesirea script!";

}

@ Necesită ("Interface.php ');

Exemplu de clasă

{

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

170 of 362 11/9/2

Page 171: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 171/362

 

Exemplu function ()

{

$ I = new iExample ();

de imprimare "I mele:". $ I-> samplr ();

}

}

$ Exemplu = Exemplu noi ();

?>

O dacă declaraţie este folosit pentru a verifica primul rând pentru existenţa fişierului, deoarece necesita va crea o eroare fatală, ceea ce înseamnă că script-ul va fi în imposibilitatea de a raporta orice mesaje de eroare corespunzătoare. În cazul în care pentru un motiv oarecare fişierunu este găsit, mesajul este trimis la browser-ul şi script-ul se termină în tăcere atunci când ajunge la necesita linie. @ este folosit pentru a tăceerorile interne care cele mai multe ori nu provoca apoi o preocupare de securitate, deoarece ele afişează căi cruciale fişier. O metodă alternativă da ascunde erorile este de a dezactiva raportarea erorilor, care este explicat în capitolul 13.

Instanţiere

Instanţiere Class este actul de a face o instanţă a clasei. Acţiunea este acelaşi în orice limbă OOP, dar fiecare limbă are un mod diferit de înfiinţareacestuia. În PHP, vă creaţi mai întâi o variabilă şi apoi atribuiţi clasa la această variabilă. După nouă instanţă este creată, puteţi accesa metodelepublice şi proprietăţi din acea clasă.

$ MyNewInstance = Exemplu noi ();

Metode în PHP sunt accesate folosind:

$ Exemplu-> methodName ();

Cu toate acestea, atunci când doriţi să accesaţi o metodă în interiorul aceleiaşi clase, puteţi înlocui exemplu variabilă şi utilizarea $ This. Decpresupunând că doriţi să acceseze HelloWorld Metoda în Vorbi de clasă, ar arata astfel:

$ This-> HelloWorld ();

Puteţi utiliza, de asemenea, de operator Rezoluţia Domeniu de aplicare (de asemenea, numit Paamayim Nekudotayim, care este în ebraică pentrudublu-colon) pentru a accesa metode si proprietati. Diferenţa este în loc de a folosi $ Acest lucru, v-ar folosi numele de clasă reale. Aceastăabordare face codul mai uşor de citit.

Vorbesc:: HelloWorld ();

Figura 10.1

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

171 of 362 11/9/2

Page 172: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 172/362

 

Aici este mesajul de eroare afişat în browser-ul, care este un rezultat al clasei să nu fie găsit.

Mai multe clase

PHP permite un script de clasă să deţină mai multe clase. Aceasta este atât o idee bună şi rea, pentru că prea multe clase în rezultatul fişier una încod de balonare, care este greu de gestionat. Pe de altă parte, având în clasele de toate într-un singur fişier este mai uşor pentru a distribui. Suntsigur că sunteţi te intrebi cat de exact sunt mai multe clase definite într-un singur fişier, aici este un exemplu de un pachet de pseudo-clasă.

<? Php

clasa de animale de {

Animal function () {

}

vorbesc functiei publice ($ cuvant) {

imprimare $ cuvânt;

}

}

Dog clasa extinde animale de {

Dog funcţia ($ cuvant) {

$ This-> vorbesc ($ word);

}

}

/ / Crearea unui nou câine

$ = New câine Dog ("Buna ziua .. Woof!");

De fapt, PHP într-adevăr nu urmaţi toate practicile standard de OOP, care cred că se va schimba ca versiunile mai noi sunt dezvoltate. Pentrumoment, aveţi posibilitatea să creaţi propria voastră versiune a unui pachet şi pentru a obţine aceeaşi funcţionalitate de bază. Este important săreţineţi că un pachet de pseudo-nu oferă acelaşi nivel de separare şi de securitate pe care un pachet de reală nu, dar cu unele de programarecreative şi crearea corectă a claselor dumneavoastră, puteţi să vă păstraţi codul securizat.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

172 of 362 11/9/2

Page 173: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 173/362

 

pnrj-A-YV ^ pi se vedea capitolul 6 pentru mai mult în profunzime, informaţii cu privire la codul de securitate.

Mlmi

Asta este tot ce există la utilizarea şi înţelegerea clase în PHP, până la punctul de necesare pentru această carte. Poţi, desigur, să extindă aceastăcunoaştere newfound şi a începe explorarea aspecte mai avansate de clase în PHP.

PHP ofera o multime de "magie", metode şi proprietăţi care fac mai multe clase de distractiv si mai putin dureroase pentru a lucra cu.

După cum sa menţionat anterior, clase în Flash şi PHP sunt similare în cele mai multe aspecte. Să ne uităm la modul în care utilizaţi şi să modifica în clase ActionScript Flash.

Importarea

Importarea într-o clasă ActionScript este un pic mai puţin iertător dacă clasa nu este găsit. De fapt, compilatorul care ruleaza când exportaţi un filmse opreşte în cazul în care o clasă nu este găsit. Acest lucru înseamnă de fapt nu aveţi nevoie de mesaje de eroare în cazul în care o clasă nu este

 încărcată, pentru că filmul nu este în măsură să fie văzut de publicul larg.

Excepţia de la această verificare compilator este în cazul în care clasa este dinamic, ceea ce înseamnă structura sa de ansamblu se pot schimba, darcă este dincolo de domeniul de aplicare al acestei cărţi. Acum, înapoi la importul de clase, ceea ce ar fi creat astfel:

com.organization.project.Example de import; de exemplu var: = Exemplu Exemplu noi (); urme ("Call-ometodă:" + example.methodName ());

Este posibil să fi observat de utilizare a import în loc de necesita sau includ. Cealaltă diferenţă evidentă în exemplul precedent este :Exemplu tipul de definiţie. Acest fapt nu este necesară, dar ea permite verificarea eroare mai bine atunci când filmul este compilat sau se execută

Document al clasei

Clasa document este utilizat ca clasă principal pentru o aplicaţie. Gândiţi-vă la el ca la clasa Timeline, asemănătoare cu cea de zile de la adăugarede cod de bază privind cadrul 1 a unui film. Aceste zile sunt peste şi este un lucru bun, de asemenea. Cu toate acestea, există unele lucruri să ştiţidespre atunci când se utilizează o clasă ale documentului, după cum se arată în figura 10.2. În primul rând, uita-te la ceea ce o clasă de documentarata ca:

Pachetul {

flash.display.MovieClip de import;

publice DocRoot clasa extinde MovieClip {

Funcţia DocRoot {

trace ("Eu sunt de clasă ale documentului");

}

}

}

Figura 10.2

Clasa de document, care pot fi găsite în inspectorul Properties

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

173 of 362 11/9/2

Page 174: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 174/362

 

Atribuirea clasei documentului este destul de unic. Puteţi adăuga sau edita fisierul clasei utilizând următorii paşi:

1.Faceţi clic pe scena, pentru a se asigura nu este selectat nimic.

2.Deschideţi inspectorul Properties, dacă acesta nu este deja deschisă.

3.Faceţi clic în clasa documentului TextBox şi adăugaţi numele clasei.

Este posibil să fi observat de clasă ale documentului se extinde MovieClip De clasă, dar se poate extinde, de asemenea, Spirit clasă. De faptaceastă prelungire este necesar din cauza clasa documentului este de fapt o MovieClip.

Biblioteca clase

O clasa de bibliotecă este nouă modalitate de a atasa ActionScript într-o MovieClip în Timeline. În versiunile anterioare de Flash v-ar aloca unidentificator Transmisia la dvs. MovieClip. În ActionScript 3, să luaţi aceeaşi paşi de bază de deschidere a inspectorului Properties, selectaţiExport pentru opţiunea ActionScript, şi se adaugă numele clasei, după cum se arată în figura 10.3.

La fel ca şi clasa de documente, aveţi nevoie să vă asiguraţi că MovieClipClasa personalizate e extinde MovieClip clasă. De fapt, clasele dedocumente si Biblioteca sunt foarte similare, atunci când le înfiinţare.

Poate că aţi observat că există mai puţin de a explica cu clasa de utilizare în Flash decât există în PHP. Această secţiune se concentrează pe unsistem complet de clasă pe bază de exemplu, în Flash şi PHP. Este folosit pentru consolidarea conceptelor învăţate în paginile anterioare.

Să începem cu PHP care vor fi folosite în acest exemplu. Ideea este de a construi o aplicaţie de bază, care permite PHP si Flash pentru a comunica în acelaşi timp profitând de clase personalizate.

<? Php

Clasa de comunicare {

publice $ MESSAGE_NOTIFY = "! Max, de la PHP Ai spus:"; Comunicare function ()

Figura 10.3

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

174 of 362 11/9/2

Page 175: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 175/362

 

Inspectorul Properties, cu opţiunea de Export pentru ActionScript selectată

{ }

răspunde funcţiei publice ($ str) {

return $ this-> MESSAGE_NOTIFY. $ Str;

}

}

$ Comunicare = Noua comunicare ();

if ($ _GET ['a'] == "newMessage") {

/ / Trimite mesaj înapoi la Flash

de imprimare "resp =". $ Comunicare-> răspunde ();

} ?>

Partea de PHP permite acest exemplu de Flash pentru a comunica prin trecerea de-a lungul o cerere de răspunde () metoda să fie numit. Îninteriorul clasei, PHP construieste apoi un şir şi returnează-l la Flash, în cazul în care la acel moment este citit în şi afişate pe scena.

Următorul pas este de a construi de clasă ale documentului şi a apelantului în Flash. Aici este clasa documentului:

Pachetul {

de import de import

import

{publice

Document al function () {

makeCall ();

}

makeCall funcţia publică (): void {

var mc: MovieClip = new MovieClip (); var txt: textfield = new textfield ();

mc.addChild (txt); addChild (mc);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

175 of 362 11/9/2

Page 176: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 176/362

 

Communicator var: = Communicator Communicator noi ();

flash.display.MovieClip; flash.text.TextField;

Communicator;

Document al clasei extinde MovieClip

communicator.action = "newMessage"; communicator.container = mc; communicator.callServer ();

}

}

}

Constructorul este responsabil pentru asteptare makeCall () metodă. Această metodă creează un nou Textfield, ataşează-l la scena cuajutorul addChild, şi în cele din urmă stabileşte apel la obiceiul comunicator clasă.

În ceea ce apelul la comunicator clasa este în curs de constituire, este, de asemenea, responsabile pentru atribuirea Textfield instanţă şi deacţiune. Acţiunea în acest exemplu este folosit pentru a spune care PHP pentru a rula cod. Desigur, în acest exemplu, există doar o singură acţiunalocate. Cu toate acestea, este uşor de a avea rapid zece sau mai multe acţiuni într-o aplicaţie din lumea reala.

Textfield clasă este similar cu createNewTextField Metoda care ar fi fost folosite în ActionScript 2. Schimbare în codul pentru ActionScri3 a fost făcut să fie în concordanţă cu elemente bibliotecă personalizate, cum ar fi cele în secţiunea anterioară.

Următorul pas este de a construi obicei clasă, care vor fi utilizate pentru a comunica cu PHP pe serverul Web.

Pachetul {

flash.net.URLRequest de import, de import flash.net.URLLoader, flash.net.URLVariables de import;flash.display.MovieClip de import; flash.events de import .*;

{public class Communicator

_action privat var: String;

privat var _txtBoxContainer: MovieClip;

Communicator function () {}

callServer funcţia publică (): void {

variabile var: URLVariables = new URLVariables (); variables.a = _action;

var cerere: URLRequest = new URLRequest ("http://localhost/flashphp/Communicate.php"); Request.data =variabile;

var loader: URLLoader = new URLLoader ();

loader.addEventListener (Event.COMPLETE, serverHandler); loader.load (cerere);

}

serverHandler funcţiei publice (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data); _txtBoxContainer.text = variables.resp;

}

publice set de acţiune funcţia de litera (a: String): void {

_action = a;

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

176 of 362 11/9/2

Page 177: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 177/362

 

a functiei publice set recipient (mc: MovieClip): void {

_txtBoxContainer = mc;

}

}

}

Clasa este destul de simplă şi a conceptelor care au fost utilizate în exemple anterior. Punctele principale de interes ale acestei clase suntcallServer şi serverHandler metode, care sunt responsabile pentru apelul efectuat şi care se ocupă cu răspunsul de la server.

Prima metodă, callServer, stabileşte variabila _action care este trecut la PHP folosind valoarea care a fost stabilit în clasa documentului îsecţiunea anterioară. Este posibil să fi observat _  înainte de numele variabilei, care este utilizat pentru a defini în mod clar o variabilă privată. Neste necesar, dar face codul mai uşor de citit.

În ultimele două metode din această categorie sunt responsabile pentru stabilirea recipientul Textfield şi acţiune. Aceste două organisme desunt numite de clasa documentului.

După cum puteţi vedea, clădirea aceasta aplicatie ca o clasa personalizat oferă posibilitatea de a actualiza rapid, sau să o extindă la o altă aplicaţişi cele mai bune din toate pastreaza totul in deplina siguranta. Această aplicaţie de bază este doar o prelevare de probe de ceea ce poate oferi clasdar trebuie să vă ofere o mai bună înţelegere a modului în care clasa documentului este configurat.

Au, Tabelul 10.1, este un tabel de rapid şi grafic explicarea diferenţelor de clase în PHP şi Flash. Puteţi consulta întotdeauna înapoi la această

pagină dacă aveţi o întrebare dacă o caracteristică există în limba în care lucraţi inch

Tabelul 10.1

Diferenţele între clase în PHP si FlashClasă PHP Bliţ

Instanţiere X X

Mai multe clase într-un singur fişier X

Importarea

X

include sau require

X

Constructor X X

Pachete X

Metode statice şi proprietăţi X X

O mulţime de informaţii au fost abordate în acest capitol şi la acest punct ar trebui să aveţi o înţelegere destul de bună a modului în programareaorientata-obiect lucrări şi când să-l folosească. După cum puteţi observa acum, clasele si OOP, în general, oferă o mulţime de avantaje. DezvoltareOOP Cu toate acestea, este posibil să observaţi, de asemenea, nu ia mai mult timp. Acest lucru nu es te neapărat un lucru rău, pentru că, pe termelung, veţi observa timp de dezvoltare mai puţin pe update-urile viitoare. Acesta oferă, de asemenea, avantajul evident mai puţin de cod sigure lamai mult faptul că dezvoltatorul poate controla. În acest moment ştii cum să configuraţi şi să utilizaţi clase în PHP şi Flash, şi, probabil, vor dori sexperimenteze cu unele dintre cele mai avansate teme care nu au fost acoperite în acest capitol.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

177 of 362 11/9/2

Page 178: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 178/362

 

 În această parte

Capitolul 11

Dezvoltarea de aplicatii de bază

Capitolul 12 Dezvoltare a Real-World Aplicatii

Capitolul 13

Utilizarea avansată Real-World Aplicatii

Capitolul 14

Aplicatii depanare

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

178 of 362 11/9/2

Page 179: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 179/362

 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

179 of 362 11/9/2

Page 180: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 180/362

 

Eun acest capitol, va dezvolta o serie de aplicaţii complete. Obiectivul acestui capitol este să se încheie cu aplicaţii complete în timp ce explica

comune capcane şi cum să le depăşească. Veţi investiga unor concepte noi, precum şi, cum ar fi Stivuitoare eveniment multiple, clase personalizasi servicii de la distanţă.

Acest capitol, de asemenea, se concentrează pe cel mai bun mod de a lucra cu MySQL într-un mod eficient şi în condiţii de siguranţă. Capitolul se încheie cu evaluarea celor mai bune practici pentru menţinerea şi aplicaţii care să permită posibilitatea de a adăuga noi funcţionalităţi.

Aplicaţiile în construcţii nu este vorba numai de a sari in Flash sau editorul dvs. favorit şi scris linie după linie de cod. Cel mai bun loc pentru a începe în dezvoltarea de aplicatii este faza de evaluare. Acesta este punctul în care te ui ţi la lista de ceea ce cererea dumneavoastră ar trebui să faccine este publicul, şi cum aveţi de gând să dezvolte aplicaţia. Tabelul 11.1 ilustrează cele trei puncte de faza de evaluare.

 În acest capitol

Elemente Înţelegerea unei cereri de

 În curs de dezvoltare un client de chat

Construirea unei Galerie folosind PHP

Utilizarea MySQL pentru a crea o serie de alte aplicaţii dinamice

Tabelul 11.1

Cele trei puncte din etapa de evaluare

Ce Defineşte ceea ce va face aplicarea

Cine Publicul ţintă al cererii dvs.

Cum Tehnicile pe care le utilizaţi pentru a dezvolta aplicaţia dvs.

Următoarele exemple sări peste "cum", deoarece acest pas este o carte Flash şi PHP. Odată ce "cum" este definit te poţi gândi despre "cine". Acestlucru este, desigur, publicul ţintă. O cerere nu va avea întotdeauna un rigid definite, care, mai ales dacă acesta este un site Web de serviciu, dar cmai bine este de a defini o. Cel mai bun mod de a determina publicul tinta este sa ne gandim la tipul de aplicare. De exemplu, va fi o aplicatiee-commerce sau poate un player video. Stiind care va fi utilizând aplicaţia este crucial pentru succesul acestuia.

Acum, că "cum" şi "cine" sunt definite, vă puteţi gândi la exact ceea ce va face cererea dumneavoastră. Niciodată nu ar merge la magazinul dehardware-ul, cumpara toate materialele, şi apoi să decidă ce să construiască. Acelaşi lucru este valabil şi pentru dezvoltarea de aplicatii. Pe măsuce începe să urmaţi aceste practici au devenit oa doua natură.

 Înţelegerea proiectarea aplicaţiilor 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

180 of 362 11/9/2

Page 181: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 181/362

 

Cu etapa de evaluare completat v-ar muta în mod natural în faza de proiectare. Dar, la fel ca etapa de evaluare, aceasta este întotdeauna o idee busă primul plan. Aceasta ar fi o schita cu hârtie şi creion sau utilizarea Flash cu forme primitive. De exemplu, Figura 11.1 prezintă o schiţă exemplu

Lucrul cu pseudo-cod

După ce au aspectul de ansamblu a aplicaţiei dezvoltate, puteţi trece pe la funcţionalitate. Acest lucru ar fi în cazul în care punctul de a începe săscrie pseudo-cod, cum ar fi funcţii, variabile, evenimente, precum şi orice alte concepte veţi utiliza în cererea dumneavoastră. Următorul este unexemplu de pseudocod pentru un program de management de utilizator.

/ / Pseudo-cod

Funcţia loadUser (id: uint): void {

/ / Face apel la serverul de întâlnire / / de-a lungul id-ul ca id-ul de utilizator

}

Funcţia handleServerResponse (e: Event): void {

/ / Captura răspunsul serverului

/ / Efectua apeluri necesare pentru aplicarea

}

drawInterface function (): void {

/ / Vopsea "remiză" interfaţa care / / utilizatorul va interacţiona cu

}

funcţia de redesenare (): void {

/ / Redesenaţi interfaţă cum meciului este încărcată, / / pentru a menţine lucrurile până la data de

}

/ / Alocare de manipulare eveniment

Veţi observa că pseudo-cod nu este o aplicaţie completă, ci un schelet a cererii globale. Acest lucru vă permite să dezvolte rapid modul în careaplicaţia va funcţiona şi ce va face. Scrierea pseudo-codul devine mult mai important atunci când în curs de dezvoltare aplicaţii pe scară largă, daeste o practică bună de a evalua, schiţă, şi planul de indiferent cât de mare este proiectul.

Figura 11.1

O cerere de schiţă exemplu, folosind forme primitive in Flash

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

181 of 362 11/9/2

Page 182: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 182/362

 

Finalizarea etapei de planificareUltimul pas la o planificare o cerere nu este definitivă, deoarece puteţi încadra fie în sus, etapele de planificare sau de a începe procesul dedezvoltare. Această alegere poate fi uneori determinate de client sau de director de creatie în cazul în care acesta a fost atribuit.

În acest punct, în procesul de planificare, aţi determinat ce aplicatia va face, care va fi folosind, şi modul în care va fi construit. Puteţi, de asemeneau proiectat un aspect şi a început procesul de programare. Următorul pas este de până la tine, ca dezvoltator. Puteţi continua, fie şi finalizareaprocesului de proiectare sau în curs de dezvoltare începe codul de aplicaţia va folosi.

În mod normal, ar trebui să proiectaţi cerere suficient pentru a obţine a început în programarea, deoarece lucrurile sunt mai mult decat probabil cse va schimba pe măsură ce continuă să se dezvolte. Cu toate acestea, cu suma corespunzătoare de planificare se poate minimiza aceste etape derevizuire.

Acum, că aţi uitat la cele mai bune practici pentru dezvoltarea de aplicaţii poţi începe în curs de dezvoltare de prima cerere completă. Aceastăcerere va fi un client de chat Flash folosind PHP pentru a interfata cu o baza de date MySQL. După ce în curs de dezvoltare cererea de baza vacontinua sa adauge caracteristici si sa se uite la cel mai bun mod de a construi o aplicatie scalabila.

O cerere de scalabilă este dezvoltată având în vedere faptul că doi utilizatori pot utiliza aplicaţia la inceput, dar ar putea fi usor de folosit demilioane de-a lungul timpului. Ideea este de a ţine cont de acest lucru şi să dezvolte aplicaţia într-un mod care permite pentru extindere.

Flash por ţiune

Începi acest proiect prin proiectarea cererii. Pentru aceasta aplicatie, design-ul este furnizat, dar nu ezita ţi să îl modifice. De fapt, sunteţi încurajaţsă se extindă asupra tuturor exemple, care este modul în care vă familiarizaţi cu concepte noi, precum şi modul în care cresc ca un dezvoltator.

Figura 11.2 prezinta interfata pentru aplicarea de chat.

Practic interfaţa constă într-o Textarea componente, care este folosit pentru afişarea mesajelor de chat, două Textlnput componente pentruelementele mesajului şi numele de utilizator, şi o Buton exemplu, pentru butonul Remitere.

Tabelul 11.2 prezinta nume de exemplu, pentru fiecare componentă.

FIGURA 11.2

Design-ul de la cererea dvs. de chat construite folosind componente predefinite in Flash

13 Adobe F! frasin CS3 Profesionale [Chat

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

182 of 362 11/9/2

Page 183: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 183/362

 

Tabel 11.2

Nume Primă Instanţă pentru ComponentsComponent Instanţă Nume Rezultat

Textarea messagesTxt Afişează mesajele de chat

TextInput newMsgTxt Mesaj nou

TextInput usernameTxt Numele persoane i de chat

Buton sendBtn Trimite un nou mesaj la server 

Vi se va face referire la numele de exemplu, în timpul de dezvoltare a ActionScript pentru aplicaţia dvs. de chat.

Cu interfaţa de utilizator "design" porţiune finalizate sau în acest caz încărcată, puteţi începe de dezvoltare a codului.

Prima parte din codul aplicatiei chat-ul este un bloc de variabile care sunt folosite pe tot parcursul. Variabila Primul este calea absolută la fişierelPHP. Apoi următoarele două variabile sunt fişierele PHP responsabile pentru trimiterea şi încărcarea mesajele de chat din baza de date. După ce sunt două variabile booleene de a asigura mai multor apeluri mesaj nu poate fi făcută. Ultimul set de variabile este o referinţă la Programatorobiect şi Buster cache.

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";

Prima funcţie va construi este init () sau iniţializarea funcţie. Aceasta se numeşte o singură dată, atunci când aplicaţia începe. Acesta esteresponsabil pentru crearea unui timer incarcatoare pentru încărcarea mesajele de pe server şi de a face primul apel la o smecherule cache, careeste explicat în secţiunea următoare. Ultima acţiune a init () Funcţia este de a apela loadMessages Funcţia şi popula lista de mesaje.

funcţia init (): void {

/ / Start cronometru pentru încărcarea de mesaje timer = new temporizator (5000, 0);

timer.addEventListener (TimerEvent.TIMER, timerHandler); timer.start ();

cacheBuster = getCacheBuster (); loadMessages (); / / prima data

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

183 of 362 11/9/2

Page 184: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 184/362

 

Programatorul navele din clasa cu Flash şi are o mulţime de utilizări mare. Acest exemplu profită de TIMER Evenimentul, care este numit defiecare dată când se ajunge la numărătoarea inversă. Temporizarea şi numărul de repetări sunt trecute în constructor. Setaţi numărătoarea inversăpână la 5000 sau 5 secunde si repeta la 0, care spune de fapt ActionScript pentru a repeta continuu. Dup ă o nouă Programatorul exemplu estecreat vă atribuiţi de tratare a evenimentelor şi să înceapă imediat cronometrul. Handler-timer face pur şi simplu un apel către loadMessagesfuncţie.

Această porţiune a codului ar putea fi condensat prin plasarea loadMessages funcţie în locul timerHandler, dar faci în acest fel ne permitde a adăuga mai multă funcţionalitate pe drum. Este tot practică de dezvoltare bună pentru a crea Stivuitoare adecvat pentru evenimente deci codpoate fi actualizat, iar ea face în general, un mult mai u şor de citit.

Funcţia timerHandler (e: TimerEvent): void {

loadMessages ();

}

loadMessages Funcţia este responsabil pentru asteptare si manipularea raspunsului de la server. Apelul la server este foarte asemănător cu altexemple cu câteva elemente noi. Un element nou este cacheBuster variabilă, care este folosit pentru a ne asigura că nu primesc un rezultatcache.

Opriţi caching cu date dinamice

Tocmai ai creat o variabilă pentru a opri cache, dar exact ceea ce este asta? Caching pe server este atunci când datele sunt stocate dinamic pentru încărcarea mai rapidă pe toate apelurile viitoare. La prima vedere acest lucru ar părea o idee bună, şi, în cele mai multe cazuri ea este. Cu toateacestea, în exemplul de încărcare de date de chat, care este în continuă schimbare, este, probabil, sigur să presupunem că doriţi aceste date să fie

proaspete. Acest lucru este realizat prin adăugarea o variabilă menţionată ca un "Buster cache", care proşti browser-ului în gândirea fiecare apel laacelaşi fişier este diferit.

Aici este un exemplu foarte simplu de Buster cache şi şirul real care este trimis la server:

Funcţia getRandom (lungime: uint): void {

întoarcere Math.round (Math.random () * (lungimea - 1)) + 1;

}

var rand: String = "? CB =" + getRandom (8);

var php: String = "http://localhost/ch04/getMessages.php"+ Rand;

trace ("URL:" + phpFile);? / / getMessages.php cb = 65378426

Cache Busters adăuga timp pentru a descărca şi for ţa orice fişier cu un Buster cache pentru a fi descărcate de fiecare dată când este solicitat.

Totul după ? în URL-ul este a spune browser-ul şi serverul care apelul este dinamică şi rezultatele în dosar nu este în cache.

Următoarea parte la procesul de trimitere a mesajului este de a asigura mesajul este de cel puţin trei caractere. Dacă mesajul nu este de cel puţintrei caractere, un mesaj de eroare este afişat. Există două moduri în care puteţi scrie această verificare condiţionată.

Prima opţiune este de:

dacă (newMsgTxt.text.length> 2) {

}

A doua opţiune, care este mai uşor să înţeleagă rapid:

dacă (newMsgTxt.text.length> = 3) {

}

Ambele opţiuni obţine acelaşi rezultat, dar a doua optiune este mult mai uşor de citit dintr-un punct de vedere logic.

Acum, presupunând că aveţi un mesaj de lungimea corectă puteţi continua cu procesul de a trimite mesajul la server. Următoarea parte esteconstruirea apelul la server.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

184 of 362 11/9/2

Page 185: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 185/362

 

variabile var: URLVariables = new URLVariables (); variables.user = usernameTxt.text; variables.msg =newMsgTxt.text;

var urlRequest: URLRequest = new URLRequest (phpSendMessage + getCacheBuster ());

urlRequest.method = URLRequestMethod.POST; urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, sendMessageHandler); urlLoader.load (urlRequest);

Atunci când asteptare server, trebuie să instituie un URLVariables obiect pentru a trece de-a lungul numele de utilizator şi mesajul pe care a fintrodusă. Un apel este, de asemenea, face trimitere la funcţia particularizată Buster cache pentru a se asigura că datele sunt mereu proaspete.

Ultimul pas în funcţia de trimitere este de a adăuga imediat mesajul utilizatorului în loc de aşteptare pentru lista de mesaje de actualizare de peserver. Acest lucru dă cererea sa o simt mai receptiv şi îl face atât de mesajul nu pare să fi fost ignorate.

addMessage (usernameTxt.text, newMsgTxt.text);

Această funcţie acceptă două argumente: numele de utilizator şi mesajul s-au adunat din componentele lor. Aceste informaţii sunt apoi construit într-un şir HMTL care este atribuit messagesTxt Textarea. Numele de utilizator este plasat în tag-uri îndrăzneţe pentru a sublinia numele. fapt, puteţi folosi o mulţime de tag-uri HTML comune în cadrul HTML-activat celule text.

Funcţia addMessage (ghidul de: String, msg: String): void {

messagesTxt.htmlText + = "<b>" + + sau ghidul "</ b>" + ":" + msg + "\ n";

}

Tabelul 11.3 prezinta tag-uri HTML acceptate care pot fi utilizate.

TABELUL 11.3

Tag-uri HTML acceptateEtichetă Etichetă HTML

Anchor Tag <a>

Bold Tag <b>

Break Tag <br>

Font Tag <font>Tag imagini <img>

Italic Tag <i>

Lista Postul Tag <li>

Punctul Tag <P>

Span Tag <span>

Tag Subliniat<u>

sendMessageHandler Funcţia se numeşte o dată mesajul este trimis cu succes la server. Singura parte importantă a acestei funcţii este ultimalinie, care şterge caseta de mesaje şi permite utilizatorului să tastaţi un mesaj nou. Ai putea şterge mesajul în trimite funcţie, dar a face în acesfel se asigură mesajul rămâne intact până când sunteţi sigur că acesta a fost adăugat.

PHP nu vă avertizează să o eroare în cazul în care nu reuşeşte SQL, numai în cazul în care pagina nu este încărcată. Puteţi adăuga cu siguranţă eroamai avansate de manipulare la acest exemplu.

sendMessageHandler funcţie (e: Event): void {

newMsgTxt.text = "";

}

Acum, că aţi terminat codul pentru trimiterea şi gestionarea apelurilor la server, poti incepe funcţia pe care gestionează mesajele şi le afişează înTextarea.

loadMessages () funcţie este numită din două puncte diferite. Primul punct este init () funcţie, care te-ai uitat la mai devreme, iar aldoilea este handler temporizatorul.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

185 of 362 11/9/2

Page 186: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 186/362

 

Prima funcţie controale pentru a vedea dacă un alt apel a fost deja făcut pentru a încărca mesaje. Adăugarea de această verificare vă asigură că nupot produce inundaţii server şi potenţial forţa de a devenit inactivă. Dacă o altă sarcină a început deja, vă pur şi simplu din spatele funcţiei şi a opprocesarea.

NUTI

Presupunând că o altă sarcină nu este deja în curs de desfăşurare, setaţi loadingMessages variabilă, care este similar cu blocarea uşa ta dupăintroduceţi o cameră. Cele mai multe dintre loadMessages funcţionalitate este similar cu procesul de trimitere.

Puteţi seta practic corect fişierul PHP pentru a încărca şi a înfiinţat o tratare a evenimentului pentru atunci când serverul trimite înapoi un mesaj ddate.

loadMessages function (): void {

dacă (loadingMessages) întoarcere; loadingMessages = true;

var urlRequest: URLRequest = new URLRequest(PhpLoadMessages +

getCacheBuster ()); var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, loadMessagesHandler);

urlLoader.load (urlRequest);

}

Manipulare de r ăspuns XML

Funcţia de răspuns de încărcare este responsabil pentru lucrul cu datele XML şi trecerea mesajele care urmează să fie afişate.

loadMessagesHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data);

messagesTxt.htmlText = "";

pentru fiecare {(element var în xml .. mesaj)

addMessage (item.name, item.msg);

}

cacheBuster = getCacheBuster (); loadingMessages = false;

}

Numele de elemente în cadrul r ăspunsului XML sunt sensibile la caz. Standard este cazul litere mici, sau cămilă, pentru mai multe cuvinte.

După XML este încărcată corect şi gata de utilizare, în care configuraţi un pentru fiecare .. bucla la fel ca-aţi utilizat în exemplul de încărcare XML în capitolul 3. Bucla se bazează pe toate "Mesaj" nodurile găsite în răspunsul exemplu. Un eşantion de răspuns a trecut înapoi aarăta ceva de genul:

<messages>

<message id='29'> <name> guest1 </ name> <msg> Flash este o mulţime de distracţie </ msg> </ mesaj><message id='3 0'> <name> guest2 </ name> <msg> PHP si Flash este mai bine </ msg> </ mesaj> <messageid='32'> <name> guest1 </ name>

<msg> Puteţi face atat de multe lucruri cu ea </ msg> </ mesaj> <message id='33'> <name> guest2 </ name>

Pentru <msg> sigur, uită-te la acest client de chat se răcească </ msg> </ mesaj> </ mesaje>

Pasul final al loadMessagesHandler funcţie este de a crea un nou Buster cache şi setaţi LoadingMessages variabilă a false, care permiapeluri în viitor pentru a obţine cele mai recente mesaje.

Cache Busters s-au explicat mai devreme în secţiunea. Cu toate acestea, există mai multe modalităţi de a crea un şir unic. Data este mereu înschimbare şi ActionScript are o getTime metodă care returnează câteva milisecunde de la 1 ianuarie 1970. Aceasta metoda dată este utilizată,

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

186 of 362 11/9/2

Page 187: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 187/362

 

deoarece este în continuă schimbare şi niciodată nu se repetă, care produc un şir unic de fiecare dată când este numit.

În acest moment, aţi terminat ActionScript pentru aplicaţia dvs. de chat. Aici este codul complet de trimitere:

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 = newArray ();

var Timer: Timer;

var cacheBuster: String = "? CB = 1";

funcţia init (): void {

/ / Start cronometru pentru încărcarea de mesaje timer = new temporizator (5000, 0);

timer.addEventListener (TimerEvent.TIMER, timerHandler);

timer.start ();

cacheBuster = getCacheBuster (); loadMessages (); / / prima data

}

Funcţia SendMessage (e: MouseEvent): void {

dacă (usernameTxt.text == "") {

trace ("Nume de utilizator este necesar"); returnare;

}

dacă (newMsgTxt.text.length> = 3) {

variabile var: URLVariables = new URLVariables (); variables.user = usernameTxt.text; variables.msg =newMsgTxt.text;

var urlRequest: URLRequest = new URLRequest (phpSendMessage + getCacheBuster ()); urlRequest.method =

URLRequestMethod.POST; urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE,sendMessageHandler); urlLoader.load (urlRequest);

Mesaj / / afişare în vigoare

addMessage (usernameTxt.text, newMsgTxt.text);

}

}

sendMessageHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data); urme ("Răspuns:" + variables.resp);

/ / Cutie mesaj clar newMsgTxt.text = "";

}

loadMessages function (): void {

dacă (loadingMessages) return;

loadingMessages = true;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

187 of 362 11/9/2

Page 188: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 188/362

 

var urlRequest: URLRequest = new URLRequest (phpLoadMessages +

getCacheBuster ()); var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE,

loadMessagesHandler); urlLoader.load (urlRequest);

}

loadMessagesHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data);

loadingMessages = false; messagesTxt.htmlText = "";

pentru fiecare {(element var în xml .. mesaj)

addMessage (item.name, item.msg);

}

cacheBuster = getCacheBuster ();

}

getCacheBuster function (): String {

Data var: Data = new Date (); cacheBuster = "? CB =" + date.getTime (); cacheBuster returnare;

}

Funcţia addMessage (ghidul de: String, msg: String): void {

messagesTxt.htmlText + = "<b>" + + sau ghidul "</ b>" + ":" + msg + "\ n";

}

Funcţia timerHandler (e: TimerEvent): void {

trace ("hit Timer"); loadMessages ();

}

sendBtn.addEventListener (MouseEvent.CLICK, SendMessage); init ();

PHP pentru chat aplicare

În acest moment, aţi terminat porţiunea ActionScript a cererii de chat. Al doilea pas este de a dezvolta cod PHP, care este numit de ActionScript.

Codul PHP este rupt în trei dosare, care sunt ilustrate în Tabelul 11.4.

TABELUL 11.4

Defalcarea de fişiere PHPCodul PHP fişier Acţiune

getMessages.php Apucă toate mesajele din ultimele 15 minute

messages.php Manere scrierea unui mesaj nou la baza de date

dbConn.php Conexiunea de date comună cu alte fişiere

Primul fişier cu care lucraţi este getMessages.php. Prima parte a sarcinilor cod sau include fişierul de conexiune de date, pe care le va arătapuţin într-o clipă. Următoarea parte este chemarea SQL, care interoghează baza de date MySQL şi apucă cele mai recente mesaje postate in ultime15 minute.

$ Sql = "SELECT * FROM flashChat WHERE> dateAdded". (Time () - (60 * 15)); $ rezultat = mysql_query ($sql);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

188 of 362 11/9/2

Page 189: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 189/362

 

Starea ultimele 15 minute este determinat de codul de mai jos. timp () returnează un marcaj de timp UNIX care se scade cu 60 şi înmulţit cu 1560 este de secunde într-un minut şi 15 se câte minute vă referiţi la. Ai putea scrie, de asemenea, această ecuaţie matematică de bază, prin eliminarepas de multiplicare. Procedând astfel, face mai greu de citit codul, dar de asemenea, creşte viteza de aplicare.

timp () - 9 00

Acest şir SQL este trecut în funcţia propriu-zisă care face apel la server mysql_query () , Care este atribuit $ Rezultat variabilă. Acum, căfăcut cu succes apel la baza de date MySQL, următorul pas este de a genera o buclă care se bazează mesajele. Figura 11.3 prezinta afişare interoga

 în Query Browser MySQL, care este disponibil gratuit de la www.mysql.com.

Această buclă se face cu ajutorul unui în timp ce, care este setat să ruleze până la un rând valabil nu este returnat din baza de date. Ai puteade asemenea, acest loc într-o pentru bucla locală şi de utilizare mysql_num_rows () pentru a determina cat mai multe rânduri sunt returna

FIGURA 11.3

Interogare SQL returnat în cadrul browser Solicitare MySQL

mysql_fetch_array () Funcţia grabs un singur rând din tabelul bazei de date într-un format tablou asociativ şi atribuie acesteia, $ Rowvariabilă. Conţinutul a buclei sunt înfiinţate pentru a genera noduri XML care conţin datele mesaj, care te-ai uitat la mai devreme în acest capitol.

în timp ce ($ row = mysql_fetch_array ($ rezultat))

XmlData $ xmlData $ $ $ xmlData xmlData

{

<message id='" $row['id'] "'> \ n "..;

<name> "$ row. ['username']." </ name> \ n "<msg>". $ Row ['mesaj']. "</ Msg> \ n"; </ mesaj> \ n ";

}

În acest moment, aveţi un apel completat SQL la server şi o buclă pentru a genera mesaj de date XML, care este returnat la ActionScript din Flash.Trimiterea datelor înapoi la ActionScript este foarte simplu, pe care o atribui ţi doar $ XmlData variabilă în vedere declaraţia de imprimare.

imprimare $ xmlData;

Declaraţia de imprimare încheie dvs. messages.php fişier, care este prezentată în întregime aici. <? Php

include "dbconn.php";

$ Sql = "SELECT * FROM flashChat WHERE> dateAdded". (Time () - (60 * 15));

$ Rezultat = mysql_query ($ sql); $ xmlData = "<messages> \ n";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

189 of 362 11/9/2

Page 190: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 190/362

 

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

$ XmlData .= "<Mesaj id = '". $ Row ['id']. "> \ N"; $ xmlData .= "<name>". $ Row ['username']. "</ Name\ n"; $ xmlData .= "<msg>". $ Row ['mesaj']. "</ Msg> \ n"; $ xmlData .= "</ mesaj> \ n";

}

$ XmlData .= "</ mesaje>";

imprimare $ xmlData;?>

Fişier PHP lângă faptul că trebuie să fie dezvoltat este messages.php, care este responsabil pentru inserarea mesaje noi în baza de date MySQPrima parte a acestui fişier PHP incepe la fel ca cel precedent prin încărcarea dbconn.php fişier, care este responsabil pentru manipularea deconectare şi conexiunea la baza de date MySQL.

include "dbconn.php";

Următorul pas este de a verifica faptul că mesajul trimis de la ActionScript este într-adevăr mai mare decât 0 caractere şir gol. În PHP, strle() returnează lungimea unui şir, care este trecut într-ca argument.

if (strlen ($ _POST ['msg'])> 0) {

}

Presupunând că aveţi un mesaj de lungime valabil, pe care o alocaţi trei variabile: una este pentru numele de utilizator, al doilea este din mesaj, i

al treilea este data in format UNIX timestamp.

$ Username = $ _POST ["utilizator"]; $ mesaj = $ _POST ['msg']; $ data = time ();

Următorul pas în curs de dezvoltare si acest fisier este să facă apel reale MySQL, care se face cu ajutorul mysql_query () . Această funcţie iadeclaraţia SQL ca un argument şi returnează fie o resursă id sau arunca o eroare.

Efectivă instrucţiune SQL este destul de similar cu altele folosite în exemplele anterioare. Există o flashChat tabel în baza de date care se întâmplă să aibă patru coloane, dar una dintre aceste este un auto_increment şi nu trebuie să fie definite într-un INSERT declaraţie.

 Într-o aplicaţie mai robustă, ce-ar vrea să adăugaţi un strat de securitate privind datele transmise în din alt ă sursă. Nu contează dacă acest lucru estFlash, browser-ul, sau un serviciu ter ţ, este întotdeauna important.

mysql_query ("INSERT INTO flashChat (numele de utilizator, mesaj, dateAdded) VALORI (

"" $ Username.. "','", $ Mesaj.. "',')" $ Data.. ";

Numele dateAdded a fost folosit, deoarece data este un cuvânt rezervat în MySQL şi va provoca o eroare în cele mai multe cazuri. Nu esteniciodată o idee bună de a folosi cuvinte rezervate pentru o altă utilizare în orice limbă de dezvoltare.

Ultimul pas în acest dosar este de a returna un raspuns la notificarea Flash c ă mesajul a fost adăugat şi un alt mesaj poate fi acum adăugat de la acutilizator. În general, messages.php fişier este destul de simpla, dar devine treaba.

Aici este finalizată messages.php fişier de trimitere. <? Php

include "dbconn.php";

if (strlen ($ _POST ['msg'])> 0) {

$ Username = $ _POST ["utilizator"]; $ mesaj = $ _POST ['msg']; $ data = time ();

mysql_query ("INSERT INTO flashChat (numele de utilizator, mesaj, dateAdded) VALORI (

"" $ Username.. "','". $ Mesaj. "','". $ Data.

de imprimare "resp = MESSAGE_ADDEDM;

} ?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

190 of 362 11/9/2

Page 191: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 191/362

 

Utilizarea PHP pentru a vă conecta la MySQL

Fişier PHP în ultima dvs. cerere Flash chat este dbconn.php fişier. Acest fişier este responsabil pentru conectarea la MySQL şi oferind o legătur într-tabele cuprinse în baza de date.

Nu poate exista decât o singur ă conexiune la o bază de date unică la un moment dat. Cele mai bune practici este de a planifica SQL se conecteazăpentru a fi mai eficient. Acest lucru vă împiedică să vă având în spate pentru a sari

Acest fisier este destul de mic, dar are o cerinţă foarte importantă, care este să-şi respecte măsurile de securitate la cel mai înalt măsură. O bunaparte din aceste secţiuni au remarcat faptul că securitatea este importantă. Te-ai uitat la multe exemple mai devreme, în acest exemplu de securitanu este exclusă pentru simplitate.

Prima parte a dosarului este atribuirea variabilele bazei de date care va fi trecut de-a lungul pentru conexiune. De multe ori mai multe aplicaţiiavansate va avea un dosar separat pentru variabile de configurare. Acest fi şier de configurare ar fi încărcate numai atunci când începe şi aplicareade referinţă pe tot parcursul.

Cu toate acestea, pentru că această cerere este destul de mic vă va atribui doar variabilele de conexiune de date în interiorul dbconn.php fişier conectare.

$ Host = "HOST_NAME"; $ ghidul = "SQL_USERNAME"; $ treci = "SQL_PASSWORD"; $ baza de date ="SQL_DATABASE_NAME";

Prima variabilă este de multe ori localhost sau adresa IP a serverului pe care MySQL se execută dacă se întâmplă să fie difuzate la distanţă dpe serverul pe care rulează PHP. Tu nu s-ar aştepta să vadă o instalare de la distanţă de MySQL în sistemele mai mici, dar este foarte frecvente înaplicaţii mai mari.

Celelalte trei variabile sunt numele de utilizator, parola şi numele bazei de date la care doriţi să vă conectaţi. Aceste informaţii de conectare estefurnizat de administratorul de sistem sau gazdă, dacă nu ştiţi deja.

MySQL creează o instalare implicită, cu un nume de utilizator de "root" şi nici o parolă, dar este foarte ne sigur în acest fel şi ar trebui să fie schimbaimediat.

Acum, că variabilele sunt definite în mod corespunzător, puteţi face conexiunea efectivă a MySQL. Acest lucru se realizează de cătremysql_connect () Funcţia în cadrul PHP Această funcţie acceptă trei argumente: gazdă, numele de utilizator, parola şi definit doar un mome

 în urmă.

$ Link = mysql_connect ($ host, $ user, $ pass);

mysql_connect () funcţia returnează o resursă id pe care le stocaţi în $ Legătură într- variabilă. Acest lucru este menţionat atunci cânte duci să selectaţi baza de date.

Selectarea bazei de date este pur şi simplu o chestiune de referire la numele bazei de date la care doriţi să vă conectaţi şi care trece de-a lungullink-ul primit în pasul de conectare.

mysql_select_db ($ database, $ link);

şi mai departe.

NU

Ultimul pas si cel mai important este de a distruge variabilele care conţin informaţiile de conectare MySQL. Distrugerea sau ştergerea unei variabse face prin trecerea de referinţă la variabila unset () funcţie, care elimină existenţa acestei variabile.

unset ($ gazdă);

unset ($ user);

unset ($ pass);

unset ($ baza de date);

unset ($ link);

Este important să avem acest pas pentru a se asigura că aspectele viitoare ale unei cereri nu pot avea acces la aceste variabile. Acest lucru esteimportant mai ales atunci când se introduce aplicaţii de la terţi în aplicaţia dvs. personalizate.

O alternativa mai sigura pentru metoda anterioară este de a încheia toate acestea într-o clasă. Acest lucru este similar cu lucrul cu o componentă închis în Flash. Accesul este permis doar la ceea ce vrei pe ceilalţi să vadă, restul este ascuns.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

191 of 362 11/9/2

Page 192: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 192/362

 

Aici este un exemplu de o conexiune de baze de date folosind o clasa: <? Php

/ / Simplu mysql conexiune de clasă

clasa MysqlConnection {

publice $ legătură într-;

privat $ host = "localhost"; privat ghidul de $ = "SQL_USERNAME"; privat $ treci = "SQL_PASSWORD"; privabaza de date $ = "SQL_DB_NAME";

MysqlConnection function () {}

funcţiei de conectare publice () {

$ This-> legătură într-= mysql_connect ($ this-> gazdă, $ this-> utilizator, $ this-> treci

);

mysql_select_db ($ this-> bază de date, $ this-> legătură într-);

}

setConnectionDetails a functiei publice ($ h ='', $ U ='', $ p ='', $ d ='')

{

$ This-> host = $ h; $ this-> ghidul de $ = u; $ this-> treci = $ p; $ this-> bază de date = $ d;

}

Funcţia getLink publice () {

return $ this-> legătură într-;

}

}

$ Sql = MysqlConnection noi ();

$ Sql-> connect ();?>

La prima vedere nu arata foarte diferit de exemplu conexiunea precedent; cu toate acestea, sec ţiunea de important este definiţiile variabila.

publice $ legătură într-;

privat $ host = "localhost"; privat ghidul de $ = "SQL_USERNAME"; privat $ treci = "SQL_PASSWORD"; priva

baza de date $ = "SQL_DB_NAMEM;

Aşa cum aţi învăţat în capitolul 9, PHP variabilele de clasă poate fi dat o denumire public şi privat. În această clasă exemplu, variabilele deconectare sunt definite ca fiind private, de blocare-le bine în cadrul clasei. Făcând acest lucru asigură aceste variabile nu poate fi descoperitaaccidental, şi-l oferă, de asemenea, un alt beneficiu. Presupunem că aveţi un proiect nou şi doriţi să vă conectaţi la o bază de date; a face acest lucrar fi la fel de simplu ca următorul bloc de cod.

<? Php

include "MysqlConnection.php"; $ mysqlConn = MysqlConnection noi ();

$ MysqlConn-> setConnectionDetails ("gazd ă", "ghidul", "treci", "db"); $ mysqlConn-> connect ();

$ Query = "SELECT * FROM our_table";

$ Rezultat = mysql_query ($ interogare, $ MysqlConn-> getLink ()); ?>

Observaţi că se utilizează clasa de conectare personalizate, oferă informaţii de conectare noi, şi treci în cele din urmă link-ul de baze de date în apinterogare. La nici un punct din acest cod este informaţiile de conectare accesibile sau expuse publicului larg.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

192 of 362 11/9/2

Page 193: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 193/362

 

M Jfjl ^ ^ ^ R "Când vă conectaţi la o bază de date pe un server v iu este o idee bună să dezactivaţi raport de eroare -SKSfedk ^ A & S ^ eraSBlB-¡ng sot cel suprima orice e rori de conectare.

Aici este fişierul de conexiune versiunea originală în toate elementele sale: <? Php

$ Host = "localhost"; $ ghidul = "SQL_USERNAMEM; $ Treci = "SQL_PASSWORD"; $ baza de date = "SQL_DB_NAME

$ Link = mysql_connect ($ host, $ user, $ pass); mysql_select_db ($ database, $ link);

unset ($ gazdă); unset ($ ghidul); unset ($ pass); unset ($ baza de date);

unset ($ link);?>

Crearea unui tabel de baze de date

În acest moment, toate ActionScript si PHP este scris. Cu toate acestea, dacă încercaţi pentru a testa aplicarea acesta nu va rula, deoarece nu aţidefinit tabelul SQL care va interacţiona cu PHP pentru trimiterea şi încărcarea mesaje.

Sintaxa SQL este foarte usor de urmat, dar este important de a construi cu atenţie. Un tabel de performanţă prost construit va suferi mai mult şi mmult, deoarece începe să crească. Acest lucru creează un SQL flashChat de masă şi adaugă rândurile pe care le utilizaţi în Comunicarea PHPid rând, care nu este folosit în PHP, dar în schimb este utilizat intern pentru indexarea şi atribuirea cheie. Un alt mod de a gândi despre ID-ul estecheia care descuie misterul pentru a în cazul în care datele se află în acest tabel mare.

Rânduri care le utilizaţi în PHP sunt numele de utilizator, mesaj, şi dateAdded. mesaj rând este cel mai important, deoarece estesetat ca TEXT, care oferă o capacitate deschise lungime. Aceasta înseamnă în esenţă un mesaj poate fi orice lungime. Acest rând, de asemenea, arputut fi atribuit un varchar (), ceea ce ar forţa lungimea într-o anumită limită prestabilită, cum ar fi:

mesaj varchar (150) NOT NULL default''

Această nouă definiţie pentru mesaj rând ar obliga orice mesaj de chat mai mult de 150 de caractere care urmează să fie trunchiate sau sa încheiaSetarea ca TEXT este mai convenabil, dar are potenţial de performanţă se referă la baza de date ca si tabelul crească.

CREATE TABLE flashChat (

id int nu (11) null auto_increment, numele de utilizator NU varchar (20) NULL mesaj text implicit NOTNULL, int dateAdded (11) NOT NULL default 0, PRIMARY KEY (id)) ENGINE = MyISAM;

A fost nevoie de o mulţime de cod, dar dvs. PHP bazate pe aplicatii Flash chat-ul este completă. Ia timp pentru a uita peste codul şi să extindăexemplul pentru a adăuga mai multe caracteristici. Iată câteva idei pentru a obţine ai început.

Caracteristica prima şi, probabil, cel mai evident care ar putea fi adăugată este un nivel mai ridicat de securitate între PHP şi Flash. Ai puteaadăuga, de asemenea, un panou moderarea sau ca un bonus un script moderare de bază a fost prevăzut în conţinut bonus disponibil pentru aceascarte.

În acest moment, ar trebui să aveţi o înţelegere destul de bună a modului de a construi o aplicaţie complet, folosind Flash, PHP, si MySQL. Înurmătoarea secţiune, puteţi utiliza Flash si PHP pentru a construi o galerie foto completa cu categoriile şi controalele de navigare.

Ce este mai bun decât o galerie Flash? Ce zici de o galerie Flash dinamic în cazul în care PHP feed-uri auto-actualizare fi şiere XML? Aceastăsecţiune este un ghid pas-cu-pas despre cum să se dezvolte doar asta. Dezvoltarea va incepe cu ActionScript şi apoi mutaţi în partea de PHP.Ultimul pas va fi de a evalua apl icarea terminat şi să explice modalităţile de avans.

Aşa cum aţi învăţat de la începutul acestui capitol, fiecare aplicaţie bună este proiectat şi evaluat înainte de a începe orice programare. Ia-o clipă sse uite la cererea finit, care este disponibil în materialul sursă pentru această carte. Figura 11.4 prezinta de cerere completat.

FIGURA 11.4

Completat Flash / PHP galerie foto care prezintă conţinutul încărcat

ft Gallery.swf SQ6S

Vezi fişier de control depanare

Flash / PHP Galerie foto

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

193 of 362 11/9/2

Page 194: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 194/362

 

ActionScript de aplicare completat va popula automat o lista de categorii. Dinamic de încărcare în imagini şi permite navigarea anterior şi următoprin fiecare categorie de imagini.

Dezvoltarea ActionScript

Acum, că ştiţi ce cererea va face, puteţi începe la locul variabilelor.

var phpPath: String = "http://localhost/ch10/photoGallery/"; Var phpFile: String = phpPath +" gallery.ph";

imagini var: Array = new Array ();

var imageHolder: MovieClip; categoryHolder var: MovieClip;

Primele două variabile se face referire la fişierul PHP care generează categoria şi datele imaginii. Variabila imaginilor este utilizat pentru a stocadatele imaginii trimise înapoi de la PHP, care este folosit pentru încărcarea imaginilor. Ultimele două variabile în această secţiune sunt titularulMovieClips pentru principal de imagine şi de navigaţie. Ambele aceste variabile sunt populate la rulare dată datele imaginii şi categorie sunt

 încărcate.

Următorul set de variabile necesare este în mod special pentru navigarea în jurul valorii de imagini şi categorii.

var currentID: uint; var currentImage: Numărul = 0; var imageDir: String = "fotografii /"; cacheBustervar: String = "? CB = 1";

currentID este folosit pentru a ne amintim imagine care este vizualizat. Aceasta va fi utilizată în funcţiile de navigare anterior şi următor.imageDir este o referinţă la directorul de imagine, care este în cazul în care directoarele categorie sunt situate. Ultima variabilă este un Bustercache, care, aşa cum a explicat, la începutul acestui capitol este folosit pentru a asigura încărcarea de date este întotdeauna proaspete şi nu dincache.

Acum, că aţi terminat procesul de setare toate variabilele necesare, puteţi trece pe la miezul a cererii, care este funcţii.

init () Funcţia este responsabil pentru crearea titularului doi MovieClips. MovieClipS sunt create dinamic, poziţionate, şi anexat la lista afişaj. Acest lucru se face printr-un apel la addChild şi care trece de-a lungul movieclip de referinţă. init funcţie este, de asemenea, în caz

 în care Buster cache-ul este generat. Ultimul pas al init Funcţia este de a face un apel la loadCategories () funcţie. Este important faptul caceastă funcţie este numit doar la pornire, deoarece obiectele şi categoriile ar fi nedefinită sau duplicat.

funcţia 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 ();

}

După iniţializarea init fază a fost finalizată loadCategories () Funcţia se numeşte. Această funcţie solicită fişierul PHP pentru a încărca îlista de categorii utilizând URLRequest şi care trece de-a lungul o acţiune particularizată care spune script-ul pe care doriţi lista de categorii.Acest lucru este important deoarece gallery.php se ocupa atât categoriile de selecţie şi de fotografie. În general, loadCategories Funcţiaeste destul de similar cu alte Incarcator folosite în această carte.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

194 of 362 11/9/2

Page 195: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 195/362

 

loadCategories function (): void {

 var de acţiune: String = "action = pisică";

var urlRequest: URLRequest = new URLRequest (phpFile + getCacheBuster () + "&" + acţiune);

var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, drawCategories); urlLoader.load (urlRequest);

}

drawCategories Funcţia se numeşte o dată pe lista de categorii a fost trimis înapoi de la PHP Datele sunt încărcate într-un obiect XML şi aanalizat cu ajutorul unui pentru fiecare .. buclă. Pentru a înţelege mai bine bucla, uita-te la un rezultat eşantion XML a trecut înapoi laPHP. Unul dintre aceste noduri XML este creat pentru fiecare categorie in galerie.

<category id="2" name="Landscapes" copyright="Other"/>

Textul categorie care este afişat pe scena este un proces dinamic Textfield create în cadrul pentru fiecare .. buclă. Ai putea, deasemenea, ataşaţi un clip video din bibliotecă, dar acest rezultat astfel într-o aplicaţie mai fragmentată şi veţi pierde unele opţiuni de formatare.

drawCategories funcţie (e: Event): void {

pentru fiecare {(element var în xml .. categorie)

}

}

Înainte de a continua cu specific aplicaţiei uite la codul exact ceea ce se face pentru a crea Textfield.

var txt: textfield = new textfield (); txt.selectable = false; txt.width = 2 00; txt.text = "text depropoziţii";

Prima linie este crearea unui nou Textfield instanţă şi setarea o trimitere la txt variabilă. Linia următoare este de a face sigur că textul nupoate fi selectat cu mouse-ul.

Nu setaţi întotdeauna proprietatea selectabil la fals. Utilizatorii de multe ori ca pentru a copia conţinut, în special blocuri de text.

A doua linie-la-ultima de cod este responsabil pentru stabilirea lăţimea de Textfield la 200 de pixeli pentru a se potrivi cu textul. Apoi, ultimlinie este aplicarea pur şi simplu textul care va fi vizibil în caseta de text.

Odată ce câmp de text este creată, puteţi ataşa un ascultător eveniment pentru a încărca o categorie de imagini în cazul în care textul se face clic.

Funcţiile Anonim

O funcţie anonim este ataşat direct la addEventListener apel. O funcţie anonim nu poate fi chemat pe nume, deoarece aceasta nu are unul,acesta este folosit ca o alternativă la o funcţie regulat atunci când sarcina este simplu şi nu necesită o mulţime de cod. Funcţiile realist anonim sunfolosite pentru a face codul de mai compacte sau în cazul în care aveţi nevoie pentru a accesa o variabilă care este luneta la nivel local la metoda dasteptare.

Aici este un exemplu de o funcţie de anonim similară cu unul situat în cadrul drawCategories funcţie.

txtContainer.addEventListener (MouseEvent.CLICK, funcţia (e: Event): void

{

trace ("funcţia de Anonim aici, nu am un nume.");});

Este posibil să observaţi un motiv potenţial pentru a evita funcţii anonime (în afară de a nu fi multifuncţionale) este un cod care le fac mult mai grde citit dintr-o privire. Acest lucru se datorează faptului definiţia funcţiei este înmormântat în cadrul addEventListener. De asemenea, ofuncţie de anonim nu poate fi eliminat, ceea ce poate provoca un potenţial de pierderi de memorie.

drawCategories funcţii de sarcină este de a ataşa ultima câmpul de text pentru a stage utilizând addChild, ca făcut pentru categoria.

txtContainer.addChild (txt); categoryHolder.addChild (txtContainer);

Aici este complet drawCategories Funcţia de trimitere.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

195 of 362 11/9/2

Page 196: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 196/362

 

drawCategories funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data);

pentru fiecare {(element var în xml .. categorie)

var txtContainer: MovieClip = new MovieClip (); var txt: textfield = new textfield (); txt.selectable =false; txt.width = 200;

txt.text = item.attribute ('nume');

txt.y = uint (item.attribute ('id') + 4) * 2;

txt.name = "text_" + item.attribute ('id');

txtContainer.addEventListener (MouseEvent.CLICK,

Funcţia (e: Event): void {

loadImages (e.target.name.substring (5));

txtContainer.addChild (txt); categoryHolder.addChild (txtContainer);

}

}

Funcţia următoare să se concentreze asupra este Loadlmages. Aceasta este funcţia care încarcă datele imaginii de la PHP rezultatul a trecut dinspate este aproape identic cu cel găsit în funcţia de categorie. Variabila acţiune este setat la fotografii, şi vom adăuga, de asemenea, o idpermiţându-PHP ştiu ce fotografii să se încarce.

loadImages funcţie (id: uint): void {

 var de acţiune: String = "action = Foto & id =" + id;

var urlRequest: URLRequest = new URLRequest (phpFile +

getCacheBuster () + "&" + acţiune); var urlLoader: URLLoader = new URLLoader ();urlLoader.addEventListener (Event.COMPLETE, imagesLoaded); urlLoader.load (urlRequest); currentID = id;

}

Un răspuns este trimis înapoi, atunci când PHP este încărcat, şi imagesLoaded Funcţia se numeşte. Datele de imagine este trecut din nou înformat XML şi tratate cu o pentru fiecare .. buclă.

Această buclă procesează fiecare nod fotografie în datele XML şi construieşte un obiect, care se adaugă "împins" să matrice imaginile.

Funcţia imagesLoaded (e: Event): void {

pentru fiecare {(element var în xml .. fotografie)

images.push ({name:'', src: item.attribute ("src')});

}

}

Aici este obiectul în sine şi o metodă alternativă, mai uşor de citit de creare a obiectului.

{Name:11, Src: item.attribute ("src")}

Aici este metoda alternativă pentru a defini obiectul.

obj var: Obiectul = Object noi (); obj.name ='';

obj.src = item.attribute ('src');

Sarcina ultima imagesLoaded Funcţia este pentru a seta currentlmage variabilă şi face un apel la displaylmage Funcţia care trece sursa

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

196 of 362 11/9/2

Page 197: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 197/362

 

de imagine. Sursa de imagine este încărcat de la matrice imaginile utilizând currentlmage ca indicele matrice.

Funcţia imagesLoaded (e: Event): void {

currentlmage = 0;

displayImage (imagini [currentImage] src.);

}

Aici este complet imagesLoaded Funcţia:Funcţia imagesLoaded (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data); imagini = new Array();

pentru fiecare {(element var în xml .. fotografie)

images.push ({name:'', src: item.attribute ("src')});

}

currentImage = 0;

displayImage (imagini [currentImage] src.);

}

Cu categoriile şi imaginile încărcate, puteţi afişa imaginea. Acest lucru se face prin atribuirea unui URLRequest construit de directorul de imagicategoria curenta id, şi numele fotografii. Clasa frontal este plasat direct intr-un addChild apel, care se ocupă de afişarea a imaginii după ceeste complet încărcată. Tu nu vor observa nici un moment de încărcare la nivel local, dar s-ar putea on-line.

Este o bună practică să preloaders loc ori de câte ori datele sunt încărcate. Aceasta informează utilizatorul că ceva se întâmplă.

Funcţia displayImage (src: String): void {

var loader: Loader Loader = new ();

loader.load (nou URLRequest (imageDir + currentID + "/" + src)); imageHolder.addChild (încărcător);

}

Galerie foto de navigare

Partea de navigare din galeria de poze este construit cu ajutorul a doi movieclipe pe scena. Fiecare dintre clipuri este alocat unui tratare aevenimentului care încarcă fie imaginea următoare sau precedentă.

Imagini de navigare

Veţi observa nextImage () Funcţia are unele logică condiţionată. Acest lucru se verifica pentru a vedea dacă currentlmage variabilă este număr mai mare decât total imagini, care ar duce la o eroare de încărcare. Acelaşi proces de bază se face pentru prevImage () funcţie cuexcepţia faptului că verificarea condiţionată este de a asigura valoare nu este mai mică decât zero.

 j ^ J T"S / J ^ "^ H n6X'<LNT"Prev'apoasă 'mage funcţii se va pr ăbuşi în cazul în care o categorie nu a fost aleasă.

Funcţia nextImage (e: MouseEvent): void {

currentImage + +;

dacă (currentImage> images.length-1) {

currentImage = 0;

}

displayImage (imagini [currentImage] src.);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

197 of 362 11/9/2

Page 198: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 198/362

 

}

Funcţia prevImage (e: MouseEvent): void {

currentImage -;

dacă (currentImage <= 0) {

currentImage = images.length-1;

}

displayImage (imagini [currentImage] src.);

}

Funcţia trecut în script-ul galeria foto este utilizat pentru a genera buster memoriei cache, care este folosit pentru a asigura apelurile la server nusunt memorate în cache. Această funcţie este identic cu cel folosit în aplicaţia Flash chat ai construit mai devreme în acest capitol.

Ultima parte a cererii este de a apela init () la începutul cererii şi atribuie Stivuitoare eveniment utilizate de către butoanele de navigare.

getCacheBuster function (): String {

Data var: Data = new Date (); cacheBuster = "? CB =" + date.getTime (); cacheBuster returnare;

}

init ();

prevMC.addEventListener (MouseEvent.CLICK, prevImage); nextMC.addEventListener (MouseEvent.CLICK,nextlmage);

Aici este ActionScript completat de aplicare galeria foto:

var phpPath: String = "http://localhost/ch% 2010/photoGallery /"; Var phpFile: String = phpPath +"gallery.php ";

imagini var: Array = new Array ();

var imageHolder: MovieClip; categoryHolder var: MovieClip;

var currentID: uint;

var imageDir: String = "fotografii /";

var currentImage: uint = 0;

var cacheBuster: String = "? CB = 1";

funcţia 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 ();

}

loadCategories function (): void

{

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

198 of 362 11/9/2

Page 199: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 199/362

 

var de acţiune: String = "action = pisică";

var urlRequest: URLRequest = new URLRequest (phpFile + getCacheBuster () + "&" + acţiune);

var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, drawCategories); urlLoader.load (urlRequest);

}

drawCategories funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data);

pentru fiecare {(element var în xml .. categorie)

var txtContainer: MovieClip = new MovieClip ();

var txt: textfield = new textfield (); txt.selectable = false; txt.width = 200;

txt.text = item.attribute ('nume');

txt.y = uint (item.attribute ('id') + 4) * 2;

txt.name = "text_" + item.attribute ('id');

txtContainer.addEventListener (MouseEvent.CLICK,

Funcţia (e: Event): void {

loadImages (e.target.name.substring (5));});

txtContainer.buttonMode = true;

txtContainer.addChild (txt); categoryHolder.addChild (txtContainer);

}

}

loadImages funcţie (id: uint): void {

trace ("Imagini de încărcare:" + id);

acţiune var: String = "action = Foto & id =" + id; var urlRequest: URLRequest = new URLRequest (phpFile getCacheBuster () + "&" + acţiune);

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE, imagesLoaded);urlLoader.load (urlRequest);

currentID = id;

}

Funcţia imagesLoaded (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data); imagini = new Array();

pentru fiecare {(element var în xml .. fotografie)

images.push ({name:'', src: item.attribute ("src')});

}

currentlmage = 0;

displayImage (imagini [currentImage] src.);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

199 of 362 11/9/2

Page 200: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 200/362

 

}

Funcţia displayImage (src: String): void {

trace ("Load Image:" + src); var loader: Loader Loader = new ();

loader.load (nou URLRequest (imageDir + currentID + "/" + src)); imageHolder.addChild (încărcător);

}

Funcţia nextImage (e: MouseEvent): void {

currentImage + +;

dacă (currentImage> images.length-1) {

currentImage = 0;

}

displayImage (imagini [currentImage] src.);

}

Funcţia prevImage (e: MouseEvent): void {

currentImage -;

dacă (currentImage <= 0) {

currentImage = images.length-1;

}

displayImage (imagini [currentImage] src.);

}

getCacheBuster function (): String {

Data var: Data = new Date (); cacheBuster = "? CB =" + date.getTime (); cacheBuster returnare;

}

init ();

prevMC.addEventListener (MouseEvent.CLICK, prevImage); nextMC.addEventListener (MouseEvent.CLICK,nextlmage);

PHP pentru galeria foto

Partea PHP acestei cereri galeria de poze este construit din trei fişiere. Primul fişier este categories.php, care este o reprezentare statică decategorii fiind trimise la ActionScript.

Prima parte a codului este categoria într-un format matrice multidimensională. Elementele categorie menţineţi apăsat numele, id, si informatiidespre copyright pentru fiecare categorie.

$ Categoriile = array (

array ("Boston", 1, "M. Keefe"), array ("Peisaje", 2, "altele"), array ("Las Vegas", 3, "M. Keefe"),array ("Nunti", 4, "altele"),

);

getCategories () Funcţia stabileşte întâi de referinţă la nivel mondial la $ Categorii variabilă. Următorul pas este de a defini o buclă caeste responsabil pentru construirea de date XML a trecut înapoi la ActionScript.

getCategories function () {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

200 of 362 11/9/2

Page 201: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 201/362

 

global $ categorii; $ xml = "<categories> \ n";

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

$ Xml .= "<categoria id = \" "$ categorii. [$ I] [1]" \ "name =. \" ". $ Categorii [$ i] [0]." \"Dreptului de autor = \" " $ categorii [$ i] [2] "\" /> \ n "..;

}

$ Xml .= "</ categoriilor>"; return $ xml;

}

Lungimea buclei este determinată de cât de mare $ Categorii matrice se întâmplă să fie. count ($ categorii)

Corpul buclei nu este nimic mai mult decât construcţia de date XML, similar cu proba

sa uitat la cursul porţiunea de dezvoltare ActionScript.

$ Xml .= "<categoria id = \" ".

$ Categorii [$ i] [1]. "\" Name = \ "".

$ Categorii [$ i] [0]. "\" Dreptului de autor = \MM .

$ Categorii [$ i] [2]. "\" /> \ N ";

Ultimul pas a acestei functii este de a reveni de date XML pentru ActionScript pentru a procesa. întoarcere $ xml;

Aici este categories.php fişier în toate elementele sale: <? Php

$ Categoriile = array (

array ("BostonM, 1, "M. Keefe"), array ("Peisaje", 2, "altele"), array ("Las Vegas", 3, "M. Keefe"),array ("Nunti", 4, "Alte" ),

getCategories function () {

global $ categorii; $ xml = "<categories> \ n";

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

$ Xml .= "<categoria id = \" "$ categorii. [$ I] [1]" \ "name =. \" ". $ Categorii [$ i] [0]." \"Dreptului de autor = \" " $ categorii [$ i] [2] /> \ n "..;

}

$ Xml .= "</ categoriilor>" return $ xml;

?>

Fişierul următor este de a dezvolta getPhotos.php, care deschide directorul de fotografie şi returnează fişierul XML populate cu sursă deinformaţii pentru fiecare dintre fotografii.

Cărnii provenind de la acest fişier este getPhotosFromID () funcţie, care acceptă un argument, o id. Doriţi să vă asiguraţi că un act deidentitate valid este transmis înainte de a continua astfel o declaraţie simplă condiţionată va lucra în acest caz. Dacă un act de identitate valabil afost gasita, atunci puteţi continua cu deschiderea de director şi în timp ce buclă.

<? Php

$ Photo_dir = "fotografii /";

Funcţia getPhotosFromID ($ id = null) {

global $ photo_dir;

if ($ id == null) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

201 of 362 11/9/2

Page 202: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 202/362

 

de imprimare "Nu ID-ul prestate"; return false;

}

$ Xml = "<photos id=\"" $id "\">..";

$ Dir = opendir ($ photo_dir $ id.);

în timp ce (false == ($ file = readdir ($ dir))!) {

if ($ file! = & & $ file

{

$ Xml .= "<numele fotografie = \

/> \ N ";}

}

closedir ($ dir); $ xml .= "</ Foto>"; return $ xml;

} ?>

în timp ce bucla este configurat la bucla prin fiecare fisier in directorul până când indicatorul fişierul este false, ceea ce înseamnă că nici u

fişier nu a fost găsit valid.

în timp ce (false == ($ file = readdir ($ dir))!) {

}

"\" Src = \ ". $ File." \ "

Utilizaţi un condiţionată dacă declaraţia pentru a exclude şi ... care este directorul de indicii pentru directorul curent şi directorul părinte. Dacăexcludeţi acest control va fi cel puţin două intrări false în fişierul XML, sau, mai rău, fişierul poate erorii toate împreună, deoarece ar putea puneîn timp ce buclă într-o stare recursiv infinit.

După toate imaginile din directorul sunt adunate, veţi dori să închideţi director pentru a elibera resurse valoroase. Acest lucru este important maales în cazul în care dosarul ar putea fi folosite de către altcineva, în acelaşi timp.

closedir ($ dir);

Ultimul pas în acest dosar este de a reveni XML pentru Flash pentru a procesa.

După ce au creat categorii şi fişiere foto, aveţi posibilitatea să creaţi gallery.php fişier, care se ocupă de apeluri de la PHP şi returnează XMLbuna baza a ceea ce se solicită.

<? Php

include "categories.php"; include "getPhotos.php";

header ("Content-type: text / xml ');

if ($ _GET ['actiune'] == "pisică") {

imprimare

}

altceva dacă {

imprimare

} ?>

Acest fişier începe cu, inclusiv cele două fişiere le-aţi creat anterior. Atunci header () se face apel la forţa de ieşire a tuturor continut propriuXML. Acest antet Funcţia poate fi folosit pentru aproape orice tip de conţinut. In esenta a stabilit, şi din acest punct de ieşire rezultă că formatuDe exemplu, să presupunem că doriţi să le exportaţi un continut PNG.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

202 of 362 11/9/2

Page 203: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 203/362

 

header ("Content-type: image / png");

Asiguraţi-vă că folosiţi tipul de conţinut corect în aplicaţia dumneavoastr ă. Folosind o greşit poate cauza erori şi, în cazuri rare, cauza o cerere deaccident.

Blocul finală de cod este folosit pentru a determina care conţinutul pe care îl solicită. Cele două tipuri de conţinut disponibile în acest exemplu sucategorie şi lista de fotografie. $ _GET ['Action'] variabilă este trecut de la Flash pe url ca un şir de interogare.

http://localhost/photoGallery/gallery.php?cb=1192408716823&action = Pisica

getCategories (); ($ _GET ['actiune'] == "fotografii") getPhotosFromID ($ _GET ['id']);

În acest moment, galeria Flash conduse de PHP este completă. Puteţi extinde acest exemplu pentru a adăuga subcategorii, tranziţii, sau poate unetitluri şi descrieri pentru fiecare imagine.

Acesta este lucrul misto despre ActionScript: poţi extinde de la exemplele de carte sau doar le foloseasca si dupa ce nava.

Cititorii RSS sunt un element foarte popular, şi aplicaţii pot fi gasite pentru aproape orice dispozitiv care este activat Web. Acestea pot fi găsite peorice, de la un browser de pe birou pentru telefonul în buzunar.

RSS este un grup de feed-uri Web utilizate pentru a publica conţinut actualizat frecvent, cum ar fi intrările, titluri de ştiri, podcast-uri, sau dedivertisment. Un alt mod de a gândi de RSS este cineva cu livrare ştirile de zi cu zi direct la tine, singura diferenta este nu există nici o limită la

suma de feed-uri te poţi abona la.

În urma este o privire la aplicaţia RSS va dezvolta şi modul în care va funcţiona, după cum se arată în figura 11.5.

FIGURA 11.5

Cititorul RSS cu un sistem de livrare PHP

ft RSSReader.swf 

Fi e de control în vizualizarea depanare

RSS Reader 

nrr . T . Fluxuri de încărcare l

Google Gears încercând să joace de captur ă cu Adobe AIR —

Noi gotoAndLearn () Tutorial privind AIR Drag and Drop

App dvs. Flexîn Apollo i n 5 minute

Este echipa Apollo condusă de copil care a tr ăit alături, că niciodată nu permiteţ i-mi să joace jocurile lui video?

Majoritate de birou

Vorbind la Adobe MAX Barcelona

Ars Technica interviu pe corp AIR RSS Feed

1 doar terminat încărcarea unui tutorial nou, denumit Drag and Drop în AIR In acest tutorial 15 minute v-am ar ăta cum să creaţ i un drag and FLV Player meniurile folosind Flash CS3 Professional se c heckout la g otoAndLearnO Lee

Aplicatia este construit din componente precompilate care au fost deja introduse în fişier de pornire. Cele trei elemente principale pe care suntinteresaţi sunt Listă, Textarea, şi Prezenta componente. Fiecare dintre aceste componente a fost atribuit un nume de instanţă care se facreferire în ActionScript.

Importul clase

Cele mai multe dintre clasele care nava cu Flash nu necesită să le importaţi. Cu toate acestea, există unele excepţii, dintre care unul este

ListEvent clasă.

fl.events.ListEvent de import;

În cazul în care evenimentul este importat aveţi posibilitatea să atribuiţi variabilele pentru aplicaţia dumneavoastră RSS. Singura variabila globalnecesare pentru această aplicaţie este php de referinţă.

var phpPath: String = "http://locahost/ch10/rssReader/"; Var phpFile: String = phpPath +" rss.php ";

 Încărcarea PHP

Funcţia folosită pentru a încărca PHP, care returnează XML este foarte similar cu exemplele anterioare. Configurarea unei URLRequest, oURLLoader, şi ataşaţi un handler pentru COMPLET eveniment.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

203 of 362 11/9/2

Page 204: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 204/362

 

loadFeeds function (): void {

var urlRequest: URLRequest = new URLRequest (phpFile); var urlLoader: URLLoader = new URLLoader ();urlLoader.addEventListener (Event.COMPLETE, feedHandler); urlLoader.load (urlRequest);

}

feedHandler () Funcţia este responsabil pentru lucrul cu răspunsul de la apelul PHP. În această aplicaţie, PHP trimite înapoi XML, care estefolosit pentru a popula Listă componente. Intrările RSS sunt plasate în Listă componentă utilizând addItem () funcţie.

Acest feedHandler Funcţia acceptă un obiect ca argument. Obiectul are nevoie de cel puţin o etichetă de proprietate în scopul de a adăugelementul, dar trebuie să adăugaţi, în general, de date proprietate, precum şi.

feedHandler funcţie (e: Event): void {

pentru fiecare {(element var în xml .. intrare)

topicsList.addItem ({eticheta: element .. nume, date de: poziţia .. desc});

topicsList.addEventListener (ListEvent.ITEM_CLICK, listClickhandler);

}

}

Elementele de listă de încărcare atunci când corpul de text clic pe el, astfel încât să creaţi funcţia care se ocupă de acest eveniment.ListEvent estrecut de la ITEM_CLICK Evenimentul, care conţine element proprietate. element proprietate este în cazul în care de date proprietate estocat. În acest exemplu, faptul că datele sunt organismul RSS, astfel încât să puteţi trece pur şi simplu, că datele în mod direct la feedBodyTextarea.

Funcţia listClickhandler (e: ListEvent): void {

feedBody.htmlText = e.item.data;

}

Ultima funcţie în cerere RSS este handler buton, care este numit în orice moment, Buton componente se face clic. Această funcţie face pur şi simpun apel la loadFeeds funcţie.

submitHandler funcţie (e: Event): void {

loadFeeds ();

}

După cum puteţi vedea, ActionScript este destul de simplu pentru acest exemplu. XML într-adevăr accelerează dezvoltarea de aplicaţiiweb-enabled, iar acest lucru este un exemplu perfect de ea.

Aici este codul aplicatiei RSS în întregime de trimitere:

fl.events.ListEvent de import;

var phpPath: String = "http://localhost/ch10/rssReader/"; Var phpFile: String = phpPath +" rss.php ";

loadFeeds function (): void {

var urlRequest: URLRequest = new URLRequest (phpFile); var urlLoader: URLLoader = new URLLoader ();urlLoader.addEventListener (Event.COMPLETE, feedHandler); urlLoader.load (urlRequest);

}

feedHandler funcţie (e: Event): void {

var loader: URLLoader = URLLoader (e.target); var xml: XML = new XML (loader.data);

pentru fiecare {(element var în xml .. intrare)

topicsList.addItem ({eticheta: element .. nume, date de: poziţia .. desc}); topicsList.addEventListener(ListEvent.ITEM_CLICK, listClickhandler);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

204 of 362 11/9/2

Page 205: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 205/362

 

}

}

Funcţia listClickhandler (e: ListEvent): void {

feedBody.htmlText = e.item.data;

}

submitHandler funcţie (e: Event): void {

loadFeeds ();

}

loadBtn.addEventListener (MouseEvent.CLICK, submitHandler);

Cu partea de ActionScript cititorul RSS terminat vă puteţi concentra pe cod PHP.

Feed RSS pe care este folosit pentru acest exemplu, după cum se arată în figura 11.6, vine de la Adobe şi este cele mai recente ştiri şi informaţiidespre Adobe AIR.

<? Php

$ RssFeed = "http://weblogs.macromedia.com/mxna/xml/rss.cfmQuery = bySmartCategory & limbi = 1 &smartCategoryId = 2 8 & smartCategoryKey = F2DFD9E0-FBB6-4C2D-2AFE6AFD941FDDB1 "". "?". ";

?>

FIGURA 11.6

Cum feed-ul RSS arată în browserul Web, presupunând că nu aveţi un cititor instalat

■ i rss | 1 | - Notepad

Editare format fişier 

H - «/ canal>

<Element rdf: despre = "http://www.teratech.com/blog/index.cfm/2007/9/2O/Google-g ears-tryi ng-to-play-catch-up-Wii <title> Google Gears încearcă la juca de captur ă cu Adobe AIR </ title>

<1i nk> http://weblogs.macromedia.com/mxna/control1er.cfm?handler=PostHandler&acti pe = c ~ linge si post! ■ «descriptionx! [CDAT A [este Google Gears fan open source extensie de browser care permite aplic aţ ii web <dc:subject> coldFusi pe, Flash, Flex </ dc: obiectul> <dc:cr eator> TeraTech software bExcelent / dc: creatori- 'idc: data > 2007-10-15T01: 05 :40.0-00: 00 </ dc: data> <dc:i dentifier> F47BA387E77B8F75B819F13A8E6A7069 </ dc: identificator> < / item>

<Element RDF ¡despre = "http://theflashblog.com/?p=291">

■ «title> New Tutorial gotoAndLearnO privind AIR Drag and Drop </ title>

<1i nk>http://weblogs.macromedia.com/mxna/control 1 er.cfm incarcatoare =? PostHandler & ACTi (<descriptionx![CDATA [I doar terminat încărcarea unui tutorial nou, denumit Drag and Drop ■ <dc:subjact> Flash </ dc: obiectul> ■ «dc: creator> Blog Flash </ dc: creator> <dc:date> 2007 - 10-14T02 ¡27:31.0-00: 00 </ dc: data> <dc¡Identifier> 6ECE91Q64D6F15ABA62C5DF6773F8E69 </ dc: Identifier> < / item>

■ <element rdf: despre = "http://i nitApp.com/2007/03/17/your-flex-app-into-apol1o-in-5-minutes / " > < title> aplicaţ ia Flexîn Apollo în 5 minute </ title>

<1i nk> http://weblogs.macromedia.com/mxna/control1er.cfm?handler=PostHandler&acti pe cl ick = & postID = 21916Q & am <descri ption> <[c! DE DATE[În discursul de inaugurare a spus Kevin Lynch ea ar dura 5 minute pentru a obţ ine aplicaţ ia flexîn Apollo. H ■ <dc:subject> Flash, Flex, Fireworks-c/dc: subrezerva> <dc: c r mânca sau i> nit App </ dc: CR mânca oroide: data> 2007-10-13T2 2: 30:02.0 - 00:00 </ dc: data> <dc: i dentificatorul> FCB654A7124AE7614809c824099D2B87</ Dc: identificator> < / item>

<Element rdf: despre = " <title> este echipa Apollo condusa de copil care a tr ăit alături, că niciodată nu permiteţ i-mi să joace jocuri video de lui </ title>? <1 i ■ «descriptionx! [CDATA [Deci, eu si l »-8217; m off la ApolloCamp seara asta şi aud o mulţ ime de & # -8220; poate & ̂ 8221; g ■ <dc:subject> Flash, Flefocuri de artificii </ dc: subiect? <dc:creator> initApp </ dc: creator> <dc:date> 2007 - 10-13T22: 30:02. 0-00:00 </ dc: data> <dc:identifier> 139c04 8A2278DB806315FB2B628D7123 </ dc: identificator </ item>

<Element rdf: despre = "http://blog.papervision3d.org/2007/10/13/majority-desk/"> <title> Agenţ ie de Majoritate </ title>

■ «1 i nk>http://webl ogs.macromedia, com/mxna/control1er.cfm handler = PostHandler &;? ■ «descriptionx! [CDATA [Dezvoltat de Eddie Herrmannşi Mc WeeneyDan pentru demo gem; <dc:subject> F lash </ dc: obiectul> <dc:creator> papervi si on3D </ dc ¡cr eator> <dc:date> 2007 - 10-13T15 ¡20:28. 0-00: 0dc: data> <dc:i dentifier> BAElD3D EE9E46D02 53762A0E26676502 </ dc: i dentifier> </ item>

: TION = click& postID = 219121 & am SAP TechEd, Agenţ ie de Majoritate este o

.be/index.çhp/2007/10/12/sp.

eaki ng-la-chirpici-max-Barcelona / ";

<Element rdf: despre = "http://www.aboutni et■ ctitl e> Vorbind la Adobe MAX Bare

h-Adobe-Air d = 219273 & am

$ Pentru hrana animalelor variabilă este un substituent pentru XML generat, care este construită o dată pe feed-ul RSS este încărcat cusucces. Feed-ul RSS este citit în utilizarea SimpleXML bibliotecă care este livrat împreună cu PHP 5. Aceasta nu este singura bibliotecă parsareaXML disponibil pentru PHP, dar este cel mai eficient şi mai uşor de folosit.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

205 of 362 11/9/2

Page 206: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 206/362

 

$ Feed = "";

$ Xml = simplexml_load_file ($ rssFeed);

În acest moment, puteţi începe construirea foreach buclă, care este responsabil pentru construirea documentul XML a trecut înapoi laActionScript.

$ Pentru hrana animalelor .= "<items> \ n";

foreach ($ xml-> ca element $ element) {

Desc $ = $ post-> descriere;

$ Desc)

"</ Name> \ n"; ."]]></ desc> \ n ",

$ Desc = preg_replace ('/[... \ [\]] / '

$ Pentru hrana animalelor .= "<entry> \ n";

$ Pentru hrana animalelor .= "<name>". $ Post-> title.

$ Pentru hrana animalelor .= "<desc> <[CDATA [!". $ Desc

$ Pentru hrana animalelor .= "</ intrare> \ n";

referinţă

$ Pentru hrana animalelor .= "</ posturi> \ n";

Bucla ia fiecare element al XML şi buclele prin intermediul element noduri.

Veţi observa descrierea este atribuit unui $ Desc variabilă. Motivul pentru aceasta este, deoarece descrierea trebuie să fie curăţate înainte de a freturnat. Procesul de curăţare poate fi realizată folosind preg_replace () , O funcţie de expresie regulată care îndepărtează de caractereunescaped şi necorespunzătoare.

$ Desc = preg_replace ('/[... \ [\ ]]/','', $ desc);

Aceasta carte nu furnizează o pas cu pas în profunzime asupra expresiilor regulate (Regex); Cu toate acestea, există un ghid foarte bun găsit lahttp://php.net/manual/en/ . Pcre.pattern.syntax.php.

Ultima portiune a codului PHP setează tipul antet şi ieşirile XML pentru ActionScript.

header ("Content-type: text / xml ');

de imprimare "<versiune xml =?" 1.0 "encoding =MUTF-8M?.> "\ N"; de imprimare $ hranei pentru animale;

Veţi observa PHP necesare pentru a construi RSS cererea nu este în profunzime, o mul ţime de care se datorează SimpleXML fiind astfel o bibliotemare. Acest exemplu ar putea fi extinsă pentru a trage în mai multe dintre informaţiile conţinute în RSS feed. De exemplu, aţi putea afişa titlul deintrare, data, şi chiar URL-ul în cazul în care intrarea originală se află.

În cele din urmă, aici este PHP completat de trimitere: <? Php

$ RssFeed = "http://weblogs.macromedia.com/mxna/xml/rss.cfmQuery = bySmartCategory & limbi = 1 &smartCategoryId = 2 8 & smartCategoryKey = F2DFD9E0-FBB6-4C2D-2AFE6AFD941FDDB1 "". "?". ";

$ Feed = "";

$ Xml = simplexml_load_file ($ rssFeed); hranei pentru animale $ .= "<items> \ n";

foreach ($ xml-> ca element $ element) {

Desc $ = $ post-> descriere;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

206 of 362 11/9/2

Page 207: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 207/362

 

$ Desc = preg_replace ('/[... \ [\ ]]/','', $ desc); $ pentru hrana animalelor .= "<entry> \ n";

$ Pentru hrana animalelor .= "<name>". $ Post-> title. "</ Name> \ n"; $ pentru hrana animalelor .="<desc> <[CDATA [!". $ Desc ,"]]></ desc> \ n "; $ pentru hrana animalelor .=" </ intrare> \ n ";

}

$ Pentru hrana animalelor .= "</ posturi> \ n"; header ('Content-type: text / xml');

de imprimare "<xml version =" 1.0 "encoding =" UTF-8 "?>" \ n ".;

imprimare $ furaje;?>

O mulţime de designeri utilizează Flash pentru a crea anunţuri care urmează să fie plasate on-line. Acestea variază de la anunţurile într-unmini-pagina in plina floare anunţurile care sunt paginii. Formatul anunţului cea mai comună este banner publicitar, care este de obicei 468 x 60,după cum se arată în figura 11.7, pixeli. Aceste bannere sunt, de obicei, scriptate pentru a încărca pe un site web atunci cand este apasat. Ce desprurmărirea aceste clicuri? Chiar mai bine, de ce nu a crea un banner dinamic care încarcă un anunţ aleatoriu şi nu necesită proprietarul pentru aactualiza nimic mai mult decât un fişier XML şi directorul de imagine?

Această secţiune va fi procesul de dezvoltare a unui anunţ banner dinamic in Flash. Puteţi adăuga apoi de urmărire la acest banner folosind doar

câteva linii de PHP. Acest exemplu nu are nevoie de nici un fişier de plecare, deoarece orice imagine va lucra pentru banner, şi cererea urmează adezvoltate 100 la sută în codul ActionScript.

FIGURA 11.7

Exemplu de aplicare banner publicitar în acţiune

Prima parte a codului este responsabil pentru initializarea variabilelor utilizate în aplicaţie.

var phpPath: String = "http://localhost/ch10/bannerAd/"; Var phpFile: String = phpPath +" ads.php ";

imageHolder var: MovieClip;

var cacheBuster: String = "? CB = 1";

var adURL: String;

Odata ce variabile sunt definite puteţi construi funcţiile. Prima dintre ele este responsabil pentru ataşarea titularului imagine, adăugând tratare aevenimentului, şi de asteptare loadlmage funcţie.

imageHolder = new MovieClip (); imageHolder.x = 0; imageHolder.y = 0;

imageHolder.addEventListener (MouseEvent.CLICK, loadAdURL);

imageHolder.buttonMode = true;

addChild (imageHolder);

cacheBuster = getCacheBuster ();

loadImage ();

loadImage () Funcţia este responsabil pentru încărcarea fişier XML care deţine datele banner publicitar. Apoi aloca o funcţie handler care estenumit după XML este complet încărcată.

Funcţia loadImage (): void {

var urlRequest: URLRequest = new URLRequest (phpFile +

getCacheBuster ()); var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener(Event.COMPLETE, imageLoaded); urlLoader.load (urlRequest);

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

207 of 362 11/9/2

Page 208: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 208/362

 

După ce XML este complet încărcată, un apel la imageLoaded se face. Această funcţie este responsabil pentru încărcarea de date XML, scoatereinformaţiile despre imagine, şi de încărcare a imaginii. În urma este o privire la fiecare parte, unul la un moment dat.

Următoarele este procesul de încărcare a datelor şi crearea obiectului XML:

Funcţia imageLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

Următoarea parte a acestei funcţii este de a trage în datele de imagine şi atribuiţi-l la variabilele locale:

var url: String = xml .. banner.attribute ('url'); nume var: String = xml .. banner.attribute ('nume');var imagine: String = xml .. banner.attribute ("src") ; Culegere de var: String = xml .. banner.attribut("dir");

adURL = url;

Ultimul pas în această funcţie este de a încărca imaginea şi ataşaţi-l la lista de afişare:

var loader: Loader Loader = new (); loader.load (nou URLRequest (Culegere de + imagine));

imageHolder.addChild (încărcător);

Deschiderea-o fereastr ă de browser 

Procesul de încărcare şi afişarea de anunţuri este acum completă. Următorul pas este de a atribui de tratare a evenimentelor care se numeşte atuncând se face clic pe banner-ului. Utilizare navigateToURL () pentru a deschide o fereastră nouă de browser şi navigaţi la pagina de anunţuriprestabilite.

Funcţia loadAdURL (e: MouseEvent): void {

navigateToURL (nou URLRequest (adURL));

}

Sarcina ultima ActionScript este de a apela init () funcţie şi să începeţi procesul. init ();

Aici este codul ActionScript completat pentru referinţă:

var phpPath: String = "http://localhost/ch10/bannerAd/"; Var phpFile: String = phpPath +" ads.php ";

imageHolder var: MovieClip;

var cacheBuster: String = "? CB = 1";

var adURL: String;

funcţia init ()

{

imageHolder = new MovieClip (); imageHolder.x = 0; imageHolder.y = 0;

imageHolder.addEventListener (MouseEvent.CLICK, loadAdURL);

imageHolder.buttonMode = true;

addChild (imageHolder);

cacheBuster = getCacheBuster ();

loadImage ();

}

Funcţia loadImage (): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

208 of 362 11/9/2

Page 209: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 209/362

 

var urlRequest: URLRequest = new URLRequest (phpFile +

getCacheBuster ()); var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener(Event.COMPLETE, imageLoaded); urlLoader.load (urlRequest);

}

Funcţia imageLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

var url: String = xml .. banner.attribute ('url'); nume var: String = xml .. banner.attribute ('nume');var imagine: String = xml .. banner.attribute ("src") ; Culegere de var: String = xml .. banner.attribut("dir");

adURL = url;

var loader: Loader Loader = new (); loader.load (nou URLRequest (Culegere de + imagine));imageHolder.addChild (încărcător);

}

Funcţia loadAdURL (e: MouseEvent): void {

navigateToURL (nou URLRequest (adURL));

}

getCacheBuster function (): String {

Data var: Data = new Date (); cacheBuster = "? CB =" + date.getTime (); cacheBuster returnare;

}

init ();

Dezvoltarea PHP

În acest moment codul ActionScript este completă şi vă puteţi concentra pe PHP ads.php fisier este alcătuit din două variabile globale şi o

funcţie.

Prima variabilă globală este directorul în cazul în care se află imaginile de anunţuri. Variabila doilea este matrice care conţine datele de anunţuri.

$ AdImageDir = "/ adImages /."; $ BannerAds = array (

array ('Numele Banner "," randomimagei.jpg', 'http://localhost/ "), Array ('Numele Banner ","randomimage2.jpg', 'http://localhost/ "),

);

getBannerAd Funcţia atribuie cele două variabile ca globals astfel încât acestea sunt accesibile în această funcţie.

Aleatorie de selecţie

Ad banner unică este ales din matrice folosind o cheie aleatoare. Această cheie aleatoare este generată cu ajutorul mt_rand () Funcţia şi durata$ BannerAds matrice.

$ Aleatoriu = (mt_rand () count% ($ bannerAds));

Fişierul XML este construit de către scoate o singură linie de date imagine care ActionScript va prelucra.

Funcţia getBannerAd () {

"AdImageDir. $." $ Xml .= "<banner id = \" ". 0" \ "dir = \". \ "Url = \" ". $ BannerAds [$ aleator] [2]\ ". Numele = \ "". $ bannerAds [$ aleator] [0]. "\" src = \ ". $ BannerAds [$ aleator] [1]. "\" /> \ N

$ Xml .= "</ bannere>";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

209 of 362 11/9/2

Page 210: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 210/362

 

întoarcere $ xml;

}

getBannerAd de imprimare ();

PHP responsabil pentru încărcarea banner publicitar este acum completă. După cum puteţi vedea, cantitatea de cod necesar pentru a crea aceastăaplicaţie este destul de mic. Acest exemplu de bază poate fi extins cu uşurinţă pentru a adăuga în categorii sau chiar mai multe imagini că tranziţca filmul stă pe un browser.

Funcţia getBannerAd () {

global $ bannerAds, $ adImageDir; $ xml = "<banners> \ n";

$ Aleatoriu = (mt_rand () count% ($ bannerAds));

"AdImageDir. $." $ Xml .= "<banner id = \" ". 0" \ "dir = \". \ "Url = \" ". $ BannerAds [$ aleator] [2]\ ". Numele = \ "". $ bannerAds [$ aleator] [0]. "\" src = \ ". $ BannerAds [$ aleator] [1]. "\" /> \ N

$ Xml .= "</ bannere>";

întoarcere $ xml;

getBannerAd de imprimare ();?>

Aveţi acum creat cu succes un PHP pe deplin funcţional şi banner vizualizatorul anunţ Flash. Conceptele învăţat în această secţiune pot fi adaptacu usurinta la alte proiecte. De fapt, sunteţi încurajaţi să se extindă asupra exemplul şi de a crea o cerere mai robustă.

Aceasta aplicatie poate fi, de asemenea, simplificat prin încărcarea unui fişier XML static, cu toate acestea, acest lucru este mai dificil de a actualizşi nu oferă acelaşi nivel de personalizare. Cererea ca PHP înseamnă că puteţi ataşa un strat de bază de date MySQL pentru a reveni şi a datelor deimagine dintr-o bază de date, care ar fi cel mai probabil fi actualizate dintr-o altă sursă.

Aici este codul de completat pentru referinţă. <? Php

'http://localhost/ " 'http://localhost/ " 'http://localhost/ " 'http://localhost/ " 'http://localhost/ "'http://localhost/ " 'http://localhost/ " 'http://localhost/ ")

$ AdImageDir = "/ adImages /."; $ BannerAds = array (

array ( "Banner 1' "Randomimagel. jpg

array ( "Banner 2' "Randomimage2. jpg

array ( "Banner 3' "Randomimage3. jpg

array ( "Banner 4' "Randomimage4. jpg

array ( "Banner 5' "Randomimage5. jpg

array ( "Banner 6' "Randomimage6. jpg

array ( "Banner 7' "Randomimage7. jpg

array ( "Banner 8, "Randomimage8.; pg "

Un hit counter este utilizată pentru a determina cât de mulţi vizitatori vor un site. În general, contor este vizibil pentru vizitatorii sub formă de tex

sau o ilustraţie. Unele site-uri folosesc alte forme de monitorizare care nu sunt accesibile publicului, în scopuri de statistici de urmărire. Tragereasorţi majore şi caracteristică a unui contor este un reprezentare grafică.

Puteţi folosi fie un fişier text plat sau de baze de date SQL pentru a stoca datele pentru hit counter. Acest exemplu utilizează o bază de date SQLpentru o pereche de motive: viteza (baza de date poate procesa informaţii mult mai rapid) şi se referă la permisiunea de fişier. În cazuri rare, unserver poate plasa un sistem de blocare pe un fişier, ceea ce înseamnă că fişierul nu poate fi deschis. Aceasta ar forţa hit counter să eşueze şi nu esrezultatul ideal v-ar fi cautati.

Hit counter logica

Logica din spatele hit counter este destul de simplă. Sunteţi facă mai întâi un apel la baza de date pentru a capta numărul de curent şi creşterealovit-l până la 1.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

210 of 362 11/9/2

Page 211: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 211/362

 

$ OldCount = Srowfamount ']; $ newCount = $ oldCount + 1;

Când aţi noua valoare, trimite-l înapoi în tabelul SQL. Face acest lucru prin actualizarea rândul existente şi de stabilire a sumă coloana la valoarede $ NewCount variabilă.

mysql_query ("UPDATE suma SET counter =" $ newCount.);

Ultimul pas în codul PHP este de a reveni noua valoare Flash pentru ca acesta să afişa.

întoarcere "resp =". $ NewCount;

Acest lucru este cu PHP nevoile pentru logica hit counter. În urma este fi şierul de completat.

<? Php

include "dbConn.php";

$ Query = "SELECT suma de la counter"; $ rezultat = mysql_query ($ interogare); $ row = mysql_fetch_arra($ rezultat); $ oldCount = $ row ['valoare']; $ newCount = $ oldCount + 1;

mysql_query ("UPDATE suma SET counter =" $ newCount.);

întoarcere "resp =". $ NewCount;?>

Dezvoltarea hit counter FlashCu PHP făcut, aveţi posibilitatea să mutaţi pe dezvoltare Flash, care constă dintr-o cerere, toate ActionScript.

Hit counter are nevoie pentru a apela mai întâi fi şierul PHP, care serveşte două scopuri. Primul este de asteptare fişierul PHP pentru a încărca şicreşterea numărului. Al doilea scop este acela de a returna valoarea nou, care este trecut într-un câmp de text dinamic.

Prima parte este de a atribui phpFile variabilă, care este o referinţă la fişierul de contor amplasat pe server.

var phpFile: String = " http://localhost/ch10/hitCounter/";

Prima funcţie este de a construi loadHitCounter () , Care este responsabil pentru asteptare server şi atribuirea handler de răspuns.

loadHitCounter function (): void {

var urlRequest: URLRequest = new URLRequest (phpFile); var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, handleServerResp); urlLoader.load (urlRequest);

}

După răspunsul este încărcat, handleServerResp () este numit trece de-a lungul datele încărcate. Aceste date sunt apoi trimise laURLVariables clasă pentru a scoate resp proprietate. Această proprietate este în cazul în care numărul actual se află.

Funcţia handleServerResp (e: Event): void {

var loader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (loader.data); var count: = uint variables.resp;

}

Numărul de final este plasat în câmpul de text dinamic, care nu este formatat în acest exemplu, dar pute ţi adăuga cu uşurinţă acest lucru pe contpropriu.

 var txt: textfield = new textfield ();

txt.selectable = false;

txt.width = 200;

txt.text = count + "vizitatori";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

211 of 362 11/9/2

Page 212: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 212/362

 

}

Linia absolut ultimul cod în ActionScript este apelul la loadHitCounter funcţie, care începe totul off.

loadHitCounter ();

În acest capitol aţi învăţat elementele de dezvoltare şi de proiectare o aplicaţie. Apoi, odată ce aţi înţeles modul în care cererea ar trebui să fie

construite vă construit un client de chat folosind PHP si Flash.

În următoarea secţiune aţi învăţat cum să dezvolte o galerie Flash pe bază de fotografie cu categoria dinamice şi suport imagini care folosesc XML

Ultima secţiune a fost dedicată în curs de dezvoltare alte aplicaţii folosind Flash, PHP, MySQL şi a înţelege mai bine concepte.

Trebuie să aveţi acum o idee bună cum să construiască aplicaţii robuste, care să profite de date dinamice pentru actualizarea şi funcţionalitate.

s ̂ vr o otwreeKUW $ TNC «H99R HJ e» t, ir. . |

v: LrvS ̂ B

"I:J

W &,

V

I 1 ■

1

r o

■ vi

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

212 of 362 11/9/2

Page 213: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 213/362

 

■,, V

^ —--

 _ 

Eun acest capitol, învăţaţi despre în curs de dezvoltare aplicaţii complete de la sol în sus. Accentul se pune pe clasa pe baza de desene sau modecare se pot actualiza cu uşurinţă mai târziu. Aspectul principal al acestui capitol va fi modul de utilizare a Flash şi PHP pentru a dezvolta acesteaplicaţii.

Acest capitol este impartit in patru cereri: o căruţă PayPal, particularizate de cumparaturi Cosul de, cercetător Amazon, Flickr şi o fotografie galercăutarea. Fiecare secţiune începe cu aplicarea codului PHP şi continuă cu ActionScript. Construirea unei cereri ca acest lucru face mai uşor pentrutesta cum vă construi şi reduce timpul de valoarea în procesul de dezvoltare.

Exemplele din acest capitol sunt construite folosind clase personalizate, care sunt cuprinse în Capitolul 9. Daca nu ati citit acest capitol încă, amrecomandăm să vă facă acest lucru înainte de a continua în acest capitol. Desigur, dacă aţi folosit clase în trecut, apoi p rin toate mijloacele continu

O aplicaţie din lumea reală este una care a fost proiectat, testat şi implementat cu intenţia de alţi utilizatori care va fi folosit-o.

La fel ca într-o aplicaţie reală, vor fi câteva secţiuni care folosesc o terţă parte Application Programming Interface (API) pentru a încărca şi de datecăutare. Atunci când se lucrează cu un API este comun pentru a găsi o listă a metodelor şi solicită permis după cum se arată în figura 12.1.

 În acest capitol

Folosind PayPal in Flash Dezvoltarea Cauta dupa un cos de cumparaturi pe Amazon în curs de dezvoltare o galerie foto

Figura 12.1

Flickr API listă, care afişează care metodele şi proprietăţile sunt disponibile public

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

213 of 362 11/9/2

Page 214: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 214/362

 

Un API deschis nu înseamnă întotdeauna oricine poate avea acces. De exemplu, cu Flickr vă sunt necesare pentru a trece de-a lungul o cheie careautorizează o cerere. Acest lucru este nu numai pentru a bloca stabilire a anumitor aspecte ale unei API, dar, de asemenea, se opreşte răspunsurilspam-ul şi automate, care ar putea duce la API-ul a fost dezactivat.

Exemplele Amazon şi Flickr în acest capitol folosi aceste API-uri, dar primul lucru să se uite la sunt regulile şi cerinţele pentru API pe care îlutilizaţi.

Lucrul cu PayPal în Flash este similar cu HTML, deoarece PayPal oferă un set comun de conectare şi abilităţi de acces. Cu toate acestea, un avantapentru dezvoltarea soluţiei în Flash este capacitatea de a spori experienţa utilizatorului ca Flash oferă comunicaţii mai fluid cu alte servicii,deoarece nu are nevoie să reîncărcaţi pagina intreaga sau deschide orice ferestre suplimentare.

 Înscrierea pentru PayPal Premier 

Înainte de a începe să scrie cod pentru interfatarea cu PayPal, să creaţi un cont PayPal Premier, pe care le puteţi utiliza pentru a urmări dvs. devânzări şi autentificarea solicitarile dumneavoastra. Durează doar câteva minute pentru a configura un cont, si nu costa nimic.

Pentru a configura un cont PayPal Premier, urmaţi aceşti paşi:

1.În browserul Web, navigaţi la www.paypal.com. Alegeţi Get Started C Tipuri de cont.

2.Pe pagina PayPal Tipuri de Cont, faceţi clic pe Sign Up Now. Pagina de Alegeţi Tipul de cont apare.

3.Sub cont Premier, faceţi clic pe Start acum. În Crearea unui formular cont PayPal, care apare (a se vedea figura 12.2), tastaţi informaţiile solicitate

4.După ce trimiteţi formularul, veţi primit o confirmare prin e-mail. Trebuie să răspundă la e-mail pentru a activa contul.

5.Autentificaţi-vă şi de testare noul dvs. cont. Amintiţi-vă, trebuie să activaţi contul prin e-mail înainte de a îl pute ţi folosi.

FIGURA 12.2

Contul PayPal Anul ecran

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

214 of 362 11/9/2

Page 215: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 215/362

 

În acest moment, ar trebui să aveţi de conectare de lucru PayPal. Prin intermediul contului pe care tocmai aţi înregistrat pentru va puteti loga laPayPal şi a începe crearea de specificul cont.

Sistemul necesită un nume de utilizator şi parola pentru a genera conţinut. Cu toate acestea, în scopul de a SSESSS înaintează o cerere de date aveţnevoie doar de a furniza adresa de e -mail. Acest lucru este folosit pentru a asigura cererea e ste corectă. La niciun moment ar tre bui să vă plasaţiparola PayPal în ace st formular.

Faceţi clic pe link-ul Comercianţilor de pe partea de sus a paginii pentru a vizita pagina Cumpara acum generator. Celelalte opţiuni pe primulecran nu sunt importante în acest moment. În cele din urmă, faceţi clic pe Creare buton, care va trece la pagina următoare în cazul în care codulHTML este pentru butonul cumpara acum. Copiaţi codul HTML care este generat de PayPal pentru Cumpara acum butoane.

Acest cod este utilizat pentru a construi un exemplu Flash. În urma este codul proba copiat de la generatorul de PayPal a sistemului de comerciape care tocmai l-aţi vizitat.

<= Formă de acţiune "https://www.paypal.com/cgi-bin/webscr"Method =" post ">

"Cmd" value = "_xclick"> "de afaceri" value = "{EMAIL_ADDRESS}"> "item_name" value = "{item_name}">"item_number" value = "{item_number}"> "suma" value = "{item_amount } ">" CURRENCY_CODE "value =" USD ">greutatea "value =" 1 "> 'weight_unit" value = "lbs"> "LC" value = "US">

Asiguraţi-vă că nu aveţi de criptare buton activat; a face acest lucru face imposibil ă pentru a apuca informaţiile necesare pentru a construi butonulFlash.

După cum puteţi vedea, codul generat pentru formularul HTML are toate variabilele necesare, care vor fi folosite pentru a crea un buton Flash.Următorul pas este de a construi codul de Flash care va face Cumpara acum butonul pentru cerere.

Aici este codul ActionScript necesare pentru a interfata cu PayPal, după cum puteţi vedea acest cod este foarte similar cu codul HTML existent aţgenerat pe pagina PayPal. Prima parte este să se concentreze asupra url variabile care sunt responsabile pentru construirea POST de date. AcesPOST datele sunt transmise de-a lungul la PayPal atunci când utilizatorul face clic pe Cumpara acum.

/ / Variabilele Paypal

var PP _cmd : String = "_xclick";

var PP _business: String = "[email protected]";

var PP _item_name: String = "mostre de produse";

var PP _item_number: String = "0001";

var PP _amount: String = "24.99";

var PP _currency: String = "USD";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

215 of 362 11/9/2

Page 216: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 216/362

 

var PP _weight: String = "1";

var PP _weight_unit: String = "lbs";

var PP _LOCATION: String = "american";

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

<Intrare type = "Ascunse" name =

</ Form>

Chiar dacă puteţi vedea clar numerele din blocul de variabile, toţi parametrii sunt stabilite ca siruri de caractere care urmează să fie compatibil cuechivalentul HTML. Piesa următoare este de a stabili URL-ul, care va fi folosit pentru a interfa ţa cu PayPal. Aceasta este, în esenţă, aceeaşi variabica de acţiune, care se găseşte în HTML originală.

var paypalURL: String = "https://www.paypal.com/cgi-bin/webscr";

În cazul în care variabilele PayPal şi date sunt stabilite, puteţi crea codul care se numeşte atunci când butonul cumpara acum se face clic.

Aici este funcţia care este utilizat pentru a apela PayPal. Această metodă nu necesită variabilele de obiceiul de a fi trecut în, deoarece acestea suntdefinite în afara funcţiei. Definirea unei variabile in afara unei functii este luneta astfel încât orice funcţie are acces la ele. În cazul în care aceastăvariabilă este definită în cadrul funcţiei ar fi vizibile doar pentru funcţia în care este definit. Excepţia este, desigur, în cazul în care funcţia esteglobală sau variabila este returnat de funcţia creat.

Funcţia 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);

}

Folosind datele POST

Metoda a datelor trimise la PayPal este în POST format. Acest lucru înseamnă că variabilele sunt incluse în apel, dar nu pe URL-ul asa cum sevede cu GET. Utilizarea POST format deţine câteva avantaje, primul fiind URL-ul este curat şi nu pot fi falsificate cu adevărat. Al doilea estenivelul suplimentar de securitate atunci când trece de date moderat sensibile la server.

Dacă aveţi nevoie pentru a trimite date extrem de sensibile, cum ar fi facturarea sau informa ţiile cărţii de credit, este important să utilizaţi o HTTapel. Motivul pentru care este POST într-adevăr devine doar o securitate prin obscuritate şi nu este cel mai sigur rezultat.

Acest exemplu face uz de constante POST variabilă care se găseşte în URLRequestMethod. Desigur, aveţi posibilitatea să utilizaţi pur şisimplu şir literal POST deoarece aceasta este ceea ce de fapt are constanta pentru o variabilă.

urlRequest.method = URLRequestMethod.POST;

Utilizarea sendToURL

În exemplele anterioare, este posibil să fi observat de utilizare a navigateToURL, care solicită o adresă URL şi oferă posibilitatea de a trimiteEEG de date în întreaga URL-ul. Acest exemplu solicită pentru POST de date, astfel încât utilizarea de sendToURL este o opţiune mai bună.Este important să înţelegem că sendToURL Metoda trimite cererea către server, dar ignoră orice răspuns care este returnată.

sendToURL (urlRequest);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

216 of 362 11/9/2

Page 217: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 217/362

 

Configurarea PayPal comunicare

Ultimul pas este de a atribui buton de acţiune, care se anexează la Cumpara acum MovieClip. Pur şi simplu loc o MovieClip pe scena si danumele instanţă buyNowBtn. Dacă alegeţi să aibă mai mult de un buton, eu recomand o structură de clasă care trece datele PayPal a reduce laminimum cantitatea de codul necesar.

callPaypal Funcţia se ataşează la buton, utilizând un ascultător eveniment. CLICK Evenimentul este utilizat, care se numeşte atunci cândutilizatorul face clic pe butonul.

buyNowBtn.buttonMode = true; byNowBtn.useHandCursor = true;

 buyNowBtn.addEventListener (MouseEvent.CLICK, callPaypal);

Ultimul pas este de a pune toate din Codul împreună şi testaţi-l.

/ / Variabilele Paypal

var PP _cmd : String = "_xclick";

var PP _business: String = "[email protected]";

var PP _item_name: String = "mostre de produse";

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 = "american";

var paypalURL: String = "https://www.paypal.com/cgi-bin/webscr";

Funcţia 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);

}

buyNowBtn.buttonMode = true; byNowBtn.useHandCursor = true;

buyNowBtn.addEventListener (MouseEvent.CLICK, callPaypal);

În acest moment, aveţi un exemplu de lucru a unui Cumpara acum buton pentru PayPal. Este doar o chestiune de adăugarea informaţiilor anumielement. Puteţi crea, de asemenea, o clasă pentru a face acest proces mai uşor de creaţie, după cum sa menţionat mai devreme.

PayPal oferă şi un coş de cumpărături pe bază de sistem în cazul în care vă puteţi permite utilizatorului să aleagă mai multe elemente şi cantităţilAcest post este meciului stocat în formatul de bază aceeaşi POST date, dar urmăreşte fiecare element în parte. Indiferent dacă utilizaţi opţiuneacaruta sau una-element Cumpara acum soluţia de care aveţi nevoie doar pentru a trimite o singură cerere.

Acest exemplu nu necesită de fapt a folosi nici un PHP, puteţi extinde cu uşurinţă exemplu prin trimiterea mai întâi informaţii pentru a PHP şistocarea achiziţiile pentru propriul sistem de urmarire comanda. PayPal oferă chiar soluţii pentru dezvoltatori pentru a vă conecta direct la sistemde plăţi lor şi să obţină un ordin de confirmare în cazul în care trece prin. Acest serviciu este dincolo de domeniul de aplicare al cărţii, dar PayPaloferă o documentaţie corespunzătoare pentru a începe.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

217 of 362 11/9/2

Page 218: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 218/362

 

Secţiunea anterioară sa axat pe construirea unui Cumpara acum buton pe Flash folosind PayPal ca sistemul de plata. Acest sistem func ţioneazădestul de bine, dar nu oferă într-adevăr controlul complet dezvoltator de coş, de plată, şi de componente de stocare. Cele mai multe ori atunci cânvă alegeţi pentru a construi o soluţie personalizată vă va termina cu rezultate mai bune. Acest lucru nu este să spun oricine poate dezvolta interfaurmătoare PayPal, dar cât de mult de faptul că site-ul folositi? Construirea o soluţie personalizată este în cazul în care ajungi să se concentreze pecaracteristicile pe care le va folosi şi exclude pe cele pe care nu vor.

Acest cos de cumparaturi este împărţită în patru părţi: design, MySQL, PHP, ActionScript şi că acesta aduce toate la un loc.

Proiectarea cosul de cumparaturi

Cosul de cumparaturi Cererea va fi construit folosind clase pentru reutilizare. Acest lucru, de asemenea, face mai usoara de a modifica mai târziu

eu r , r  jr Pentru mai multe informaţii pe clase ActionScript, a se vedea capitolul 9.

| LJ-U ..,

Dezvoltarea clasei Storeltem

Prima porţiune de cod să se concentreze asupra va fi elementele individuale de produs care vor fi afişate la stânga din cosul de cumparaturi.Magazin articole MovieClip va fi dinamic adăugate la scena si va fi repartizat la o clasa personalizat StoreItem.

Clasa este responsabil pentru atribuirea variabilele elementul magazin şi afişarea valorile necesare. La fel ca la capitolul de clasă, aceste clase sunconstruite din stand-alone pachete pentru simplitate, astfel încât nu este necesar să se prevadă o structură pachet.

Prima parte a codului importurile MovieClip şi Textfield clase. Aceasta clasa personalizate extinde MovieClip de clasă şi Textfieldtrebuie să fie încărcate, deoarece există casete de text în movieclip.

flash.display.MovieClip de import; flash.text.TextField de import;

Există cinci variabile private care sunt folosite pentru a deţine poziţia de date specifice. Aceste date sunt mai târziu împarte cu cosul decumparaturi, dar acum trebuie doar datele pentru a fi stocate.

albumName privat var: String; privat var albumDesc: String; privat var albumThumb: String; privatalbumPrice var: String; privat var storeItemID: uint;

StoreItem Metoda este lăsat gol şi de fapt, nu este necesară, deoarece compilatorul ActionScript va loc în mod automat, dar pentru completareeste o idee bună să-l aibă.

Funcţia StoreItem () {}

Prima metodă personalizată este responsabil pentru salvarea poziţia de date la variabilele private care au fost la fel definit. Cele cinci argumentesunt definite în această funcţie sunt a trecut de la apelant şi va deţine poziţia de date care este folosit mai târziu.

Funcţia setStoreData publice (id: uint, N: String, d: String, t: String, p: String): void

{

storeltemID = id; albumName = n; albumDesc = d; albumThumb = t; albumPrice = p;

}

Cele două casete text care detin numele şi descrierea pentru fiecare element sunt ultima parte a acestei clase personalizate. Datele pe care a fostadoptată în i se atribuie pentru fiecare casetă text. În mod normal, ar trebui să verificaţi, probabil, pentru date valide, ci pentru că vă permite săcontrolaţi PHP care este returnată poţi fi sigur că datele vor fi valabile.

nameTxt.text = albumName; descTxt.text = albumDesc;

Metoda de finală în această clasă este utilizată pentru a trimite datele inapoi la oricine o numeşte. Acţiunea a reveni trimite inapoi un obiectpersonalizat care este umplut cu poziţia de date în metoda precedentă.

getItem funcţia publică (): Object {

întoarcere {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

218 of 362 11/9/2

Page 219: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 219/362

 

ţintă: acest id,: storeItemID, nume: albumName, pret: albumPrice

};

}

Metoda de mai sus are un tip special de întoarcere definite. Această valoare returnata este un obiect linie, care este folosit pentru a simplifica coduprin excluderea nume de variabile care nu sunt necesare.

Fiecare din tipurile de: Array, obiect, şi Şir au un mod prescurtat de a le defini. De exemplu, Obiect tip poate fi definit simplu cu:

sampleObj var: Object = {name: valoare};

Tabelul 12.1 prezinta tipul şi echivalente prescurtarea pentru ea. Folosind valorile scurtătura poate economisi timp de dezvoltare, deoarece, trebusă introduceţi mai puţin.

Prescurtarea poate crea probleme, deoarece vă creaţi un "slab" obiect tastat. Prin urmare, nu puteţi beneficia de verificarea de tip compilare timp.Puteţi accesa obiect dinamic necorespunzător şi nu veţi şti până la runtime. Acest lucru înseamnă că ar trebui să utilizaţi precauţie atunci când creade proprietăţi şi variabile în stenografie.

TABELUL 12.1

Tipuri şi echivalent prescurtatăArray new Array () []

Obiect noi Object () {}

String noi String () "

Ambele metode de aplicare care au fost create sunt publice, deoarece acestea sunt numite de clase externe. Ai putea construi, de asemenea, ofuncţie de intermediar, care oferă un nivel mai ridicat de securitate, care ar fi responsabil de asteptare Metodele private.

Cu Storeltem clasa de construit, puteţi trece la ShoppingCartltem, care se anexează la elementul cosul de cumparaturi MovieClip.

Dezvoltarea clasei ShoppingCartltem

Aceasta clasa es te, în principiu responsabil pentru exploataţia elementul id, care vor fi utilizate în ShoppingCart clasă. La fel ca claseianterioare, acesta trebuie, de asemenea pentru a importa MovieClip şi Textfield clase pentru a se potrivi componentele situate în aceastăMovieClip.

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import;

publice ShoppingCartltem clasa extinde MovieClip {

 privat var cartItemID: uint;

Funcţia ShoppingCartItem () {}

getID funcţia publică (): uint {

întoarcere cartltemID;

}

a functiei publice setID (id: uint): void {

cartItemID = id;

}

}

}

Ultima portiune a acestei clase este responsabil pentru obţinerea şi setarea cartItemID. Această valoare este folosit pentru a lega p roduselor celementele cos.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

219 of 362 11/9/2

Page 220: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 220/362

 

Ultimele personalizat clasă ActionScript este ShoppingCart. Aceasta clasa este destul de mare, asa ca va fi rupt în bucăţi pentru a înţelege mabine. Cel mai bun loc pentru a începe este să se uite mai întâi la un schelet de clasă, care prezinta metode care sunt folosite în această cerere. Amconstruit de multe ori acest schelet în primul rând, care poate dubla ca o schiţă.

Pachetul {

publice clasa ShoppingCart extinde MovieClip {

Funcţia ShoppingCart () {}

addProduct funcţiei publice (produs: Object): void {}

Funcţia removeProduct publice (e: MouseEvent): void {}

updateList funcţia publică (): void {}

Funcţia updateTotal publice (): void {}

funcţiei publice checkout (): void {}

Funcţia setGatewayURL publice (url: String): void {}

Funcţia round2D privat (n: Numar): Numărul {}

}

}

Locul cel mai logic pentru a începe în această clasă este de atribuirea Clasă importurile care vor fi necesare.

flash.display.MovieClip de import; flash.text.TextField de import; de import flash.events.MouseEvent;flash.net de import .*;

Proprietăţile pentru această clasă cuprinde toate variabilele privat, astfel încât să nu poată fi accesate de alte clase.

privat var cartItemCount: uint = 0; cartContents privat var: Array;

privat var cartItemHeight: uint = 20; lineSpacing privat var: uint = 30; gateway-privat var: String;

Constructorul este responsabil pentru înfiinţarea butonul Checkout şi iniţializarea matrice element coş.

Funcţia 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 "\">";

pentru (var i în cont)

{

xml + = "<product>"; xml + = "\ t <quantity>" +

cont [i] cartItem.quantityTxt.text + "</ cantitate>."

xml + = "\ t <name>" + cont [i] nume + "</ name>";. xml + = "\ t <price>" cont [i] preţ + + "</ pret>."xml + = "</ produs>";

}

xml + = "</ produse>";

variabile var: URLVariables = new URLVariables (); variables.action = "Checkout"; variables.xml = xml;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

220 of 362 11/9/2

Page 221: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 221/362

 

var urlRequest: URLRequest = new URLRequest (poarta de acces); urlRequest.data = variabile;urlRequest.method = "GET";

navigateToURL (urlRequest);

})

}

Conţinutul a butonului Checkout poate părea copleşitoare, dar este pur şi simplu un obicei construirea document XML care va fi trecut la PHPxml variabilă incepe prin alocarea corespunzătoare rubrica XML. Fără această poziţie, PHP-ar asuma fişierul este incomplet şi nu încărcaţi-l.

var xml: String = "<Versiunea xml =? '1 .0 ' > \ N \ r "?;

pentru., buclă este responsabil pentru a merge prin cartContents matrice şi trăgând în fiecare element coş. Odată intrat în bucle,cartltem este o referire la obiceiul ShoppingCartltem care a fost creat în secţiunea anterioară. Aceste elemente deţinut cantitatea şielementul id, care vor fi plasate în acest document XML particularizate.

cont = cartContents;

pentru (var i în cont) {

xml + = "\ t <name>" + cont [i] nume + "</ name>."

}

Odată ce pentru., bucla completeaza procesul de edificare a XML, PHP fişier află pe server, pot fi numite. Cererea este o bază GET, care trecde-a lungul date XML.

variabile var: URLVariables = new URLVariables (); variables.action = "Checkout"; variables.xml = xml;

var urlRequest: URLRequest = new URLRequest (poarta de acces);

urlRequest.data = variabile; urlRequest.method = "GET";

navigateToURL (urlRequest);

Codul PHP se aşteaptă ca cele două variabile de a fi trecut de-a lungul. Ac ţiunea în acest caz este Checkout, şi xml Detalii de care a fost generde elementele selectate în coşul de cumpărături codul cosul de cumparaturi.

Următorul pas este de a construi metode. Prima metodă este responsabil pentru a adăuga un produs in cosul de cumparaturi. Cosul decumparaturi este construit din ShoppingCartltem instanţe de clasă, dar această clasă este de fapt o movieclip în bibliotecă. Primul pas estde a crea o nouă instanţă a acestei movieclip. După crearea unui nou exemplu, un ascultător eveniment se adaugă la removeProduct butocare se află în cadrul movieclip. Cantitatea implicit de un element nou este setat la 1, acest lucru poate fi apoi actualizate, pe care le învaţă însecţiunea următoare.

addProduct funcţiei publice (produs: Object): void {

 var cartItem: ShoppingCartItem = new ShoppingCartItem ();

cartItem.removeItemBtn.addEventListener (MouseEvent.CLICK,

removeProduct); cartItem.quantityTxt.text = "1"; cartItem.nameTxt.text = product.name;

}

Următorul pas este de a crea un ID fals pe care le puteţi utiliza pentru a adăuga şi elimina instanţă mai târziu.

cartItem.setID (cartItemCount); / / ID-ul artificiale pentru sistemul de evacuare a

Plasarea unei instanţe de cumparaturi element nou coş se determină prin înmulţirea întâi cartItemCount prin înălţimea şi apoi adăugând odistanţă pentru asta.

cartItem.y = (cartItemCount * cartItemHeight) + lineSpacing;

După nouă instanţă este poziţionat, acesta este temporar adaugă la obiect produsului, astfel încât în viitor bucăţi de cod poate fi accesat, fără devânătoare pentru ea. Apoi se adaugă la cartContents matrice.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

221 of 362 11/9/2

Page 222: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 222/362

 

product.cartItem = cartItem; cartContents.push (produs);

Partea următoare a addProduct Metoda este responsabil pentru adăugarea exemplu, pentru a afişa lista, numărul de incrementare şi de a face cele din urmă un apel la updater preţ.

addChild (cartItem);

cartItemCount + +;

updateTotal ();

În acest moment, dacă ar fi să adăugaţi un element la cosul de cumparaturi s-ar permite duplicate să fie adăugate. În cazul în care rezultatul doriteste de a incrementa cantitatea o pentru., bucla este plasat la începutul metodei de a avea grijă de asta.

addProduct funcţiei publice (produs: Object): void {

/ / Uita-te pentru un produs in lista

 pentru (var i cartContents în) {

dacă (cartContents [i] id ==. product.id) {

 var q:.. Num ărul cartContents = [i] cartItem.quantityTxt.text; cartContents [i] cartItem.quantityTxt.tex= q + 1; updateTotal (); returnare;

}

}

}

Bucla este configurat să verificaţi mai întâi pentru un act de identitate valabil e lement coş. Dacă un act de identitate valabil este găsit, cantitatea seatribuie q variabilă. Aceasta este apoi anexată la valoarea din caseta de text cantitatea şi un apel la updater preţul este făcută pentru a se asigura este întotdeauna corect. O întoarcere este folosit pentru a opri orice executarea ulterioară a codului situat în această funcţie.

Această metodă a fost, probabil, cea mai mare, aşa cum este responsabilă pentru o mulţime de funcţionalităţi în această cerere. Codul completat eprevăzută într-un ecran final de la sfârşitul acestei secţiuni, şi, desigur, este de asemenea disponibil pe site-ul Web al cărţii.

Următoarea metodă este folosită pentru a elimina un element din cosul de cumparaturi. getID metodă care a fost creat în ShoppingCartlteclasă este utilizat în această funcţie pentru a prelua id. mamă referinţă nu este utilizată pentru a lua tinta (Ştergere buton) şi informează codul dceea ce obiect mamă sau de sus este. Aceasta oferă o legătură solidă cu ShoppingCartltem instanţă a clasei şi în cele din urmă metoda pentruprelua id.

Funcţia removeProduct publice (e: MouseEvent): void {

var id: uint = e.target.parent.getID ();

}

După ce id este cunoscut acesta poate fi utilizat pentru a el imina elementul din gama de produse coş şi din lista de afişaj. Metoda de imbinareeste folosit pentru a şterge elementul cos utilizând id, care este de fapt poziţia elementul pot fi găsite în matrice. Al doilea argument în metodalipitură este de a asigura doar un element se elimină.

cartContents.splice (id, 1);

removeChild (e.target.parent);

cartltemCount -;

Dacă al doilea argument nu e ste prevăzută, metoda de lipitur ă va elimina toate elementele din acel punct.

Fişierul Flash are o notă în mod automat a adăugat că este afişat pentru a informa utilizatorul că există nici un produs in cos. Cu toate acestea, acelucru este eliminat atunci când un element este adăugat. Problema este, în cazul în care utilizatorul elimină toate elementele din coşul de care arenevoie pentru a fi afişat din nou, asa ca un simplu dacă declaraţia este adăugată la sfârşitul îndepărta metodă să se ocupe de acest lucru.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

222 of 362 11/9/2

Page 223: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 223/362

 

dacă (cartItemCount == 0) {

noItemsTxt.visible = true;

}

În cele din urmă, un apel la updateTotal şi updateList metode care se face pentru a asigura datele rămâne consecventă şi preţul esteactualizat.

updateList (); updateTotal ();

Elementele coş se adaugă la matrice ca utilizatorul face clic pe butonul Adauga in cos, cu toate acestea, s-ar putea aminti în secţiunea anterioară celementul coş pot fi găsite în matrice folosind cosul de id. Problema este dacă un element este eliminat listă este acum amestecat şi un elemenincorecte pot fi adaugate sau eliminate. Soluţia este de a oferi noi idE ca un element este eliminat. Acest lucru este realizat prin looping prin toaelementele coş rămase şi de a face un apel pentru a seta o nouă id.

updateList funcţia publică (): void {

pentru (var i: uint = 0; i <cartItemCount; i + +) {

cartContents [i] cartItem.setID (i).;

}

}

Efectul de altă parte pentru a scoate un element primare este poate crea o discrepanţă în listă. Acest lucru nu schimbă modul în care funcţiile decerere, dar vizual nu este mai curat. Modul în jurul valorii de această problemă este mic pentru a realinia listă ca un element este eliminat.

updateList funcţia publică (): void {

pentru (var i: uint = 0; i <cartItemCount; i + +) {

cartContents [i] cartItem.setID (i).;

}

cartContents [i] cartItem.y = (i * cartItemHeight) + lineSpacing.;

}

În metodele precedente a existat un apel la updateTotal. Această metodă este responsabil pentru păstrarea preţul total actualizat, după cumelementele sunt adăugate şi editate. Procesul este la bucla prin elementele de coş, se înmulţeşte preţul cu cantitatea, şi a afişa rezultatul final.Rezultatul este apoi testate pentru numerele valide şi un zecimal (.) Este prevăzută, dacă este necesar.

updateTotal funcţia publică (): void {

total de var: Numărul = 0;

pentru (var i: uint = 0; i <cartltemCount; i + +) {

Numărul total de + = (cartContents [i] preţ.) * Număr (cartContents [i] cartItem.quantityTxt.text.);

}

totalTxt.text = "$" + String (round2D (total));

/ / Tac pe 0 suplimentare, dacă este necesar sau doi de 0

dacă (totalTxt.text.indexOf ('.') == -1) {

totalTxt.appendText ("0.00");

}

else if (totalTxt.text.indexOf ('.') + 2 == totalTxt.text.length) {

totalTxt.appendText ("0M);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

223 of 362 11/9/2

Page 224: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 224/362

 

}

}

Metoda setGatewayURL setaţi proprietatea gateway-ul care se referă la url care se numeşte atunci când butonul este apăsat Checkout.

Funcţia setGatewayURL publice (url: String): void {

gateway-ul = url;

}

În acest moment, ShoppingCart Clasa a fost creat. Ultima portiune de cod care este necesar vor fi plasate pe Timeline. Acest cod va fi responsabpentru stabilirea totul şi controlul în cele din urmă elementele individuale.

ActionScript cronologie ar putea fi, de asemenea, plasate într-un Document clasă, care este explicat în capitolul 9. Cu toate acestea, pentrusimplitate, acesta va fi inclus direct în fişierul Flash.

Prima parte este de a atribui php fişier, care va fi construit in sectiunea urmatoare.

var phpFile: String = "http://localhost/ch11/store/flashCart.php";

Cosul de cumparaturi este deja pe scena cu un nume de instanţă şi este pur şi simplu atribuite coş variabilă care urmează să fie utilizate în restucodului. Următorul pas este de a crea un gol movieclip care deţine elementele magazin.

var coş: MovieClip = shoppingCart; cart.setGatewayURL (phpFile);

storeItems var: MovieClip = new MovieClip ();

storeltems.x = 25; storeltems.y = 80;

Cererea de server este destul de mult acelaşi proces care a fost folosit în trecut. Singura portiune unic este ac ţiunea pe care se anexează la sfârşituanului url.

var urlRequest: URLRequest = new URLRequest (phpFile + "? Action = getproducts");

var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, productsLoaded); urlLoader.load (urlRequest);

Dupa ce serverul încarcă de date, funcţia de răspuns este numit. Această funcţie este responsabil pentru parsarea XML şi adăugarea elementulmagazin in cosul de cumparaturi. Aici este un eşantion de XML, care este intors si analizat.

<products>

<Produsului id = "1"

name = "Melodii cool" desc = "Un alt hot de presă" miniatura pentru = "" /> </ produse>

Această funcţie este de asemenea responsabil pentru încărcare o nouă instanţă a Storeltem movieclip, care conţine informaţii pentru fiecaprodus. Buton pe acest caz devine, de asemenea, un eveniment ataşat la aceasta, care este responsabil pentru a adăuga un element nou in cosul decumparaturi.

Funcţia productsLoaded (e: Event): void {

var id: uint = 0;

pentru fiecare {(var xmlltem în xml .. produsului)

 var element: StoreItem = new StoreItem ();

item.y = 85 * id; item.setStoreData (id,

xmlltem.attribute ("nume"), xmlltem.attribute ("desc"), xmlltem.attribute ("miniatură"));xmlltem.attribute ("preţ")); item.addToCartBtn.addEventListener (MouseEvent.CLICK,

addltemHandler); storeltems.addChild (element); id + +;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

224 of 362 11/9/2

Page 225: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 225/362

 

}

addChild (storeltems);

}

addltemHandler Funcţia prinde primul obiect unic şi adaugă produs în coş. Obiectul este gasit prin încărcarea obiect din containerul parinte,similar codului care a fost utilizată în secţiunea anterioară. A urmă () declaraţii sunt pur şi simplu pentru testarea şi nu sunt niciodată văzute dcătre utilizatorul final a cererii.

Funcţia addItemHandler (e: MouseEvent): void {

var prod: Object = e.target.parent.getItem ();

trace ("Adăugare element:" + e.target.parent); urme ("ID-ul postul:" + prod.id);

cart.addProduct (prod);

}

A durat o vreme şi a dus la o mulţime de cod nou, dar toate ActionScript necesare pentru acest exemplu este completă. Următoarea parte să seconcentreze asupra este cod PHP, care este numit de către butonul Checkout.

De fapt, PHP si MySQL merg mână în mână, deci este mai bine pentru a construi tabelul SQL necesare înainte de PHP este scris. Acest lucru facemai uşor pentru a depana pe termen lung.

CREATE TABLE flashStore_products ("id" NU int NULL AUTO_INCREMENT, "nume" varchar (25),

"Categoria" int (3) nu NULL DEFAULT 0, "descriere" TEXT,

"Miniatură" NU varchar (200) DEFAULT NULL "", "preţ" varchar (10) NOT NULL, "activ" DEFAULT int (1) NOTNULL 1, PRIMARY KEY ("id")

)

SQL este responsabil pentru deţine toate informaţiile pentru fiecare element din magazin. Într-o aplicaţie completă, aceasta ar fi, probabil, populade un sistem de management de conţinut. Pentru acest exemplu, INSERT Codul este furnizat astfel încât să puteţi testa rapid exemplu.

INSERT INTO flashStore_products (nume, descriere, pret) VALUES ('Muzica Cooler "," Un alt unul nou');

Clădire PHP

În cazul în care SQL este configurat PHP poate fi scris. PHP este responsabil pentru înc ărcarea elementele magazin de manipulare şi o cerere decheckout. Aceste două sarcini pot fi împărţite în mai multe fişiere şi sunt, probabil, mai bine ca clase, dar pentru simplitate va fi s ituate toate întermen de aceasta php fişier.

Înainte de a bazei de date poate fi folosit, o conexiune trebuie să fie stabilite. Acest lucru se realizează prin încărcarea unui fişier extern care deţininformaţiile de conectare baza de date.

include "dbconn.php";

Conţinutul de faptul că dbconn.php fişier sunt văzute aici. <? Php

$ Host = "localhost"; $ ghidul = "username"; $ treci = "parola"; $ bazei de date = "numele bazei dedate";

$ Link = mysql_connect ($ host, $ user, $ pass); mysql_select_db ($ database, $ link);

unset ($ gazdă); unset ($ ghidul); unset ($ pass);

unset ($ baza de date);?>

Acum puteţi determina ce acţiuni se solicită. Există două opţiuni posibile: getproducts, care întoarce un xml document de articole magazin,sau Checkout, care încarcă xml de la Flash şi afişează.

if ($ _GET ['actiune'] == 'getproducts ") {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

225 of 362 11/9/2

Page 226: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 226/362

 

getProducts de imprimare ();

}

else if ($ _GET ['actiune'] == "checkout") {

$ Xml = new SimpleXMLElement ($ _GET ['xml']);

$ NodeCount = count ($ xml-> produs);

de imprimare "<table border=\"1\" width=\"500\">"; print "<tr> <td> <strong> Cantitate </ strong> </td>"; print "<td> <strong > Produs </ strong> </ td> "; print" <td> <strong> Pret </ strong> </ td> </tr> ";

for ($ x = 0; $ x <$ nodeCount; $ x + +) {

de imprimare "<tr style=\"background-color:#eeeeee;\">"; de imprimare "<td style=\"width:60px;text-align:center;\">". $ Xml-> produs [$ x] -> cantitate. "</ Td>"; print "<td>". $ Xml-> produs [$ x]-> nume. "</ Td>"; print "<td>". $ Xml-> produs [$ x] -> preţ. "</ Td> </ tr>";

}

de imprimare "<tr>";

de imprimare "<td total colspan=\"3\">: <strong>"

. getAttribute ($ xml, "totală"). "</ Strong> </ td> </ tr>"; de imprimare "</ table>";

de imprimare "<br /> Codul de Plateste merge aici <br />";

}

getproducts acţiune face pur şi simplu un apel la o altă funcţie care returnează xml generată de intrările de date. Acţiunea de verificare, dupăcum se arată în figura 12.3, este un pic mai mult implicate. Acesta începe de hapsân datele XML a trecut de la Flash. Acest XML este înc ărcat înSimpleXML bibliotecă în cazul în care acesta este analizat şi fiecare dintre elementele magazin este preluată.

Figura 12.3

Iată o mostr ă a paginii checkout, încărcate de la Flash. Această pagină este vizibilă atunci când butonul este apăsat Checkout.

Această funcţie este numită de la prima actiune si este responsabil pentru construirea unui document XML din datele în baza de date. Elementelemagazin sunt defalcate în funcţie de id, numele, desc, şi miniatură, care sunt toate vizibile în fişierul Flash.

Setul de rezultate de la MySQL returnează orice element care este activ în prezent. Acest rezultat este apoi trecut intr-o în timp ce buclă, care

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

226 of 362 11/9/2

Page 227: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 227/362

 

este în cazul în care datele XML este construit. În cele din urm ă, XML este returnat la apelantului şi, în acest exemplu, este tipărită la ecranul deFlash pentru a încărca.

getProducts function () {

global $ legătură într-;

$ Rezultat = mysql_query ("SELECT * FROM WHERE flashStore_products activ = 1", $ link);

$ Xml = "<products> \ n";

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

Rând $ xml .= "<produsului id = \" ". $ ['Id']" \ "name =. \" ". $ Row ['nume']." \ "Desc = \" ", $ row.

[ "descriere".] "\" miniatură = \MM . $ Row ['miniatura']. "\" /> \ N ";

"\" Preţ = \ "". $ Row ['pret'] /> \ n ";

}

$ Xml .= "</ produse>"; return $ xml;

}

Funcţia de ultima este de fapt o caracteristică a uitat SimpleXML. Această funcţie are două argumente, a xml şi numele atributului pe care il

cautati pentru. Este prima bucle prin toate argumentele şi meciurile acestor argumente împotriva a trecut-în variabilă. Se întoarce fie valoareaatributului sau false, în funcţie de ceea ce rezultatul este.

getAttribute funcţia ($ xml, $ nume) {

foreach ($ xml-> atribute () de la $ cheie => $ val) {

if ($ cheie == $ nume) {

întoarcere (string) $ val;

}

}

return false;

}

Acum, că toate din Codul este completă, aici sunt trei clase şi codul de cronologie prevăzute într-un singur loc pentru o vizualizare mai uşoară şicompararea cu codul.

ShoppingCart

Pachetul {

flash.display.MovieClip de import, de import flash.text.TextField, flash.events.MouseEvent de import;

flash.net de import .*;

publice clasa ShoppingCart extinde MovieClip {

privat var cartItemCount: uint = 0; cartContents privat var: Array;

privat var cartItemHeight: uint = 20; lineSpacing privat var: uint = 30; gateway-privat var: String;

Funcţia ShoppingCart () {

cartContents = new Array ();

checkoutBtn.addEventListener (MouseEvent.CLICK,

function (): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

227 of 362 11/9/2

Page 228: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 228/362

 

var xml: String = "<? xml version = '1 .0 '> \ n \ r"; xml + = "<products total=\"" + + totalTxt.text"\">";

pentru (var i cartContents în) {

xml + = "<product>"; xml + = "<quantity>" +

cartContents [i] cartItem.quantityTxt.text + "</ cantitate>."

xml + = "<name>" + cartContents [i] nume + "</ name>."

xml + = "<price>" + cartContents [i]. preţ

+ "</ Preţ>";

xml + = "</ produs>";

}

xml + = "</ produse>";

variabile var: URLVariables = new URLVariables (); variables.action = "Checkout"; variables.xml = xml;

var urlRequest: URLRequest = new URLRequest (poarta de acces); urlRequest.data = variabile;

urlRequest.method = "GET";

navigateToURL (urlRequest);})

}

addProduct funcţiei publice (produs: Object): void {

/ / Uita-te pentru un produs in lista

pentru (var i cartContents în) {

dacă (cartContents [i] id ==. product.id) {

var cantitate: Numărul =

cartContents [i] cartItem.quantityTxt.text;.

cartContents [i] = cartItem.quantityTxt.text cantitate + 1.;

updateTotal ();

întoarcere;}

}

dacă (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);

cartItem.y =

(CartItemCount * cartItemHeight) + lineSpacing; product.cartItem = cartItem; cartContents.push (produs);addChild (cartItem); cartItemCount + +; updateTotal ();

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

228 of 362 11/9/2

Page 229: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 229/362

 

}

Funcţia removeProduct publice (e: MouseEvent): void {

var id: uint = e.target.parent.getID ();

cartContents.splice (id, 1); removeChild (e.target.parent);

cartltemCount -;

dacă (cartItemCount == 0) {

noItemsTxt.visible = true;

}

updateList (); updateTotal ();

}

updateList funcţia publică (): void {

pentru (var i: uint = 0; i <cartltemCount; i + +) {

cartContents [i] cartItem.setID (i).;

cartContents [i]. cartItem.y =

(I * cartItemHeight) + lineSpacing;

}

}

updateTotal funcţia publică (): void {

total de var: Numărul = 0;

pentru (var i: uint = 0; i <cartItemCount; i + +) {

Numărul total de + = (cartContents [i]. preţ) *

Numărul (cartContents [i] cartItem.quantityTxt.text.);}

totalTxt.text = "$" + String (round2D (total));

/ / Tac pe 0 suplimentare, dacă este necesar sau doi de 0

dacă (totalTxt.text.indexOf ('.') == -1) {

totalTxt.appendText (".00M);

}

else if (totalTxt.text.indexOf ('.') + 2 ==

totalTxt.text.length) {

totalTxt.appendText ("0M);

}

}

Funcţia setGatewayURL publice (url: String): void {

gateway-ul = url;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

229 of 362 11/9/2

Page 230: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 230/362

 

}

Funcţia round2D privat (n: Numar): Numărul

{

Math.round retur (n * Math.pow (10, 2)) / Math.pow (10, 2);}

}

}

ShoppingCartltem

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import;

publice clasa ShoppingCartItem extinde MovieClip {

privat var cartItemID: uint;

Funcţia ShoppingCartItem () {}

getID funcţia publică (): uint {

întoarcere cartItemID;

}

a functiei publice setID (id: uint): void {

cartItemID = id;

}

}

}

Storeltem

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import;

publice clasa StoreItem extinde MovieClip {

albumName privat var: String;

privat var albumDesc: String;

privat var albumThumb: String;

privat albumPrice var: String;

privat var storeItemID: uint;

Funcţia StoreItem () {}

Funcţia setStoreData publice (id: uint, n: String,

d: String, t: String, p: String): void

{

storeltemID = id; albumName = n; albumDesc = d; albumThumb = t; albumPrice = p;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

230 of 362 11/9/2

Page 231: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 231/362

 

nameTxt.text = albumName; descTxt.text = albumDesc;

}

getItem funcţia publică (): Object {

întoarcere {

ţintă: acest id,: storeItemID, nume: albumName, pret: albumPrice

};

}

}

}

Cronologie cod

var phpFile: String = "http://localhost/chii/store/flashCart.php";

var coş: MovieClip = shoppingCart; cart.setGatewayURL (phpFile);

storeItems var: 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);

Funcţia productsLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

trace ("XML:" + xml);

var id: uint = 0;

pentru fiecare {(var xmlItem în xml .. produsului)

var element: StoreItem = new StoreItem (); item.y = 85 * id; item.setStoreData (id,

xmlltem.attribute ("nume"), xmlItem.attribute ("desc")< xmlltem.attribute ("miniatură"));xmlltem.attribute ("preţ")); item.addToCartBtn.addEventListener (

MouseEvent.CLICK, addltemHandler); storeltems.addChild (element); id + +;

}

addChild (storeItems);

}

Funcţia addItemHandler (e: MouseEvent): void {

var prod: Object = e.target.parent.getItem ();

trace ("Adăugare element:" + e.target.parent); urme ("ID-ul postul:" + prod.id);

cart.addProduct (prod);

}

Cod PHP

<? Php

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

231 of 362 11/9/2

Page 232: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 232/362

 

$ Host = "localhost"; $ ghidul = "username"; $ treci = "parola"; $ bazei de date = "numele bazei dedate";

$ Link = mysql_connect ($ host, $ user, $ pass); mysql_select_db ($ database, $ link);

unset ($ gazdă); unset ($ ghidul); unset ($ pass);

unset ($ baza de date);?>

<? Php

include "dbconn.php";

getProducts function () {

global $ legătură într-;

$ Rezultat = mysql_query ("SELECT * FROM WHERE flashStore_products activ = 1", $ link);

$ Xml = "<products> \ n";

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

Rând $ xml .= "<produsului id = \" ". $ ['Id']" \ "name =. \" ". $ Row ['nume']." \ "Desc = \" ", $ row.

[ "descriere".] "\" miniatură = \MM . $ Row ['miniatura']. "\" /> \ N ";

"\" Preţ = \ "". $ Row ['pret'] /> \ n ";

}

$ Xml .= "</ produse>"; return $ xml;

}

if ($ _GET ['actiune'] == 'getproducts ") {

getProducts de imprimare ();

}

else if ($ _GET ['actiune'] == "checkout") {

$ Xml = new SimpleXMLElement ($ _GET ['xml']);

$ NodeCount = count ($ xml-> produs);

de imprimare "<table border=\"1\" width=\"500\">"; print "<tr> <td> <strong> Cantitate </ strong> </td>"; print "<td> <strong > Produs </ strong> </ td> "; print" <td> <strong> Pret </ strong> </ td> </tr> ";

for ($ x = 0; $ x <$ nodeCount; $ x + +) {

de imprimare "<tr style=\"background-color:#eeeeee;\">"; de imprimare "<style = td \MLăţime: 6 0px;

text-align: center; \M>M

. $ Xml-> produs [$ x] -> cantitate. "</ Td>"; print "<td>". $ Xml-> produs [$ x] -> nume. "</ Td>";print "<td>". $ Xml-> produs [$ x] -> preţ. "</ Td> </ tr>";

}

de imprimare "<tr> <td style = \Mtext-align: right; \ "colspan = \" 3 \M> Total: ".. GetAttribute ($ xmltotală ")," <strong> </ strong> </ td> </ tr> ";

de imprimare "</ table>";

de imprimare "<br /> Codul de Plateste merge aici <br />";

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

232 of 362 11/9/2

Page 233: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 233/362

 

getAttribute funcţia ($ xml, $ nume) {

foreach ($ xml-> atribute () de la $ cheie => $ val) {

if ($ cheie == $ nume) {

întoarcere (string) $ val;

}

}

return false;

} ?>

Exemplul este acum completă, este doar o chestiune de introducerea PHP pe un server Web active. Din acest punct se poate extinde de exemplu a avea mai multe categorii, produse, şi imagini. Realist, construirea cererea într-un format clasă oferă extensibilitate mai mare, dar nu luaţi cuvântmeu pentru asta. Experiment şi extinderea exemplu.

Amazon oferă un set foarte puternic de instrumente concepute pentru a lucra cu datele site-ul său. Această secţiune se referă la construirea de oaplicaţie de căutare folosind Amazon.com ca sursă de date. Acest exemplu utilizează ECS (Amazon serviciului E-Commerce), care oferă acces dirla căutarea uimitoare Amazon şi sistemul de inventariere.

În scopul de a utiliza ECS aveţi nevoie pentru a avea o adresă validă de ID-ul Amazon de acces, care este oferit atunci când vă creaţi un cont pentrdezvoltatori. Acest procesul de înscriere este rapidă şi gratuită, tot ce ai nevoie este o adresă de e-mail şi un cont activ.

Utilizarea Amazon Web Service

Pentru a începe cu crearea unui cont de dezvoltatori, vizitaţi Amazon Web Service (AWS) la pagina www.amazon.com / gp / AWS /landing.html.

| : j j "^ jj" ^ "- ■ ■ '• Ssi Asiguraţi-vă că pentru a activa contul prin e-mail înainte de a începe să-l utilizaţi.

The AWS este configurat pentru a fi accesate din diferite medii. Formatul utilizat pentru acest exemplu este de transfer de stat de reprezentare(REST), care este de fapt un URL formatat cu toate informaţiile necesare prevăzute în EEG format.

Aici este o cerere de eşantion trimis la Amazon, după cum se arată în figura 12.4, pentru a reveni informaţii despre meciuri rezerva posibil pentruun cuvânt cheie sau o serie de cuvinte cheie.

http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWS AccessKeyId= {AWS_ACCESS_KEY} &Funcţionare = ItemSearch & SearchIndex = Carti si mijlocii ResponseGroup = & = Cuvintecheie{SEARCH_TERMS}

AWS_ACCESS_KEY este accesul id care este furnizat de Amazon, şi SEARCH_TERMS ar fi cuvântul cheie (e) care au trecut de-a lungul pentrucăutare.

Aşa cum poate aţi observat, răspunsul XML de la Amazon este destul de complex. Cu toate acestea, pentru acest exemplu, se va pune accent pe

titlul cărţii, autorul, şi calea de miniatură. Amazon este de fapt foarte frumos pentru a furniza cantitatea de detalii ce face. Puteţi construi uneleaplicaţii destul de interesante cu sistemul AWS.

FIGURA 12.4

Aici este r ăspunsul XML de la Amazon, după o căutare pentru "PHP".

Editare fişier Marcaje Vizualizare istoric Unelte Ajutor 

3.1.103/clien1s/BoQk/RedStat/Examples/ch% 2D11/amazQnSearch / 1

U http://192.168...php?terms=php U & Free Download Trial: Charles

</ Solicitare>

<T SULT otaIRe> 560 </ T SULT otaIRe>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

233 of 362 11/9/2

Page 234: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 234/362

 

<T otalPage s> 5 6 </ T otalPages> - <item>

<ASIN> 0596006810 </ ASIN >

- <DetailPageURL>

http: / / www. Amazon. com / gp / r e cumplite ct. html% 3FASIN = 0596006810 =% 26tag a fost de 2% 61C o de XM2% = 2 6 CID = 2025% 2 6 ccmID = 165953% 2 61oc atLon = / o / ASHS] </ DetailPageURL> <SalesRank> 4915 </ SalesRank>

- <SmallImage> - <TJEL>

http: / / ecx.images-Amazon. com / images / UL lYyXA3f02L.jpg <ÍÜRL> 

<Height Units-'pixels"> 75 </ Inaltime> <Width TJnits-'pixels"> 57 </ Latime> </ Sma] Hmage>

- <MediumImage> - <UK1>

http://ecK.images-arnazon.corn/irriages/F216XPVBeygL.jpg

</ GUE>

<He¡ght Units="pixels"> 160 </ Inaltime> <Width Units-'pixels"> 122 </ Latime> </ Me diuinlmage>

- <LargeImage> - <UR1>

http://ecK. image s - Amazon. c om/images/F51 vMTO-XG2L.jpg <ÍÜRL> 

Units="pixels <Height "> 500 </ Inaltime> <Width TJnits-'pisels"> 381 </ Latime> </ LargeImage>

- <ImageSets>

EJ) I

De fapt, URL-ul trimis la Amazon pot fi modificate pentru a căuta elemente diferite subiecte sau toate împreună. The AWS este configurat pentru reveni chiar messages valabil de eroare similar cu acesta dacă nu oferă un parametru operaţie.

Parametru AWS.InvalidOperationParameterThe Funcţionarea este nevalid. Vă rugăm să modificaţi parametrulde operare şi încercaţi din nou. Valorile valide pentru parametrul operaţiei includ TagLookup,ListLookup, CartGet, SellerListingLookup, CustomerContentLookup, ItemLookup, SimilarityLookup,SellerLookup, ItemSearch, VehiclePartLookup, BrowseNodeLookup, CartModify, ListSearch, CartClear ...

Sistemul de căutare oferă o mulţime de tipuri si modificatori, şi nu trebuie să se bazeze pe aceasta "a crea o eroare" concept pentru a vedea ce estedisponibil. Amazon se întâmplă pentru a oferi o documentaţie foarte robustă în centrul dezvoltatorului. Autentificaţi-vă pentru acces.

Simplificarea r ăspuns XML

XML, atunci când răspunsul a fost încărcat în secţiunea anterioară, rezultatul a fost copleşitoare. Există mai multe noduri XML şi date care pur şisimplu nu sunt aplicabile la această cerere. Ai putea trece aceste date brute în Flash, dar ce se întâmpl ă dacă doriţi să cache rezultatele? Tu ar avegrămadă de informaţii neutilizate înfundarea bazei de date.

Ideea este de a construi un răspuns particularizate XML care conţine numai datele necesare pentru această aplicaţie.

<? Php

Termeni $ = "";

define ("AWS_ACCESS_KEY", "{AWS_KEY_GOES_HERE}");

Este important să verificaţi etichetele valabile înainte de un răspuns este trimis la Amazon. Este într-adevăr nu dăunează nimic, dar ar putea ficonsiderată o cerere frauduloase.

dacă (Empty ($ _GET ['termenii "]! ))

{

}

Presupunând că etichetele valabil în cazul în care a constatat, construi cererea care va fi trimis la AWS.

if (empty ($ _GET ['termenii "])) {

$ Termeni = $ _GET ['termenii "];

$ Cerere = 'http://ecs.amazonaws.com/onca/xml " . '? Serviciul = AWSECommerceService &'. 'AWSAccessKeyId

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

234 of 362 11/9/2

Page 235: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 235/362

 

='. AWS_ACCESS_KEY. '& Funcţionare = ItemSearch'.

'& SearchIndex = cărţi ". '& ResponseGroup = mijlocii ". '& Cuvinte cheie ='. $ Termeni;

}

Acum a apela AWS, care trece de-a lungul parametrii de căutare.

$ RawXml = file_get_contents ($ cerere);

Răspunsul de la AWS este încărcat folosind file_get_contents, care citeşte în întregul dosar a solicitat într-un şir. În acest exemplu, şirul essalvat $ RawXML variabilă. Un apel la SimpleXML bibliotecă în care se face pentru a construi o corect formatat XML obiect.

$ XmlResponse = simplexml_load_string ($ rawXml);

Următorul pas este de a construi particularizate document XML care va fi trimis inapoi la Flash atunci când este solicitat. nodeCount variabilăeste greu cu coduri de până la 4, astfel că numai patru rezultate carte sunt salvate. Chiar dacă se întoarce Amazon mii, Flash vede doar patru.

$ NodeCount = 4;

$ Xml = "<xml version = \?" 1.0 \ "?> \ N <books>";

for ($ i = 0; $ i <$ nodeCount; $ i + +) {

}

$ Xml .= "</ carti>";

Conţinutul pentru., buclă este locul unde marea majoritate a procesului de construcţie are loc XML. De exemplu, pentru a încărca titlul cărţiicurente, accesaţi mai întâi Articole nod. Odată ce în interiorul acel nod, selectate Element nod este accesat utilizând $ I variabile pentru adetermina care copilul ar trebui să fie de referinţă. În interiorul nodul copil actuale, există un alt copil cu nume de nod ItemAttributes, careconţine o titlu nod şi în cele din urmă devine numele de rezerva pentru acest copil selectate.

$ XmlResponse-> Produse-> Postul [$ i] -> ItemAttributes-> titlul

După cum puteţi vedea, Amazon cutii acest fişier XML plină de informaţii, care în acest caz face fel de dificil pentru a încărca informaţiile dorite.Procesul de încărcare a datelor şi a autorului miniatura este destul de mult la fel, doar accesul fiecărui copil şi referinţă nodul dorit.

$ Xml .= "\ t <book>";

$ Xml .= "\ t \ t <title> <[CDATA [!". $ XmlResponse-> Articole -> Postul [$ i] -> ItemAttributes-> titlul . "]]></ Title> "; $ xml .=" \ t \ t <author> <[CDATA [".! $ XmlResponse-> Articole -> Postul [$i] -> ItemAttributes-> Autor. Autorul "]]></> "; $ xml .=" \ t \ t <price> <[CDATA [".! $ XmlResponse->Articole

-> Postul [$ i] -> ItemAttributes-> ListPrice -> FormattedPrice. Preţ "]]></> "; $ xml .=" \ t \ t<thumb> ". $ XmlResponse-> Produse-> Postul [$ i]

-> SmallImage-> URL. "</ Thumb>"; $ xml .= "\ t </ carte>";

 j ^ v A - Rf de date pentru a genera XML este un rând pentru fiecare variabila $ xml; ambalajul este pentru a se potrivi acestei

^ - .

Pagina se poate rupe şi potenţial codul.

Ultima portiune de PHP pentru acest exemplu creează un tip de antet, astfel încât cititorii stiu XML format care este trimis. Apoi, în cele din urm ăsă emită pe ecran.

header ("Content-Type: text / xml"); de imprimare $ xml;

Flash (ActionScript) necesare pentru punerea în aplicare este în toate clasele de externe. Acest lucru se face deoarece este mai uşor de a gestiona şde a menţine în mişcare înainte.

 j "p'o r ^ RSI" Dacă ave ţi nevoie de o mai în profunzime explicaţia de clase, am recomandăm să citiţi

 \ S Capitolul 9.

Dosarul Flash (FLA) pentru această aplicaţie constă într-un design simplu, cu o casetă de căutare şi butonul. Principalele clasă, BookSearch, e

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

235 of 362 11/9/2

Page 236: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 236/362

 

desemnat ca clasa documentului şi este responsabil cu gestionarea cererii globale. Aici este scheletul de clasă, care vă oferă o idee de ceea cemetode si proprietati sunt folosite pentru a crea această aplicaţie.

Pachetul {

flash.display.MovieClip de import; flash.events de import .*; flash.net de import .*;

publice clasa BookSearch extinde MovieClip {

publice var webServiceURL: String;

privat bookItems var: Array;

privat var bookItemsContainer: MovieClip;

BookSearch funcţia publică () {}

Funcţia searchHandler publice (e: MouseEvent): void {}

loadSearchResults a functiei publice (ceea ce priveşte: String): void {}

loadedResultsHandler funcţiei publice (e: Event): void {} removeOldResults privat function (): void {}

}

}

Metoda constructorul este utilizată pentru a iniţializa matrice, de a crea un container movieclip, şi se adaugă ascultător eveniment pe butonuSearch.

BookSearch funcţia publică () {

 bookItems = new Array (); bookItemsContainer = new MovieClip ();

bookItemsContainer.y = 100;

searchBtn.addEventListener (MouseEvent.CLICK, searchHandler);

}

Ultimul pas al metodei de constructor este de a adăuga container noua carte la lista de afişaj, care în cele din urmă îl face vizibil.

BookSearch funcţia publică () {

bookItems = new Array (); bookItemsContainer = new MovieClip (); bookItemsContainer.y = 100;

searchBtn.addEventListener (MouseEvent.CLICK, searchHandler); addChild (bookItemsContainer);

}

Următoarea metodă este să se concentreze asupra searchHandler () . Această metodă se numeşte atunci când utilizatorul face clic pe butonuCăutare. Atunci când această metodă se numeşte verifică mai întâi lungimea datelor din caseta de căutare pentru a asigura o căutare valabilă se v

 întâmpla. În cazul în care valoarea este de lungime valabil, un apel pentru a elimina rezultatele vechi de c ăutare în care se face.

Funcţia searchHandler publice (e: MouseEvent): void {

dacă(SearchTxt.text.length> 0)

{

removeOldResults ();

loadSearchResults (searchTxt.text);

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

236 of 362 11/9/2

Page 237: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 237/362

 

Odată ce un termen de căutare valabilă este găsită, următorul pas este de a crea şi de a face apel la PHP, care este responsabil pentru interfeţe cuAWS. Apel utilizat în acest exemplu este foarte similar cu exemplele anterioare. Trebuie, mai întâi configuraţi obiect variabilele, că, pentru a atribURLRequest, a crea un nou încărcător exemplu, şi atribui în cele din urmă, un ascultător eveniment.

loadSearchResults a functiei publice (ceea ce priveşte: String): void {

var urlVariables: URLVariables = new URLVariables (); urlVariables.terms = termeni;

var urlRequest: URLRequest = new URLRequest (webServiceURL);

urlRequest.data = urlVariables;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE,

loadedResultsHandler); urlLoader.load (urlRequest);

}

Probabil ca ati observat aceasta metoda a fost făcut public. Acest lucru se face astfel încât alte aplicaţii pot utiliza capacitatea de căutare, pentru căeste ceea ce este despre toate posibilităţile de reutilizare. Desigur, dacă vă permite altora să numim această metodă în mod direct, ar trebui cel maprobabil doriţi să plasaţi un alt control pe termen să vă asiguraţi că datele rău nu va fi trimis.

După ce serverul Web returnează date, acesta este trimis la loadedResultsHandler () metodă. Răspunsul este trimis în format XML şi,folosind un pentru fiecare .. bucla fiecare element este tras în afară şi trimis la un unic BookItem clasa de exemplu.

var xml: XML = new XML (urlLoader.data); pentru fiecare(Poziţia în var xml .. carte)

BookItem este referire la un movieclip în bibliotecă. Acest movieclip este preumplut cu intrări manechinului, care sunt populate cu datereale înainte ca acestea sunt afişate pe scena.

var bookItem: BookItem = noi BookItem (); bookltem.setValues(

element .. titlu, punctul .. autor, punctul .. pret, punctul degetul mare ..

);

bookItem.y = (bookItems.length * (bookItem.height + 30));

bookItems.push (bookItem);

bookItemsContainer.addChild (bookItem);

De tratare a evenimentelor realizate urmează:

loadedResultsHandler funcţiei publice (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

pentru fiecare {(element var în xml .. carte)

var bookItem:. BookItem = new BookItem (); bookItem.setValues (item. titlu, autor articol ..,

element .. preţ, punctul degetul mare ..

);

bookltem.y = (bookltems.length * (bookltem.height + 30)); bookltems.push (bookltem);

bookltemsContainer.addChild (bookltem);}

}

Ultima metodă pentru clasa document este utilizat pentru a elimina cazurile existente carte element. Această metodă se numeşte de fiecare datăcând începe o nouă căutare, pentru a asigura datele nu stiva accidental.

removeOldResults privat function (): void {

dacă (bookItems.length> 0) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

237 of 362 11/9/2

Page 238: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 238/362

 

bookltems = new Array (); removeChild (bookltemsContainer); bookltemsContainer = new MovieClip ();bookltemsContainer.y = 100; addChild (bookltemsContainer);

}

}

Prima parte a metodei controalelor pentru intrări valide, deoarece prima dată aplicaţia se execută nu ar exista nici produsele existente pe scena.

dacă(BookItems.length> 0)

{

}

Dacă există elemente existente, un tablou nou este creat, care curata obiectelor existente. Apoi, folosind removeChild, containerul vechi esteşters, iar o nouă este creată. Acest lucru se face pentru a elibera resurse şi eliminarea produselor existente.

bookltems = new Array (); removeChild (bookltemsContainer); bookltemsContainer = new MovieClip ();

Ultimul pas este să adăugaţi container noua carte la lista de afişare, care se face prin apel la addChild () şi trece prin nouă instanţă acontainerului ca argument.

addChild (bookltemsContainer);

Acum puteţi trece pe şi pentru a crea Bookltem clasă, care este folosit pentru fiecare produs care se adaugă la Stage. Acesta este responsabilpentru stocarea datelor de pe produs şi de încărcare, în miniatură carte.

Înainte de orice dezvoltare a clasei începe aceasta este o idee bună să se uite la schelet, cum ar fi în exemplul anterior. Făcând astfel, vă permite să înţeleagă mai bine modul în care este destinat să lucreze.

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import; flash.display.Loader de import; deimport flash.net.URLRequest;

publice clasa BookItem extinde MovieClip {

BookItem funcţia publică () {}

setValues a functiei publice (t: String, un: String, p: String,

i: String): void {} a functiei publice loadThumb (): void {} getValues a functiei publice (): Object {}

}

}

Prima metodă, în majoritatea claselor este constructor, iar aceasta nu este o excepţie, cu excepţia faptului că acest constructor este gol. Următoareametodă este setValues, care este responsabil pentru stocarea valorilor trecut. Aceste valori vor fi date carte care este preluată de la Amazon.Puteţi, de asemenea, transmite aceste informaţii în ca un obiect, dar pentru acest exemplu, este mai uşor de înţeles folosind variabile independent

a functiei publice

setValues (t: String, un: String, p: String, i: String): void

{

title = t; autor = a; preţ = p; degetul mare = i;

titleTxt.text = titlu; authorTxt.text = autorului; priceTxt.text = preţ;

loadThumb ();

}

După ce toate variabilele sunt stocate pe un, un apel la loadThumb se face, care este responsabil pentru preluarea miniatură a capacului carte.Când utilizaţi Încărcător clasă, aveţi posibilitatea să-l trece în addChild, care elimină nevoia pentru un ascultător eveniment, dar chiar mai

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

238 of 362 11/9/2

Page 239: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 239/362

 

important, se încarcă pe cont propriu, deoarece capacul carte nu este necesară. Puteţi crea, de asemenea, un incarcator frontal vizual pentru ainforma utilizatorul că ceva este de fapt de încărcare. Restul a metodei este doar un standard URLRequest, care trebuie să vă familiarizaţi cu dexemplele anterioare.

loadThumb funcţia publică (): void {

var thumbLoader: Loader Loader = new (); var thumbURL: String = degetul mare;

var thumbURLRequest: URLRequest = new URLRequest (thumbURL);

thumbLoader.load (thumbURLRequest);

thumbLoader.x = 10;

addChild (thumbLoader);

}

Ultima metodă este pentru returnarea BookItem datele care au fost populate din metodele anterioare.

getValues a functiei publice (): Object {

întoarcere {title: titlu, autor: autor, preţ: preţ};

}

În acest moment, aţi terminat o aplicaţie de căutare pe Amazon cu PHP si Flash. Aţi obţinut, de asemenea, o mulţime de informaţii cu privire lasistemul de AWS şi ar trebui să fie pompate până la a construi propriul serviciu de web-activat aplicaţii.

Câteva proiecte potenţialul de a construi sunt căutare cerere CD, sistem gen de potrivire, sau chiar o galerie care foloseste iTunes-ul local sausimilare muzică bibliotecă jucatori pentru a construi un nor vizual de muzica pe care aţi ascultat. Verificati site-ul Web pentru această carte pentruvedea alte exemple de aplicatii construite folosind sistemul de Amazon AWS.

Galeria foto este o aplicaţie foarte populară, care este de multe ori construit folosind Flash. Acesta oferă un mod foarte unic de a prezenta muncasau, în unele cazuri, este utilizat ca o aplicaţie de livrare de informaţii, cum ar fi jocuri şi site-urile de ştiri.

În această secţiune, învăţaţi cum să dezvolte o galerie foto cu ajutorul serviciului de fotografie Flickr oferit de Yahoo. Aplicaţia Flash va face un apla PHP, care va interacţiona cu serviciile Web Flickr şi să se întoarcă în cele din urmă faptul că datele înapoi la Flash pentru afişarea.

Înainte de a începe dezvoltarea aplicatiei, înscrieţi-vă pentru un API flickr cheie, care este un proces în două etape. Primul pas este de a crea un coFlickr, vizitând pagina de înregistrare la www.flickr.com/signup/.

Odată ce aveţi un cont Flickr, se aplica pe un API vizitând www.flickr.com/services/ api / keys / aplică /.

y °U selectaţi opţiunea non-comerciale pe care le autorizează cererea dvs. aproape instantaneu.

Acest exemplu utilizează un Document de clasă să se ocupe de majoritatea de încărcare şi afişarea procesului. De fapt, cea mai mare parte dinaceastă clasă este similar cu cel din exemplul anterior. Dacă completat ca exemplu aveţi posibilitatea să copiaţi aceste fişiere de clasă şi de a facemodificările după cum este necesar.

Aici este scheletul de clasă, care vă va oferi o idee mai bună a modului în care clasa va lucra.

Pachetul {

flash.display.MovieClip de import; flash.events de import .*; flash.net de import .*;

Galerie foto public class extinde MovieClip {

publice var webServiceURL: String;

Fotografii privat var: Array;

privat var photosContainer: MovieClip;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

239 of 362 11/9/2

Page 240: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 240/362

 

Galerie foto funcţia publică () {}

searchHandler funcţiei publice (e: MouseEvent): void {} loadSearchResults a functiei publice (ceea cepriveşte: String): void {} funcţia loadedResultsHandler publice (e: Event): void {}

removeOldPhotos privat function (): void {}

}

}

Prima metoda este de fapt constructor, care, în această cerere se ocupă de crearea unui nou container şi initializeaza, de asemenea, elementul dematrice.

Galerie foto funcţia publică () {

fotografii = new Array (); photosContainer = new MovieClip ();

photosContainer.y = 75;

}

După nouă movieclip este creat, acesta trebuie să fie adăugate la lista de afişare, precum şi o tratare a evenimentului trebuie să fie atribuite pebutonul Caută situat pe scena.

searchBtn.addEventListener (MouseEvent.CLICK, searchHandler); addChild (photosContainer);

Următoarea metodă este să se concentreze asupra searchHandler () Atunci când această metodă se numeşte ea verifică mai întâi pentru untermen de căutare valabil.. În cazul în care valoarea este validă, un apel pentru a elimina vechile imagini se face.

Funcţia searchHandler publice (e: MouseEvent): void {

dacă(SearchTxt.text.length> 0)

{

removeOldPhotos ();

loadSearchResults (searchTxt.text);

}

}

Următoarea metodă este de asteptare pentru PHP, care este responsabil pentru interfa ţarea cu flickr. tag-uri variabilă este trecut în conductorde căutare şi este trimis la PHP prin intermediul unui EEG cerere.

loadSearchResults a functiei publice (tag-uri: String): void {

var urlVariables: URLVariables = new URLVariables (); urlVariables.tags = tag-uri;

var urlRequest: URLRequest = new URLRequest (webServiceURL); urlRequest.data = urlVariables;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE,

loadedResultsHandler); urlLoader.load (urlRequest);

}

PHP este configurat pentru a returna un set de rezultate XML, care este o versiune simplificata-jos a ceea ce este returnat de pe Flickr. Acest lucrueste foarte asemănător cu exemplul de Amazon, deoarece serviciile web au tendinţa de a returna o mulţime de informaţii care nu sunt necesarepentru o aplicaţie, cum ar fi aceasta.

Datele XML este încărcat prima oară într-un XML obiect pentru parsarea corespunzătoare care urmează să fie posibilă. Odată ce XML obiect estecreat, el se execută printr-o pentru fiecare .. buclă pentru a scoate fiecare nod fotografie.

loadedResultsHandler funcţiei publice (e: Event): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

240 of 362 11/9/2

Page 241: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 241/362

 

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

 pentru fiecare (element var în xml .. fotografie)

{

}

}

Utilizarea fiecare nod fotografie pe care aveţi nevoie pentru a crea o PhotoItem exemplu, care este în cazul în care imaginea flickr este încărcat.Gândiţi-vă de acest caz, ca un container pentru fiecare imagine. Acest exemplu este, de asemenea, în cazul în care datele de imagine sunt stocatepentru o utilizare viitoare.

var photoItem: PhotoItem = new PhotoItem (); photoItem.setValues (. item. titlu, punctul .. degetulmare);

Atunci când o instanţă nouă a PhotoItem este creat, aceasta trebuie să fie aliniate în recipient. Această poziţie se determină ţinând cont delungimea matrice fotografii şi înmulţirea prin înălţimea noilor photoItem. Această valoare este apoi mărită cu 50 de pixeli, pentru a permitespaţierea pentru miniatură.

photoItem.y = (photos.length * (photoltem.height + 50));

O alta solutie mai eleganta este de a crea o tratare a evenimentului, care ar alinia fotografii după ce este încărcat. Aceasta oferă posibilitatea de aavea mai multe imagini de dimensiunea şi va fi mai dinamic.

Sarcina ultima a acestei metode este de a adăuga noua instanta la matrice fotografii şi pentru a afişa în cele din urmă ea.

photos.push (photoltem); photosContainer.addChild (photoltem);

De fiecare dată când o nouă căutare este efectuată, un apel la removeOldPhotos metodă care se face. Această metodă este responsabil pentrueliminarea imaginilor existente şi asigurarea de date nu este traversat.

removeOldPhotos privat function (): void {

dacă (photos.length> 0) {

fotografii = new Array (); removeChild (photosContainer); photosContainer = new MovieClip ();photosContainer.y = 75; addChild (photosContainer);

}

}

Această metodă este setat la privat astfel încât alte cod nu se poate elimina din greşeală imagini. Dacă doriţi, pentru a permite eliminarea externe imaginilor pe care le poate crea o metodă de delegator care verifică un anumit nivel de autorizare. În cazul în care cererea este valabilă, imaginilesunt permise pentru a fi eliminate.

Clasa următoare pentru a crea, acum că Document clasă este finalizat, este PhotoItem. Aceasta clasa deţine informaţiile pentru fiecare imagincare se încarcă de pe Flickr. Este, de asemenea responsabil pentru încărcarea de poziţionare miniatură exemplu pe scena.

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import; flash.display.Loader de import; de

import flash.net.URLRequest;

publice clasa PhotoItem extinde MovieClip {

titlu privat var: String; thumb var privat: String;

BookItem funcţia publică () {}

setValues a functiei publice (t: String, i: String): void {} loadThumb funcţia publică (): void {}getValues a functiei publice (): Object {}

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

241 of 362 11/9/2

Page 242: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 242/362

 

Atunci când o nouă instanţă a acestei clase este creată, un apel la setValues se face pentru a stoca datele de imagine. Această metodă acceptădouă argumente: titlu şi miniatură cale. Ambele aceste variabile sunt stocate în variabile privat, astfel încât să nu poată fi accesate şimodificate accidental.

title = t; degetul mare = i;

Odată ce datele sunt încărcate, titlul este anexat la titleTxt componente situate în movieclip. Titlul este, de asemenea, sa mutat pentru a faloc pentru miniatură.

titleTxt.text = titlu; titleTxt.x = 100;

Piesa finală este de a face un apel la loadThumb metodă.

loadThumb ();

loadThumb Metoda este responsabil pentru încărcarea imaginii care se găseşte în documentul XML.

loadThumb funcţia publică (): void {

var thumbLoader: Loader Loader = new (); var thumbURL: String = degetul mare;

var thumbURLRequest: URLRequest = new URLRequest (thumbURL);

thumbLoader.load (thumbURLRequest);

thumbLoader.x = 10;

addChild (thumbLoader);

}

Ultima metodă este responsabil pentru trecerea inapoi informaţiile despre imagine.

getValues a functiei publice (): Object {

întoarcere {title: titlu};

}

Este posibil să fi observat încărcător miniatura este acelaşi cod care a fost folosit în carte căutarea exemplu. Puteţi avea, de asemenea, observat căCodul de încărcător în această carte în întregime este foarte asemănătoare. Ce ar trebui să vă spun acest lucru este o clasă ar trebui să au fostconstruite să se ocupe de această sarcină, şi un simplu import ar înlocui faptul că zece linii de cod, care au fost copiate în întreaga aplicaţii.

Acest lucru nu este cu adevărat vizibilă timp de o cerere mai mici, dar ar fi dacă aţi fost în curs de dezvoltare un proiect pe scară largă. ReutilizareClass este explicată în detaliu în capitolul 9. Dar, în esenţă, ceea ce este vorba în jos pentru a este atunci când sunte ţi în măsură să facă cevamodulare, aceasta este probabil o idee bună să facă acest lucru.

Interfatarea cu serviciul Web

Următorul pas în galeria foto este de a construi cod PHP care va fi responsabil pentru conectarea la Flickr şi parsarea răspunsului XML.

Primul pas este acela de a defini flickr cheie API-ul care este furnizat de pe Flickr. <? Php

define ("FLICKR_ACCESS_KEY", "{FLICKR_API_KEY}");

Flickr are un mod unic de a construi parţial adrese URL imagine. Cel mai simplu mod de a lucra cu acest format este prin utilizarea sprintffuncţie. Această funcţie acceptă un şir de variabile substituent care sunt apoi completate cu variabile reale folosind valorile prevăzute în alteargumente.

$ FlickrURLTemplate = "http://farm s.static.flickr.com% /% s /% s_% s_s.jpg";

Pentru a evita cereri eronate, un simplu dacă declaraţie este folosit pentru a vă asigura că tag-uri variabilă care vine de la Flash, de fapt, are termen de căutare. În cazul în care pentru un motiv oarecare variabila este gol, ie şirile de script-ul şi nu mai mult cod este rulat de la acel punct.

dacă (gol _GET ($ ['tag-uri'])) {

exit ();

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

242 of 362 11/9/2

Page 243: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 243/362

 

}

În cazul în care un paşaport valabil etichetă Valoarea este găsit, următorul pas este acela de a trage în etichetă de date şi de a face apel laFlickr pentru a începe procesul de căutare.

$ ApiMethod = "flickr.photos.search"; $ cerere = "http://api.flickr.com/services/rest/? "." Method = "$apiMethod.." & Tags = "$ searchTags.." & Api_key = "FLICKR_ACCESS_KEY.." & Per_page = 5 ";

$ RawXml = file_get_contents ($ cerere);

Serviciul de fotografie returnează un document XML care este stocat în $ RawXml variabilă. După XML este încărcată, este transmis de-a lungulsimplexml_ load_string () metodă, care creează un obiect adecvat care poate analiza apoi PHP.

$ XmlResponse = simplexml_load_string ($ rawXml);

Cum de multe imagini pentru a le afişa sunt determinate de încărcare valoare care se află în XML documentului.

$ NodeCount = getAttribute ($ xmlResponse-> fotografii, "perpage");

Construirea particularizate documentul XML

Procesul de construire a particularizat documentul XML se face cu ajutorul unui pentru bucla care apucă fiecare nod fotografie şi trage cuinformaţiile solicitate.

$ Xml = "<xml version = \?" 1.0 \ "?> \ N <photos>";

for ($ i = 0; $ i <$ nodeCount; $ i + +) {

$ FarmID = getAttribute ($ xmlResponse-> Fotografii-> fotografie [$ i], "fermă"); $ Servere =getAttribute ($ xmlResponse-> Fotografii-> fotografie [$ i], "server");

$ PHOTOID = getAttribute ($ xmlResponse-> Fotografii-> fotografie [$ i], "id"); $ secrete = getAttribute($ xmlResponse-> Fotografii-> fotografie [$ i], "secret");

$ Xml .= "\ t <Photo>";

$ Xml .= "\ t \ t <title> <[CDATA [!". getAttribute ($ xmlResponse-> fotografii

-> Fotografie [$ i], "titlu"). "]]></ Title> "; $ xml .=" \ t \ t <thumb> ".

sprintf ($ flickrURLTemplate, farmID $, $ Servere, PHOTOID $, $ secret). "</ Thumb>";

$ Xml .= "</ foto>";}

Prima parte a buclei este pentru construirea calea de imagine, care este trecut în sprintf funcţie. După global document XML este creat, ultimupas este de a de ieşire pentru a apelantului, care, în acest caz, ar fi Flash.

header ("Content-Type: text / xml"); de imprimare $ xml;

Acum, că PHP este finalizată, iar aplicarea generală a fost dezvoltat, îl puteţi testa, după cum se arată în figura 12.5.

Figura 12.5

Aici este aplicarea finală afisarea imaginilor de la o căutare cu ajutorul tag-ul portocaliu.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

243 of 362 11/9/2

Page 244: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 244/362

 

În acest capitol aţi învăţat cum să se conecteze la Flash servicii Web PayPal pentru a dezvolta un coş de cumpărături personalizat. Odată ce aţicompletat porţiunea de dezvoltare PayPal aţi învăţat cum să dezvolte un coş de cumpărături personalizat in Flash folosind clasele de a simplificaprocesul de dezvoltare.

Apoi a învăţat cum să dezvolte un sistem de cautare care au utilizat API-ul Amazon.com căutare şi au câştigat o înţelegere a modului în care terţepărţi de date întoarcere servicii.

În ultima parte a capitolului pe care a dezvoltat o aplicaţie imagini cu ajutorul API-ul Flickr. În acest proces, a ţi învăţat unele dintre caracteristicilmai robust de PHP pentru a detalia datele şi de a construi cererile utilizând sprintf.

Următorul pas este de a extinde în acest exemplu şi de a construi, eventual, un script galerie foto cu categoriile şi posibilitatea de a adăuga / edit

fotografii. Ai putea integra chiar şi această porţiune mică într-o cerere mai mare în timp ce utilizaţi flickr ca interfaţa grafică sau punctul de stocarefotografiilor.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

244 of 362 11/9/2

Page 245: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 245/362

 

s-BP

REAL-lumea cererile sunt menite să fie completă de produse care au fost testate şi sunt gata pentru a fi utilizate pentru publicul larg pentru a sebucure de ele. Acest capitol se concentrează pe construirea o serie de aplicaţii care face doar asta. Fişierele de pornire au fost furnizat, astfel încât vputeţi concentra pe partea centrală a cererilor, care ar fi procesul de dezvoltare.

Fiecare exemplu este defalcat pe clase sale individuale, fişiere, şi pachete în funcţie de ceea ce este necesar. Dacă nu au lucrat niciodată cu claseleam recomandăm insistent să citiţi Capitolul 10. Acest lucru va asigura exemple şi stilurile de codificare sunt usor de urmat.

Această aplicaţie este de desen (a se vedea figura 13.1) şi foloseşte PHP pentru a crea un format de imagine exportabil. Prima parte a codului esteresponsabil pentru partea de desen a cererii.

 În acest capitol

Aplicaţie de desen in Flash Utilizarea HG bibliotecă în PHP Dezvoltarea monitoriza site-ul Dezvoltarea Video Player cu Flash Dezvoltarea o cerere desondaj Elaborarea unui editor simplu fişier 

FIGURA 13.1

Aici este aplicarea desenul completat.

API de desen in Flash

API de desen care este inclus cu flash oferă o gamă largă de instrumente, cum ar fi linii, cercuri, pătrate, şi degradeuri. Acest exemplu seconcentrează pe linia de a crea un instrument Flash pe bază de desen.

Odată ce fişierul este deschis de pornire {START_FILE}, puteţi începe pentru a configura variabilele de iniţializare care detin culoarea pen-ulimplicit şi dimensiunea, precum şi de referinţă recipient.

false;

var penMC: MovieClip; isDrawing var: Boolean

var penTipSize: uint = 1;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

245 of 362 11/9/2

Page 246: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 246/362

 

var penColor: Numărul = 0x000000;

Cererea de tragere va fi creat pentru a desena linia atunci când butonul mouse-ului este ţinut în jos şi opreşte atunci când butonul mouse-ului esteliberat. În timpul butonul mouse-ului este de stabilire a unei persistente apel la o funcţie a muta mouse-ul are loc la locul de punctul de pen-ul lo locaţie diferită. Pen-ul este programat pentru a desena linia ori de câte ori indicatorul mouse-ului se află.

Următorul pas este de a construi Stivuitoare eveniment care va fi folosită pentru a determina starea de stilou şi activaţi sau să dezactivaţicapacitatea de desen. isDrawing variabilă este toggled pentru a defini starea actuală a cererii. Acest startDrawing () metoda este numitănumai atunci când mouse-ul se face clic. Este important ca o linie nou este creat în cazul în care variabilele de culoare sau dimensiune s-auschimbat.

startDrawing funcţie (e: MouseEvent): void {

trace ("Lansaţi desen"); isDrawing = true;

penMC.graphics.lineStyle (penTipSize, penColor, 1,0); penMC.graphics.moveTo (mouseX, mouseY);

}

După ce pavilion desen este setat puteţi începe desenul cursa pen-ul real (e). Poziţia a pen-ului este determinată de locaţia curentă a indicatorulumouse-ului.

Funcţia desen (e: MouseEvent): void {

dacă (isDrawing) {

penMC.graphics.lineTo (mouseX, mouseY);

}

}

Acum, că linia este în mod corespunzător în curs de elaborare, este o idee bună să-l oprească o dată pe butonul mouse-ului este eliberat. Asta seface prin ataşarea unui handler la mouse-ul evenimentului.

stopDrawing funcţie (e: MouseEvent): void {

trace ("Stop desen"); isDrawing = false;

}

Ultima metodă în acest exemplu este destul de complex. Acesta este responsabil pentru construirea Caseta de instrumente si initializareaStivuitoare eveniment mouse-ul.

funcţia init (): void {

penMC = new MovieClip ();

stage.addEventListener (MouseEvent.MOUSE_DOWN, startDrawing); stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing); stage.addEventListener (MouseEvent.MOUSE_MOVE, desen); addChild(penMC);

Caseta de instrumente este construit din movieclips care sunt deja pe scena şi convenabil află într-un container movieclip.

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

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

246 of 362 11/9/2

Page 247: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 247/362

 

{

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;});

Atunci când toate instrumentele sunt la locul lor, rezervorul swap adâncurile cu pen-ul movieclip să vă asiguraţi că nu se poate trage accidentpe interfaţa instrument.

swapChildren (toolsMC, penMC);

}

Acum, că ActionScript pentru aplicarea desen este setată, aici este codul completat:

var penMC: MovieClip;

var isDrawing: Boolean = false;

var penTipSize: uint = 1;

var penColor: Numărul = 0x000000;

funcţia init (): void {

penMC = new MovieClip ();

stage.addEventListener (MouseEvent.MOUSE_DOWN, startDrawing); stage.addEventListener

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

247 of 362 11/9/2

Page 248: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 248/362

 

(MouseEvent.MOUSE_UP, stopDrawing); stage.addEventListener (MouseEvent.MOUSE_MOVE, desen); 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, function (): void

{

penTipSize = 6;});

swapChildren (toolsMC, penMC);

}

startDrawing funcţie (e: MouseEvent): void {

trace ("Lansaţi desen"); isDrawing = true;

penMC.graphics.lineStyle (penTipSize, penColor, 1,0); penMC.graphics.moveTo (mouseX, mouseY);

}

Funcţia desen (e: MouseEvent): void {

dacă (isDrawing) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

248 of 362 11/9/2

Page 249: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 249/362

 

penMC.graphics.lineTo (mouseX, mouseY);

}

}

stopDrawing funcţie (e: MouseEvent): void {

trace ("Stop desen");

isDrawing = false;

}

init ();

Asta este tot ce există la o cerere de desen de bază în Flash. Aveţi posibilitatea să extindeţi la acest exemplu prin furnizarea unor sfaturi diferitepen-ului sau poate că unele culori diferite, pentru a permite pentru umbrire si alte stiluri pictura.

Următoarea secţiune se bazează de la acest exemplu şi foloseşte PHP pentru a face şi a salva imaginea pe server.

Biblioteca GD in PHP este o colecţie de funcţii care vă oferă posibilitatea de a manipula şi de a crea imagini. HG, de asemenea, are un suport de tecu condiţia să aibă biblioteci corect instalat. Lucrul cu biblioteca GD este destul de simplă; vă creaţi o imagine sau să deschideţi o imagine existenca o bază şi să modificaţi după cum este necesar.

Una dintre cele mai frecvente utilizări ale bibliotecii HG include crearea automată a inscripţionări care sunt aplicate la o galerie de imagini. Unii îutilizaţi pentru a crea miniaturi dinamice, similare cu modul în care editorul Site locale ar face.

http://www.php.net/manual/en/ref.image.php

Biblioteca GD oferă o listă uriaşă de funcţii, dar unele dintre ele necesita biblioteci suplimentare. De fapt, aceasta este o idee bună pentru a rulaunele cod, cum ar fi următoarele, pentru a determina ceea ce este instalat.

<Php var_dump (gd_info ());?>

Acest cod ceea ce imprimă starea diferitelor componente ale HG sunt, cum ar fi ceea ce este şi nu este instalat. Acesta este un rezultat din eşantion

care var_dump apel.

array (9) {

["HG Version"] => string (24) "pachet (compatibilă cu 2.0)"

["Freetype Suport"] => bool (false)

["TILib Suport"] => bool (false)

["GIF Read Support"] => bool (true)

["GIF Creaţi Support"] => bool (false)

["Suport JPG"] => bool (false)

["PNG Support"] => bool (true)

["WBMP Suport"] => bool (true)

["XBM Suport"] => bool (false)

}

Codul anterior vă permite să ştiţi că nu aveţi freetype (font) şi JPG (imagine) sprijin activat sau instalat. Cu ajutorul acestor informa ţii, puteţicontinua şi instala bibliotecile necesare. Reţineţi că instalarea aplicaţiilor într-un mediu de linie de comandă nu este la fel de simplu ca o

dublu-clic. Aceasta implică construirea largă de instrumente şi, uneori, necesită alte biblioteci, ceea ce înseamnă că poate lua o mulţime de muncăpentru a obţine completarea HG kit de lucru.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

249 of 362 11/9/2

Page 250: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 250/362

 

Dacă sunteţi presat de timp şi sunt de lucru la nivel local puteţi lua o privire la opţiunile de pornire rapidă disponibile în capitolul 1, care vin cu versiune completă a PHP şi a HG. Dacă rulaţi de la un sistem la distanţă poate fi cel mai bine să contactaţi gazda Web pentru cererile de instalare

eu r , l ----- A "ISG Biblioteca GD (de bază) nu v ine cu fiecare v ersiune de PHP. Verificaţi cu Web P ™ ™ ^ ^1"™ ™ ™ gazdă sau instalaţi-l după cum estnecesar.

Din acest punct se deplasează înainte ar trebui să aveţi instalat HG cu cel puţin sprijin JPG, în scopul de a finaliza exemple. Înainte de construireaaplicarea finală, este mai bine să se familiarizeze cu biblioteca GD uitându-te la câteva exemple.

Aici este un simplu exemplu HG care creează un dreptunghi roz şi ieşirile-l la browser-ul ca un fişier JPG (a se vedea figura 13.2).

$ Imagine = imagecreate (250, 80);

$ Bgcolor = imagecolorallocate ($ imagine, 255, 0, 120); header ("Content-Type: image / jpeg"); imagejpe($ imagini);

FIGURA 13.2

Aici este imaginea care a fost generat de biblioteca GD folosind codul de simplu.

Aici este o continuare a exemplul precedent, dar de data aceasta salvează fişierul JPG la serverul Web. Prin adăugarea unui al doilea argumentpentru imagejpeg () funcţie, care este un nume de fişier, imaginea se salvează cu numele sample.jpg în loc să fie de ieşire pentru abrowser-ului.

$ Imagine = imagecreate (250, 80);

$ Bgcolor = imagecolorallocate ($ imagine, 255, 0, 120); header ("Content-Type: image / jpeg"); imagejpe($ imagine, '/ sample.jpg.');

În timp ce aceste exemple sunt destul de simplă, acestea ar trebui să vă dau o idee despre cum să lucraţi cu biblioteca GD. Dacă aveţi alte biblioteinstalat, puteţi face textul cu privire la aceste imagini, printre multe alte rezultate foarte interesante. Biblioteca GD este o caracteristică mare de PHşi într-adevăr a venit la îndemână pentru mai multe sarcini, indiferent de cat de mare.

Acum, haideţi să trecem la cererea reală care a fost începută în secţiunea anterioară. ActionScript este permiţându ghidul de o remiză setările deimagine şi de schimbare, şi totul funcţionează perfect, cu toate acestea, utilizatorul nu este în măsură pentru a salva imaginea excepţia cazului încare se imprimă. Ideea este de a inspecta şi a imaginii, care trimite date la PHP, care va fi responsabil pentru crearea unui p ixel cu pixel imagini şsalvarea ei la serverul Web.

Generarea unei imagini în biblioteca GD

Această secţiune se concentrează pe utilizarea PHP pentru a face imaginea pe care este tras în aplicaţia Flash. În mod normal, va începe cu primulcod PHP, dar în această aplicaţie PHP este utilizat numai ca un ren-Derer deci are sens să începem cu partea Flash.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

250 of 362 11/9/2

Page 251: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 251/362

 

Cea mai mare parte a cererii a fost scrisă în secţiunea anterioară, să luaţi pur şi simplu acest cod si sa se extinda pe ea pentru a adăuga acţiunilenecesare.

Codul PHP este responsabil pentru încărcarea a trecut-in-XML într-un obiect care este apoi utilizat pentru a genera, sau s ă facă, imaginea finală.Lăţimea, înălţimea, şi XML sunt toti au trecut prin POST de date, deoarece o EEG cerere ar eşua.

$ Width = $ _POST ['lăţime']; $ height = $ _POST ['inaltime'];

$ Puncte = simplexml_load_string ($ _POST ['pointData']);

În cazul în care datele sunt încărcate în mod corespunzător, aveţi posibilitatea să configuraţi de bază pentru imagine prestate. Acest lucru se facefolosind imagecreatetruecolor () funcţie, care este o parte a bibliotecii GD.

$ Img = imagecreatetruecolor ($ latime, $ inaltime);

Imaginea reală este generat de looping prin toate datele XML, care este scoaterea valorilor de culoare care au fost capturati in Flash.

$ Limita = count ($ puncte-> punct); pentru ($ j = 0; $ j <$ limită; $ j + +)

{

$ X = $ puncte-> punct [$ j] -> x; y = $ $ puncte-> punct [$ j] -> y;

$ Culoare = $ puncte-> punct [$ j] -> c; $ culoare = hexdec ($ culoare);

imagesetpixel ($ img, $ x, $ y, $ culoare);

}

Datele pixel este plasat într-un model de grila o linie la un moment dat, iar $ X şi $ Y sunt punctul de fiecare culoare este să fie plasate. Toateaceste date sunt transmise la imagesetpixel funcţioneze pe fiecare trecere a buclei interioare.

Ultimul pas al PHP odată ce imaginea este creat este de a reda imaginea ca PNG, astfel cum se arată în figura 13.3, şi salvaţi-l la sistemul de fişier

header ("Content-Type: image / png '); imagepng ($ img," render_ "time ()." PNG.'.);

FIGURA 13.3

O imagine probă prestate ca PNG

Procesul de construire a unui pixel cu pixel imagine este procesorul intensiv si poate lua o lung ă perioadă de timp, în funcţie de dimensiunea imagi

Aici este codul PHP completat:

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

251 of 362 11/9/2

Page 252: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 252/362

 

<? Php

$ Width = $ _POST ['lăţime']; $ height = $ _POST ['inaltime'];

$ Puncte = simplexml_load_string ($ _POST ['pointData']); $ img = imagecreatetruecolor ($ latime, $inaltime); $ limita = count ($ puncte-> punct);

pentru ($ j = 0; $ j <$ limită; $ j + +) {

$ X = $ puncte-> punct [$ j] -> x; y = $ $ puncte-> punct [$ j] -> y;

$ Culoare = $ puncte-> punct [$ j] -> c; $ culoare = hexdec ($ culoare);

imagesetpixel ($ img, $ x, $ y, $ culoare);

}

header ("Content-Type: image / png");

imagepng ($ img, "render_" time ().. "PNG. ');?>

Colectarea datelor pixelilor in Flash

Există doar o câteva actualizări necesare la codul de Flash de la secţiunea anterioară, dar acum se concentreze pe colectarea datelor de imagine cuajutorul BitmapData clasă.

Primul pas în această funcţie este de a determina dimensiunile imaginii.

Lăţime var: uint = penMC.width; înălţime var: uint = penMC.height;

Variabila de lângă defini este fişierul de referinţă PHP.

var phpFile: String =

"http://localhost/ch12/DrawingGD/ImageGenerator.php";

Următorul pas este de a construi o nouă bitmap folosind remiză () metoda de BitmapData clasă. Metoda remiză are un argument, care esteţinta. Această metodă ia argumentul şi copiază datele pixelilor la bitmap noi.

var bmp: BitmapData = new BitmapData (lăţime, înălţime, adevărat,

OxFFFFFF); bmp.draw (penMC);

După ce este creat un nou bitmap, puteţi construi o bucla care va scana bitmap şi apuca culoarea fiecărui pixel.

var xml: String = "<points>";

pentru (var i: uint = 0; i <lăţime; i + +) {

pentru (var j: uint = 0; j <inaltime; j + +) {

. var culoare: String = bmp.getPixel (i, j) toString (16);

dacă (culoare == "0") {

color = "FFFFFF";

}

xml XML XML XML XML

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

252 of 362 11/9/2

Page 253: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 253/362

 

<point> ";

\ T <x> "+ i +" </ x> "; \ t <y>" + j + "</ y>"; \ t <c> "+ color +" </ c> "; </ punct> ";

xml + = "</ puncte de>";

Datele de culoare sunt stocate într-un document XML care este trimis la PHP odat ă ce întreaga imagine este scanată. Variabilele sunt stocate într-onouă instanţă a URLVariables obiect şi sunt transmise în PHP POST formatul de date.

var urlVariables: URLVariables = new URLVariables (); urlVariables.width = lăţime; urlVariables.height =înălţime; urlVariables.pointData = xml;

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.method = URLRequestMethod.POST;urlRequest.data = urlVariables; sendToURL (urlRequest);

Răspunsul este trimis la PHP utilizând sendToURL metodă. Aceasta solicită în tăcere server Web şi nu se aşteaptă nici un răspuns. Motivul penutilizarea acestei metode este că cererea va fi destul de mare în cazul în care imaginea prestate are o multime de date pixel.

Atunci când deţin sau operează un site Web se poate merge, uneori, offline, dar cel mai probabil nu vei şti dacă este în jos doar pentru un scurtmoment excepţia cazului în care se întâmplă să fie verificarea site-ului. Ce se întâmplă dacă opera multe site-uri web şi sunt de lucru ocupat în timce site-ul tău se duce în jos? Cel mai probabil, site-ul tău merge deconectat şi nu sunt conştienţi de ea.

Această secţiune conţine explicaţia şi de dezvoltare a unui monitor flash site-ul bazat pe faptul că busteni tentative eşuate de a ajunge la server.Acesta poate fi chiar configurat pentru a e-mail în cazul în care administratorul de sistem se confruntă cu un site care nu a răspuns, după un anumpunct (configurabil de către operator).

Schema tabelei MySQL (contur) este, după cum urmează:

CREATE TABLE siteMonitor (

id INT NOT NULL AUTO_INCREMENT,

nume VARCHAR (10 0) DEFAULT "" NOT NULL,

TEXT NOT NULL uri,

activă VARCHAR (l) NOT NULL DEFAULT 1, PRIMARY KEY (id)

Există multe modalităţi pe care le puteţi încărca schema în baza de date MySQL. Pentru o e xplicaţie, a se v edea capitolul 2.

Dezvoltarea PHP pentru site-ul monitorului

Prima parte a PHP se încarcă în informaţiile de conectare pentru baza de date. Acesta este plasat într-un fi şier extern, astfel încât să poată fi partaja în cadrul proiectelor. De fapt, dacă utilizaţi aceeaşi bază de date ca exemple anterioare în această carte, aveţi posibilitatea să reutilizaţi vechiuldbconn.php deoarece nu va fi schimbat pentru această aplicaţie.

Dacă nu aţi creat deja dbconn.php, aici sunt conţinutul. Vă completaţi informaţiile reale pentru server-ul dvs., care poate fi obţinută de laadministratorul serverului Web dacă nu sunteţi proprietarul, sau furnizorul tau de gazduire dacă faci propriul server.

<? Php

$ Host = "localhost"; $ ghidul = "username"; $ treci = "PAROLA"; $ baza de date = "database_name";

$ Link = mysql_connect ($ host, $ user, $ pass); mysql_select_db ($ database, $ link);

unset ($ gazdă); unset ($ user);

unset ($ pass);

unset ($ baza de date);?>

După ce conexiune de date este setat puteţi continua de dezvoltare a monitor.php fişier. $ Acţiune este trecut de-a lungul URL-ul, dartrebuie să fie valabil pentru ca script-ul să ştie care statul ar trebui să fie difuzate inch

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

253 of 362 11/9/2

Page 254: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 254/362

 

$ Action = (isset ($ _GET ['action']))? $ _GET ['Actiune']: "";

Presupunând că acţiunea este valabil, iar valoarea este getsites, care este configurat pentru a returna o lista cu site-uri care sunt monitorizateProcesul de recuperare lista de site-ul este realizat folosind o buclă care încarcă în informaţiile din baza de date MySQL. Lista de site-ul estereturnat Flash ca pe un obiect XML defineşte fiecare dintre site-urile şi în cazul în care acestea sunt situate.

SQL pentru a prelua lista este configurat pentru a încărca toate intrările în cazul în care valoarea de activ este egală cu 1.

SELECT * FROM WHERE siteMonitor activ = 1

După ce datele SQL sunt recuperate, este trecut la o în timp ce buclă, care este responsabil pentru grabbing fiecare rând şi de a construi o linide XML definirea informaţiilor site-ului.

$ Rezultat = mysql_query ("SELECT * FROM WHERE siteMonitor activ = 1");

$ Xml = "<versiune xml = \?" 1.0 \ "?> \ N"; $ xml .= "<sites> \ n";

în timp ce ($ row = mysql_fetch_array ($ rezultat))

{

}

$ Xml .= "</ site-uri>";

Linia de XML este construit folosind $ Row de date, care este trecut în sprint () funcţie. sprintf este folosit pentru a completa automat înatributele necesare XML folosind datele de SQL rând.

$ Xml .= sprintf ("\ t <site name=\"%s\" uri=\"%s\" /> \ n", $ row ['nume'],

$ Row ['uri']);

Acum, că datele XML este construit, acesta este trimis la browser-ul şi sa întors în Flash. Acest lucru se face prin setarea Content-Type a răspula text / xml, care este tipul MIME de XML. Apoi, ultimul pas este de a utiliza o declaraţie de imprimare la ieşire efectiv de date.

header ("Content-type: text / xml"); de imprimare $ xml;

Iată o mostră de răspuns care ar fi revenit la Flash:

<Versiune xml =? "1.0"?> <sites>

<Numele site-ului = "Adobe" uri = "http://www.adobe.com" />

<Numele site-ului =MAIRPlaygroundM uri =Mhttp://www.airplayground.comM

/>

<Numele site-ului = "mkeefeDESIGN" uri = "http://www.mkeefedesign.com"/> <Numele site-ului =" Google "ur="http://www.google.com"/> </ Site-uri>

Utilizarea PHP e-mail a administratorului

Când un site a fost inaccesibil pentru o anumită perioadă de timp, este probabil o idee bună de a notifica pe cineva. Notificarea este trimisă folosi

built-in e-mail () funcţie. E-mail alerte admin de un server cu privire la ceea ce site-ul se confruntă cu întreruperi şi la ce oră raport a fosttransmis, în cazul rar de e-mail este întârziat sau nu este doar observat imediat.

Primul pas este de a verifica acţiunea anterioară este setat la e-mail admin. În caz contrar, această întregului bloc de cod ar fi ignorate.

else if ($ action == "emailadmin") {

}

În cazul în care acţiunea este valabilă, următorul pas este acela de a construi mesajul de e-mail şi de a prelua valorile a trecut de la Flash, caredefinesc site-ul se confrunta cu caderi de tensiune.

$ = De la "[email protected]"; $ A ="[email protected]"; Site-ul $ = $ _GET ['site']; $ siteuri $ _GET ['siteuri'];

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

254 of 362 11/9/2

Page 255: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 255/362

 

/ / De azi data

$ Data = data ("F j, Y \ \ o \ \ t h: i o", de timp (

Organismul de e-mail este definit ca o serie de $ EmailInfo variabile concatenate folosind punct (.), care este folosit pentru a lasa PHP ştie,această variabilă este o continuare.

Header-ul e-mail trebuie să urmeze caietului de sarcini care defineşte modul de e-mail este să fie construită şi $ De la valoare trebuie să fievalabilă, chiar dacă efectiv de e-mail utilizate nu.

/ / Mail anteturile, nu alterează

$ MailHeaders = "From:". $ Din. "<> \ N \ n";

Atunci când toate variabilele şi e-mail informaţii au fost create, efective de e-mail pot fi trimise. Acest lucru se face printr-un apel la e-mail ()funcţie, care trece de-a lungul informaţii care a fost construit în etapele anterioare.

if (mail ($ catre,

"Raspuns automat de la Monitor Site-ul",

$ EmailInfo,

$ MailHeaders))

{

de imprimare "rezultat = succes";

}

e-mail () Funcţia returnează un mesaj de succes în cazul în care funcţia este propriu-zis. Funcţia nu cunoaşte statutul de trimiterea efectivă ae-mail.

Aici este codul PHP completate pentru monitor.php:

<? Php

necesită ("dbconn.php ');

$ Action = (isset ($ _GET ['action']))? $ _GET ['Actiune']: "";

if ($ action == "getsites") {

$ Rezultat = mysql_query ("SELECT * FROM WHERE siteMonitor activ = 1");

$ Xml = "<versiune xml = \?" 1.0 \ "?> \ N"; $ xml .= "<sites> \ n";

în timp ce ($ row = mysql_fetch_array ($ rezultat)) {

$ Xml .= sprintf ("\ t <site name=\"%s\" uri=\"%s\" /> \ n", $ row ['nume'], $ row ['uri']);

}

$ Xml .= "</ site-uri>"; header ("Content-type: text / xml");

imprimare $ xml;

}

else if ($ action == "emailadmin") {

$ = De la "[email protected]"; $ A ="[email protected]"; Site-ul $ = $ _GET ['site']; $ siteuri $ _GET ['siteuri'];

/ / De azi data

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

255 of 362 11/9/2

Page 256: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 256/362

 

$ Data = data ("F j, Y \ \ o \ \ t h: i o", de timp (

** Acesta este un răspuns automat **. \ n \ n "; Status Monitor Site-ul a fost informat \ n"; site-ulurmător nu răspunde: \ n ";

----------------------------------------- \ N ";

Site-ul: ".. $ Site-ul" [". $ Siteuri."] \ N "; Data trimiterii:". $ Data. "\ N \ n";----------------------------------------- \ n ";

/ / Mail anteturile, nu alterează

$ MailHeaders = "From:". $ Din. "<> \ N \ n";

imprimare $ emailInfo; if (mail ($ catre,

"Raspuns automat de la Monitor Site-ul",

$ EmailInfo,

$ MailHeaders

{

de imprimare "rezultat = succes";

}

?>

Dezvoltarea ActionScript pentru a monitoriza site-ul

În acest moment, codul de PHP a fost finalizat, iar următoarea secţiune se concentrează asupra procesului de dezvoltare ActionScript. Fişierul Flaa fost prevăzut pentru acest exemplu, pe site-ul Web al cărţii, care are toate elementele de design în loc, după cum se arată în figura 13.4, astfel învă puteţi concentra pe dezvoltarea.

$ $ EmailInfo emailInfo $ $ emailInfo emailInfo $ $ emailInfo emailInfo $ $ emailInfo emailInfo

FIGURA 13.4

Aici este cererea completată cu una dintre site-urile care indică un eşec.

Aici este scheletul de clasă pentru Document clasă.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

256 of 362 11/9/2

Page 257: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 257/362

 

Pachetul {

flash.display.MovieClip de import; de import flash.net .*; flash.events de import .*;

publice clasa SiteMonitor extinde MovieClip {

SiteMonitor funcţia publică () {}

loadSites privat function (): void {}

loadSiteHandler private function (e: Event): void {}

}

}

Constructorul din Document clasă este responsabil pentru atribuirea siteContainer movieclip, adăugând că movieclip la lista deafişare şi de a face în cele din urmă un apel la loadSites () metodă.

siteContainer = new MovieClip (); siteContainer.y = 80; siteContainer.x = 20; addChild (siteContainer);

loadSites ();

loadSites () Metoda este responsabil pentru încărcarea lista de site-uri pentru a viziona. Un eveniment este anexat la secvenţa de încărcare,care se numeşte atunci când datele site-ul este preluat cu succes.

variabile var: URLVariables = new URLVariables (); variables.action = "getsites";

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader ();

urlLoader.addEventListener (Event.COMPLETE, loadSiteHandler); urlLoader.load (urlRequest);

Următoarea metodă se numeşte atunci când datele site-ul este încărcat cu succes. Un eveniment este trecut ca un argument care conţine răspunsuldin PHP.

loadSiteHandler private function (e: Event): void {

}

Răspunsul este XML, astfel încât va trebui să creaţi mai întâi un obiect XML care va fi curbat, prin utilizarea unui pentru fiecare .. buclă.

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

var i: uint = 0;

pentru fiecare {(element var în xml .. site-ul)

}

}

Conţinutul pentru fiecare .. buclă creează o nouă instanţă a SiteMonitorltem clasa care este ataşat la un movieclip în Cronologie

acelaşi nume.

var siteItem: SiteMonitorItem = new SiteMonitorItem (); siteltem.phpFile = phpFile; siteltem.siteURI =element .. atribut ('uri'); siteItem.siteNameTxt.text = element .. atribut ('nume');

siteItem.statusMC.gotoAndStop (2);

siteltem.y = (i * (siteltem.height + 10));

siteContainer.addChild (siteltem); i + +;

siteltem variabila deţine instanţă a clasei nou create, care este folosit pentru a atribui phpFile, siteuri, şi numele site-ului. uri şi numsite-ului sunt parsate de obiect XML utilizând atribut () metodă, care are un argument care este numele atributului pe care il cautati pentruPlasare a siteltem obiect este determinat printr-o ecuaţie simplă folosind înălţimea de obiectul şi valoarea eu variabilă, luând apoi această

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

257 of 362 11/9/2

Page 258: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 258/362

 

sumă şi adăugarea unui padding 10px.

În acest moment, clasa document este terminat. Aici este codul de completat:

Pachetul {

flash.display.MovieClip de import; de import flash.net .*; flash.events de import .*;

publice clasa SiteMonitor extinde MovieClip {

publice var siteContainer: MovieClip; publice var phpFile: String =

"http://localhost/SiteMonitor/monitor.php";

SiteMonitor funcţia publică () {

siteContainer = new MovieClip (); siteContainer.y = 80; siteContainer.x = 20; addChild (siteContainer);

loadSites ();

}

loadSites privat function (): void {

variabile var: URLVariables = new URLVariables (); variables.action = "getsites";

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE,loadSiteHandler);

urlLoader.load (urlRequest);

}

loadSiteHandler private function (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

var i: uint = 0;

pentru fiecare {(element var în xml .. site-ul)

var siteItem: SiteMonitorItem = new SiteMonitorItem ();

siteltem.phpFile = phpFile; siteltem.siteURI = element .. atribut ('uri'); siteItem.siteNameTxt.text =

element .. atribut ("nume"); siteItem.statusMC.gotoAndStop (2); siteContainer.addChild (siteItem);

siteItem.y = (i * (siteItem.height + 10));

siteItem.checkSite ();

}

}

Clasa următoare să se concentreze asupra este SiteMonitorItem, care este atribuit movieclip în biblioteca cu acelaşi nume. Aici estescheletul de clasă pentru această clasă:

Pachetul {

publice clasa SiteMonitorItem extinde MovieClip {

SiteMonitorItem funcţia publică () {} funcţia checkSite publice (): void {}

noResponse private function (eveniment: IOErrorEvent): void {} siteResponsedHandler private function (e:Event): void {} private function stopChecking (): void {}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

258 of 362 11/9/2

Page 259: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 259/362

 

funcţiei publice obţine încercări (): uint {} funcţia tentative set publice (num: uint): void {}

}

Constructorul acestei clase este gol, astfel încât să puteţi lăsa deoparte şi să continue la următoarea metodă, care este checkSite () . Aceastămetodă se numeşte de către Document clasă atunci când timer-ul expira, aşteptaţi. Scopul acestei metode este de a începe acţiunea de verificaresite-ului şi tratare corectă, în funcţie de răspunsul primit.

checkSite funcţia publică (): 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);

}

Cea mai mare parte a acestei metode este acelaşi ca exemplele anterioare, cu excepţia a ascultătorului doilea eveniment. Acest eveniment esteascultător atribuit IO_ERROR, care apare atunci când un fişier nu este încărcată corespunzător sau numite. noResponse () metodă va fiapelată atunci când site-ul nu poate fi încărcat, aşa cum se arată aici:

urlLoader.addEventListener(IOErrorEvent.IO_ERROR, noResponse);

noResponse () Metoda este responsabil pentru incrementarea failedAttempts variabil, dar folosind o metoda setter în loc de accesare a

variabilei direct.

noResponse private function (eveniment: IOErrorEvent): void {

încercări = încercări de + 1;

}

În cazul în care site-ul este încărcat, o chemare la siteResponsedHandler () se face clar încercările anterioare au eşuat şi reseta practicnumărul de eroare.

siteResponsedHandler private function (e: Event): void {

failedAttempts = 0;

}

Un apel la stopChecking () apare atunci când un site nu reuşeşte să răspundă după un număr predeterminat de ori, stabilite deMAX_ATTEMPTS constante.

stopChecking private function (): void {

stopCheck = true;

}

În ultimele două metode din această categorie sunt getter si setteri pentru failedAttempts variabilă. The Getter întoarce pur şi simplu valoarcurentă a failedAttempts valoare. Setter nu numai

incremente failedAttempts variabilă, dar, de asemenea, determină dacă toate controalele viitoare ar trebui să se bazeze pe oprit numărul deeşecul actual.

funcţiei publice obţine încercări (): uint {

întoarcere failedAttempts;

}

încercările publice set de funcţie (num: uint): void {

if (num == nedefinit) {

failedAttempts + +;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

259 of 362 11/9/2

Page 260: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 260/362

 

}

else {

failedAttempts = num;

}

dacă (failedAttempts == MAX_ATTEMPTS)

{

statusMC.gotoAndStop (1); stopChecking ();

}

}

Dacă failedAttempts este egal cu MAX_ATTEMPTS constante, un apel la stopChecking () se face şi indicatorul de stare se mută la primcadru afişează un cerc roşu.

În acest moment, SiteMonitorItem clasa este acum complet, iar filmul Flash pot fi testate pentru a se asigura că funcţionează în modcorespunzător cu codul PHP scris înainte.

În urma este fisierul clasei finalizate SiteMonitorItem care este ataşat la movieclip cu acelaşi nume:

Pachetul {

flash.display.MovieClip de import; flash.net de import .*; flash.events de import .*; importflash.text.TextField;

publice clasa SiteMonitorItem extinde MovieClip {

publice var phpFile: String; publice var siteuri: String;

privat var stopCheck: Boolean = false;

failedAttempts privat var: uint = 0; MAX_ATTEMPTS privat const: uint = 3; SiteMonitorItem funcţia public() {}

checkSite funcţia publică (): 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);

Funcţia noResponse privat (eveniment: IOErrorEvent): încercări anulate = încercări de + 1;

siteResponsedHandler private function (e: Event): void failedAttempts = 0;

Funcţia privat stopChecking (): void stopCheck = true;

funcţiei publice obţine încercări (): întoarcere uint failedAttempts;

încercările publice set de funcţie (num: uint): void

if (num == nedefinit) {

failedAttempts + +;

}

else {

failedAttempts = num;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

260 of 362 11/9/2

Page 261: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 261/362

 

}

dacă (failedAttempts == MAX_ATTEMPTS) {

statusMC.gotoAndStop (l);

stopChecking ();

}

}

}

}

Playere video, cum ar fi cea ilustrată în figura 13.5, devin din ce în ce mai populare ca Internetul continuă pentru a obţine mai repede. Ideea dinspatele acestei secţiuni este de a dezvolta un player video care este interfatat cu PHP pentru a încărca în lista de video, precum şi a ţine evidenţanumărului de joc.

Flash deja nave cu o componenta destul de versatil player video, dar puteţi extinde în continuare pe el, care este exact ceea ce această secţiune văajuta să obţineţi.

Aplicatia este construită dintr-un VideoPlayer şi ComboBox componentă care a fost deja introdus pe scena. La începutul fişierului{START_FILE} este furnizat, astfel încât să vă puteţi concentra pe dezvoltarea şi poate testa rapid ca te duci.

FIGURA 13.5

Un player video cu un clip video încărcat şi redarea

Aveţi nevoie de un fişier video FLV, în scopul de a testa această aplicaţie. Una dintre ele e ste inclusă între materialele sursă găsite pe site-ul Web acăr ţii.

Multe dintre aplicaţiile pe care le dezvolta in Flash va consta din unele ActionScript. Complexitatea ActionScript va fi determinat pe baza ce cererva fi. În acest exemplu, vei folosi o clasa de externe de a dezvolta video player.

Prima parte a cererii care urmează să fie dezvoltată este codul ActionScript, care este rupt în clase pentru scalabilitate mai mare. ActionScriptprincipale vor fi anexate la cererea utilizând Document clasă.

Pentru a începe, uita-te la scheletul de clasă, care vă va oferi o idee mai bună a modului în care cererea va curge.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

261 of 362 11/9/2

Page 262: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 262/362

 

Pachetul {

publice VideoPlayer clasa extinde MovieClip {

VideoPlayer funcţia publică () {} a functiei publice loadData (): void {}

Funcţia privat dataLoaded (e: Event): void {} comboHandler private function (e: Event): void {}

}

}

Metoda constructorul Document clasă este responsabil pentru atribuirea VideoPlayer instanţă. De asemenea, este punctul în care ascultătornecesar eveniment sunt definite.

_player = acest ['jucator'];

acest ['videoListCombo'] addEventListener (Event.CHANGE, comboHandler).;

Ultima parte a constructor metodă este de a apela loadData metodei şi a aduna date XML.

loadData ();

loadData () Metoda este pentru încărcarea de date video, care este returnat în format XML.

loadData funcţia publică (): void {

var urlVariables: URLVariables = URLVariables noi; 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);

Aici este un eşantion de răspuns XML, care are atributele de populată în loc de noduri. <videos>

<Film name = Eşantion Video 1" src = colorl FLV " playCount = 7" /><Film name = Eşantion Video 2" src = color2 FLV " playCount = 3" />

<Film name = Eşantion Video 3" src = color3 FLV " playCount = 5" />

<Film name = Eşantion Video 4" src = color4 FLV " playCount = 4" />

<Film name = Eşantion Video 5" src = color5 FLV " playCount = 1" />

<Film name = Eşantion Video 6" src = color6 FLV " playCount = 2" />

</ Video>

După datele XML obiect este încărcat, o chemare la dataLoaded () se face, care este responsabil pentru popularea ComboBox. A pentrufiecare .. buclă este folosit pentru a parsa datele video, care este apoi adăugată la ComboBox componente.

['videoListCombo'] această addItem ({etichetă: "Alegeţi date ...', Video: -1}).;

pentru fiecare {(element var în xml .. video)

Numele var: String = element .. atribut ('nume'); var src: String = element .. atribut ("src ');

['videoListCombo'] această addItem ({etichetă: nume, date de: src}).;

}

Ultima metodă de Document clasa este o tratare a evenimentului pentru ComboBox componente.

comboHandler private function (e: Event): void {

dacă (e.target.selectedItem.data == -1) returnare; urme ("Video de încărcare:" +

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

262 of 362 11/9/2

Page 263: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 263/362

 

e.target.selectedItem.data); "Clipuri / '_player.source = + e.target.selectedltem.data;

}

Această metodă de tratare a evenimentului este folosit pentru a încărca fişierul video, dar numai în cazul în care o valoare date valabile este găsitUn simplu dacă declaraţie este folosit pentru a determina dacă eticheta este se lectat.

dacă (e.target.selectedItem.data == -1) întoarcere;

Asta este tot ce există la această clasă. Aici este finalizată Document clasa:

Pachetul {

flash.display.MovieClip de import; flash.events de import .*; flash.net.URLVariables de import; de imporflash.net.URLRequest, de import flash.net.URLLoader, flash.media.Video de import;

publice VideoPlayer clasa extinde MovieClip {

publice var phpFile: String =

"http://localhost/ ch12/VideoPlayer/videoManager.php "; _player privat var: FLVPlayback;

VideoPlayer funcţia publică () {

_player = acest ['jucator']; acest ['videoListCombo'] addEventListener (.

Event.CHANGE, comboHandler); loadData ();

}

loadData funcţia publică (): 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);

}

Funcţia privat dataLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

acest ['videoListCombo'] addItem (. {

etichetă: "Alegeţi date ...', Video: -1});

pentru fiecare {(element var în xml .. video)

Numele var: String = element .. atribut ('nume'); var src: String = element .. atribut ("src ');

['videoListCombo'] această addItem ({etichetă: nume, date de: src}).;

}

}

comboHandler private function (e: Event): void {

dacă (e.target.selectedItem.data == -1) returnare; urme ("Video de încărcare:" +e.target.selectedltem.data) _player.source = 'Clipuri /' + e.target.selectedltem.data;

}

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

263 of 362 11/9/2

Page 264: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 264/362

 

Următorul pas este de a dezvolta cod PHP care este utilizat pentru a reveni un obiect XML. Pentru acest exemplu, datele video este o matrice statdar puteţi actualiza cu uşurinţă de a utiliza o baza de date MySQL similar cu exemplele anterioare.

= Array ("Video propoziţii 1" de propoziţii Video 2 "de propoziţii video 3" Video propoziţii 4 "depropoziţii Video 5" de propoziţii Video 6

Clipuri $ matrice (matrice (matrice (matrice (matrice (matrice (

color.flv "color.flv" color.flv "color.flv" color.flv "color.flv"

Acest exemplu are doar o singură acţiune, care este pentru a prelua lista de film şi de a construi un obiect XML care urmează să fie transmise înapla Flash.

if ($ action == "getvideos") {

$ Xml = "<videos>";

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

$ Xml .= "\ t <video";

$ Xml .= "name = \" "$ Clipuri. [$ I] [0]" \ ".M; $ Xml .= "src = \" "$ Clipuri [$ i] [1]» \ »»;.. $ Xml.= "playCount = \" ". Clipuri $ [$ i] [2]. »\» »; $ Xml .=" /> \ n ";

}

$ Xml .= "</ Clipuri>";

După ce obiectul XML este creat, un tip de antet XML este outputted, ultimul pas este de a scoate codul actual, XML.

header ("Content-type: text / xml"); de imprimare $ xml;

Asta-i tot codul PHP care este necesar pentru a dezvolta această aplicaţie video. Aici este PHP completat: <? Php

$ Action = (isset ($ _GET ['unu']))? $ _GET ['A']: "";

Clipuri $ = array (

array ("Video matrice de propoziţii (" Video matrice de propoziţii ("Video matrice de propoziţii (" Vidematrice de propoziţii ("Video matrice de propoziţii (" Video propoziţii

1", "Culoare FLV " 0)

2", "Culoare FLV " 0)

3", "Culoare FLV " 0)

4", "Culoare FLV " 0)

5", "Culoare FLV " 0)

6", "Culoare FLV " 0)

if ($ action == "getvideos") {

$ Xml = "<videos>";

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

$ Xml .= "\ t <video";

"Name = \" "$ Clipuri. [$ I] [0]" \ ".M; "Src = \" ". Clipuri $ [$ i] [1]. "\" ";" PlayCount = \MM .

Clipuri $ [$ i] [2]. "\nn, "/> \ N";

header ("Content-type: text / xml") print $ xml;

}

?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

264 of 362 11/9/2

Page 265: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 265/362

 

Un sondaj este o caracteristică foarte comună a oricărui site Web, dar o persoană va folosi de multe ori un serviciu care administrează sondaj loc da crea propria lui sau ei . Problema principală cu această abordare este datele sunt pe serverul altcuiva. Un aspect mai puţin comună este lipsa delibertate cu design de aplicare sondaj.

Construirea PHP si MySQL

Această aplicaţie constă în proiectarea, dezvoltarea PHP, ActionScript şi să dezvolte o aplicaţie completă de votare funcţionale, cum ar fi celprezentat în figura 13.6. Concentra iniţial pe codul SQL care stochează datele sondajului.

Xml $ $ $ xml XML

$ Xml}

$ Xml .= "</ Clipuri>";

FIGURA 13.6

O cerere sondaj completat afişarea unor date mostr ă

Pentru a oferi mai mult de un sondaj, un ID unic este alocat pentru fiecare răspunde la această întrebare determină care este asociat cu.

CREATE TABLE sondaj (

id INT NOT NULL DEFAULT 0, pollValue TEXT NOT NULL,

pollType VARCHAR (2 0) DEFAULT "" NOT NULL,

pollVotes INT (11) NOT NULL,

activă VARCHAR (l) NOT NULL default 1

Această schemă tabel este plasarea întrebările şi răspunsurile într-un tabel pentru simplitate. Cu toate acestea, într-o aplicaţie mai robust aţi dori splasaţi întrebarea şi răspunsurile în două tabele separate pentru o mai bună scalabilitate. Acesta este modul în care face o baza de date mai eficien

După ce SQL este scris, puteţi trece pe la dezvoltarea codului PHP. Această aplicaţie are două acţiuni: capacitatea de a obţine date sondaj şi de avota. Într-o aplicaţie mai avansate v-ar avea cel mai probabil, un editor şi sistemul de evacuare.

Acţiunea şi ID-ul sondaj sunt transmise prin URL-ul, astfel încât prima parte a codului este responsabil pentru stocarea acestor informaţii.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

265 of 362 11/9/2

Page 266: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 266/362

 

$ Action = (isset ($ _GET ['unu']))? $ _GET ['A']: ""; pollID $ = (isset ($ _GET ['id']))? $ _GET ['Id']"";

Următorul pas este de a încărca datele sondajul din baza de date cu ajutorul unui simplu SELECT declaraţie.

$ Sql = "SELECT * FROM poll WHERE id =". $ PollID; $ query = mysql_query ($ sql);

În cazul în care datele sunt încărcate SQL, aceasta este trecut într-o în timp ce bucla care este responsabil pentru construirea de date XML. Odacă declaraţia este utilizată pentru a determina dacă un vot valabil este disponibil, în cazul în care este, xml atribut, se adaugă.

$ Xml = "<poll id=\"" $pollID "\"> \ n..";

în timp ce ($ row = mysql_fetch_array ($ query)) {

$ Xml .= "\ t <element";

Rând $ xml .= "type = \" ". $ ['PollType']." \ "M;.. $ Xml .= "value = \" "$ row ['pollValue']" \ "M;

if ($ row ['pollType'] == "answer") {

$ Xml .= "voturi = \" ", $ row. ['PollVotes']." \ "M;

}

$ Xml .= "/> \ n";

A doua acţiune este să voteze folosind ID-ul sondaj de opinie şi valoarea cauză ca fiind o modalitate unica de a determina valoarea corectă sondapentru a actualiza.

else if ($ action == "vot") {

$ Voturilor = (isset ($ _GET ['v']))? $ _GET ['V']: ""; $ intrebare = (isset ($ _GET ['q']))? $ _GET['Q']: "";

$ = $ Voturi voturi + 1;

$ Sql = "UPDATE poll SET pollValue =". $ Voturi. "UNDE id =".

$ PollID. "ŞI pollValue =". $ Cauză; mysql_query ($ sql);

}

Ultimul pas al PHP este acela de a genera un antet XML şi de ieşire a obiectului creat XML pentru a browser-ului, în cazul în care Flash va încărca

header ("Content-type: text / xml"); de imprimare $ xml;

Aici este fişierul PHP completat că vor fi utilizate în cererea de sondaj: <? Php

necesită "dbconn.php";

$ Action = (isset ($ _GET ['unu']))? $ _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..";

în timp ce ($ row = mysql_fetch_array ($ query)) {

$ Xml .= "\ t <element";

Rând $ xml .= "type = \" ". $ ['PollType']." \ "M;.. $ Xml .= "value = \" "$ row ['pollValue']" \ "M;

if ($ row ['pollType'] == "answer") {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

266 of 362 11/9/2

Page 267: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 267/362

 

$ Xml .= "voturi = \". $ Row ['pollVotes']. "\"M;

}

$ Xml .= "/> \ n";

}

$ Xml .= "</ poll>";

header ("Content-type: text / xml"); de imprimare $ xml;

}

else if ($ action == "vot") {

$ Voturilor = (isset ($ _GET ['v']))? $ _GET ['V']: ""; $ intrebare = (isset ($ _GET ['q']))? $ _GET['Q']: "";

$ = $ Voturi voturi + 1;

$ Sql = "UPDATE poll SET pollValue =". $ Voturi. "UNDE id =".

$ PollID. "ŞI pollValue =". $ Cauză; mysql_query ($ sql);

} ?>

Dezvoltarea ActionScript pentru sondajul

ActionScript pentru aplicarea sondajului este rupt în două bucăţi. Prima piesa este o Document clasă care controlează majoritatea cererii devotare. Al doilea este un PollItem care este duplicat pentru fiecare răspuns în sondaj încărcat.

Datele care au fost încărcate de la PHP este returnat în format XML. Aici este un e şantion de răspuns care:

<poll> <element />

<Element de

<Element de

<Element de

<Element de </ poll>

Prima clasă să se concentreze asupra este PollItem deoarece aceasta va fi încărcat de către Document de clasă, iar acesta este urmatorul paspentru a lucra într-o ordine logică. Aici este scheletul de clasă pentru PollItem:

Pachetul {

publice clasa PollItem extinde MovieClip {

PollItem funcţia publică () {} funcţia publică a obţine date (): Object {}

Funcţia setData publice (I: uint, un: String, v: uint): void {}

}

}

Prima parte a clasei este variabilele, care, în această clasă sunt id, răspunde, şi vot valoare pentru fiecare instanţă element sondaj.

var privat ID-ul: uint; answer privat var: String; voturi privat var: uint;

Aceasta clasa de fapt, a avut doar două metode. Prima metoda este un getter care returnează un obiect umplut cu poziţia de date.

funcţiei publice de a obţine date (): Object {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

267 of 362 11/9/2

Page 268: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 268/362

 

întoarcere {id: ID-ul, răspunde: "", voturi: voturile};

type = "cauză" value = "Care este culoarea ta preferată?"

type = "answer" value = "Black" de voturi = "0" />

type = "answer" value = "albastru" de voturi = "0" />

type = "answer" value = "Orange" voturi = "0" />

type = "answer" value = "Red" de voturi = "0" />

A doua metodă este responsabil pentru atribuirea de date pentru fiecare element sondaj. Variabilele stocate sunt toate se tate la privat, carepermite dezvoltatorului de control al accesului şi să păstreze constantă pe tot parcursul procesului de aplicare întregul.

Funcţia setData publice (I: uint, un: String, v: uint): void {

ID-ul = i; answer = a; voturi = v;

}

Asta este tot ce există la PollItem clasă, care este prezentat aici completă:

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import;

publice clasa PollItem extinde MovieClip {

var privat ID-ul: uint; answer privat var: String; voturi privat var: uint; PollItem funcţia publică (){}

funcţiei publice de a obţine date (): Object {

întoarcere {id: ID-ul, răspunde: "", voturi: voturile};

}

Funcţia setData publice (I: uint, un: String, v: uint): void {

ID-ul = i; answer = a; voturi = v;

}

}

}

Clasa final este Document clasă, care este anexat la etapa de stabilire a valorii în Property Inspector. Aici este scheletul clasa:

Pachetul {

Sondaj publice clasa extinde MovieClip {

Sondaj funcţia publică () {}

loadPollData funcţia publică (): void {}

funcţiei publice dataLoaded (e: Event): void {}

}

Prima metodă se numeşte de la constructor şi este responsabil pentru încărcarea datelor sondajului în format XML bazat pe sondaj id care estetrecut într-o EEG cerere.

loadPollData funcţia publică (): void {

var urlVariables: URLVariables = URLVariables noi; urlVariables.a = "getpolldata"; urlVariables.id =

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

268 of 362 11/9/2

Page 269: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 269/362

 

POLL_ID;

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = urlVariables;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE, dataLoaded);urlLoader.load (urlRequest);

}

După ce datele sunt încărcate, un apel la dataLoaded () Metoda se face, care este responsabil pentru afişarea datelor sondajului, utilizândPollItem instanţe.

Răspunsul de la serverul este trimis în format XML, care este analizat şi utilizat pentru a construi grafice sondaj. Fiecare element al datelorsondajului sunt stocate ca un atribut, mai degrabă decât un nod într-o încercare de a menţine codul de uşor.

tip var: String = element .. atribut ("tip"); valoarea var: String = element .. atribut ("valoare"); vartotal: uint = uint (. xml. atribut ("totale"));

tip variabilă este utilizată pentru a determina dacă un element este o întrebare sau un răspuns.

în cazul în care (tip == "cauză") {

. acest ['questionTxt'] = textul valoare; continua;

}

în cazul în care (tip == "răspuns") {

voturi var: uint = uint (. item. atribut ("voturi"));

}

pollltem stochează variabile de instanţă PollItem clasă, care conţine grafică pentru fiecare element de sondaj. Procentul se determină cu câtematematica foarte de bază, care împarte numărul total de vot de către şi înmulţeşte cu 100, care să genereze un procent.

var pollItem: PollItem = new PollItem ();

pollItem ['percentTxt']. text = Math.round (voturi / total * 100) +

Q al II-lea, al II-lea.

% /

pollItem ['barMC'] = lăţimea (voturi / totale * 100) * 4.;

Ultimul pas în metoda este pentru alinierea fiecare pollItem, ataşarea pollItem la lista de afişare, şi în cele din urmă adăugând lapollltems matrice.

pollltem.y = (pollltems.length * (pollltem.height + 20));

container.addChild (pollltem); pollltems.push (pollltem);

În acest moment, Document clasă este construit, şi este prezentată în întregime aici:

Pachetul {

flash.display.MovieClip de import; flash.events de import .*; flash.net.URLVariables de import; de imporflash.net.URLRequest, flash.net.URLLoader de import, de import flash.text.TextField;

Sondaj publice clasa extinde MovieClip {

publice var POLL_ID: uint = 1; var publice phpFile: String =

"http://localhost/ch12/Poll/poll.php";

container publice var: MovieClip; pollItems publice var: Array;

Sondaj funcţia publică () {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

269 of 362 11/9/2

Page 270: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 270/362

 

pollItems = new Array (); container = new MovieClip (); container.x = 15; container.y = 100;

addChild (container);

loadPollData ();

}

loadPollData funcţia publică (): 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);

}

funcţiei publice dataLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target); var xml: XML = new XML (urlLoader.data);

pentru fiecare {(element var în xml .. element)

var tip: String = element .. atribut ("tip"); valoarea var: String = element .. atribut ("valoare"); vartotal: uint =

uint (xml. atribut ("totale").);

în cazul în care (tip == "cauză") {

. acest ['questionTxt'] = textul valoare; continua;

}

în cazul în care (tip == "răspuns") {

voturi var: uint =

uint (. item. atribut ("voturi"));

}

var pollItem: PollItem = new PollItem (); pollItem ['percentTxt'] = textul.

Math.round (voturi / total * 100) + "%"; pollItem ['barMC'] = lăţimea (voturi / totale * 100) * 4.;

pollItem.y =

(PollItems.length * (pollItem.height + 20));

container.addChild (pollItem); pollItems.push (pollItem);

}

}

}

În acest moment, aţi văzut o gamă largă de aplicaţii din lumea reala, dar nu există încă unul care nu a fost vorbit despre. Asta, desigur, ar fi un

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

270 of 362 11/9/2

Page 271: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 271/362

 

sistem de management de conţinut. Un sistem complet de management al conţinutului ar fi un proiect masiv, dar această secţiune se concentreazăasupra unui aspect al cererii.

Editorul de fişier, care este utilizat pentru a adăuga şi edita fişiere, este o piesă esenţială pentru orice sistem de management de conţinut. Esteposibil ca la un moment dat administratorul va avea nevoie de actualizări efectuate. Mai degrabă decât sa descarcati materialul sursă, este mult meficient de a utiliza un editor de fişier dinamic.

Cererea pentru această secţiune este doar că - un editor de fişier dinamic care este conectat la PHP pentru a salva de fapt şi de încărcare a fişiereloÎn mod normal, se poate utiliza Flash pentru a încărca fişiere, dar PHP ofera posibilitatea de a încărca fişiere care nu sunt stocate în rădăcină WebAceasta este o idee bună pentru fişierele şablon, pentru că nu au nevoie pentru a fi accesate direct de către un oaspete.

Designul a editorului de fişiere este o bază Textarea, Remitere buton, Textfield, şi ComboBox. Nimic interesant faptul că pentruproiectarea editorului de fişiere, în schimb, carnea real al cererii se încadrează în codul ActionScript si PHP.

Incepand cu cod PHP vă permite să testaţi porţiunea Flash pe măsură ce începeţi să-l dezvolte. PHP este de fapt foarte simplu pentru acestexemplu. În primul rând, verificaţi pentru un fişier valid, deoarece, dacă sunteţi de economisire sau de încărcare, aveţi nevoie de un fişier valid.

if (empty ($ _GET ['file'])) {

$ File = '. / Files / ". $ _GET ['File'];

}

După ce determina există un fişier valid, următorul pas este de a verifica dacă acţiunea este gol. În cazul în care acţiunea este necompletată, codulva încărca automat acţiunea în cazul în care acţiunea conţine o valoare devine comparativ folosind un interior dacă declaraţie.

if ($ _GET ['actiune'] == "salva") {

}

else {

}

Acest exemplu doar permite încărcarea şi salvarea fişierelor. Într-o aplicaţie mai robustă v-ar dori cel mai probabil să aibă o acţiune şterge sau amuta, de asemenea.

salva acţiune este responsabil pentru încărcarea fişierul solicitat, înlocuirea textului existent, şi în cele din urmă resaving fişier. Este important sreţineţi că exemplul este cu vedere spre o piesă crucială pentru orice aplicaţie din lumea reală, care este la adăpost de date care este trimis de la

Flash. Aţi putea dori, de asemenea, să adăugaţi o cheie de acces, astfel de cod arbitrar nu pot fi rulate pe din browser prin intermediul unui EEGcerere.

Variabila $ FileContents sunt preluate de la EEG datele trimise de catre Flash.

FileContents $ = $ _GET ['fileContents'];

Fişierul este încărcat folosind fopen cu acces scriere stabilite la suprascrie. Aceasta înseamnă că conţinutul original este scos si numai nouaversiune este salvat.

Mâner $ = fopen ($ file, 'w +');

Odată ce fişierul este încărcat, o chemare la fwrite () se face, care scrie de fapt, conţinutul la dosar şi salvează fişierul. Ultimul pas al salvaacţiuni este de a închide fişierul de resurse şi a elibera memorie.

fwrite ($ mâner, $ fileContents); fclose ($ handle);

De încărcare a unui fişier este mult mai uşor. Practic, vă referire la un fişier de încărcare şi conţinutul utilizând file_get_contents () , Carereturnează întregul dosar ca un şir de caractere, după cum se arată în figura 13.7.

$ LoadedFile = file_get_contents ($ file); de imprimare "fileContents =". $ LoadedFile;

Aici este finalizată php fişier, care ar trebui să fie salvate cu numele fileManager.php:

<? Php

error_reporting (0);

if (empty ($ _GET ['file'])) {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

271 of 362 11/9/2

Page 272: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 272/362

 

$ File = '. / Files / ". $ _GET ['File'];

if ($ _GET ['actiune'] == "salva") {

FileContents $ = $ _GET ['fileContents'];

Mâner $ = fopen ($ file, 'w +'); fwrite ($ mâner, $ fileContents); fclose ($ handle);

}

else {

$ LoadedFile = file_get_contents ($ file); de imprimare "fileContents =". $ LoadedFile;

}

Următorul pas este de a dezvolta ActionScript. Partea de design a fost creat anterior astfel încât s ă puteţi muta dreptul de a codului.

Primul pas este de a defini variabilele utilizate pentru acest exemplu. var

phpFile: String = "http://localhost/ch12/FileEditor/fileEditor.ph p ";

fişiere var: Array = ['sample.txt', 'anotherfile.txt ",

"Readme.txt"]; var storedFileData: String;

FIGURA 13.7

Conţinutul fişierului brut a trecut de la PHP aşa cum se vede dintr-un browser Web

După ce variabile sunt definite, puteţi trece pe la funcţiile. Prima funcţie este responsabil pentru popularea combo fişierul caseta listă.

populateFileList function (): void {

}

addItem Metoda de caseta combo acceptă un obiect ca un argument, care defineşte datele de pe etichetă şi de date. Pentru aceasta aplicatie,numele fişierului este utilizat atât pentru etichetă şi valoarea datelor.

pentru (var i: uint = 0; i <files.length; i + +) {

fileListCombo.addItem ({eticheta: imagini [i], de date: fişiere de [i]});

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

272 of 362 11/9/2

Page 273: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 273/362

 

}

Metoda loadFile se numeşte atunci când loadbtn se face clic. Acest handler stabileşte o cerere de fişier cu o variabilă PHP fişier careutilizează pentru a încărca fişierul în sine.

Funcţia loadFile (e: MouseEvent): void {

variabile var: URLVariables = new URLVariables (); variables.file = fileListCombo.selectedItem.data;

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE, fileLoaded);urlLoader.load (urlRequest);

}

După Fişierul solicitat este încărcat şi PHP returnează conţinutul, acesta este trimis în bodyTxt Textarea şi, de asemenea, săstoredFileData variabilă. Această variabilă este utilizată pentru a cache rezultatele nemodificat. Puteţi reveni la aceste rezultate mai târziu,făcând clic pe butonul Reset.

Funcţia fileLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target);

variabile var: URLVariables = new URLVariables (urlLoader.data);

 bodyTxt.text = unescape (variables.fileContents); storedFileData = bodyTxt.text;

}

Metoda de resetare înlocuieşte pur şi simplu conţinutul de organism, cu datele nemodificat care sunt stocate ca fişierul original este încărcat.

Funcţia resetHandler (e: MouseEvent): void {

 bodyTxt.text = storedFileData;

}

Ultima metodă este nevoie în această cerere este responsabil pentru salvarea conţinutului editat. Înainte de date este salvată, aceasta este memora în cache, care elimină nevoia de a reîncărca de date.

Funcţia saveHandler (e: MouseEvent): void {

Organismul var: String = bodyTxt.text; storedFileData = organism;

}

Variabilele a trecut la PHP defini acţiunii, numele fişierului, şi conţinutul prime, care vor înlocui datele de fişiere existente. Numele fişierului estcolectate de la ComboBox prin accesarea selectedItem obiect.

variabile var: URLVariables = new URLVariables (); variables.file = fileListCombo.selectedItem.data; variables.action = "a salva"; variables.fileContents = organism;

Acest lucru special, URLRequest nu are nevoie de un ascultător eveniment, deoarece procesul de economisire se întâmplă pe cont propriu şi se

finalizează odată ce PHP primeşte toate fileContents.

 Într-o aplicaţie la distanţă, este o idee bună de a notifica utilizatorul a procesului de economisire, deoarece un fişier foarte mare poate avea nevoie timp pentru a salva.

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader (); urlLoader.load (urlRequest);

Sarcina ultima ActionScript e să vă înregistraţi pentru evenimentele butoane şi fac un apel la populateFileList () funcţie pentru a prefillfişierul ComboBox.

/ / Inregistrare Evenimente

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

273 of 362 11/9/2

Page 274: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 274/362

 

loadFileBtn.addEventListener (MouseEvent.CLICK, loadFile); saveBtn.addEventListener (MouseEvent.CLICK,saveHandler); resetBtn.addEventListener (MouseEvent.CLICK, resetHandler); populateFileList ();

FIGURA 13.8

Editorul de fişier completat cu un fişier mostr ă încărcat

Punerea în aplicare, după cum se arată în figura 13.8, este acum finalizată. Următoarele este complet codul ActionScript source:

var

phpFile: String = "http://localhost/ch12/FileEditor/fileEditor.ph p ";

fişiere var: Array = ['sample.txt', 'anotherfile.txt ",

"Readme.txt"]; var storedFileData: String;

populateFileList function (): void {

pentru (var i: uint = 0; i <files.length; i + +) {

fileListCombo.addItem ({eticheta: imagini [i], de date: fişiere de [i]});

}

}

Funcţia loadFile (e: MouseEvent): void

{

variabile var: URLVariables = new URLVariables (); variables.file = fileListCombo.selectedItem.data;

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE, fileLoaded);urlLoader.load (urlRequest);

}

Funcţia fileLoaded (e: Event): void {

var urlLoader: URLLoader = URLLoader (e.target);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

274 of 362 11/9/2

Page 275: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 275/362

 

variabile var: URLVariables = new URLVariables (urlLoader.data);

bodyTxt.text = unescape (variables.fileContents); storedFileData = bodyTxt.text;

}

Funcţia resetHandler (e: MouseEvent): void {

bodyTxt.text = storedFileData;

}

Funcţia saveHandler (e: MouseEvent): void {

Organismul var: String = bodyTxt.text; storedFileData = organism;

variabile var: URLVariables = new URLVariables (); variables.file = fileListCombo.selectedItem.data;variables.action = "a salva"; variables.fileContents = organism;

var urlRequest: URLRequest = new URLRequest (phpFile); urlRequest.data = variabile;

var urlLoader: URLLoader = new URLLoader (); urlLoader.load (urlRequest);

}

/ / Inregistrare Evenimente

loadFileBtn.addEventListener (MouseEvent.CLICK, loadFile); saveBtn.addEventListener (MouseEvent.CLICK,saveHandler); resetBtn.addEventListener (MouseEvent.CLICK, resetHandler);

populateFileList ();

În acest capitol aţi învăţat cum să dezvolte avansate aplicatii din lumea reala, cum ar fi utilizarea Flash şi PHP pentru a construi un editor de fişieplayer video, şi să monitorizeze site-ului.

În timp ce în curs de dezvoltare monitorul site-ul aţi învăţat evenimente noi, care fac mai usor de a lucra cu date greşite, precum şi legarea PHP,MySQL, Flash şi împreună. Cererea a fost îmbunătăţită prin adăugarea de acţiuni particularizate, cum ar fi procesul de e-mail atunci cândadministratorul unui site nu răspunde.

În aplicaţia de votare aţi învăţat cum să dezvolte o aplicaţie completă folosind Flash ca mediu de afişare. Cererea totală a fost scrisă pentru a fifoarte scalabile şi, de fapt, schimbarea variabile ID-ul in clasa de documentul va înc ărca o întrebare sondaj de opinie cu totul diferit (cu condiţiaacesta există).

La acest punct, ar trebui să înţeleagă pe deplin modul de a dezvolta aplicatii in lumea reala, care sunt uşor de actualizat şi de întreţinut. De fapt,majoritatea din acest capitol pot fi adăugate împreună pentru a crea un sistem de management sau alte aplicaţii bazate pe modul.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

275 of 362 11/9/2

Page 276: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 276/362

 

Wgăină construirea unei cereri, este aproape sigur că unele element va opri de lucru sau, poate, niciodată de lucru de la început. Acest lucru poa

fi un punct de la orice bonus de timp, un ciclu de dezvoltare ar putea avea dispare. Ideea este de a crea aplicaţia dvs. cu debugging în minte.Adăugarea de comentarii de fapt, poate accelera de depanare pe linie.

Desigur, adăugând depanare cum te duci este similar la scrierea unui contur. Te gândeşti la el aşa cum î ţi dai seama că e prea târziu. Cheia nu estde a lasa un proiect de a ajunge la acest punct. Acest capitol se concentrează pe cel mai bun mod pentru a depana aplicaţii Puteţi începe cuinstrumentele de built-in şi apoi progresul unor aplicaţii externe şi practici care îl fac mai puţin dureros.

Să începem cu depanarea uita la o aplicatie PHP. În mod implicit, PHP nave cu un anumit nivel de depanare activat. Acesta este configurat pentruraporta erorile fatale (accidente de program) şi avertismente (fişierele lipsă şi argumente). Acest nivel de raportare a erorilor este bine pentru unserver de dezvoltare, dar o problemă majoră cu instalare implicit este că erorile sunt imprimate pe ecran şi de fiecare utilizator le poate vedea.

Opţiune alternativă şi mai sigur este de a permite eroare de logare la un fişier jurnal de eroare similar cu modul în Apache este configurat.Activarea de logare de eroare se face prin editarea php.ini fişier. Dacă nu aveţi acces ca administrator disponibile pe server-ul dvs., aveţi nevopentru a contacta pe cineva care are acest acces. php.ini fişier este de obicei situat în / Etc / director de pe UNIX şi C: \ WINDOWS \,care este, în general, accesibile numai de către administratorul de server.

 În acest capitol

Utilizarea de raportare a erorilor în PHP

Utilizarea urme in Flash

Aplicaţii alternative debugging

php.ini Fişierul este stocat în locaţii diferite, în funcţie de configuraţia server. Cu toate acestea, mai frumos lucru este, PHP pot s ă vă spun unde

este stocat. Pur şi simplu să creaţi un fişier nou, numele acesta info.php, şi adăugaţi codul de mai jos:

<Php phpinfo ();?

Când executaţi acest fişier într-un browser vă sunt prezentate cu o multitudine de informaţii specifice pentru versiunea curentă de una dintrepietrele de primele informaţii PHP este ini cale, care arată ceva de genul:

Fişier de configurare (php.ini) Path / usr/local/php5/lib/php.ini

p, T .-. , M odificarea incorectă php. fişier ini poate ave a ca rezultat nu funcţionează serve rul. Utilizaţi CAU-

P ™ ™ ^ ^1"™ ™ ™ TION la editarea acest fişier.

După ce aţi găsit cu succes php.ini fişier, deschideţi-l în editorul de texte favorit sau de a folosi vi dacă utilizaţi linia de comandă. Utilizarea

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

276 of 362 11/9/2

Page 277: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 277/362

 

VI, o comandă pentru a deschide un fişier, arata ca acest lucru:

vi / usr/local/php5/lib/php.ini

Cu fişierul deschis, parcurgeţi până când ajunge la o secţiune care arată ca aceasta:

; Jurnal erori în fişier specificat. ; Error_log = numefişier

Liniile care încep cu ; (Punct şi virgulă) sunt observaţii în ini fişiere. După cum puteţi vedea, error_log nu este definit şi, prin urmare nu esde economisire pentru orice fişier. Metoda pentru a permite această opţiune este de a elimina punct şi virgulă (; ) Şi înlocuiţi filename cu o ca

de fişier şi numele real, cum ar fierror_log = / Usr / local / debug / php_errors

După ce efectuaţi modificările şi salvaţi php.ini fişier, trebuie să reporniţi server-ul Web, în scopul de a permite PHP pentru a citi ini fişier.Acest lucru este necesar deoarece PHP doar citeşte ini fişier (e) la pornire pentru a maximiza performanţa.

După ce începe să genereze erori fişierul jurnal începe să se umple. Dacă citiţi fişierul jurnal ar trebui să vedeţi siruri de caractere, cum ar fiurmătoarele. Cel mai probabil, erorile veti primi va spune de fapt tu ce este greşit, pentru că o eroare care furnizează informaţii incorecte, nu esteadevărat faptul că utile.

[18-Jul-2007 20:51:17] PHP Fatal error: file.php pe linia 30 [09-Aug-2007 21:23:37] PHP Fatal error:file.php pe linia 13 [03-Nov-2007 23:10:21] PHP Fatal error: file.php pe linia 56

Un server de producţie ar trebui să log numai erorile, ceea ce înseamnă scoate erorile ar trebui să fie, de asemenea, cu handicap în php.ini fişie

Deschideţi ini fişier şi schimbare output_errors valoare De pe şi reporniţi Apache din nou.

display_errors = De pe

Afiseaza de erori pentru depanare

Cu serverul de logare în siguranţă erori fără afişarea lor pentru utilizatorii generale, poti sa te uiti la ceea ce de raportare a erorilor în PHP pot ofedezvoltator. Din punctul de vedere al depanare, raportarea erorilor în PHP este foarte robust. Nu sunt erori standard, cum ar fi erori fatale, fi şierelipsă, avertismente, şi aşa mai departe. Chiar mai important este abilitatea de a crea propria eroare.

În scopul de a crea o eroare particularizate pe care pur şi simplu apel trigger_error (), care are două argumente. Primul argument este şide eroare pentru a afişa şi de-a doua (opţional) argument este ceea ce nivel de eroare de eroare ar trebui să fie raportate ca. Aici este un simplutrigger_error apel:

trigger_error ("Nu pot încărca inexistente ghidul de date", E_USER_WARNING);

Variabile depanare

Depanarea codului nu este întotdeauna despre erorile de sintaxă, de fapt, cele mai multe ori nu este. Deseori veţi găsi o ieşire variabilă de aplicarsau nu iniţializat, care nu va cauza o eroare. Desigur, PHP are mai multe func ţii şi metode care sunt adaptate la depanare.

Probabil ca ai folosit imprimare sau ecou înainte, dar cred sau nu aceste funcţii sunt de fapt foarte folositor pentru depanarea unei cereri.Practic, puteţi urmări stele variabile şi a obţine o idee mai buna a cum un program funcţionează.

Matrice depanare

Lucrul cu o matrice este un pic diferit, deoarece o simplă de imprimare se va afişa Array. Cu toate acestea, aveţi posibilitatea să utilizaţiprint_r () funcţie pentru a vizualiza o matrice. Acesta va afi şa chiar un tablou într-o matrice şi aşa mai departe, de asemenea, cunoscut ca unarray multidimensional. Aici este un rezultat eşantion afişate din print_r apel:

Array (

[0] => Array (

[O] => 1

)

[1] => Array (

[Doi] => 2

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

277 of 362 11/9/2

Page 278: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 278/362

 

)

)

 Înţelegerea nivelurile de eroare

În timp ce utilizaţi trigger_error este posibil să observaţi că al doilea parametru este o constantă. Această constantă defineşte un anumit nivde eroare. PHP oferă o gamă largă de niveluri de eroare şi chiar permite dezvoltator pentru a modifica nivelul cum progreseaza cod.

Iată cum se modifică pragmatic nivelul de eroare, în acest caz, acest site chiar INFORMĂRI obţine raportate:

error_reporting (E_ALL); Tabelul 14.1 prezinta niveluri de eroare şi o descriere a ceea ce se referă la nivelul de eroare.

TABELUL 14.1

Niveluri de eroare şi descrieriEroare Descriere

E_ _ERROR Erori fatale rulare. Acestea indica erorile care nu pot fi recuperate de la, cum ar fi o problemă de alocare de memorie. Executareascript-ul este oprit.

E_ _WARNING Atenţionări Runtime (erori de non-letală). Executarea script-ul nu este întreruptă.

E_ _PARSE Compila în timp parse erori. Erorile Parse ar trebui să fie singurul beneficiu generat de parser.

E_ _NOTICE Runtime anunţuri. Indică faptul că script-ul întâlnit ceva care ar putea indica o eroare, dar ar putea întâmpla, de asemenea, în cursulnormal de a rula un script.

E_ _CORE_ERROR Erori fatale care apar in timpul pornirii iniţiale PHP. Aceasta este ca o E_ERROR, cu excepţia faptului că este generat de nucleulPHP.

E_ _CORE_WARNING Avertismente sau erori nonfatal care apar în timpul pornirii ini ţiale PHP. Aceasta este ca o E_WARNING, cu excepţia faptului că esgenerat de nucleul PHP.

E_ _COMPILE_ERROR Fatal compilaţi-timp erori. Aceasta este ca o E_ERROR, cu excepţia faptului că este generat de motorul Zend Scripting.

E_ _COMPILE_WARNING Compila în timp avertismente sau erori nonfatal. Aceasta este ca o E_WARNING, cu excepţia faptului că este generat de motorulZend Scripting.

E_ _USER_ERRORGhid de utilizare generate de mesaj de eroare. Aceasta este ca o E_ERROR, cu excepţia faptului că este generat în cod PHP prinutilizarea funcţiei PHP trigger_error ().

E_ _USER_WARNINGGhid de utilizare generat un mesaj de avertizare. Aceasta este ca o E_WARNING, cu excepţia faptului că este generat în cod PHPprin utilizarea funcţiei PHP trigger_error ().

E_ _USER_NOTICEGenerate de utilizatori mesaj Notă. Aceasta este ca o E_NOTICE, cu excepţia faptului că este generat în cod PHP prin utilizareafuncţiei PHP trigger_error ().

E_ STRICTĂ Runtime anunţuri. Permite să aibă PHP sugera modificări în codul dvs., care va asigura cele mai bune interoperabilitate şi

compatibilitate a transmite codul.E_ _ALL Toate erorile şi, ca avertismente susţinut, cu excepţia nivelului de E_STRICT în PHP <6.

După cum puteţi vedea, PHP oferă o mulţime de opţiuni de depanare dincolo de scoate de bază şi de exploatare forestieră. De fapt, aveţiposibilitatea să particularizaţi o mulţime de eroare de manipulare găsite în php.ini fişier pentru a depana alte aplicaţii diverse.

Dacă doriţi să obţineţi un nivel serios de depanare şi codul de vizionarea instrumente, atunci este posibil să doriţi să aruncăm o privire la ZendStudio IDE (a se vedea figura 14.1), construit pe partea de sus a cadrului Eclipse. Această aplicaţie nu este freeware, cu toate acestea, este cel mairobust şi editor PHP debugger / profiler pe piaţă la momentul redactării acestui material. O licenţă pentru Zend studio variază de la 150 dolari la300 dolari, în funcţie de versiunea ati cumparat.

Zend Studio nu este singurul editor PHP, dar aceasta are debugger cele mai robuste. În plus, pute ţi folosi PHPEclipse care are caracteristici similarecu Zend. Cu toate acestea, procesul de instalare este un pic mai mult implicate.

Zend Studio IDE cu panouri vizibile depanare

«E PHP Debug ■ ExampleProjecM.php - Zend Studio Fişier Editare sursăRefactor Navigare căutare

Neon

Proiect Run Fereastra

Ajutor 

 j ^ r -? o - - ft \ ■ P ^ <P  Eu PHP depanare w

TS- Debug, sT \ M = Variabi le £ '® e Valori le cr i tice j [p] Paramete Stac! ■ □ [Pj Debug Ou £ JS) Browser | "B

SFE B SL ^ JL =!> | ^ m Eu

9 E 4 [PHP Script] Nume Valoare -g-S? Aplicaţ ie PHP V {acţ iune (Şir: 0)

: O OI-® 4Php (suspendat). EI ♦ Jvideos Array[6]

= 4.php la linia 54 El ^0 Array[3]

»Un fisier CAProgram \ Zend \ Zend Studio Neon - Fii o plugi \ 0 (Şir: 14) Video Proba 1

1 * 2 (Şir: 9) color.flv(int) 0 Q

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

278 of 362 11/9/2

Page 279: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 279/362

 

9 V 1 Array[3] IS

<I >

< >

0 4.php £3\JEJ DebugDemo.php

În timp c e 42 (Srow = wysql aduca array ($ interogare) SI

43 i

44 $ xml .= '^ c <video ";

45 .= • • name = \ "". $ Row ['n IMM-urilor "]

1 46 Sxml .= "src = \" "irow [." Sr

47 Sxrnl .= "playCount = \" "5R ¡48 5xml .= • • /> \ n ".;1

playCount1

] . "\ ""; Ij49 > -I

Sarcini 3 Consola S] o x% < -H Pl^ L̂ L DacăS "

4 [ PH P Sc ri pt] C: \ Pr og ram Fi les \ Zend \ Zend St udi o N eon Beta \ p ug ins \ or g.z end. php.deb U g. de b u g ge r .wi N32. «86 5.2.10. v2007090

| <I 1 J |> |

U

Similar cu PHP, Flash ofera un set destul de util de instrumente pentru depanare. De fapt, IDE Flash dispune de un sistem complet de depanareconstruit chiar în cazul în care vă puteţi inspecta rapid codul de utilizator (a se vedea figura 14.2), se aplică punctele de ruptură, şi pasul în jurulvalorii de un bloc de cod pentru a detalia şi de a găsi un bug.

Figura 14.1

FIGURA 14.2

Aici este panoul pe care este folosit pentru a inspecta o cerere.

Flash are, de asemenea, un panou de ieşire (a se vedea figura 14.3), care este utilizat pentru a vizualiza urmă () declaraţii sunat din codul. Aurmă Declaraţia este o funcţie de bază, care acceptă un şir ca argument. Aceasta este apoi trimis la panoul de ieşire şi oferă capacitatea de a afişaelementele unei cereri, astfel cum este în execuţie.

trace ("Aici este un mesaj foarte depanare de bază");

O întrebare comună cu utilizarea situaţiile urmă este vor continua la ieşire într-un film realizat? Ei vor, dar puteţi selecta "Omitere acţiunile urmeopţiune în caseta de dialog Publicare Setări pentru al dezactiva.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

279 of 362 11/9/2

Page 280: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 280/362

 

Metoda de urmărire simpla poate fi util cand se depaneaza exemple de cod de bază. Cu toate acestea, pentru mai multe aplicaţii complet, cel maiprobabil veţi dori să construiască managerul dumneavoastră depanare proprii. Acest lucru se poate face destul de simplu.

FIGURA 14.3

Acesta este un exemplu a panoului de ieşire aşa cum se vede in Flash.

În primul rând, a crea un Textarea componentă pe scena cu un nume de instanţă de debugTxt. Apoi creaţi o funcţie urmă particularizat careva popula acel Textarea. Utilizarea appendText Metoda va adăuga la textul existent, mai degrabă decât ştergere.

Funcţia trasor (debug: String): void {

debugTxt.text.appendText (depanare);

}

Aţi putea crea, de asemenea, o clasă particularizat care orice parte a codului este capabil de a suna. Cu toate acestea, veţi găsi rapid că liniastandard nu este perfect. De exemplu, nu ave ţi posibilitatea să clar pragmatic ecran sau prioritate pe loc anumite evenimente.

De fapt, depanare în Flash nu este la fel de avansat ca posibilităţile în PHP, dar încă se face treaba.

În acest moment, aţi văzut cât de Flash poate fi utilizată pentru a depana o aplicaţie şi de modul în care PHP poate fi folosit pentru aceeaşi sarcinăAcum uită-te la cateva terţ opţiuni şi biblioteci pentru a face acest proces mai uşor.

Majoritatea datelor au trecut înainte şi înapoi în Flash se face acest lucru utilizând solicită, de la distanţă, de asemenea, cunoscut sub numele deremoting sau remoting Flash. Această metodă de schimb de date a devenit destul de populare, dar nu se pretează a fi depanate sau urmarit. O padin acest lucru se datorează faptului este un obiect de sine stătător şi, de asemenea, modul Flash interacţionează cu o sursă de remoting.

Folosind un instrument de terţă parte sau pe nume Charles Charles Web Debugging Proxy, care poate fi desc ărcat de la http://xk72.com

/charles/, face foarte simplu să se uite la aceste date, deoarece este trecut în jurul valorii. Charles nu este gratuit, dar nu oferă un demo compLa momentul acestei scrieri, o licenţă a fost de $ 50. Pentru mine, ea merită.

Figurile 14.4 şi 14.5 de date remoting arată şi cum se arată la Charles.

FIGURA 14.4

Aici este faptul că cererea este trimis la serviciul remoting.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

280 of 362 11/9/2

Page 281: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 281/362

 

FIGURA 14.5

Aici este interfata standard Charles arată un raspuns de la un sistem XML remoting.

Un alt instrument de mare este un plug-in pentru browser-ul Firefox numit LiveHTTPHeaders c ă ceasuri traficul în reţea. Dezavantajul parţială laaceastă aplicaţie este numai ceasuri de trafic browser-ul. Dacă sunteţi de testare sau depanare de aplicare la nivel local nu se va vedea acesteapeluri.

Mai multe informaţii despre LiveHTTPHeaders pot fi gasite la http://livehttpheaders. mozdev.org /.

Subiectul ultima din acest capitol va fi construirea unui nou urme care permite culori, precum şi alte caracteristici. Această alternativă urmă esteconstruit ca un SWF de sine stătătoare şi poate fi apelat de către orice alte SWF în acelaşi domeniu (local este aparatul dumneavoastră). Codul dinspatele această alternativă urmă se bazează pe LocalConnection clasă, care este o clasa precompilat care permite mai multor filme pentru apartaja de comunicaţii, atât timp cât acestea sunt în acelaşi domeniu. Prima parte a codului este responsabil pentru construirea obiectuluiconexiune locală şi înregistrarea callback funcţie.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

281 of 362 11/9/2

Page 282: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 282/362

 

var receivingLC: LocalConnection = LocalConnection noi (); receivingLC.client = acest lucru;

debug funcţie (str: String, nivel: String): void {

var debugLevel: String =

((Typeof (nivel) == "undefined"), "NORMAL":? Nivel); var de culoare: String = null;

comutator (debugLevel) {

caz "NORMAL":

color = "# 000000"; break; caz "EROARE":

color = "# E60000"; break; caz "NOTĂ":

color = "# 77C0FD"; break; caz "AVERTISMENT":

color = "# FBF4 00 '; break;" răspuns "procedură: color =" # 27C201 "; break; caz" REGISTER ": color =" FC8AFF "; break; caz" CLASA ":

color = "# FD77 9F"; break; caz "atenţie": = culoare '# FF66 00'; break; caz "urgente":

color = "# FF00 00 '; break; caz" statut ":

color = "# CCFF00"; break;

}

dacă (de culoare == null) {

color = "# 000000";

}

debugTxt.htmlText + = ("<font color = \" "+ color +" \n>n + Str. + "</ font>" + "\ n");

var scrollPos: uint = debugTxt.verticalScrollPosition var maxScroll: uint =debugTxt.maxVerticalScrollPosition;

dacă (scrollPos + 5> maxScroll) {

debugTxt.verticalScrollPosition = maxScroll; / / debugTxt.scroll = max_scroll;

}

};

După callback şi obiectul conexiune locală sunt toate construite, este timpul pentru a începe să facă legătura. Acest lucru se face prin apelareaconnect () metoda de instanţă locale obiect de conectare.

receivingLC.connect ("remoteDebug");

Restul codului este pur pentru afişarea ferestrei depanare şi nu este necesară în scopuri de funcţionalitate.

Funcţia clearHandler (e: MouseEvent): void {

debugTxt.htmlText = "";

}

clearBtn.addEventListener (MouseEvent.CLICK, clearHandler); / / Redimensionarea Cod

stage.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 =

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

282 of 362 11/9/2

Page 283: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 283/362

 

(stage.stageWidth - 12) - clearBtn.width; clearBtn.y = (stage.stageHeight - 12) - clearBtn. înălţimea;})

Asta-i tot codul necesar pentru a construi o alternativă urmă, şi folosindu-l necesită cod foarte puţin. Apelul la l inia particularizată arată un pic caaceasta. trimite () metodă necesită patru argumente, care sunt următoarele. Primul este obiectul conexiune locală, a doua este metoda de aapela, a treia este şirul de a urmări, iar al patrulea este nivelul de eroare.

var sendingLC: LocalConnection = LocalConnection noi (); sendingLC.send ("remoteDebug", "debug", "ObjectNot Found!", "ERROR");

Tu ar trebui să aibă acum o cunoaştere destul de solide de instrumente şi practici disponibile pentru a depana cu succes în aplicaţiile Flash şi PHAcestea nu sunt simple instrumente şi practici disponibile pentru a depana o aplicaţie. Programator vin cu modalităţi mai bune de tot timpul,parţial, deoarece este o sarcină importantă şi, de asemenea, deoarece este cea mai de temut din ciclul de dezvoltare.

În acest capitol aţi învăţat cum să vă creaţi erori personalizat şi cum să lucreze cu tipuri de eroarea standard incluse în PHP. Puteţi, de asemenea învăţat pentru a depana cod în cadrul Flash cu ajutorul panoului de ieşire şi urmă declaraţiile.

Ultima secţiune a capitolului, axat pe dezvoltarea unui handler depanare particularizate în ActionScript, care afişează mesajele într-o scrollboxculori codate pentru a identifica mai bine mesajele de depanare.

 În această parteCapitolul 15

Me nţinerea unui capitol de aplicare 16

Me nţinerea unui serve r scalabil şi mai eficient

Capitolul 17

Clădire aplicaţii complete avansată

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

283 of 362 11/9/2

Page 284: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 284/362

 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

284 of 362 11/9/2

Page 285: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 285/362

 

Tel procesul de menţinere a unei cereri este realizată prin următorul text pur şi simplu nişte reguli. Aceste norme au fost stabilite a lungul

timpului ca cererile continuă să fie dezvoltate de zi cu zi.

Acest capitol se axează pe aceste norme individuale. Până la sfârşitul capitolului, veţi înţelege nu numai cum să le urmeze, dar, de asemenea,modul în care acestea pot face munca mai usoara.

Ultima secţiune se concentrează pe care lucrează într-un mediu echipă, folosind notă comună care, comentând, iar controlul versiunilor dinperspectiva unui singur dezvoltator. Chiar şi după ce o cerere este scris, nu este neobi şnuit să se întoarcă şi să facă modificări. Dacă aveţi de gândacest lucru in timpul procesului de scriere originală şi urmaţi câţiva paşi simpli, se face update mult mai uşor de a gestiona şi punerea în aplicaremerge mai departe.

Adesea, o tentativă de rescriere se face, mai degrabă decât corectarea câteva probleme mici. Acest lucru se datorează, de obicei, de planificarea slala începutul şi rezultatele în timp util de dezvoltare suplimentare, care nu poate fi întotdeauna contabilizate.

Codul comentând este mai important ca un proiect continuă să crească, sau ca dezvoltatorii supl imentare sunt aduse pe un proiect. Procesul decomentarea codului nu este o parte necesară a scris o cerere, dar este de ajutor atunci când se uită la un proiect care a fost in dezvoltare de cevatimp.

De multe ori stilul comentând este fie definit într-o schi ţă de proiect sau stabilite de conducerea proiectului.

 În acest capitol

Comentând cod

Administrarea une i ChangeLog

Gestionarea mai multe versiuni

Utilizarea biblioteci personalizate

Comentând poate fi chiar benefic, atunci când vă scriu din când în propriul cod, deoarece puteţi lăsa notele pentru a reveni la o bucată de cod la odată ulterioară. Acest lucru este important mai ales dacă vreodată intenţia de a distribui codul ca un proiect open source sau vinde aplicaţia.

Codul de Comentând, de asemenea, face mai u şor să scrie sau să genereze documente cu modificarea suplimentare puţin sau deloc necesare decatre dezvoltator.

 Înţelegerea stilurilor de a comenta cod

Fiecare limba are propriul stil de cod comentare. De exemplu, o formă foarte comună de a comenta este văzut în documentele HTML, care arată

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

285 of 362 11/9/2

Page 286: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 286/362

 

astfel:

<- Acesta este un comentariu HTML ->

HTML oferă doar un stil de a comenta, în cazul în care alte limbi complet de scripting au stiluri diferite comentare. Iată câteva exemple de maimulte stiluri comune comentarea găsite în Flash, PHP, si MySQL.

Bloc comentarii

PHP, ActionScript (Flash), si MySQL permite comentarii bloc.

/* *

* Acesta este un stil de comentariu bloc,

* Care poate avea orice număr de linii.

* */

Linie de comentariu în MySQL

MySQL permite linie de comentariu cu ajutorul unui -- la începutul unei linii.

- Acesta este un comentariu MySQL, baza de date nu vor citi acest lucru.

Comentarii Inline

Puteţi utiliza, de asemenea, un comentariu linie pentru a elimina o anumită secţiune de cod. Acest lucru vă permite de a testa rapid o secţiune decod şi bug-uri localiza mai rapid. Iată un comentariu inline care inlaturaUNDE secţiune clauză de o interogare SQL.

SELECT nume, statut din partea utilizatorilor / * WHERE id = 1004 şi statutul = 'activ' * /;

Rezultatele anterioare în comentariu în interogarea returnarea tuturor utilizatorilor din baza de date, deoarece porţiunea condiţionată a fostcomentate.

Linia malformat si comentariile linie poate crea, uneori, greu de urme bug cu excep ţia cazului în editorul de cod utilizează sintaxa evide nţiereacolorate.

Compilator comentarii

Unele limbi de dezvoltare si aplicatii utilizarea comentarii compilator. Aceste comentarii de specialitate spun un compilator cerere modul în carese ocupe de anumite tipuri de date. Aceste comentarii nu ar trebui să fie îndepărtat de mână cu excepţia cazului în care intenţionaţi să eliminaţiaceastă funcţionalitate.

Comentarii în XML

Unele dintre diferitele aplicaţii care au fost dezvoltate în capitolele anterioare a face cu XML. Este important să înţelegem că XML poate acţiona într-un mod necunoscut atunci când comentariile sunt utilizate în mod necorespunzător.

Acest lucru devine o problema doar atunci când un -- este utilizat într-un comentariu cum ar fi următoarele:

<- Persoana, contine toate informatiile meciului - la nivel global de ocazie -> <person>

<name> Alex </ name> <age> 27 </ varsta> <gender> Barbat </ sex> </ persoana>

După cum puteţi vedea, -- imită tag-ul se încheie şi va confunda parser XML, până la punctul în cazul în care acesta crede ca XML este incorect în unele cazuri rare, nu-l va încărca.

Comentarii în Apache

Utilizarea comentarii în Apache este în general limitată la . Htaccess fişiere pentru a determina setările site-ului. Este important de menţionafaptul că observaţiile în dosarele Apache poate provoca probleme de randare. În cazul în care pentru un motiv oarecare de directivă nufuncţionează corect, căutaţi pentru comentarii ca vinovatul prima problema.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

286 of 362 11/9/2

Page 287: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 287/362

 

Aici este un exemplu de un comentariu într-un Apache . Htaccess fişier.

# Forţa de PHP pentru a face. Fişiere HTML AddType application / x-httpd-php html.. Htm

Amestecarea comentarii

Aveţi posibilitatea să se amestecă stiluri diferite de comentarii după cum este necesar. Acest lucru este comun atunci când explică o secţiune decod, cum ar fi definiţia unei funcţii sau o metodă. După cum puteţi vedea, un comentariu bloc este folosit pentru a descrie funcţia şi un comentarilinie explică codul în funcţia.

/*

@ Num1: primul număr

@ Num2: al doilea număr @ return: suma a două argumente

@ Autor: numele dezvoltatori

@ Descriere: funcţia statice care multiplică două numere

Funcţia multiplyBy static (num1: Numar, num2: Numărul): Numărul {

/ / Returneaza suma de num1 & num2 retur (num1 * num2);

}

Comentând în mod corespunzător codul poate avea avantaje evidente. Editorii mai populare codul de oferta caracteristici care pot ascunde saucolaps comentarii astfel încât acestea sunt numai în mod atunci când doriţi să fie.

Veţi găsi chiar şi unii redactori care sintaxa evidenţiat comentarii. Unii editori de uz profesional comentariile dvs. pentru a crea fişiere de ajutorinline numit Codul de indicii (A se vedea figura 15.1).

Aceste indicii sunt Dulapuri cu codul de linie care pop-up pe măsură ce începeţi să tastaţi. Ele oferă elementele posibile disponibile pe bazacodului introdus până în prezent.

Un editor ActionScript mai avansate, cum ar fi FDT de PowerFlasher, are capacitatea de a învăţa codul dvs. şi afişează comentariile dvs.particularizată în versiunea sa de informatii de la cod.

Figura 15.1

Exemplu de un indiciu cod afisat in Flash CS3 pentru MovieClip proprietăţi

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

287 of 362 11/9/2

Page 288: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 288/362

 

Scoaterea comentarii şi de ajutoare depanare

Comentariile sunt adesea eliminate din cauza dimensiunea fişierului, care poate fi o preocupare valabil pe un program de mare. Cu toate acesteacele mai multe ori, comentariile sunt eliminate automat atunci când o aplicaţie este compilat sau construit.

În funcţie de aplicaţia utilizată, depanare declaraţii ar trebui să fie, de asemenea, eliminate. De exemplu, nativ Flash IDE că navele cu CS3 are oopţiune de configurare în caseta de dialog Publicare Settings. Dacă selectaţi Omiterea Acţiuni Trace, care este situat în fila Flash Setări Publicare,apelurile urme sunt eliminate din aplicaţie.

Dacă Omiteţi Acţiuni Trace este activată în timpul de de panare nu ve ţi vede a nici o urmă solicită afişată în fereastra de ieşire.

Dacă decideţi să utilizaţi un pachet de clasa personalizate sau pentru depanare, atunci ai putea folosi Găsire şi înlocuire pentru a el imina acestecazuri. Cu toate acestea, fiţi atenţi să nu elimina din greşeală specifice aplicaţiei cod.

După cum puteţi vedea, comentariile poate fi benefică din punctul de vedere al lizibilitatea codului. Puteţi, de asemenea, ştiu acum că comentarecorect codul dvs. are avantaje supl imentare, atunci când se utilizează unele dintre redactorii codului mai robust disponibile astăzi.

A ChangeLog este un bloc formatată de înregistrări sau înregistrări jurnal plasat într-un fişier personalizat. Aceste fişiere au, în general, numeleMODIFICĂRI sau ACTUALIZĂRI. Această secţiune este folosită pentru a lua note cu privire la caracteristicile unei cereri sau să comuniceprogresele înregistrate cu restul de o echipa de dezvoltare.

Un avantaj pentru utilizarea unui ChangeLog este faptul că unele aplicaţii pot citi acest jurnal formatat şi ao afişa în mod automat, după cum searată în figura 15.2. Aceasta, desigur, depinde de aplicaţia pe care o utilizaţi, dar poate fi foarte benefic ca o cerere începe să crească.

Bug de urmărire

Mulţi dezvoltatori folosi această dinamică ChangeLog format pentru a urmări bug-uri. Acesta este un proces care multe aplicaţii comerciale şifreeware, cum ar fi Jira şi Bugzilla, utilizaţi pentru a crea o alternativă mai grafică pentru fişierul text de bază.

Utilizarea de urmărire a bug cu echipe

Bug Tracking devine deosebit de important atunci când echipele sunt implicate. De exemplu, multe tehnologii open source consta de dezvoltatordin întreaga lume. Imaginati-va cum ar fi plictisitor pentru a urmări bug-uri în mesajele e-mail sau apeluri telefonice în toate aceste dezvoltatori.Acest lucru este în cazul în care urmărirea bug devine deosebit de important. Asta nu înseamnă că un dezvoltator de unică nu pot beneficia deacelaşi sistem.

Aici este o pagină Web care afişează o ChangeLog care a fost generat dinamic.

BEB "

]03

f = i PHP: PHP 5 ChangeLog Windows Internet Explorer 

H vt [X php changeIpg

a * 0 # "[l ̂ Page" {¡ ̂Unelte -

& $ | Sj PHP: PHP 5 ChangeLog

30-august-2007

■ Corecţ ii de securitate

■ fix"excepţ ie punctul plutitoare" Inside wordwrap (). (Mattias Bengtsson, Ilia)

«Fixe mai multe integer overflow în ImageCreateQ, ImageCreateTrueColorQ, ImageCopyResampled () şi ImageFilledPolygon ()

raportate de către Mattias Bengtsson. (Tony) «calcul dimensiunea Rxed În chunk_spllt (). (Stas)

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

288 of 362 11/9/2

Page 289: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 289/362

 

■ de tip integer overflow fixe în str. [c] spn (). (Stas)

■ money_format fixe () de a nu accepta%, mai multe sau i% n jetoane. (Stas, Ilia)

■ zend_alter_inl_entry Rxed () Într erupere vulnerabilitate memoryjimit, (Ilia)

■ Rxed INFILE LOCAL opţ iune de manipulare cu extensii MySQL să nu fie permisă atunci când open_basedir sau safe_mode este activ. (Stas)

■ sesiune fixe, save_path şi valorile errorjog a fi verificate împotriva open_basedlr şi s afe_mode (CVE-2007-3378) (Stas, Maksymllian Ar clemowlcz)

■ fixe citi posibil nevalid în glob () Win32 punerea în aplicare (CVE-2007 - 3,806). (Tony)

■ stabileşte îmbunătăţită pentru MOPB-03-2007, (Ilia)

■ rectificat fixpentru CVE-2007 - 2872. (Ilia)

■ Eliminat - enable-versioning opţ iunea de configurare. (Jani)

■ PCRE upgrade la versiunea 7.2 (Nuno)

■ Actualizat în baza de date de fus orar la versiunea 2007.6. (D erick)

■ openssl_x5Q9_parse îmbunătăţită () pentru a reveni în formă uşor de citit extensii. (Dmitri)

■ Enabled modificarea dimensiunii c ache-ului pentru sit uaţ ia non-persistente OCI8 conexiuni. (Chri s Jones, Tony)

■ schimbat display_errors php.ini opţ iunea de a accepta stderr ca valoare, ceea ce face următoarele mesaje de eroare pentru a fi emise la STDERR în loc de STDOUT cu CGI şi SAPI-uri cu (#22839). (Jani)

■ schimbat handler de erori pentru a trimite HTTP 500 În loc de pagină goală privind erorile PHP, (Dmitri, Andrei Nigmatulln)

■ e-mail schimbat () funcţ ia de a fi mereu disponibil, (Johannes)

■ verifica Adaugata pentru opţ iuni necunoscut a trecut pentru a configura. (Jani)

13

■ Adaugata persistente verificatorul starea conexiunii la DOP pqsql. (Elvis Pranskevichus, Ilia)_0

Utilizări suplimentare

A ChangeLog nu se limitează la câteva linii de text. Realist, după cum puteţi vedea, el poate să conţină bug fixat, note de alti dezvoltatori, precuşi informaţii cu privire la un element specific. De exemplu, dacă vă decideţi să utilizaţi o aplicaţie de urmărire a bug, este o idee bună pentru ainclude ID-ul bug-ul în cadrul ChangeLog de intrare sau lăsaţi cererea de urmărire ocup de asta.

Documentarea în mod corespunzător ID-uri de bug-ul face mai uşor de urmărit pe un bug mai târziu, în dezvoltarea de aplicaţii, sau dacă vă întoarceţi la un proiect odată ce acesta este finalizat.

Crearea dinamică a modificărilor 

Aplicatii de control versiune, care sunt discutate în sec ţiunea următoare, au chiar capacitatea de a genera automat o ChangeLog. Avantajulacestei abordări este dezvoltatorul nu are timp să-şi petreacă proiect de editare sau actualizarea jurnalul. Cu toate acestea, un dezavantaj la acestlucru este fişierul devine mai puţin personalizate şi, uneori, îl face mai greu de înţeles pe deplin.

Versiunea de control este managementul de mai multe versiuni de cod sau fişiere pentru o aplicaţie. Aceste aplicaţii sunt adesea folosite în cadruechipelor de dezvoltare, dar pot fi folosite cu uşurinţă de către un dezvoltator singur.

Avantajul folosirii de control versiune este de urmărire şi codul de backup, care este stocat în timp ce dezvolta sau de a menţine o aplicaţie. Acestnivel suplimentar de securitate la un proiect poate permite dezvoltatorului de a experimenta cu o idee şi încă mai au capacitatea de a reveni la oversiune stabilă.

Acesta permite, de asemenea, un dezvoltator pentru a menţine codul de consistent platforme de dezvoltare. Această caracteristică este o utilizarefoarte frecvente pentru dezvoltatorii solo care călătoresc şi codul de pe un sistem mobil. Ei pur şi simplu conectaţi la serverul de dezvoltare,descărcaţi cea mai recentă versiune, şi sunt gata să meargă. Când se întorc, o actualizare de simplu se face trimitere la acelasi server, iar cererea esdin nou în sincronizare.

Controlul versiunii aplicaţii

Există diverse aplicatii de control al versiunii disponibile pentru medii de dezvoltare astazi. Selectarea ce versiune aplicaţie de control se utilizeaeste stabilit de către uita la caracteristicile şi cerinţele procesului de dezvoltare dumneavoastră.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

289 of 362 11/9/2

Page 290: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 290/362

 

Cu cât este mai comună aplicaţie de control versiune este SVN (Subversion). O altă aplicaţie populară este CVS (Concurrent Versions System).Suport pentru controlul versiunilor este adesea construit direct într-un editor de cod, cum ar fi Open Editor source Eclipse.

De control de sprijin în versiunea CS3

Noi la Adobe Flash CS3 este abilitatea de a utiliza Version Cue direct în Flash. Version Cue (a se vedea figura 15.3) este chirpici aplicaţie de contrversiune care a fost găsit în cadrul aplicaţiilor sale.

Utilizarea Version Cue în Flash CS3

Veţi găsi un element de meniu "Check In ..." în meniul Fişier. Acest element este folosit pentru a aduce gestionarea Version Cue de dialog şi este îcazul în care sunteţi în stare să salveze versiuni ale aplicaţiei.

Veţi găsi o intrare de check-in ... situat în meniul File.

Avantajul de a utiliza Version Cue este nave cu CS3 şi este integrat în suita de aplicatii. Acest lucru este important mai ales dacă sunt în curs dedezvoltare active într-o aplicaţie, într-un alt cod, şi gestionarea site-ul într-o treime.

Puteţi permite chiar şi echipa ta pentru a vă conecta la serverul Version Cue la distanţă şi de a face modificări. Acest lucru înseamnă, de exemplu,dezvoltatorul poate fi practic în acelaşi birou ca şi restul echipei.

Configurarea controlul versiunii

Procesul de înfiinţare de control al versiunii depinde de sistemul de mediul dvs. de dezvoltare se execută. Un ghid de instalare mai completă arputea fi inclusă în cererea pe care vă decideţi să utilizaţi. Instalarea de bază ar include despachetarea conţinutul cererii de control al versiunii,modificarea fişierului de configurare, şi alertarea Apache la existenţa acestei cereri.

Utilizarea de control al versiunii

În mod normal, procesul de utilizare a versiunii de control este integrat în editorul de cod dumneavoastră. Cu toate acestea, există aplicaţiidisponibile pentru a folosi controlul versiunii d irect în sistemul dvs. de operare.

Doi manageri de control al versiunii pentru Windows şi Mac OS X sunt prezentate în tabelul 15.1.

FIGURA 15.3

Screenshot de Version Cue, care navele cu Creative Suite 3 programe

TABELUL 15.1

Managerii de control versiune pentru Windows şi Mac OS XNume URL-ul siste mului de ope rare

TortoiseSVN http://tortoisesvn.tigris.org/ Ferestre

SCPlugin http://scplugin.tigris.org/Mac OS X

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

290 of 362 11/9/2

Page 291: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 291/362

 

Pentru o configurare de dezvoltare mai sigure şi finale, cel mai bine este să instalaţi aplicaţia de control al versiunii pe o maşină separată.

Back-up de control al versiunii

Sistemele de control mai populară versiune oferim solutii integrate de backup, dar cele mai multe ori veţi găsi că copierea de rezervă aplicaţia pecare o scris vor include datele de control al versiunii. În mod normal, aceste fi şiere sunt stabilite ca ascunse şi niciodată nu ar trebui să fie editatmanual dacă pentru unii motiv, ele vor deveni accesibile.

Editarea unui fişier de control versiune manual poate duce la backup-uri corupte şi r ău, chiar integritatea codului cererii dumneavoastr ă.

Utilizarea suplimentar ă

de control al versiunilor 

Utilizarea suplimentară de control al versiunilor este abilitatea de a publica structura de fişiere de pe Web pentru partajarea. Acest lucru nu este întotdeauna rezultatului dorit, dar veţi găsi companii precum Adobe, Google, şi Microsoft, care să ia această abordare.

Utilizarea de control al versiunii taie volumul de muncă suplimentare necesare pentru a publica codul sursă al aplicaţiei şi a permite altora sămenţină codul tocmai a actualizat prin conectarea la sistemul de control al versiunii la distanţă.

Bibliotecile personalizate pot face codul de usor de intretinut. În versiunile mai vechi ale ActionScript (înainte de AS3), pachetele nu exist ă cuadevărat, asa ca a fost greu pentru a menţine în mod corespunzător şi a cotei de un cod sursă aplicaţii.

ActionScript 3 a introdus o practică mai comună de codificare numite pachete. Aceasta oferă posibilitatea de a crea o instanţă a clasei şi împărtăşiţ în proiecte de toate conţinute într-un singur folder sau un fişier.

, 'rj"¡> R-^ rsif O priv ire mai amănunţită în biblioteci personalizate pot fi găsite în Capitolul 9.

Utilizarea biblioteci personalizate cu control al versiunii

În cazul în care creaţi o instalare separată pentru sistemul dvs. de control al versiunii puteţi utiliza această maşină aceleaşi pentru a stoca biblioteparticularizate şi apoi să le includă de la distanţă în fişierul dvs. Flash (e).

Avantajul acestei abordări este abilitatea de a actualiza un pachet şi au toate aplicaţiile care folosesc acest pachet de actualizare, de asemenea.

Publicarea unui SWC

Aveţi posibilitatea să creaţi un SWC în Flash, care vă permite să distribui componente si clase ActionScript. Pentru a publica un SWC, selectaţiopţiunea Export SWC în caseta de dialog Publicare Settings.

Fişierul conţine un clip SWC compilat şi fişierele de clasă ActionScript care îl suportă.

eu : - P Este o idee bună pentru a documenta schimbările de clasă şi pachetul, deoarece aplicaţiile existente

PsSM ^ AtSSi ®-ar putea opr i de lucru.

Procesul de utilizare a bibliotecilor particularizate nu poate parea un aspect foarte important de dezvoltare de aplicatii. Cu toate acestea, odată ceaţi începe să se dezvolte pe scară largă aplicaţii care împărtăşesc atribute comune, veţi observa cât de mult timp este salvat prin a nu fi nevoie sărescrie codul.

În acest capitol aţi învăţat cum să comenteze codul dvs. şi de ce-l face pentru o mai bună aplicare generală. Puteţi, de asemenea învăţat aceastădevine deosebit de important atunci când în curs de dezvoltare o aplicaţie cu ceilalţi.

Ai o introducere cu privire la modul de a incorpora o ChangeLog în dezvoltare şi modul în care unele aplicaţii terţe părţi pot utiliza acesteinformaţii pentru a afişa de urmărire a bug mai detaliate.

În ultima secţiune aţi învăţat cum să utilizaţi versiunea de control şi au fost introduse la Version Cue, care este un plus pentru nou CS3 Flash.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

291 of 362 11/9/2

Page 292: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 292/362

 

 j & jWjKp ^ - ^ x. . v: M1. ; ^ N ■

- I

"N T _i

Dacă il'IlPWmm I

íresSHSOTBÍW

său capitol se concentrează pe cele mai bune practici pentru a menţine server-ul dvs. în timp ce, de asemenea, introducerea unor tehnici maiavansate, cum ar fi îmbunătăţirea aplicării cache, baze de date eficient, backup-uri, şi codul de scalabil.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

292 of 362 11/9/2

Page 293: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 293/362

 

După ce învăţa şi aplica aceste informaţii pentru aplicaţiile dvs., veţi observa repede ca acestea să ruleze mai eficient. Dacă vă păstraţi aceşti paşi minte, la începutul procesului de dezvoltare a aplicatiilor, nu veţi avea de a prelucra cererea de mai târziu.

Una dintre metodele simple, dar cel mai ignorat pentru menţinerea unui server de mai eficientă este păstrarea biblioteci şi de bază server-sidecodul de actualizat. Deseori aceste programe, care sunt responsabile pentru rularea aplicaţiilor dvs. sunt actualizate ca dezvoltatorii continua sagaseasca modalitati de a le accelera sau a le face mai eficiente. Acest proces de actualizare nu se referă la codul tău personal, dar bibliotecile şiserviciile de care depinde codul dvs..

Actualizarea server-ul dvs. nu numai că oferă îmbunătăţiri de performanţă, dar de asemenea, poate asigura server-ul dvs. Web este mai sigur. PHde exemplu, este actualizat frecvent ca accesorii mai multe modificări de codificare şi sunt introduse. Acest lucru se datorează problemelor desecuritate noi fiind descoperite, ceea ce duce la o cerere puternică de ansamblu.

Înainte de a actualiza sistemul, asigura aplicaţiile vor fi compatibile. De exemplu, aplicaţii dezvoltate în PHP 4 nu sunt întotdeauna compatibile cPHP 5. Veţi găsi unele cazuri, în cazul în care o altă bucată de software de pe server-ul dvs. poate necesita o anumită versiune. Un bun exemplu îacest sens este e -mail

 În acest capitol

Me nţinerea serverul actualizat Cache pentru optimizarea şi backup-uri de manipulare

clienţi, cum ar fi o versiune specifică a Hoardei de (un popular de e-mail) necesită PHP 4 şi vor eşua pur şi simplu pe o versiune mai nouă.

Acest lucru nu inseamna ca nu ar trebui să actualizeze, destul de opusul, de fapt. Este nevoie de doar un pic şi temele de cercetare înainte de ainstala noile versiuni.

Utilizarea actualizărilor automate

După cum ştiţi, instalarea de noi versiuni ale aplicaţiilor pe server-ul dvs. nu este întotdeauna cea mai bună opţiune. Ai nevoie să fie mai conştiende acest lucru cu updaters automat. De exemplu, veţi găsi actualizările automate sunt mult mai probabil pentru a oferi functionalitate nou-nou ţ, d

 în acelaşi timp, ele oferă, de asemenea, codul de faptul că nu a fost testat ca bine.

Veţi găsi că nu toate dvs. de apl icatii server-side oferă actualizări automate, dar cel mai bine este de a verifica în prealabil şi să se asigure că acestopţiuni sunt dezactivate.

Unii furnizori de ce gazduieste efectua actualizări periodice de securitate, uneori fără permisiunea dvs. sau chiar vă informare a actualizare. Aces

este unul din multele motive pentru care eu prefer să rulaţi un auto-gestionate, server dedicat, spre deosebire de plata un pic mai puţin şipermiţându-mâner de securitate ce gazduieste furnizorului şi actualizări versiune.

Zend Platform

Excepţia de la instalarea actualizărilor automate nu este atunci când utilizaţi Zend Platform. Acest set de instrumente asigură sistemul dvs. estecorect la curent cu toate îmbunătăţirile recente de securitate, în acelaşi timp asigurându-vă că script-ul dvs. existent va continua să funcţioneze înmod corespunzător.

Costul de Zend Platform poate provoca o dilemă pentru organizaţiile mici şi dezvoltatori singur, dar timpul total salvat pe termen lung este unmotiv întemeiat să-l cumpărare.

Instalarea de noi aplicaţii sau bibliotecile nu este o bună practică atunci când se lucrează cu un server de vii. Cu toate acestea, acest lucru nuinseamna ca nu se poate experimenta cu noul cod prin instalarea unui sistem de dezvoltare.

Puteţi construi sau cumpăra ce gazduieste pe un server nou pentru a obţine o configurare a sistemului de dezvoltare, dar acest lucru nu ar putea soluţia cea mai rentabilă, mai ales dacă sunteţi un magazin de un singur om.

Clădire o altă versiune de Apache în acelaşi sistem

Alternativa este de a instala o versiune separată de Apache pe serverul dvs. live. În mod implicit, Apache poate avea doar o versiune rulează,deoarece fiecare versiune încearcă să împărtăşiţi port acelaşi server.

Cu toate acestea, aveţi posibilitatea să modificaţi această setare prin editarea httpd.conf fişier. Veţi găsi acest fişier de configurare în conf /

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

293 of 362 11/9/2

Page 294: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 294/362

 

directorul dvs. de instalare nouă Apache.

Deschideţi acest fişier în editorul de texte favorit sau VI, dacă rulaţi un server de la distanţă, şi să modifice blocul următorul text:

# Schimba acest lucru pentru a asculta pe adresele IP specifice, după cum se arată mai jos

la

Împiedica # Apache de la glomming pe toate adresele IP legat

(0.0.0.0)

#

# Ascultă 12.34.56.78:80 Ascultaţi 80

Cea mai mare parte de faptul că blocul de cod este un comentariu care explică ce acest parametru este responsabil pentru. Aveţi posibilitatea sămodificaţi portul pe care sistemul dvs. de dezvoltare pot fi găsite prin schimbarea acest număr la ceva similar cu următorul: #

Ascultă # 12.34.56.78:80 Ascultaţi 9004

După ce salvaţi şi reporniţi Apache, puteţi accesa această instalare nouă, vizitând http://local gazdă: 9004.

Aplicatiile de pe masina dvs. utilizează porturi diferite, asa ca cel mai bine este de a verifica portul înainte de a alege unul nou.

Lucrul cu sângerare de ultimă or ăDupă ce aţi instalat noul sistem, puteţi începe să experimenteze cu noile sângerare de ultimă oră, fără a afecta configurare live. Sângerarea-marginsoftware-ul aşa cum se arată în figura 16.1 este lansat recent versiuni care nu au fost testate la fel de mult cum ar fi versiuni stabile. Acest lucru v ăpermite să lucraţi cu mai multe caracteristici avansate şi mai noi, dar, de asemenea, înseamnă că ar putea candida în bug-uri şi probleme dedezvoltare atunci când se utilizează aceste versiuni. După cum veţi continua pentru a testa aceasta noua tehnologie puteţi determina dacă acesta atrebui să fie utilizate într-un mediu viu şi mutaţi-l peste, atunci când aceasta este gata.

Dependenţe

Multe biblioteci şi instrumentele pe care le va utiliza pe serverul Web depind de alte biblioteci. De exemplu, PHP HG bibliotecă pentrumanipularea imaginilor necesită libjpeg bibliotecă, în scopul de a edita imagini în mod corespunzător.

Când vă actualizaţi server-ul dvs., trebuie să fie conştienţi de aceste dependenţe, deoarece actualizarea o parte poate avea ca rezultat în instalaţiisparte sau incomplete. Deseori veţi găsi informaţii pe site-ul dezvoltatorilor cu privire la actualizarea informaţiei specifice, sau puteţi consultaphp.net în secţiunea de comentarii. Acolo veţi găsi alţi dezvoltatori raportare a rezultatelor lor în situaţii de dezvoltare diferite.

NOTF

I E

FIGURA 16.1

Un exemplu de ultimă or ă din presă php.net

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

294 of 362 11/9/2

Page 295: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 295/362

 

Menţinerea server-ul dvs. până la data este doar o modalitate de a rula un server eficient. De fapt, există practici mult mai important să seurmărească mai întâi. Una dintre aceste practici mai important este optimizarea dvs. pe partea de server cod şi sistemul pe care ruleaza. Nu numaar trebui sa urmeze cele mai bune practici atunci când dezvoltarea de aplicaţii dvs., ar trebui să menţină, de asemenea, server-ul dvs. sa fieoptimizat în funcţie de nevoile specifice.

Optimizarea PHP

În urma paşii de la optimizarea instalarea dvs. de PHP vă va permite să rulaţi un server de mai bine de ansamblu. Aceste măsuri de optimizaresunt destul de simple de urmat şi poate fi uşor repetate în timp ce lucra pe mai multe servere.

Procesor faţă de RAMSpre deosebire de cele mai multe aplicaţii care necesită mai multă memorie, PHP se bazează mai mult pe procesor din server-ul dvs.. Acest lucru

 înseamnă un sistem dual-procesor este mai eficient decât un singur procesor cu mai multă memorie. Asta nu inseamna ca memoria nu esteimportant, deoarece anumite porţiuni a PHP, folosiţi o cantitate considerabilă de memorie.

Buffer-ul de ieşire şi a bazei de date plug-inuri necesita mai mult memorie în care acestea sunt accesate, deoarece acestea au tendinţa de a stoca omajoritate a informaţiilor pentru accesul mai rapid data vii toare. Aceasta înseamnă că prima cerere este lenta, dar ca urmare a cererilor care sunt mrapide, dacă aveţi suficientă memorie pentru a gestiona în mod corespunzător cererile care urmează să fie depozitate.

Acest lucru nu înseamnă că ar trebui să ruleze imediat afară şi de cumpărare de memorie sau mai multe procesoare chiar mai mult pentru că exismodalităţi de optimizare a server-ul dvs. fără a cheltui bani pe software suplimentar sau hardware.

Zece sfaturi pentru optimizarea codului

Ceea ce urmează este o listă de zece sfaturi de urmat, care va produce o performan ţă mai bună în cod, precum şi limita tulpina de pe serverul WeEle apar aici, pentru cel de importante pentru cele mai importante.

1.Limitaţi cantitatea de eroare de manipulare a gestiona aplicaţii. Eroare de manipulare mai puţin înseamnă performanţe mai bune în general, cuexcepţia cazului în care vă confruntaţi deja blocaje. Apoi, eroare de manipulare poate fi important.

2.Utilizarea funcţiilor incluse; nu creaţi propria dvs.. Ori de câte ori este posibil, încercaţi să utilizaţi funcţiile prevăzute în PHP, deoarece acesteasunt precompilate şi sunt optimizate pentru a rula mai eficient. Au fost de asemenea testat de peste si peste pentru a se asigura că locul de muncă

3.Utilizaţi o selectaţi în loc de mai multe dacă / altceva declaraţiile. Nu numai ca va folosind un cod selectaţi curat produce, aceasta va aveaca rezultat, de asemenea, la o performanţă mai bună atunci când PHP executa acea parte a codului.

4.Evitaţi mituri cum ar fi ecou este mai rapidă decât de imprimare. Ca şi în cele mai multe limbaje de programare, PHP are mituri diverse,

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

295 of 362 11/9/2

Page 296: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 296/362

 

cum ar fi toate cod ar trebui să fie pe o singură linie. Una dintre cele mai comune mituri este acela că ecou este mai rapidă decât imprimare latrimiterea cod pentru a buffer-ul de ieşire sau ecran. Acest lucru este pur şi simplu nu adevărat. Puteţi utiliza fie declaraţia. Eu personal preferimprimare deoarece este tipărirea la afişarea sau tampon.

5.Legăturile strânse de baze de date utilizând funcţii, cum ar fi mysql_close (Pentru mysql) atunci când nu sunt utilizate. Conexiunile bazei dedate sfârşit atunci când script-ul se termină, dar acest lucru nu este întotdeauna cel mai bun mod. De exemplu, dacă aveţi un program care faceapeluri de baze de date şi modifică aceste rezultate, care să facă legătura baza de date rămâne activă (cu excepţia cazului când îl închideţi) tottimpul script-ul dvs. este de lucru pe set de rezultate.

6.Utilizare unset () pentru a elimina variabile atunci când acestea nu mai sunt folosite. Ştergerea variabile, tablouri şi obiecte deosebit de maratunci când nu mai sunt în uz, rezultate în general o performanţă mai bună.

7.Incercati sa limitati expresii regulate şi de a folosi funcţiile standard de coarde ori de câte ori este posibil. Expresii regulate, în timp ce mairobuste, pot consuma o cantitate considerabilă de memorie. Deseori, veţi găsi o funcţie şir simplă (de exemplu, strstr) produce acelaşi rezultaşi cu o creştere semnificativă de performanţă, în cele mai multe cazuri.

8.Fii inteligent despre utilizarea de clasă. Sarcini simple vor suferi de cod OOP inutile. Veţi găsi mai simple sarcini de memorie consumă mai muatunci când a dezvoltat cu practicile OOP. Este important nu doar să cunoască tehnicile care exista, dar, de asemenea, atunci când acestea ar trebusă fie utilizate.

9.Monitor aplicaţiile dumneavoastră pentru a determina blocaje. Încetiniri în performanţă cod poate fi urmărită înapoi până la o locaţie specifică,cunoscut ca o strangulare. Gândiţi-vă de o sticlă reale, în cazul în care gâtul încetineşte fluxul de lichid, deoarece grupurile să treacă prin partea dsus a s ticlei înguste. Acelaşi lucru este valabil pentru codul asa cum cele mai multe biblioteci şi script-uri de un punct în cazul în care acestea

 îndeplinesc toate.

Un blocaj în cererea dumneavoastră pot exista în codul dumneavoastră, dar ar putea fi, de asemenea, într-o bază de date apel sau interacţiune cusistemul de fişiere. Monitorizarea cererea dumneavoastră va expune problemele şi vă va permite să se stabilească problemă de performanţă.

10. Cache codul PHP, ori de câte ori este posibil.

După ce a optimiza codul dumneavoastră, dar în continuare necesitatea de a îmbunătăţi mai mult, caching-ul poate fi o optiune. Puteţi dezvolta osoluţie personalizată sau să utilizeze un sistem existent, cum ar fi memcached, care este examinat în secţiunea următoare. Puteţi, de asemenea,cache-ul script-ul PHP efective de către precompiling aceasta, care accelerează solicitări ulterioare.

PHP în mod implicit compilează dvs. . Php fişierele de fiecare dată când sunt solicitate. Caching evită acest lucru prin stocarea codulprecompilate. Acest lucru este mult mai eficientă şi mai înseamnă performanţe mai rapide.

Aceste zece sfaturi nu sunt singurele modalităţi de a optimiza codul dumneavoastră, dar furnizează o listă de incetinirile comune mituri şi atuncicând în curs de dezvoltare aplicaţii. După cum puteţi vedea acum, cu un cod de câteva modificări şi atenţie la modul în care serverul web se ocupde script-uri, vă puteţi asigura o performanta mai buna menţinând în acelaşi timp funcţionalitatea final.

Am văzut unele aplicaţii elimina caracteristici atunci când programul începe să se extindă, iar acest lucru este pur şi simplu o abordare greşită.Scoaterea caracteristici dintr-o aplicaţie lent este similar cu aruncarea sumele sălbatice de noi componente hardware pentru a rezolva o problemăperformanţă.

Zend Optimizer 

Optimizatorul de Zend este un produs care este utilizat pentru a optimiza memoria cache şi codul, dar oferă de asemenea un rezultat sigur,deoarece codul este compilat şi criptate. Criptarea se realizeaza prin rularea codului sursă prin intermediul Gărzii de Zend, după cum se arată înfigura 16.2, care obfuscates cod deschis.

Acest instrument nu este gratuită, dar după cum veţi continua să dezvolte aplicaţii mai robuste, veţi afla că acest cost este compensat de creştereaperformanţelor vă atinge.

FIGURA 16.2

Zend Guard cu un proiect activ încărcat

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

296 of 362 11/9/2

Page 297: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 297/362

 

Zend Studio

Un server mai optimizat pot fi urmărite înapoi la procesul de dezvoltare a aplicatiilor. Zend oferă un studio de dezvoltare care pot mai multe datşi depana cod, permiţându-vă să localizaţi blocajelor înainte de a implementa codul.

Zend Studio, după cum se arată în figura 16.3, permite chiar şi depanarea la distanţă, care vă permite să testaţi aplicaţiile de pe serverul de vii întimp ce încă posibilitatea de a monitoriza şi de depanare atunci când este nevoie.

Puteţi găsi mai multe informaţii despre aceste instrumente de pe site-ul Web de la Zend www.zend.com/ ro / produse / paza / deoptimizare / şi www.zend.com/en/products/studio/.

FIGURA 16.3

Editor de cod găsite în Zend Studio IDE

Optimizarea Apache

Procesul de optimizare Apache este rupt în patru bucăţi. Aceasta facilitate permite dezvoltatorului să se concentreze la fiecare pas specifice, maidegrabă decât forţându-le să modifice fiecare aspect al serverului. În cazuri rare, veţi vedea doar actualizări minime de performanţă, dar se vaobserva o mai mult ca aplicarea şi cererea continuă să crească.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

297 of 362 11/9/2

Page 298: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 298/362

 

Hardware

Primul loc să se uite atunci când se încearcă pentru a optimiza Apache este hardware-ul ruleaza pe. De exemplu, Apache consumă o mulţime dememorie a lungul timpului. Mai multă memorie poate fi un avantaj, deoarece aici va fi capabil să menţină în mod corespunzător în sine.

Server dedicat

Asiguraţi-vă că este Apache rulează pe un server dedicat. Aceasta include punct de vedere tehnic de instalare de dezvoltare pe care aţi învăţatdespre în secţiunea anterioară. Este important să înţelegem dezvoltarea instala versiunea de Apache nu consumă multe resurse de faptul că, fiindun singur produs-ghidul. Cel mai bine este de a lăsa Apache avea întregul server pentru a rula mai eficient. Enterprise (mare), aplicatii vor rula ce

mai multe ori un server de sine stătător să se ocupe de trafic web.

Fişiere de configurare

Modificarea fişierele de configurare (*. Conf) poate produce o creştere de performanţă dacă eliminaţi directivelor care nu sunt utilizate. Pemăsură ce învăţa aspectul de configurare, aveţi posibilitatea să eliminaţi comentariile, ceea ce va face mai uşor să se uite la pe termen lung.

Apache oferă o serie de fisiere de configurare pentru începători, dar incercati sa evitati versiunea de inalta performanta, deoarece de fapt, devinemai puţin eficient pe termen lung. Motivul este că această versiune optimizează prea Apache, pe care-l forţele pentru a rula mai puţin eficient decdacă se confruntă cu trafic foarte mare.

Logging şi erori

Ori de câte ori este posibil să încerce să limiteze cantitatea de utilizare jurnal. Aveţi posibilitatea să dezactivaţi either de logare cu totul sau de a

limita cantitatea de informaţii care este scris la busteni. Erorile sunt mai greu de a urmări, deoarece Apache nu a vă informa despre aceste aspecteÎn cele mai multe cazuri, cu toate acestea, atunci când un server este func ţionează corect acest lucru nu este o problemă.

Dacă alegeţi să activaţi de logare, asiguraţi-vă că editaţi acele fişiere pe o altă maşină, deoarece procesul de deschidere şi de parsare aceste fişieremari, uneori, poate avea un impact asupra performanţei.

MaxClients

Aveţi posibilitatea să modificaţi MaxClients directivă în httpd.conf fişier de configurare pentru a creste performanta, dar să fie conştienţi dfaptul că orice client care încearcă să se conecteze după limita este lovit va fi în imposibilitatea de a vizualiza site-ul tău. În cazuri rare, acest lucrunu poate fi un lucru rău, deoarece va păstra performanţă pentru utilizatorii existenţi.

<IfModule Prefork.c> StartServers 8

MinSpareServers 5 MaxSpareServers 2 0 MaxClients 150

MaxRequestsPerChild 1000 </ IfModule>

 MaxClients directivă se aplică numai în cazul în care prefork Modulul este configurat şi activat.

Există alte moduri de a optimiza Apache, dar de scurtă a adăuga hardware suplimentare şi cost cu o schimbare la organizaţia dvs., această listă vaavea serverul dumneavoastră rulează mult mai eficient

Optimizarea MySQL

Acum, că aţi optimizat PHP si serverul web Apache, următorul loc este logic pentru a optimiza MySQL. Aveţi posibilitatea să optimizaţi MySQLdupă ce este instalat, dar există unele bune practici de a păstra în minte înainte de ao instala, atunci când este posibil.

Performanţe mai bune de la instalare

Alegerea celei mai bune compilatorul pentru sistemul dvs. atunci când vă construiţi MySQL puteţi obţine de obicei 10 - 30 la sută o performanţămai bună. Compilează MySQL numai cu seturi de caractere şi de opţiunile pe care intenţionaţi să o utilizaţi. Deseori, o evaluare rapidă a utilizăride către dvs. destinat poate duce la o performanţă mai bună, pentru că dintr-o privire aveţi posibilitatea să stabiliţi care funcţionalităţi va si nu vafolosi.

Documentaţia MySQL are variate sfaturi pe performanţe mai bune, şi cum veţi continua să pună în aplicare mai multe dintre ele veţi dori să rulaţbinare compilate cu ajutorul testului de referinţă MySQL pentru a stabili cu adevărat în cazul în care modificări vor duce la o performanţă maibună.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

298 of 362 11/9/2

Page 299: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 299/362

 

MySQL este o aplicaţie drum lung. Acest lucru înseamnă că doriţi o mai bună performanţă de ansamblu şi nu doar pentru acţiunile foarte rapid. Dexemplu, să presupunem că aveţi un tabel cu 100.000 de rânduri, care nu este faptul că mai puţin frecvente în aplicaţii mari. Efectuarea unei căutăpe acest tabel va dura ceva timp, asa ca un MySQL acordat cu acces rapid in minte va fi, de fapt, strangulare. Este mai bine s ă aibă MySQL tunat cprocesele pe termen lung în minte pentru a lucra cu date din aceste volume.

Logging interogări lent

Una dintre cele mai bune metode pentru a localiza blocajele din baza de date MySQL este de a permite înregistrarea atunci când este necesar. Estimportant să înţelegem că exploatarea forestieră, în sine, este un criminal de performanţă, dar uneori este necesar să se stabilească alte probleme.

MySQL busteni de interogări lent într-un fişier jurnal. Dacă coada acest fişier, care este folosit pentru a viziona în mod activ fluxul, veţi fi informade interogări lent. Puteti lasa, de asemenea, acest jurnal de umplere şi apoi testaţi-l mai târziu, în funcţie de modul în care sistemul dumneavoasteste activă.

coada-f / var/lib/mysql/192-168-1-107-slow.log

Calea de acest fişier lent jurnal de interogare vor fi diferite în funcţie de mediul dumneavoastră.

Windows nu ofer ă o "coada" de comandă în mod implicit, dar aveţi posibilitatea să instalaţi instrumentele disponibile Server de la Microsoft.

Poate fi necesar să activaţi "logare interogare lent" în fişierele de configurare a MySQL.

Verificarea tabele

O altă modalitate de a asigura o bază de date se execută în mod corespunzător este de a verifica starea de sănătate tabel, prin emiterea următoare

comandă în prompt. Înlocui table_name cu numele real al tabelul pe care doriţi să-l verificaţi.

CHECK table_name TABELUL

De exemplu:

mysql> verifica tabelul sondaj de opinie;

| Tabel | Op | Msg_type | Msg_text |

| Book.poll | verifica | starea | OK |

1 rând in set (0.00 sec)

Limita opţiunile de pornire

O altă modalitate de a obţine performanţe mai bune din MySQL este de a limita opţiunile de încărcare atunci când a început. Navele MySQL cudiverse opţiuni pentru fiecare caz de utilizare şi de fiecare, dar este sigur să spunem că nu va utiliza toate dintre ele. Similar cu Apache, dacămodificaţi fişierele de configurare în MySQL, veti observa o performanţă mai bună.

Instrumente suplimentare

Grupul de MySQL de dezvoltare prevede de profile multe liber şi instrumente de administrare. Aceste instrumente pot fi descărcate de pe site-ulprincipal MySQL Web şi vă va ajuta să optimizaţi şi să monitorizeze de la distanţă bazele de date. Avantajul de a utiliza aceste instrumente nu esnevoie să monitorizeze server-ul dvs. utilizând bază de comandă-line. Aceste instrumente GUI-uri vă permit să înţeleagă ceea ce server-ul dvs. Weste de a face dintr-o perspectivă vizuală, după cum se arată în figura 16.4.

FIGURA 16.4

Solicitare MySQL Browser 

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

299 of 362 11/9/2

Page 300: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 300/362

 

Caching

Tema de caching este în mod normal, se uita la o dată ce experienţă blocaje într-o aplicaţie, dar puteţi instala soluţii înainte de caching apare oproblemă.

Lucrul cu memcached

Unul din obstacolele în server-side script-uri este baza de date. Aveţi capacitatea de a optimiza configuraţia, pe care ai făcut în secţiunea anterioarUneori, acest lucru poate merge doar măsura în care un sistem continuă să crească.

Răspunsul la această problemă este să instalaţi software-ul pentru a ajuta la a face cu încetiniri de baze de date, cum ar fi memcached, care este uobiect de inalta performanta de memorie cache de sistem. Acest sistem este construit cu intentia de a accelera aplicaţii Web dinamice prineliminarea de încărcare baza de date, care este întâlnit mai des ca sistemul continu ă să crească. Puteţi descărca cea mai recentă versiune amemcached de la danga.com la www.danga.com/memcached/.

Instalarea memcached pe LinuxUrmătoarea secţiune va acoperi procesul de instalare a memcached pe un server Web Linux. Această versiune necesită un alt bibliotecă să fieinstalat, care va fi, de asemenea, acoperite.

Instalarea libevent

Înainte de a instala memcached, aveţi nevoie să instalaţi o bibliotecă de dependenţă. Acest lucru este libevent, care poate fi descărcat de lawww.monkey.org/ ~ provos / libevent /.

Despachetaţi arhiva şi efectua aceiaşi paşi de instalare aţi văzut în exemplele anterioare atunci când instalarea aplicaţiilor.

$ Tar-xvf asupra libevent-1.3b.tar.gz

Schimba directorul curent la nou-create libevent pentru a continua procesul de instalare.

$ Cd libevent-1.3b

Ultimul pas pentru înfiinţarea de dependenţă este de a configura şi de a construi fişierele necesare instala şi instalaţi libevent bibliotecă.

$. / Configure $ make

$ Make install

Instalarea memcached

Dată libevent este instalat, puteţi continua cu instalarea de memcached. $ Gunzip memcached-x.x.x.tar.gz

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

300 of 362 11/9/2

Page 301: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 301/362

 

Începeţi prin a despachetare arhiva pe care tocmai l-a ţi descărcat.

$ Tar-xvf asupra memcached-x.x.x.tar

Apoi, schimba directorul curent pentru a continua instalarea.

$ Cd-memcached x.x.x

Ultimul pas al procesului de instalare este de a crea script-ul de instalare şi instalaţi aplicaţia.

$. / Configure $ make

$ Make install Cu memcached instalat, porniţi-l în sus şi trece la extensia PHP. $. / Memcached-d-m 2048-l-p 11211 127.0.0.

Descărcarea extinderea memcached pentru PHP

În acest moment, următorul pas este să instalaţi extensia PHP care este utilizat pentru a interacţiona cu memcached. Primul pas este de adescărca memcached din pachetul de depozit PECL. $ Wget http://pecl.php.net/get/memcache-x.x-x.tgz

F Numărul de v ersiune a fost eliminat să vă asiguraţi că descărcaţi versiunea corectă, mai degrabă decât for ţa o versiune asupra cititorului. Cel maibine este să citiţi documentaţia înainte de a descărca o versiune.

Instalarea memcached extensia PHP

Odată ce fişierul este descărcat, dezarhivaţi şi untar fişierul arhivă.

$ Gzip-DF Memcache-xxxtgz $ tar-xvf asupra Memcache-xxxtar

Schimbaţi în directorul pe care memcached arhiva a creat.

$ Cd-Memcache x.x.x

Un apel la phpize se face pentru a construi fişierele neambalat într-o extensie compatibil PHP.

$ Phpize

Următorul pas este acela de a configura instalarea, face fisierele de instalare, în cele din urmă şi instalaţi aplicaţia folosind următoarele trei comen

$. / Configure $ make

$ Make install

Atunci când instalarea este completă, va trebui să modificaţi fişierul php.ini şi adăugaţi noua extensie. extension = memcache.so

Instalarea memcached pe Windows

Primul pas de a instala memcached este să descărcaţi versiunea binară direct de la http://jehiah.cz/projects/memcached-win3 2/

1.Dezarhiveaza fişierele binare în directorul dorit (de exemplu, c: \ memcached).

2.Instalarea serviciului: "C: \ memcached \ memcached.exe d-install 'from promptul de comandă.

3.Porniţi serverul de la Microsoft Management Console.

4.Utilizaţi serverul, implicit nu ascultă pe portul 11211.

Acum, că aţi instalat memcached şi a început, următorul pas este acela de a configura PHP. Începeţi prin verificarea PHP directorul extensiile (C\ php \ ext) pentru memcached prelungire (Php_memcache.dll).

Dacă nu vedeţi extinderea în acel director puteţi vizita depozitul PECL şi descarcati-l de acolo: http://pecl4win.php.net/ext.php/php_memcache.dll

Următorul pas este să deschideţi fişierul php.ini şi adăugaţi memcached extensie la lista existentă de extensii.

extension = php_memcache.dll

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

301 of 362 11/9/2

Page 302: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 302/362

 

Ultimul pas este de a reporni Apache.

 Încadrare la instalare pentru Linux şi Windows

Ultimul pas este de a reporni PHP prin repornirea Apache şi funcţionare phpinfo funcţie pentru a vedea dacă memcached a fost adaugat cusucces.

Salvarea de date de cache

Puterea de memcached nu poate fi explicat într-o secţiune mică, dar cu următorul text este o bună imagine de ansamblu a modului de încărcarede a salva datele în sistem de caching.

Primul pas este de a crea o nouă instanţă a Memcache bibliotecă de obiecte.

$ Cache = new Memcache;

După ce aţi creat obiectul, să creaţi o nouă conexiune. Pentru acest exemplu, tot ce se execută pe acelaşi server, dar memcached într-adevărstrăluceşte atunci când este instalat pe mai multe servere. Al doilea argument în conectaţi Metoda este numărul de port pe care memcachedse execută.

$ Cache-> connect ("localhost", 11211);

După ce aţi face noua conexiune, aveţi posibilitatea să creaţi unele mostre de date, care ar fi, probabil, un bloc mai avansat de date într-o aplica ţiedin lumea reala.

$ SampleData = array ("mere", "portocale", "banane", "vafe");

După ce aţi creat date eşantion, care în acest exemplu este o matrice de bază, aveţi nevoie pentru a trimite datele la sistemul de caching. Acest lucse face printr-un apel la set metoda de Memcached clasă.

Primul argument este numele de cheie, care ar trebui să fie unic, deoarece acesta este modul în care va prelua această informaţie.

$ Cache-> set ("Uniquekey", $ SampleData, fals, 86400);

Al doilea argument este date eşantion pentru a stoca în memoria cache.

$ Cache-> set ("uniquekey", $ SampleData, fals, 86400);

Memcached are capacitatea de a stoca datele într-o formă comprimat, care este stabilită de al treilea argument. Această opţiune este o adevăratsau fals pavilion.

$ Cache-> set ("uniquekey", $ sampleData, false, 86400);

Argumentul patra şi ultima determină cât de mult datele din cache ar trebui să rămână în viaţă în câteva secunde. În acest exemplu, datele ar puterămâne în viaţă pentru 24 de ore.

$ Cache-> set ("uniquekey", $ sampleData, fals, 86400);

Opţiunea de expir ă memcached de date nu poate depăşi 2592000 (30 zile).

$ Cache-> set ("uniquekey", $ sampleData, fals, 86400);

După cum puteţi vedea, codul necesar pentru a salva datele la cache-ul este destul de simplă şi îl face foarte uşor să se adapteze în aplicaţiileexistente.

Aici este scriptul exemplu complet pentru salvarea datelor în cache. <? Php

$ Cache = new Memcache; $ cache-> connect ("localhost", 11211);

$ SampleData = array ("mere", "portocale", "banane", "vafe");

$ Cache-> set ("uniquekey", $ sampleData, fals, 86400);?>

Se incarca datele din cache

Odată ce aţi stoca informaţiile în memoria cache, procesul de recuperare că informaţia este o chestiune de asteptare o metodă de a Memcache

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

302 of 362 11/9/2

Page 303: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 303/362

 

clasă. Această metodă acceptă un argument, care este cheia pe care le-aţi utilizat pentru a salva datele din cache.

$ Rezultat = $ Memcache-> get ("uniquekey");

Asta este tot ce există de încărcarea informaţiilor cache. După cum puteţi vedea, datele de încărcare din cache-ul este foarte similară cu procesulgeneral de lucru cu baza de date. Acest lucru inseamna ca nu este greu să se integreze perfect în codul existent.

Servere de Management

memcached sistem de caching poate fi instalat pe aceeaşi maşină server-ul dvs. Web ruleaza pe. Cu toate acestea, are performanţe mai bune încazul în care este adăugat la o serie de alte maşini. Aceste maşini suplimentare nu trebuie să fie pe acelaşi domeniu, locaţie, sau chiar să fie tot cece puternic din punct de vedere hardware.

Adăugarea de noi servere

Aveţi posibilitatea să utilizaţi connect () Pentru a adăuga noi servere, dar există o funcţie mai bună, addServer () , Care nu utilizeazăresurse cât mai multe şi stabileşte doar o conexiune la reţea atunci când este necesar. Aveţi posibilitatea să adăugaţi cât mai multe servere, dupăcum doriţi, dar ele vor fi folosite numai atunci când se solicită de către sistemul.

 Închiderea unei conexiuni

Procesul de inchidere a unei conexiuni server de cache se face printr-un apel la close () metodă. Această metodă nu va închide conexiunipersistente. Aceste conexiuni sunt închise numai în cazul în care serverul Web este oprit sau repornite.

$ Cache = new Memcache; $ cache-> close ();

Ştergerea unui element din cache

Elementele vor fi şterse automat din memoria cache, atunci când expiră, dar nu este mai puţin frecventă care poate doriţi să eliminaţi de dateimediat. Ştergere () metoda acceptă două argumente. Primul argument este cheia pentru a se potrivi şi a şterge. Al doilea argument este o întârzietimeout în cazul în care serviciul de caching va aştepta această sumă de timp înainte de a scoate valoarea.

Aveţi posibilitatea să utilizaţi această metodă pentru a accelera procesul de eliminare a anumitor elemente prin setarea timeout la cateva minutesau ore în viitor.

Mutarea înainte cu memcached

Acum, că aveţi o înţelegere a modului de a instala, modifica, şi de a folosi memcached ar trebui să vedeţi o creştere substanţială de performanţă

Avantajul de a lucra cu memcached este puteti adauga mai multe servere ca sarcina devine mai exigente. Acest lucru continu ă pentru a eliminastresul din baza de date şi aplicaţiile dvs. face mai receptiv.

Memcached clasă oferă o metode de alte câteva pe care le pot fi utile, în funcţie de utilizarea dumneavoastră sunt destinate. Puteţi folosi, deasemenea, această memcached caching sistem cu mai multe limbaje de programare, dar focalizarea în această secţiune a fost PHP 5.

Back-up date nu este doar o celor mai bune practici pentru a asigura datele sunt stocate în siguranţă; backup pot fi de asemenea folosite pentru acurata periodic sistemul dvs. şi pentru a limita fişierele care sunt disponibile în sistem. Deseori veţi avea multe Oldfilename.php sautest.php fişierele pe întreg serverul tău ca pe tine de testare concepte mai mult cod. Problema cu aceste fişiere suplimentar este incetinestescanează directorul şi îl face mai greu pentru a gestiona fişierele care contează.

Fişier de managementRulează pe un server mai eficiente pot include minimizarea ceea ce este instalat pe server. În următoarea secţiune vă va învăţa cum să excludănon-fişiere folosite pentru a limita deasupra capului.

Gestionarea fişierele necesare

Dacă limita de server-ul dvs. de a avea doar cod activă şi se lasă de experimentare pentru un server de dezvoltare sau secţiune, veţi observa undirector de scanare şi căutarea creşte performanţa.

Acest lucru nu înseamnă că aceste fişiere care nu sunt necesare ar trebui să fie eliminat. Într-adevăr, că este exact opusul a ceea ce ar trebui să facăCele mai bune practici este de a crea copii de rezervă a expirat care caută aceste fişiere sau pur şi simplu au un sistem de backup, care susţine

 întregul server şi îl transferă la o locaţie la distanţă.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

303 of 362 11/9/2

Page 304: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 304/362

 

Limită de fişiere mai mari

Încercaţi să limiteze utilizarea fişierelor mai mari ori de câte ori este posibil. Aceste fişiere lua mai mult timp pentru a deschide si necesita maimulta memorie atunci când este deschis. Dacă nu sunt excluse, acestea lent, de asemenea, de stabilire a procesului de backup, care devine un aspmult mai în profunzime în secţiunea următoare.

A nu se păstra datele de backup pe aceeaşi unitate, deoarece v eţi avea o problemă şi mai mare de resurse.

Backup de management

Rularea de backup pe sistemul dvs. va asigura pentru a nu pierde fişierele necesare. Aceasta poate include fişiere ghidul de încărcat sauconfiguraţii de server de bază.

Cronometrat backup-uri

UNIX, servere Web ofera un serviciu numit cron, care pot fi configurate pentru a rula la o oră prestabilită pe baza informaţiilor de configurare.Puteţi găsi mai multe informaţii despre cron serviciu de către uita în sus pagina de manual pentru ea.

om cron

Aici este formatul unui crontab fişier, în cazul în care vă repetaţi ultima linie pentru fiecare nouă comandă. # Minute (0 - 59)

+----------------

Oră (0 - 23) +-------------

| +---------- Zi a lunii (1 - 31)

| | +------- Luna (1 - 12)

| | | +---- Zi a săptămânii (0 - 6) (Duminică = 0 sau 7)

I | | |

* * * * * * Comandă pentru a executa

Toate cron de locuri de muncă sunt situate în acelaşi fişier, care este în mod normal, încărcat prin tastarea următoarei comenzi:

crontab-e

În Windows, puteţi folosi Task Scheduler, care poate oferi aceeaşi funcţionalitate de bază.

Backup directoarele folosind PHP

Cu cron Sistemul, care poate rula o comandă la un moment dat, la dispoziţia dumneavoastră, puteţi construi un sistem de backup automat, careeste numit de către cron. Aceste copii de rezervă pot fi executate în orice moment, dar dacă nu aveţi o cerinţă specială, cel mai bine este să lecurgă din momentul în serverul tau intalneste cea mai mică sumă de stres.

Prima parte a script-ul de backup este definirea directorul de backup. Această porţiune este construit ca o matrice, care este folosit pentru a permmai mult de un director să fie susţinute.

$ Dirs = array ("/ var / www / vhosts / example.org / myfiles");

backupDir defineşte în cazul în care fişierul de arhivă este salvat după ce este creat.

$ BackupDir = "/ var / www / vhosts / example.org / backups";

O dată este stocată care este folosit ca nume de fisier arhiva. Aveţi posibilitatea să modificaţi numele de arhiva pentru a include ore şi minute, dacvă decideţi să creaţi mai mult de o copie de rezervă pe zi.

$ Data = data ("m-d-y ');

Nucleul de script de backup este într-o foreach buclă. Această buclă este responsabil pentru copierea de rezervă fiecare director definite înmatrice. Pentru acest exemplu, există doar un singur director definite, astfel încât aceasta bucla va rula o singură dată.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

304 of 362 11/9/2

Page 305: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 305/362

 

foreach ($ dirs ca $ dir) {

}

Continuând cu scenariul, secţiunea următoare se află toate în cadrul foreach buclă. Prima parte este de a utiliza preg_replace pentru aelimina toate, dar numele directorului de la $ Dir variabilă. Acest lucru este trecut printr-o altă preg_replace pentru a defini numele arhiva

$ Dir = preg_replace ('/ \ /$/','', $ dir); $ archiveName = preg_replace (' /A(-*) \ /.*?/', $ Dir);

După ce definiţi numele arhiva, următorul pas este de a construi comanda care va crea fişierul arhivă.

$ TgzName = ". {$ ArchiveName} - {$ data} tgz"; $ tgzFile = "{$ backupDir} / {$ tgzName}"; $ backupCmd ="gudron czf {$ tgzFile} {$ archiveName}";

$ BackupCmd variabilă este trecut în sistemul de comandă, care informează PHP pentru a executa comanda a trecut-in la nivel de sistem alserverului Web. Acest lucru ar fi la fel ca de executare comanda in command prompt sau terminal.

$ Rezultat = sistem ($ backupCmd "2> & 1".);

Pentru scopuri de depanare poate doriţi să ieşire comanda în cazul în care apare o eroare, precum şi comanda iniţială pentru a asigura structuraeste bine definit.

de imprimare "Command:". $ BackupCmd. "<br />"; De imprimare "Rezultat:". $ Rezultat;

Acesta este sfârşitul de fişier script de backup. După cum puteţi vedea, structura a acestui script este simplu şi singurul aspect important estefunctionarea sistemului, care ar putea fi dezactivate în unele medii.

Aici este script-ul completat, pe care le de referinţă în crontab fişier pentru a automatiza procesul. <? Php

/ / Fişierul copie de rezervă

$ Dirs = array ("/ var / www / vhosts / example.org / myfiles"); $ backupDir = "/ var / www / vhosts /example.org / backups";

$ Data = data ("m-d-y ');

foreach ($ dirs ca $ dir) {

$ Dir = preg_replace ('/ \ /$/','', $ dir); $ archiveName = preg_replace (' /A(-*) \ /.*?/', $ Dir);

$ TgzName = ". {$ ArchiveName} - {$ data} tgz"; $ tgzFile = "{$ backupDir} / {$ tgzName}";

$ BackupCmd = "gudron czf {$ tgzFile} {$ archiveName}";

$ Rezultat = sistem ($ backupCmd "2> & 1".);

de imprimare "Command:". $ BackupCmd. "<br />";

de imprimare "Rezultat:". $ Rezultat;

} ?>

Copierea de rezervă a fişierelor importante este o modalitate de a menţine un sistem eficient. Cu toate acestea, baza de date este un alt aspect caretrebui s

ăfie cur

ăţate periodic. Niciodat

ănu ve

ţi dori s

ăelimina

ţi din gre

şeal

ăinforma

ţii importante, deci este o idee bun

ăsă

instituie un sistem dbackup pentru aceasta, de asemenea.

Cu excepţia a câteva comenzi, script-ul de backup de date este foarte similar cu fişierul script de backup şi pot fi combinate într-un script debackup, care este explicat în secţiunea următoare. Dacă alegeţi să combine cele două scripturi aţi putea dori să limiteze directoarele de backup. Încaz contrar, copiile de rezervă ar putea duce la performanţe mai slabe.

Utilizarea PHP la spre spate sus baze de date

Aşa cum aţi învăţat în secţiunea anterioară, aveţi posibilitatea să atribuiţi scripturi automate de rezervă pentru a crontab fişier. Un alt script debackup comune este unul care se ocupă de bazele de date. La fel ca fişierul copie de siguranţă, trebuie să vă mutaţi, apoi le într-un director de ladistanţă pentru a asigura dimensiunea fişierului adăugată nu afectează serverul live.

Veţi găsi că, în sistemul dvs. începe să crească poate doriţi să investească într-un server de backup care nu are nevoie de multe resurse de deoarec

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

305 of 362 11/9/2

Page 306: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 306/362

 

ar fi folosit exclusiv pentru a fi păstrate. Acest lucru nu este un element necesar, dar vă oferă un nivel supl imentar de protecţie cu datele dvs.,precum şi face server-ul dvs. trăi mai eficiente.

Prima parte a script de backup de date este de a defini detaliile conexiunii MySQL.

$ DbHost = "localhost"; $ dbUsername = "root"; $ dbPassword = "treci";

Baza de date pentru acest exemplu este un magazin de aplicaţii carte, dar ar putea modifica baza de date pentru a se potrivi oricare dintre multebaze de date va avea cea mai mare parte probabil în sistemul dumneavoastră.

$ Dbname = "librărie";

Dacă aţi definit aceste variabile într-o altă parte a cererii dumneavoastră, aveţi posibilitatea să încărcaţi pur şi simplu acel fişier de configurarepentru a se asigura numai valorile trebuie să fie actualizate o dată. Sunteţi înlocuiţi ultimele patru linii cu o simplă include sau necesitaapel.

necesită "/ calea / catre / de configurare / dbConnection.php";

Copia de rezervă de stocare director $ BackupDir este definit ca un şir de caractere în acest exemplu, dar ai putea modifica la o matrice cum a ţfăcut dumneavoastră în fişierul script de backup. Acest lucru este important dacă aveţi mai mult de o bază de date, cum fac majoritatea sistemelo

$ Backupdir = '/ var / www / vhosts / example.org / dbBackups';

Numele fişierului de arhivă trebuie să fie unic pentru a asigura arhivele nu suprascrie reciproc. Aveţi posibilitatea să creaţi un hash aleatoarefolosind timpul, care ar fi unic, dar ar face imposibil s ă se determine pe care aţi creat-o arhivă.

O solutie mult mai e leganta este de a adăuga bucăţi de la data la numele arhiva, care creează un nume de fişier uşor de citit şi unic. Mai degrabădecât a efectua apeluri multiple la data puteţi utiliza getDate () funcţie, care întoarce o matrice de informare data de referinţă pe care le puteţiapoi de nume-cheie.

$ Azi = getDate ();

Pentru a asigura dată este lizibil în cel mai bun mod posibil, o serie de dacă declaraţii este utilizat pentru a asigura valorile dată sunt întotdeaudouă cifre. Aceasta nu este o cerinţă de programare, dar, mai important o consistenţă care face mai uşor de citit de la data în numele fişierului.

$ Luna = $ astăzi [mon];

if ($ luni <10) {

$ Luna = "0". $ Luni;

}

$ Zi = $ astăzi [mday];

if ($ zile <10) {

$ Zi = "0". $ Pe zi;

}

$ Ani = $ astăzi [an];

Crearea Arhiva actual este rupt în trei părţi, dar toate în aceeaşi comandă. Prima parte face un apel la baza de date prin trecerea în datele de

conectare necesare.

$ MysqlCommand = "mysqldump - opt-h% s-u%% s-p% s s";

A doua parte a comenzii acceptă date MySQL si impinge-l în gzip funcţie, care este în cazul în care arhiva real este creat.

$ GzipCommand = "gzip>% s /% s-% s-% s-s.gz%";

Partea a treia şi ultima a comanda ia variabilele definite în secţiunile anterioare şi creează şir de comandă utilizând sprintf pentru a crea curatcomanda. sprintf Funcţia utilizează substituenţi şi acceptă argumente suplimentare pentru a umple aceste substituenţi. Acest lucru este la fel crearea unui şir de linie, dar creează un şir mai curat şi mai uşor.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

306 of 362 11/9/2

Page 307: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 307/362

 

f Definiţi directorul de backup in afara de calea de publicul ori de câte ori este posibil pentru a asigura browser-ul Web nu poate accesa backup-uri.

(| Treci gzipCommand $, $ host, $ user, $, $ db, $ backupdir, $ db, $ luna, $ ziua, $ $ mysqlCommand ani""..) = $ Run_command sprintf;

Ţeavă | Caracterul este o comandă specială care spune sistemului pentru a captura de ieşire ale comenzii la stânga al conductei şi trece-l în funcdefinită pe partea dreapta a conductei.

În acest exemplu, datele MySQL este capturat si trecut în gzip apel.

Ultimul pas în script de backup de date este de a face de fapt apelul de sistem, care adună date MySQL şi creează fişierul arhivă.

sistem ($ run_command);

Sistemul de () comandă nu este disponibil, dacă este dezactivată în php.ini fişier sau dacă safe_mode este activat.

Aici este script-ul complet, pe care aveţi posibilitatea să modificaţi rapid şi se adaugă la dvs. existent crontab. Puteţi combina chiar douascripturi de backup şi se adaugă în mai multă funcţionalitate. Exemplele anterioare sunt menite pentru a obţine ai început.

<? Php

# / Usr! / Bin / php

/ / Necesită 'connectfile.php ";

$ DbHost = "localhost"; $ dbUsername = "root"; $ dbPassword = "treci"; $ dbname = "librărie";

$ Backupdir = '/ var / www / vhosts / example.org / dbBackups'; $ luna = $ astăzi [mon];

if ($ luni <10) {

$ Luna = "0". $ Luni;

}

$ Zi = $ astăzi [mday];

if ($ zile <10) {

$ Zi = "0". $ Pe zi;

}

$ Ani = $ astăzi [an];

$ MysqlCommand = "mysqldump - opt-h% s-u%% s-p% s s"; $ gzipCommand = "gzip>% s /% s-% s-% s-s.gz%";

(| Treci gzipCommand $, $ host, $ user, $, $ db, $ backupdir, $ db, $ luna, $ ziua, $ $ mysqlCommand ani""..) = $ Run_command sprintf;

sistem ($ run_command);?>

În acest capitol, ati invatat diverse tehnici cu privire la modul de a menţine un server Web scalabila si mai eficiente. Acest lucru a cuprins subiectede modificare a fişierelor de configurare Apache, limitator de ceea ce devine încărcat, şi dezactivarea eroare de logare pentru a îmbunătăţiperformanţa generală.

Apoi au învăţat cum să optimizaţi MySQL, care pot cont pentru o largă majoritate de blocaje într-o aplicaţie şi poate chiar bule până la a consumaresursele serverului Web.

În partea finală a capitolului, ai au fost introduse pentru a memcached, care a fost folosit pentru a construi un sistem de înaltă performanţăcaching, care a eliminat majoritatea aeriene din baza de date.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

307 of 362 11/9/2

Page 308: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 308/362

 

Utilizarea fiecare dintre aceste tehnici pe oricare din proiectele de dezvoltare va conduce la o performan ţă mai bună. Hardware-ul nou nu arenevoie să fie singura soluţie dacă optimizaţi în mod corespunzător server-ul dvs. Web folosind aceste tehnici.

Puteţi, de asemenea aflat despre noi instrumente care vă pot ajuta în optimizarea sistemului folosind o abordare grafică în loc de comandătradiţionale prompt.

Rather au decât la sfârşitul carte cu o listă de bază, m-am gandit un sistem complet dezvoltat aplicaţie de redare video-ar permite să înţeleagă pedeplin procesul de construire a unei cereri.

Acest capitol utilizează diferite concepte şi tehnologii de învăţat în capitolele anterioare. Vă recomandăm lectură cei prima, dacă nu sunt doarcurios cu privire la tipurile de aplicaţii pe care se pot dezvolta folosind Flash şi PHP sau deja au o familiaritate cu Flash şi PHP.

Acest capitol este împărţit în cinci părţi, fiecare clădire în secţiunea anterioară şi care rezultă într-un jucător complet, video PHP-driven. Puteţi luade asemenea, conceptele şi componentele dezvoltate în acest capitol şi să le utilizeze în propriile proiecte. De exemplu, componenta de conectareva fi dezvoltat ca un modul stand-alone, care vă permite să-l picătură într-o altă aplicaţie cu modificarea foarte putin.

Flash ofera o gama larga de functionalitate. Posibilităţile de ceea ce se poate dezvolta folosind Flash sunt limitate doar de imaginaţia şi de timpultau.

Video este un atu foarte valoros pe Internet cu avansarea de conexiuni de bandă largă de mare viteză. Flash este cel mai bun mod de a l ivra film dcauza larga disponibilitate a Flash Player pentru toate browserele web cele mai populare.

Flash permite dezvoltatorilor să construiască un player video şi să se asigure că cea mai largă audienţă posibilă va fi capabil să-l vedea. Deasemenea, nu doare faptul că

 În acest capitol

Folosind un player video de bază

Construirea unui player video în Flash şi PHP

Lucrul cu video de urmărire

Construirea unei componente de conectare utilizator in Flash

Finalizarea video player 

Adobe a dezvoltat un player complet funcţional film unic, care permite dezvoltatorilor să includă cu uşurinţă într-un proiect existent.

De fapt, construirea unui player video în Flash de bază, după cum se arată în figura 17.1. necesită foarte puţine linii de cod.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

308 of 362 11/9/2

Page 309: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 309/362

 

Începeţi prin glisarea unui FLVPlayback componenta din panoul de Components la Stage. Dă acest jucător nou un nume de instanţă myPlayeşi deschideţi panoul Acţiuni.

Pentru simplitate, utilizaţi una dintre fişierele video de proba, care prevede Adobe pentru testare:

www.helpexamples.com / flash / video / water.flv

FIGURA 17.1

FLVPlayback component video afişate pe scena

n.vV

H

I 4

Următorul pas este de a se ta proprietatea sursa video player indicând aceasta la dosar proba FLV:

myPlayer.source = "http://helpexamples.com/flash/video/ water.flv ";

Testaţi film şi ar trebui să vedeţi de încărcare video de proba, apoi redarea începe automat. Felicitări, aţi jucat un FLV in Flash, folosindprecompilate componenta video player.

Video player-ul are o colectie destul de mare de metode şi proprietăţi, dar unele dintre cele mai comune sunt legate de controlul de redare. De

exemplu, amintiţi-vă modul în care a jucat film după ce a fost încărcat? Acest lucru nu poate fi rezultatul dorit tot timpul, astfel încât player videovă permite de a modifica acest comportament prin setarea autoplay de proprietate fals.

myPlayer.source = "http://helpexamples.com/flash/video/

water.flv "; myPlayer.autoPlay = false;

Acum, în cazul în care sarcinile video, asteapta un apel la joacă metodă înainte de a începe redarea. Această funcţionalitate este cel mai frecvenutilizat pe site-uri web interactive pentru a asigura video sau sunetul nu ajunge nimeni la probleme în timp ce vizualizaţi un site. În mod normal,

 început de către utilizator făcând clic pe un buton sau ceva similar, să îmbunătăţi funcţionalitatea şi se adaugă un eveniment simplu mouse-ulpentru a porni înregistrarea video.

Puteţi începe prin adăugarea unui buton de pe scenă şi dându-i un nume de instanţă myPlayBtn. Apoi modifica codul şi se adaugă funcţia detratare a mouse-ului:

myPlayer.source = "http://helpexamples.com/flash/video/

water.flv "; myPlayer.autoPlay = false;

 myPlayBtn.addEventListener (MouseEvent.CLICK, beginPlaybackHandler);

Funcţia beginPlaybackHandler (e: MouseEvent): void {

 myPlayer.play ();

}

Puteţi, de asemenea, doriţi ca utilizatorii dvs. să fie în măsură pentru a opri redarea unui clip video. Acest lucru este aproape identic cu procesulredarea unui clip video.

Începeţi prin adăugarea pe alt buton pe scena, cu numele de instanţă myStopBtn. Apoi se adaugă tratare a evenimentului nou şi atribuiţi-l labutonul Stop, cum ar fi:

myPlayer.source =

"http://helpexamples.com/flash/video/water.flv"; MyPlayer.autoPlay = false;

myPlayBtn.addEventListener (MouseEvent.CLICK, beginPlaybackHandler);

Funcţia beginPlaybackHandler (e: MouseEvent): void {

myPlayer.play ();

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

309 of 362 11/9/2

Page 310: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 310/362

 

}

 myStopBtn.addEventListener (MouseEvent.CLICK, stopPlaybackHandler);

Funcţia stopPlaybackHandler (e: MouseEvent): void {

 myPlayer.stop ();

}

Pentru simplitate, componenta player video are capacitatea de a fi jupuite, ceea ce înseamnă că nu trebuie să creeze o interfaţă personalizată.Aceasta încarcă obicei pielea într-un set implicit a controalelor de redare.

De fapt, Adobe oferă o listă mare de skin-uri, fiecare în diferite culori sau cu selectii diferite de butoane şi de funcţionalitate. De exemplu, aici esteexemplul cel mai frecvent utilizate. Acest pielea este un set complet de controale care este plasat sub componenta video player. Văzând cumaceasta a pielii, controalele de redare de bază, puteţi înlocui tratare a mouse-ului existent şi de a folosi versiunea intern:

myPlayer.source = "http://helpexamples.com/flash/video/

water.flv "; myPlayer.autoPlay = false;

myPlayer.skin = "SkinUnderPlayStopSeekMuteVol.swf";

Pielea playerul v ideo trebuie să fie în acelaşi director ca SWF dumneavoastr ă. Puteţi seta, de asemenea, pielea utilizând Inspector Component.

Pielea poate fi găsită în acelaşi director ca filmul Flash odată ce aţi selectaţi cel puţin o piele de la inspectorul de proprietate.

După cum puteţi vedea, funcţionalitatea componentei de redare video vă permite să construiască un jucător de bază destul de repede. Problema această componentă este întâlnită atunci când doriţi să joace mai mult de un film sau chiar adauge categorii de filme.

Din fericire, Adobe a dezvoltat o componentă minunat şi chiar a făcut uşor de utilizat pe tine propriu proiecte personalizate de dezvoltare, pe car înveţi să faci mai târziu în acest capitol. Veti crea şi adăuga funcţionalităţi suplimentare pe care doriţi.

În secţiunea anterioară aţi învăţat cum să dezvolte un player video de bază, cu un fişier sursă hard-coded, si a mers destul de bine. Problema esteacest rezultat nu este scalabilă şi într-adevăr nu oferă nici o re-utilizare, care este crucială atunci când construirea unei cereri.

Noţiuni de bază Jucătorul aplicaţie video pe care le dezvolta, în această secţiune a fost deja concepute, după cum se arată în figura 17.2, astfel încât să vă puteţiconcentra pe partea de dezvoltare.

Playerul video precompilate este disponibil pe site-ul cărţii, unde puteţi găsi, de asemenea, de cerere completat pentru a obţine o idee de ceea ceva fi construirea ca un produs finit.

Acest player video este rupt în trei părţi. Prima parte este componenta MySQL care stochează referinţele video şi categorii.

FIGURA 17.2

Exemplu de proiectare video player va fi de lucru în acest capitol

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

310 of 362 11/9/2

Page 311: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 311/362

 

Construirea bazei de date şi tabelele MySQL

Începeţi prin deschiderea editorul dvs. favorit şi a bazei de date a crea o noua baza de date pentru acest proiect. Puteţi denumi această bază de daorice doriţi. Am folosit book_videoplayer, dar aceasta este doar o sugestie.

După ce baza de date este creată, puteţi să începeţi să adăugaţi structura schemei de masă pentru video şi de date categorii. Pentru aceasta aplicatabelele au fost deja definite, dar nu ezitaţi să le uite peste pentru a obţine o mai bună înţelegere a ceea ce ei sunt responsabili pentru.

Tabelele din prezenta cerere sunt împărţite pentru a se asigura că sunt optimizate şi să înţeleagă cu uşurinţă care tabel este responsabil pentrufiecare sarcină. Cel mai bine este de a diviza funcţionalitate în mai multe tabele, de asemenea, mentionat ca normalizarea. Procedând astfel, asigubaza de date va fi cea mai eficientă şi îi permite să se extindă.

Structura tabelului din această aplicaţie este simplă. De exemplu, numele video, descriere, şi referinţele sursă se găsesc în tabelul de videoclipuricare este construit similar cu următorul:

CREATE TABLE "Clipuri" (

"Id" int NU (11) NULL auto_increment, "catid" int (11) NULL default, "nume" varchar (2 00) NULL default,"src" varchar (200) NULL default, "descriere" de text, "count" int (11) default 0, "activă" varchar (1)default '1 ', PRIMARY KEY ("id")) ENGINE = MyISAM;

După cum puteţi vedea, acest tabel este nimic special, dar se ocupă în centrul de gestionare a cererii. Puteţi adăuga mai multe coloane dacă vădecideţi doriţi să extindeţi privire la cererea iniţială.

O bază de date nu este opţiunea de stocare numai. Aveţi posibilitatea să utilizaţi un fişier XML sau chiar hardcode căile video in Flash, dar ideeaeste de a dezvolta o aplicaţie extensibil. Acest lucru înseamnă că baza de date este opţiunea cea mai logică pentru a stoca datele video şi categoriaBaza de date oferă, de asemenea, abilitatea de a extindă şi să crească pe măsură ce adăugaţi mai multe caracteristici la cererea dumneavoastră.

Al doilea tabel trebuie să adăugaţi este tabelul de categorii, care stochează o id utilizate în PHP în secţiunea următoare, precum şi numelecategoriei care este afişat în aplicaţia Flash.

CREATE TABLE "categorii" (

"Id" int NU (11) NULL auto_increment, "nume" varchar (100) NULL default, "activă" varchar (l) default '1', PRIMARY KEY ("id")) ENGINE = MyISAM;

Adăugarea de date eşantion la tabelele de

Puteţi prefill acum tabelele pentru a testa toate, după cum se arată în figura 17.3. Aveţi posibilitatea să utilizaţi editorul de baze de date favorit şiadăugaţi date eşantion de mana, sau de a folosi proba următoarele INSERT declaraţii care adaugă câteva categorii şi clipuri video:

INSERT INTO categorii (nume) VALUES ("categoria 1 '); INSERT INTO categorii (nume) VALUES (" categoria 2");

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

311 of 362 11/9/2

Page 312: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 312/362

 

INSERT INTO Clipuri (catid, nume, VALORI (1, 'propoziţii Video 0:1 ", Iată');

INSERT INTO Clipuri (catid, nume, VALORI (2, 'propoziţii Video 0:2 ", Iată');

src, descriere) "sample.flv", "Video cool

src, descriere) "sample.flv", "Video cool

FIGURA 17.3

Detalii de tabelul de propoziţii afişate în browser-ul interogare MySQL

Testarea bazei de date

După ce de încărcare a datelor în baza de date îl puteţi testa. Acest lucru se poate face prin construirea unui fi şier PHP simplu care se conecteazăbaza de date şi execută o interogare foarte simplu. Aţi învăţat cum să se conecteze la baza de date în capitolele anterioare. Pentru acest exemplu,aveţi nevoie pentru a defini detaliile conexiunii şi să facă un apel la mysql_connect funcţie.

<? Php

$ Link = mysql_connect ('localhost', mysql_select_db ("book_videoplayer"

'Root', 'parola' $ link);

?>

Când conexiunea este stabilită, următorul pas este de a construi interogarea SQL.<? Php

$ Link = mysql_connect ('localhost', 'root', 'parola'

mysql_select_db ("book_videoplayer", $ link); $ Catid = 1;

$ Query = sprintf ("SELECT * FROM categorii în cazul în care id =% d", $ catid);

?>

Ultimul pas este să se întoarcă ceva. Pentru simplitate, hai să afişa una dintre cele nume de categorii. <? Php

$ Link = mysql_connect ('localhost', 'root', 'parola'); mysql_select_db ("book_videoplayer", $ link);

$ Catid = 1;

$ Query = sprintf ("SELECT * FROM categorii în cazul în care id =% d", $ catid);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

312 of 362 11/9/2

Page 313: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 313/362

 

$ Rezultat = mysql_query ($ query, $ link); $ row = mysql_fetch_array ($ rezultat);

 print "Nume Categorie: <strong>". $ Row ['nume']. "</ Strong>";

?>

Salvaţi acest fişier ca sqltest.php în casa dumneavoastră Web server de directoare şi îl numesc prin utilizarea browser-ul Web preferate. Cânexecutaţi fişierul PHP, ar trebui să vedeţi de ieşire similare cu următoarele:

Categorie Nume: Categoria 1

Dacă vedeţi altceva, asiguraţi-vă că vă verificaţi detaliile conexiunii. În cazul în care pentru anumite motive aveţi o pagină goală, loc următoarealinie în partea de sus a fişierului dvs. pentru a forţa PHP pentru a afişa toate erorile potenţiale:

error_reporting (E_ALL);

Acum că aţi văzut un simplu executaţi MySQL interogare utilizând data pentru aceasta aplicatie, încercaţi de asteptare două tabele şi testareafuncţionalităţii aplicarea finală va avea. Doar două linii de cod care trebuie să fie modificate sunt de interogare SQL şi de ieşire.

<? Php

$ Link = mysql_connect ('localhost', 'root', 'parola'); mysql_select_db ("book_videoplayer", $ link);

$ Catid = 1;

$ Query = sprintf ("SELECT v.name DIN Clipuri V, categoriile C, unde v.catId = c.id ŞI c.id =% d", $catid);

$ Rezultat = mysql_query ($ query, $ link);

în timp ce ($ row = mysql_fetch_array ($ rezultat))

{

 print "Nume Video:". "<strong>". $ Row ['nume']. "</ Strong>";

}

Când executaţi acest cod, ar trebui să fie prezentat o listă de videoclipuri pentru această categorie specifice. Acest cod Cautari tabelele de categorişi video şi returnează toate videoclipurile care împart acelaşi ids. Aceasta este cea mai de bază se alăture de tabele MySQL, dar funcţioneazăperfect pentru această aplicaţie.

Remoting integrare

Următorul pas este de a construi PHP efectiv care va fi numit de către flash utilizând remoting. De fapt, această secţiune este similară în fapt veifolosi AMFPHP. Dar porţiunea actual de dezvoltare dincolo de acest lucru este di ferit.

Informaţii r'rj "fy Mai multe despre remoting pot fi găsite în Capitolul 8.

Avantajul de a construi această aplicaţie utilizând remoting este vă oferă posibilitatea de a testa mai uşor. Acest lucru se întâmplă deoarece puteţconstrui clasele AMFPHP şi apoi testati-le folosind standard de cod PHP sau vizualizatorul browser-ul inclus că navele cu AMFPHP.

De asemenea, aveţi posibilitatea de a reutiliza aceste clase în alte proiecte sau cu porţiuni HTML aceluiaşi proiect. De exemplu, să presupunem c

doriţi să construiţi un panou de utilizator care poate afişa cele mai recente filme de o anumită categorie. Puteţi face acest lucru prin construirea unpagini HTML şi foarte de bază de asteptare clasa remoting pentru a returna datele necesare, la fel ca tine ar fi, în Flash.

Baza de date conector de clasă

Claselor în această cerere sunt dependente în baza de date. Mai degrabă decât să definească detaliile conexiunii în fiecare clasă, este mai binepentru a construi o clasa conector bază de date care este responsabil pentru efectuarea conectarea iniţială şi stocarea acreditările de conectare.

Clasa conector are cinci variabile privat. Primele patru se definească informaţiile de conectare. <? Php

clasa {DatabaseConnector

 privat $ host = "localhost"; privat ghidul de $ = "root"; $ privat treci = "parola"; privat $ dbname ="book_videoplayer";

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

313 of 362 11/9/2

Page 314: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 314/362

 

?>

Variabila cincea este utilizat pentru a stoca resursa legătură într-bazei de date id.

$ legătură într-privat = null;

Constructorul pentru această clasă este gol, deoarece variabilele privat sunt definite în prealabil.

Funcţia DatabaseConnector () {}

Privată conectaţi metoda este numită numai atunci când o conexiune existentă nu este găsit. Această metodă trece în detaliile conexiunii privşi magazine de resurse id în $ This-> legătură într- de proprietate, care este vizibilă numai pentru această clasă.

funcţiei de conectare privată () {

$ This-> legătură într-= mysql_connect ($ this-> gazdă, $ this-> utilizator, $ this-> trecere);

mysql_select_db ($ this-> DBNAME, $ this-> legătură într-);

}

Cea de a doua metodă, getConnection, este setat ca clase publice, astfel încât alte au acces la aceasta. Cu toate acestea, observaţii pe care ledefinesc ca fiind private pentru a se asigura clase remoting nu o poate accesa. Această metodă verifică mai întâi pentru o resursă conexiuneexistentă şi, dacă nu este găsit, un apel la conectaţi metodă care se face.

Ultimul pas a acestei functii este de a reveni resursa conexiune activă, care este folosit în alte

clase.

/**

* Ia conexiune de date

* © acces privat

* © întoarce legătură într-baze de date, care urmează să fie utilizate în alte apeluri SQL * /

getConnection funcţia publică () {

if ($ this-> legătură într-== null) {

$ This-> connect ();

}

return $ this-> legătură într-;

}

După cum puteţi vedea, această clasă este foarte util, deoarece are grijă de stocare a conexiune de date. În plus, dacă nu este găsit, se creează unu

Aici este clasa de completat, care ar trebui să fie salvat ca DatabaseConnector.php în directorul proiectului dvs., astfel încât să poată fiaccesate de către alte clase.

<? Php

clasa {DatabaseConnector

privat $ host = "localhost"; privat ghidul de $ = "root"; $ privat treci = "parola"; privat $ dbname ="book_videoplayer";

$ legătură într-privat = null;

Funcţia DatabaseConnector () {}

funcţiei de conectare privată () {

$ This-> legătură într-= mysql_connect ($ this-> gazdă, $ this-> utilizator, $ this-> treci

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

314 of 362 11/9/2

Page 315: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 315/362

 

);

mysql_select_db ($ this-> DBNAME, $ this-> legătură într-);

}

/**

* Ia conexiune de date

* © acces privat

* © întoarce legătură într-baze de date, care urmează să fie utilizate în alte apeluri SQL * /

getConnection funcţia publică () {

if ($ this-> legătură într-== null) {

$ This-> connect ();

}

return $ this-> legătură într-;

}

} ?>

Video clasa

Acum, că conectorul clasa bazei de date este completat, în clasa următoare de a dezvolta este pentru gestionarea video. Aceasta clasa returneazălista de video bazate pe video sau categorie id.

Prima parte a acestei clase este de a încărca în fişierul bazei de date conector, pe care această clasă video se va extinde.

<? Php

"DatabaseConnector.php" require_once;?>

Poate că vă amintiţi extinde din clasele ActionScript aţi dezvoltat în exemplele anterioare. Sintaxa în PHP este identic. Practic, să definească înfuncţie de clasă şi de clasă se va extinde, similară cu următoarea:

<? Php

require_once "DatabaseConnector.php";

 Video clasa extinde DatabaseConnector {

}

?>

Clasa video are o singură metodă, getVideos. Această metodă acceptă un clip video şi categorie id ca

argumente separate, pentru a determina care Clipuri pentru a reveni. /**

* Ia Clipuri

* © acces de la distanţă

* © returnează matrice de clipuri video * /

getVideos funcţia ($ categoryID =- 1, $ videoID =- 1) {

}

Prima parte a acestei metode trebuie să se verifice pentru valide idde a asigura SQL nu va fi compromisă. Acest pas nu este necesar, dar asigurăcererea dumneavoastră este mai sigur.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

315 of 362 11/9/2

Page 316: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 316/362

 

if ($ categoryID == -1 | | strlen ($ categoryID) == 0) {

trigger_error ("ID-ul Categorie necesare pentru a reveni lista de film");

}

Această declaraţie solicită trigger_error dacă o categorie de invalid sau lipsă id este trecut inch Motivul pentru utilizarea trigger_errse datorează faptului că AMFPHP graţios se opreşte toate procesele în continuare şi întoarce eroarea dorit pentru a script-ul de asteptare, în acestcaz, care va fi ActionScript.

Următorul pas este de a atribui variabilele pentru această metodă şi de a crea o matrice care va detine datele video care este transmis înapoi laActionScript.

VidSQL $ = ""; $ rânduri = array ();

Odată ce bază au fost definite, următorul pas este de a determina dacă script-ul ar trebui să fie căutaţi pentru un singur film sau o listă a acestora.Aceasta atribuie SQL corectă în cazul în care codul ar trebui să fie doar în căutarea pentru un video.

/ / Uite pentru video specifice?

if ($ videoID = -1 & & strlen ($ videoID) = 0!) {

$ VidSQL = "ŞI v.id =". $ VideoID;

}

Link-ul de baze de date poate fi definită printr-un simplu apel la getConnection metoda de DatabaseConnector de clasă, deoarece Videclasa este faptul că extinderea. Locale $ Legătură într- variabilă este atribuit conexiune activă care urmează să fie utilizate în restulinteracţiunii MySQL în această funcţie.

$ Link = $ this-> getConnection ();

Interogarea bazei de date este destul de complex, deoarece controalele două tabele de date şi returnează o listă video bazate pe această verificareAceastă interogare este similar cu cel pe care îl construit la testarea din baza de date de la începutul acestei secţiuni. Această interogare utilizeazăVidSQL, care va fi fie un plus valabil pentru SQL sau un şir gol atunci când nu caută pentru un clip video specifice.

$ Query = sprintf ("SELECT v.name, v.src,

v.id ca "vid", c.name ca "pisică", v.description, v.count din categoriile C, Clipuri v UNDE v.catId =c.id ŞI v.catId =% d

ŞI v.active = 1 "$ vidSQL, $ categoryID).;

Partea specială a această interogare SQL este modificarea de nume de coloane, cum ar fi v.id ca "vid"

Acest lucru este realizat, deoarece setul de rezultate are numele id în ambele tabele şi numai un singur nume pot fi returnate. Dacă vă păstraţidenumire standard, veţi avea acces doar la un singur tabel de id info. Stiind care unul va fi returnat este o chestiune de care ordinea în care acestsunt numite inch redenumirea modifică doar ResultSet, astfel încât să nu trebuie să vă faceţi griji cu privire la datele originale să fie afectate.

Următorul pas este de a executa interogarea MySQL şi de a prelua rezultatele, care sunt apoi prin loop si a trecut din funcţia ca o matricemultidimensională.

$ Rezultat = mysql_query ($ query, $ link);

Înainte de bucla este rulat, este o idee buna pentru a asigura câteva rânduri s-au întors de la interogare. Imposibilitatea de a face acest lucru averifica simplu ar putea rezulta într-o buclă fără sfârşit. Acest lucru poate dăuna server Web, deoarece nu vei mai probabil seama că are loc.

Această verificare se face simplu prin verificarea numărului de rânduri returnate, utilizând mysql_num_rows funcţie. Această funcţie returneao valoare numerică care reprezintă numărul de rânduri returnate în interogare.

if (mysql_num_rows ($ result) == 0) {

trigger_error ("nr Clipuri găsit"); return false;

}

Presupunând că un paşaport valabil ResultSet a fost găsit, următorul pas este la bucla prin intermediul rezultatelor şi umple variabila matriccare a fost definită anterior.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

316 of 362 11/9/2

Page 317: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 317/362

 

în timp ce ($ row = mysql_fetch_array ($ rezultat, MYSQL_ASSOC)) {

array_push ($ rânduri, $ row);

}

Ultimul pas a acestei functii este de a returna matrice de date video. Această metodă nu va ajunge la acest punct excepţia cazului în care date valivideo este gata pentru a fi transmise înapoi.

întoarcere $ rânduri;

Asta este tot ce există la Video clasă. Acest fisier ar trebui să fie salvat ca Videos.php. Aici este clasa de completat, care poate fi, de asemenegăsite în codul de carte de pe site-ul Web.

<? Php

require_once "DatabaseConnector.php";

Video clasa extinde DatabaseConnector {

/**

* Ia Clipuri

* © acces de la distanţă

* © returnează matrice de clipuri video * /

getVideos funcţia ($ categoryID =- 1, $ videoID =- 1) {

if ($ categoryID == -1 | | strlen ($ categoryID) == 0) {

trigger_error ("ID-ul Categorie necesare pentru a reveni lista de film");}

VidSQL $ = ""; $ rânduri = array ();

/ / Uite pentru video specifice?

if ($ videoID = -1 & & strlen ($ videoID) = 0!) {

$ VidSQL = "ŞI v.id =". $ VideoID;

}

$ Link = $ this-> getConnection ();

$ Query = sprintf ("SELECT v.name, v.src,

v.id ca "vid", c.name ca "pisică", v.description, v.count din categoriile C, Clipuri v UNDE v.catId =c.id ŞI v.catId =% d

ŞI v.active = 1 "$ vidSQL, $ categoryID);. $ Rezultat = mysql_query ($ query, $ link);

if (mysql_num_rows ($ result) == 0) {

trigger_error ("nr Clipuri găsit"); return false;

}

în timp ce ($ row = mysql_fetch_array ($ rezultat, MYSQL_ASSOC)) {

array_push ($ rânduri, $ row);

}

întoarcere $ rânduri;

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

317 of 362 11/9/2

Page 318: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 318/362

 

}

Clasa a II-pentru acest exemplu este clasa Categorie, care are, de asemenea, o metodă. Această metodă este responsabil pentru returnarea toatecategoriile de active la video player.

Înainte de metoda este creat, trebuie să încărcaţi în care să facă legătura Bază de date, exact cum aţi făcut dumneavoastră în clasa Video.

require_once "DatabaseConnector.php";

Prima parte a getCategories Metoda este responsabil pentru crearea unui nou $ Rânduri variabila care va deţine categoriile întors din ba

de date. Variabila legătură într este umplut cu o conexiune bază de date activă, care va fi folosit în următoarele apeluri SQL.$ Rânduri = array ();

$ Link = $ this-> getConnection ();

Interogare SQL practic trage în toate categoriile care sunt active, ceea ce înseamn ă coloana activă este setat la o valoare de 1. Această interogare SQeste apoi trecut în mysql_query care este responsabilă pentru executarea de fapt, apelul SQL.

$ Query = "SELECT id, nume FROM categorii WHERE activ = 1"; $ rezultat = mysql_query ($ query, $ link);

dacă Declaraţie de controale pentru cel puţin un rând valid înainte de a continua şi va arunca o eroare dacă nu rânduri valide sunt găsite.Presupunând că rânduri valabile sunt găsite, o în timp ce buclă este utilizat pentru a umple $ Rânduri variabilă şi o dată bucla estecompleta $ Rânduri variabilă este returnat.

if (mysql_num_rows ($ result) == 0) {

trigger_error ("nr categorii de găsit"); return false;

}

în timp ce ($ row = mysql_fetch_array ($ rezultat, MYSQL_ASSOC)) {

array_push ($ rânduri, $ row);

}

întoarcere $ rânduri;

Asta este tot ce există la clasa Categorie, şi după cum puteţi vedea structura clasei categorie este destul de similar cu clasa video în secţiuneaanterioară.

Aici este clasa Categorie completat:

<? Php

require_once "DatabaseConnector.php";

Categorii clasa extinde DatabaseConnector {

* Ia categorii

* © acces de la distanţă

* © returnează matrice din categoriile * /

getCategories function () {

$ Rânduri = array ();

$ Link = $ this-> getConnection ();

$ Query = "SELECT id, nume FROM categorii WHERE activ = 1"; $ rezultat = mysql_query ($ query, $ link);

if (mysql_num_rows ($ result) == 0) {

trigger_error ("nr categorii de găsit"); return false;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

318 of 362 11/9/2

Page 319: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 319/362

 

}

în timp ce ($ row = mysql_fetch_array ($ rezultat, MYSQL_ASSOC)) {

array_push ($ rânduri, $ row);

}

întoarcere $ rânduri;

}

} ?>

Testarea claselor 

In acest moment ambele clase AMFPHP de serviciu au fost elaborate. Puteţi testa rapid de utilizare a acestora sau de a trece la partea de dezvoltaActionScript a acestei cereri. Testarea clasa este foarte simplu: vă creaţi în principiu, un nou fişier PHP, sunaţi la video sau categorie metodşi imprima rezultatul.

De exemplu, aici este un test simplu, de asemenea, mentionat ca unitate de testare: <? Php

include "amfphp / servicii / Videos.php ';

Clipuri video = $ nou ();

Lista $ = $ Clipuri-> getVideos (1);

print_r ($ lista);?>

Dacă aveţi acest exemplu din browser-ul ar trebui să vedeţi rezultate similare cu următorul exemplu:

Array (

[0] => Array (

[Nume] => propoziţii Video 01:01 [src] => sample.flv

[Vid] => 1

[Cat] => Categoria A

[Descriere] => Video foarte cool Aici [numărul] => 0

)

)

Trebuie să aveţi acum două clase completă, care pot fi utilizate în ActionScript dvs. pentru a interacţiona cu privire la conţinutul bazei de date.Următorul pas este de a construi porţiunea ActionScript a cererii, care este manipulat de către clase externe pentru reutilizare.

Avansate de video player de dezvoltare

În secţiunile anterioare ale acestui exemplu, aţi dezvoltat baza de date şi tabele. Apoi, construit servicii PHP care interacţionează cu tabelele bazede date. Următorul pas este de a dezvolta ActionScript care este responsabil pentru afişarea şi gestionarea video player.

Dacă te uiţi la video player, după cum se arată în figura 17.4, pe scena Flash veti observa, există patru părţi: principalele jucător componenta videcaseta meciului, lista de film, şi meniul drop-down, care va stoca categoriile video. Dacă deselectaţi totul făcând clic pe scena sau apăsareabutonului Esc, un document clasă cu numele VideoPlayer apare.

Aceasta clasa este în cazul în care cele mai multe video-player este gestionat de la, mai degrabă decât având codul direct pe Timeline. Acest lucrude asemenea, vă oferă opţiunea de a dezvolta într-un editor extern, cum ar fi FDT, sau puteţi folosi editorul de stand-alone că navele cu Flash.

Crearea clasa documentul

Începeţi prin crearea unui nou fişier ActionScript folosind editorul ActionScript din Flash şi denumiţi-l VideoPlayer.as. Salvaţi acest fişier îndirectorul aplicaţiei în cazul în care FLA dumneavoastră se află pentru a se asigura fişierul va fi încărcat. Puteţi utiliza, de asemenea, fişierul

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

319 of 362 11/9/2

Page 320: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 320/362

 

ActionScript care este prevăzută în sursa cărţii de pe site-ul Web.

FIGURA 17.4

Un video player care a fost deja conceput pentru tine

Ü Adobe Flash CS3 Professional [LoyinWindow.fla "J View File Edit Inserare Modificare Text Debug de control Comenzi Fereastr ăAjutor SEJQ

D "tf» un <# *% cu un ® ™ loi • (Sit

 j Intra in ferestre, la f * [ . o

. O Este 10 15 20 25 30 35 4a. 45 - SO. 6U fi.5: "- M SCi: vl-L FFI.

y- • □

B 5 LJ i L_ eu

Conectare Pentru a c ontinua

Usemante

Parolă q 

1

< >

După acest nou ActionScript fişier este creat şi salvat, este timpul pentru a începe dezvoltarea de scripting de bază care se ocupa de player video.Începeţi prin construirea schiţă de clasă şi să extindă clasa de MovieClip clasă, care este necesară pentru o document clasă.

Pachetul {

flash.display.MovieClip de import;

publice VideoPlayer clasa extinde MovieClip {

}

}

Acum, că clasa schiţă de bază este construită, puteţi începe să construiască funcţionalitatea reală. În plus faţă de MovieClip clasă, trebuie săimport două clase mai mult. Eveniment clasa va fi utilizat pentru toate manipulare eveniment de bază, şi net .* Pachetul va conţine toateclasele necesare pentru a comunica cu serviciul remoting.

flash.events.Event de import; flash.net de import .*;

Acest VideoPlayer clasa va avea nevoie de câteva proprietăţi definit, care vor fi stocate ca fiind private pentru a se asigura că acestea suntprotejate şi nu pot fi modificate accidental pe clase de externe. Proprietatea al doilea va stoca activ NetConnection, care este utilizat pentru a

interacţiona cu serviciul remoting. Veţi lucra cu acest lucru în secţiunea următoare de cod.

privat var gatewayURL: String; gateway-ul privat var: NetConnection; selectedCatID privat var: Numarul;

VideoPlayer constructor 

Functia constructor este responsabil pentru iniţializarea câteva proprietăţi, modificarea partea vizuala a ecranului video player, precum şi apelarcategorie metodă.

VideoPlayer function () {

gatewayURL = "http://localhost/amfphp/gateway.php"; GetCategories ();

videoPlayer.visible = false; videoListCombo.enabled = false;

}

getCategories metoda

Următoarea metodă în VideoPlayer clasa este getCategories () , Care este numit de la constructorul atunci când cererea ini ţializează.Această metodă începe prin crearea unei instanţe noi a Responder, care se ocupă de răspuns de la serviciul remoting.

getCategories a functiei publice (): void {

 var răspuns: răspuns = new Responder (categoryResponseHandler, onFault

);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

320 of 362 11/9/2

Page 321: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 321/362

 

}

Odată ce răspuns este definit, următorul pas este de a atribui poarta către o nouă instanţă a NetConnection clasă. Aceasta este în cazul în careapelul efectivă a serviciului remoting începe.

getCategories a functiei publice (): void {

var răspuns: răspuns = new Responder (categoryResponseHandler, onFault

);

gateway-ul = NetConnection noi ();

După ce gateway-ul a fost atribuite corect, următorul pas este de a conecta la serviciul de conectivitate, care trece calea de gateway-ul ca singurargument.

getCategories a functiei publice (): void {

var răspuns: răspuns = new Responder (categoryResponseHandler, onFault

);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

}

Ultimul pas în getCategories metoda este de a face apelul remoting. Aceasta defineşte serviciul pe care doriţi să vă conectaţi, precum şi trecede-a lungul răspuns să se ocupe atât de succes şi eşec răspunsurile.

getCategories a functiei publice (): void {

var răspuns: răspuns = new Responder (categoryResponseHandler, onFault

);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call ("Categories.getCategories", responder);

}

categoryResponseHandler metoda

Acum, că getCategories Metoda este finalizată, următoarea metodă este de a dezvolta categoryResponseHandler, care a fost definită îResponder instanţă. Această metodă se numeşte atunci când un paşaport valabil de înregistrări este întors de la serviciu remoting.

categoryResponseHandler private function (răspuns: Object): void {

}

Conţinutul acestei clase se ocupe de răspuns de date de la serviciul remoting şi popula ComboBox folosind aceste date de referinţă video. Primupas este de a permite ComboBox, altfel nu veţi avea posibilitatea de a adăuga conţinut nou la acesta.

videoListCombo.enabled = true;

Odată ce ComboBox este activat, următorul pas este de a adăuga primul element, care informează utilizatorul pentru a selecta o opţiune. Aceastopţiune implicit va avea o valoare de -1 până la avertizăm că aceasta nu este validă id. Ai putea folosi 0, în afară de faptul că este un act deidentitate valabil în baza de date.

videoListCombo.addItem ({etichetă: "Alege o date ...', Categorie: -1});

A pentru fiecare bucla este construit să se ocupe de toate elementele de răspuns. Acest lucru se va ocupa de orice număr de elemente videocare este esenţială, deoarece serviciul de remoting nu returnează acelaşi număr de fiecare dată, ca nu fiecare categorie are aceeaşi cantitate devideoclipuri.

pentru fiecare {(element var în răspuns)

videoListCombo.addItem ({etichetă: item.name, date: item.id});

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

321 of 362 11/9/2

Page 322: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 322/362

 

}

Această buclă are fiecare element din obiectul de răspuns şi atribuie numele şi id la ComboBox valori. Aceasta populează ComboBox şipermite utilizatorului să selecteze o categorie video.

Ultimul pas al categoryResponseHandlermetodă este de a atribui ascultător eveniment la ComboBox. Acest eveniment incendii ori de câtori elementul selectat din ComboBox componenta modificări.

videoListCombo.addEventListener (Event.CHANGE, categoryHandler);

categoryHandler metodacategoryHandler metoda este apelata ori de câte ori utilizatorul selectează un element diferit în ComboBox componenta exemplu.

categoryHandler private function (e: Event): void {... }

Această metodă se ocupă de procesul de validare din categoria selectată id. Efectivă categorie id se găseşte în selectedltem proprietate aevenimentului a trecut-in.

id var: Numărul = e.currentTarget.selectedItem . Datelor;

Această categorie id este validat folosind o declaraţie de bază condiţională care verifică pentru o valoare de -1, care a fost repartizat la elementulimplicit.

if (id == -1) întoarcere;

În cazul în care valoarea nu este găsit, atunci ştiţi id este valabil, şi categoria de id este atribuit selectedCatID proprietate care să permităaccesul uşor la categoria curenta id.

selectedCatID = id;

În sfârşit, un apel la getVideos Metoda se face pentru a încărca în lista de video bazate pe curent id.

getVideos ();

getVideos metoda

getVideos Metoda se numeşte atunci când un stil valabil este găsit. Aceasta metoda este folosita pentru a efectua apelul iniţial la serviciul deconectivitate, care va încărca lista corectă de clipuri video în funcţie de categoria stocate în metoda precedentă.

Numai o parte din această metodă, care este diferit de getCategories metoda este trecut în parametrii de apel metoda şi funcţia de succesalocate Răspuns.

getVideos a functiei publice (): void {

var răspuns: răspuns = new Responder ( videosResponseHandler,

onFault

);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call ("Videos.getVideos", responder, selectedCatID, ■ ');

}

Ai putea crea o conexiune de masterat şi de tratare a trece în aceste proprietăţi diferite, dar pentru simplitate, mai multe metode sunt folosite.

videosResponseHandler metoda

Una dintre cele mai mari metodelor în această cerere ar trebui să fie videosResponseHandler.

videosResponseHandler private function (răspuns: Object): void {

}

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

322 of 362 11/9/2

Page 323: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 323/362

 

Acest lucru se datorează faptului că această metodă este responsabil pentru încărcarea lista de film şi popularea ScrollPane componentă cuobiceiul VideoListItem active. Aceste bunuri pot fi găsite în bibliotecă Flash pentru acest proiect, astfel cum acestea au fost realizate pentrutine. Mai târziu în acest proiect să dezvolte ActionScript care se anexează la acele active.

Prima parte a acestei metode este de a defini nextY variabilă care compensează fiecare element din listă video şi creează un gol MovieClip,care este atribuit sursă proprietate a ScrollPane instanţă.

var nextY: uint = 5;

var listItem: MovieClip = new MovieClip (); videoList.source = listItem;

Cea mai mare parte a acestei metode se găseşte în interiorul pentru fiecare .. buclă. Această buclă trece prin fiecare element din listăraspuns video.

pentru fiecare {(element var în răspuns)

}

Fiecare trecere a buclei creează o nouă VideoListltem instanţă. Aceste instanţe obţine o tratare a evenimentului care le es te atribuită o destinade plasare unic în lista cu ajutorul nextY variabilă definit anterior.

var videoListItem: MovieClip = new VideoListItem (); videoListltem.y = nextY; videoListltem.x = 2;

videoListItem.addEventListener (VideoListItem.ITEM_CLICK, listltemHandler);

Partea următoare a buclei seturi proprietăţi particularizate ale videoListItem care defineşte titlu, descriere, şi video pentru a încărca atuncicând elementul se face clic pe.

videoListItem.title = item.name; videoListItem.desc = item.description; videoListItem.videoObj = elementvideoListItem.setItem (item.vid,'', item.src);

Acum, că VideoListItem exemplu, a fost finalizată, următorul pas este să-l adăugaţi la listItem afişa lista, ceea ce il face vizibil înScrollPane.

listItem.addChild (videoListItem);

Fiecare treci de creşterile de bucla nextY variabilă pentru a se asigura fiecărui element video este plasat într-o poziţie unică. Această valoare estdeterminată prin adăugarea înălţimea elementului video curent, plus un padding uşoară existente nextY variabilă.

nextY + = videoListItem.height + 2;

Ultimul pas al videosResponseHandlermetodă este de a reîmprospăta ScrollPane componentă de asteptare actualizare metodă.Dacă nu numim această metodă, în bara de defilare ScrollPane nu ar reflecta elementele adăugat video.

videoList.update ();

După cum puteţi vedea, videosResponseHandler Metoda este responsabil pentru o mulţime de funcţionalităţi în lista de film, chiar dacăaceasta este doar o parte a cererii globale. Aceasta a necesitat o mulţime de cod particularizat pentru a crea în mod corespunzător.

listltemHandler metoda

listItemHandler metoda este apelata ori de câte ori unul dintre elementele video în ScrollPane se face clic.

listItemHandler private function (e: Event): void {

}

Această metodă actualizează informaţii video actuale în videoMetalnfo MovieClip găsiţi mai jos video player.

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;

Este, de asemenea responsabil pentru înlocuirea sursei de video-player şi redarea video.

videoPlayer.visible = true;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

323 of 362 11/9/2

Page 324: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 324/362

 

videoPlayer.source = e.currentTarget.source; videoPlayer.play ();

Manipulare Erori de remoting r ăspunsuri

Ultima metodă de VideoPlayer clasă este un handler pentru erori în serviciul remoting. Această metodă nu are nevoie să fie unic, cu excepţiacazului în care preferaţi să se ocupe de fiecare eroare diferit. Prefer pentru a afişa conţinutul de eroare în timpul dezvoltării, deoarece, după cum amintiţi, trigonometrie-ger_error solicită, în PHP, care returnează un mesaj de eroare de utilizator.

Funcţia onFault privat (răspunde: Object): void {

trace ("Debug:: Eroare");

pentru (var i răspunde în) {

trace ("" + răspunde [i]);

}

}

Pentru aceasta aplicatie, mesajul de eroare este urmărită în timpul dezvoltării şi complet ignorat atunci când rulează în lumea reală. Mai târziu înacest capitol, vă creaţi un stivuitor eroare de realist, care este similar cu cele gasite pe web site-uri populare de video-sharing.

Aţi completat acum întregul VideoPlayer clasă, care este cea mai mare parte a cererii video, cel puţin pentru porţiunea ActionScript aproiectului.

Aici este VideoPlayer clasa în toate elementele sale, astfel încât să pot privi cu uşurinţă peste modul în care fiecare dintre metodele deinteracţionează unii cu alţii. Acest cod sursă este, de asemenea, disponibil pe site-ul carte este pentru tine să taie şi să lipiţi.

Pachetul {

flash.display.MovieClip de import; flash.events.Event de import; flash.net de import .*;

publice VideoPlayer clasa extinde MovieClip {

privat var gatewayURL: String; gateway-ul privat var: NetConnection; selectedCatID privat var: Numarul;

VideoPlayer function () {

gatewayURL = "http://localhost/amfphp/gateway.php"; GetCategories ();

videoPlayer.visible = false; videoListCombo.enabled = false;

}

getCategories a functiei publice (): void {

var responder: Responder =

noi Responder (categoryRespHandler, onFault);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call ("Categories.getCategoriesM, Răspuns);

}

categoryRespHandler private function (răspuns: Object): void {

videoListCombo.enabled = true; videoListCombo.addItem (

{Etichetă: "Alege o date ...', Categorie: -1}

);

pentru fiecare {(element var în răspuns)

videoListCombo.addItem (

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

324 of 362 11/9/2

Page 325: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 325/362

 

{Etichetă: item.name, date: item.id}

);

}

videoListCombo.addEventListener (Event.CHANGE, categoryHandler);

}

categoryHandler private function (e: Event): void {

var id: Numărul = e.currentTarget.selectedltem.data;

if (id == -1) întoarcere;

selectedCatID = id;

trace ("Categorie ID-ul de încărcare:" + id); getVideos ();

}

getVideos a functiei publice (): void {

var responder: Responder =

noi Responder (videosResHandler, onFault);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL); gateway.call ("Videos.getVideos",responder, selectedCatID,

videosRespHandler private function (răspuns: Object): void {

var nextY: uint = 5;

var listItem: MovieClip = new MovieClip (); videoList.source = listltem;

pentru fiecare {(element var în răspuns)

var videoListItem: MovieClip =

noi VideoListItem (); videoListItem.addEventListener (VideoListItem.ITEM_CLICK, listltemHandler

);

videoListItem.y = nextY; videoListItem.x = 2;

videoListItem.title = item.name; videoListItem.desc = item.description; videoListItem.videoObj = elementvideoListItem.setItem (item.vid,'', item.src);

listItem.addChild (videoListItem);

nextY + = videoListItem.height + 2;

videoList.update ();

}

}

listItemHandler private function (e: Event): void {

var meciului: Object = e.currentTarget.videoObj; videoMetaInfo.titleTxt.text = info.name;videoMetaInfo.categoryTxt.text = info.cat; videoMetaInfo.viewsTxt.text = info.count;videoMetaInfo.descTxt.text = info.description ;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

325 of 362 11/9/2

Page 326: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 326/362

 

videoPlayer.visible = true;

videoPlayer.source = e.currentTarget.source; videoPlayer.play ();

}

/ / Eroare Handler

Funcţia onFault privat (răspunde: Object): void {

trace ("Debug:: Eroare");

pentru (var i răspunde în) {

trace ("" + răspunde [i]);

}

}

}

}

Construirea clasa VideoListItem

Următorul pas înainte de a vă puteţi testa aplicaţia este de a construi VideoListItem clasă. Dacă încercaţi să rulaţi aplicaţia în forma sa actualănu s-ar obţine numai erori, dar nu ar fi, de asemenea, posibilitatea de a încărca orice Clipuri deoarece elementele nu se poate face clic în acestmoment.

Primul pas este de a crea un fişier ActionScript nou în editorul dvs. favorit. Salvaţi acest fişier ca VideoListItem.as în acelaşi director în cazucare FLA ul dvs. este localizat. După ce fişierul este creat, aveţi nevoie pentru a construi scheletul fisierul clasei, care trebuie să extindăMovieClip clasă, deoarece este ataşat la un MovieClip exemplu, în bibliotecă.

Pachetul {

flash.display.MovieClip de import;

publice clasa VideoListItem extinde MovieClip {

}

}

În plus faţă de MovieClip clasa fiind importate, trebuie să importaţi, de asemenea, câteva clase, în alte scopul de a dezvolta în modcorespunzător această clasă. Aceste alte clase se ocupe de text, evenimente, şi porţiuni mouse-ul de instanţe elementului video.

flash.display.MovieClip de import; flash.text.TextField de import, de import flash.events.Event,flash.events.MouseEvent de import;

Clasa de asemenea, trebuie să aibă anumite proprietăţi implicit definit, care va fi modificată mai târziu în clasă. Cele mai multe dintre proprietatisunt definiţii de bază şir. Cu toate acestea, proprietatea ultimul, ITEM_CLICK, este o constantă de construcţii publice, care este folosit în tratareevenimentelor. Acest lucru este făcut public, astfel încât variabila pot fi accesate din afara clasei.

videoObj publice var: Object;

privat var _id: uint; privat _title var: String; privat var _desc: String; privat var _thumb: String;privat var _src: String;

publice const ITEM_CLICK static: String = "onltemClick";

VideoListltem constructor 

Constructorul din această clasă seturi, pur şi simplu alfa a elementului la 50 de procente, ci pentru că alfa este o valoare 0 la 1, 50 la sută estde fapt 0.5.

Funcţia VideoListItem () {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

326 of 362 11/9/2

Page 327: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 327/362

 

alfa = 0,5;

}

setltem metoda

Prima metodă personalizată în această clasă este setltem. Această metodă se numeşte pe crearea de o nouă instanţă şi stabileşte id, degetulmare, şi parametrii de sursa video. Pentru acest exemplu, opţiunea de degetul mare nu este utilizat, dar aveţi posibilitatea să extindeţi exemplu,deoarece a fost deja adăugat.

Funcţia setItem (id: uint, degetul mare: String, src: String) {

 _id = id; _thumb = degetul mare; _src src =;

}

A doua parte a setItem Metoda atribuie ascultătorii eveniment pentru mouse obiect. Acest lucru este, de asemenea, în cazul în care vă activaţpictograma cursorul mouse-ului atunci când utilizatorul rulouri mouse-ul peste elementul video.

Funcţia setItem (id: uint, degetul mare: String, src: String) {

_id = id; _thumb = degetul mare;

_src src =;

 buttonMode = true; useHandCursor = true;

addEventListener (MouseEvent.ROLL_OVER, overHandler); addEventListener (MouseEvent.ROLL_OUT, outHandler)addEventListener (MouseEvent.CLICK, clickHandler);

}

Metode de tratare a mouse-ului

Metodele de manipulare de mouse-ul sunt folosite pentru a modifica alfa valoarea elementului video. În acest exemplu, au stabilit practic alpe deplin vizibile sau parţial vizibile. Ai putea adăuga cu uşurinţă o tween pentru această proprietate şi au alfa proprietate schimba lin.

overHandler private function (e: MouseEvent): void {

e.currentTarget.alpha = 1,0;

}

outHandler private function (e: MouseEvent): void {

e.currentTarget.alpha = 0,5;

}

clickHandler Metoda de incendii ITEM_CLICK cazul în care semnalările orice obiect de ascultare a faceţi clic. În acest caz, evenimentul vanotifica VideoPlayer şi că videoclipul specifice ar fi încărcate.

clickHandler private function (e: MouseEvent): void {

dispatchEvent (nou Eveniment (ITEM_CLICK));

}

Metodele rămase în VideoListItem clasă sunt pentru obţinerea şi setarea proprietăţilor definit anterior. De exemplu, titlul poate fi recuperatprin apelarea obţine titlu, cum ar fi:

funcţiei publice obţine titlu (): String {

întoarcere _title;

}

Asemenea, puteţi seta titlu proprietate de asteptare set titlu şi trece în titlul de video.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

327 of 362 11/9/2

Page 328: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 328/362

 

a functiei publice set titlu (Val: String): void {

_title = val; titleTxt.text = val;

Definirea metodele getter si setter 

Restul de getter / setter metode apar în codul de mai jos şi, de asemenea, sunt în clasa finalizat disponibile în codul sursă al cărţii:

funcţiei publice obţine id (): uint {

întoarcere _id;

}

funcţiei publice obţine sursa (): String {

întoarcere _src;

}

a functiei publice se desc (): String {

întoarcere _desc;

}

a functiei publice set desc (Val: String): void {

_desc = val; descTxt.text = val;

}

Asta este tot ce există la VideoListItem clasă. După cum puteţi vedea, aceasta este cea mai mare parte auto-izolare, ceea ce face acest obiect mreutilizabile în alte aplicaţii. În acest exemplu, vă sunt construirea unui player video, dar ai putea schimba cu uşurinţă că la un vizualizator deprodus, Document viewer, sau orice altceva vă puteţi gândi.

Aici este finalizată VideoListItem de clasă, pe care o puteţi studia sau pur şi simplu copiaţi şi lipiţi-l de pe site-ul Web al cărţii.

Pachetul {

flash.display.MovieClip de import; flash.text.TextField de import; flash.events.Event de import; deimport flash.events.MouseEvent;

publice clasa VideoListItem extinde MovieClip {

videoObj publice var: Object;

privat var _id: uint; privat _title var: String; privat var _desc: String; privat var _thumb: String;

privat var _src: String;

publice const ITEM_CLICK static: String = "onltemClick";

Funcţia VideoListItem () {

alfa = 0,5;

}

Funcţia setItem (id: uint, degetul mare: String, src: String) {

_id = id; _thumb = degetul mare; _src src =;

buttonMode = true; useHandCursor = true;

addEventListener (MouseEvent.ROLL_OVER, overHandler); addEventListener (MouseEvent.ROLL_OUT, outHandler)addEventListener (MouseEvent.CLICK, clickHandler);

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

328 of 362 11/9/2

Page 329: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 329/362

 

}

overHandler private function (e: MouseEvent): void {

e.currentTarget.alpha = 1,0;

}

outHandler private function (e: MouseEvent): void {

e.currentTarget.alpha = 0,5;

}

clickHandler private function (e: MouseEvent): void {

dispatchEvent (nou Eveniment (ITEM_CLICK));

}

funcţiei publice obţine id (): uint {

întoarcere _id;

}

funcţiei publice obţine sursa (): String {

întoarcere _src;

}

funcţiei publice obţine titlu (): String {

întoarcere _title;

}

a functiei publice set titlu (Val: String): void {

_title = val; titleTxt.text = val;

}

a functiei publice se desc (): String {

întoarcere _desc;

}

a functiei publice set desc (Val: String): void {

_desc = val; descTxt.text = val;

}

}

}

În acest moment aţi terminat şi Flash video player PHP. Puteţi testa acum aplicaţia, şi veţi vedea aceeaşi interfaţă aţi început cu. Diferenţa este, daselectaţi o categorie, ScrollPane vor fi populate cu filmele din acea categorie.

Aveţi posibilitatea să faceţi clic pe un element de video şi filme, care va incepe sa ruleze. În forma sa actuală, aplicaţia de redare video este oaplicaţie destul de robust, care poate fi extins.

În următoarea secţiune veţi face doar că, prin adăugarea unor urmărire de bază. Apoi, într-o secţiune mai târziu, când adăugaţi o componentaghidul de autentificare care rezultă într-o aplicaţie cu adevărat din lumea reala menţinând în acelaşi timp o functionalitate originala jucător are

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

329 of 362 11/9/2

Page 330: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 330/362

 

acum.

În secţiunea anterioară, aţi construit un sistem complet Flash pe bază de video-player care are PHP pentru a permite un rezultat dinamic. Aceastăaplicaţie permite proprietarului, pur şi simplu pentru a actualiza baza de date, precum şi aplicarea Flash reflectă acele actualizări data viitoare se

 încarcă.

O problemă apare în cazul în care proprietarul doreste sa stie care sunt populare videoclipuri. Vrei proiect să-l ajute determina care conţinutul

video este popular pentru a putea adauga mai mult de acel conţinut similar.

Soluţia este de a dezvolta de urmărire video care busteni de câte ori un videoclip a fost vizualizat. Acest lucru se face printr-un coloană în baza dedate care deţine numărul de activă. Puteţi adăuga apoi sprijinul necesar pentru clasele PHP şi să actualizeze în cele din urmă Flash pentru a afişanumărul.

Baza de date nu este nevoie să fie actualizate, deoarece coloana numărătoarea a fost adăugat în secţiunea anterioară, chiar dacă nu a fost folosit.Adăugarea de mai multe coloane decât veţi utiliza pentru a începe este comună astfel încât cererea are capacitatea de a creste. Coloanesuplimentare pot fi, de asemenea, un rezultat al scoate temporar o funcţie dintr-o aplicaţie după schema bazei de date este creată.

Actualizarea clasa film

Clasa de serviciu Clipuri a fost creat în secţiunea anterioară. Tot ce trebuie să faci acum este să adăugaţi noua metodă utilizată pentru a modificanumărul de video:

updatePlayCount funcţiei publice ($ vid) {

$ Link = $ this-> getConnection ();

}

Această metodă acceptă un parametru, care este o id Referindu-video care ar trebui să fie actualizate. Prima parte a acestei metode creează olegătură la baza de date folosind clasa de baze de date existente, vă construit în secţiunea anterioară. Acest $ Legătură într- variabilă estetrecut în toate acţiunile viitoare SQL în această metodă.

A doua parte a metodei este de a crea o interogare SQL care apucă numărul actual de joc video dorit.

updatePlayCount funcţiei publice ($ vid) {

$ Link = $ this-> getConnection ();

$ Query = sprintf ("SELECT count DIN Clipuri WHERE id =% d", $ VID); $ rezultat = mysql_query ($ query, link);

}

Verificarea pentru înregistr ări valide

După ce valoarea este încărcată, următorul pas este de a verifica pentru o înregistrare valabilă utilizând familiare mysql_num_rows funcţie.

updatePlayCount funcţiei publice ($ vid) {

$ Link = $ this-> getConnection ();

$ Query = sprintf ("SELECT count DIN Clipuri WHERE id =% dM, $ VID); $ rezultat = mysql_query ($ query, link);

if (mysql_num_rows ($ result)> 0) {

}

Conţinutul acestei declaraţii sunt condiţionate în cazul în care valoarea este actualizată, bazată pe numărul de determinat în interogare SQLanterioare.

$ Row = mysql_fetch_row ($ rezultat);

$ Count = $ row [0];

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

330 of 362 11/9/2

Page 331: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 331/362

 

$ Count + +;

$ QueryUpdate = sprintf ("Clipuri UPDATE SET count =% d WHERE id =% d",

$ Count, Vid $); mysql_query ($ queryUpdate, $ link);

Interogare SQL care se actualizează baza de date este construit folosind sprintf pentru a trece curat în numărul şi video id, , mai degrabădecât construirea unei greu de citit de coarde, care este mai frecventă. Utilizarea de sprintf este cu atât mai important atunci când vă întoarcela un proiect mai târziu.

În acest moment, aţi făcut toate modificările la Videos.php fişier şi poate continua cu modificările necesare la clasele ActionScript.

Adăugarea de urmărire video pentru ActionScript

Caracteristica de urmărire video pot fi adăugate într-unul din două locuri. Puteţi adăuga actualizarea, astfel încât atunci când se execută video începe să joace, sau aveţi posibilitatea să îl adăugaţi, astfel încât numărul este doar actualizate după video a fost vizualizat pe deplin.

Fiecare optiune are avantaje. Pentru acest exemplu, apelul de urmărire se face atunci când un nou videoclip este solicitată, mai degrabă decât deaşteptare pentru clipul video pentru a finaliza. Această acţiune este similar cu un contor pe un site Web, cu excepţia faptului că acesta nu va fi un

 în această cerere. Cu toate acestea, aveţi posibilitatea să adăugaţi codul necesar din exemplele de mai sus pentru a asigura actualizarea este unic.

updateVideoTracking metoda

Noile metode de urmărire poate fi adăugat la orice punct din VideoPlayer de clasă, ci un loc logic este mai presus de onFault metodă. Prim

parte a acestei noi metode este de a crea o nouă instanţă a Responder de clasă, care trece metoda de tratare a răspuns, astfel cum primulparametru.

updateVideoTracking private function (Vid: uint): void {

 var răspuns: răspuns = new Responder (updateTrackingHandler, onFault

);

}

După nouă Responder exemplu este creat, următorul pas este de a crea conexiunea gateway folosind o nouă instanţă a NetConnection clasAcest proces este identic cu apelurile remoting celelalte le-aţi făcut în secţiunea anterioară.

updateVideoTracking private function (Vid: uint): void {

var răspuns: răspuns = new Responder (updateTrackingHandler, onFault

);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

}

Actualizare final updateVideoTrackingmetodă este în cazul în care apelul la serviciul remoting se face. Acest apel trece de-a lungul videopentru a actualiza şi răspunsul ar trebui să fie numărul de nou sau o eroare în cazul în care ceva nu merge bine.

updateVideoTracking private function (Vid: uint): void {

var răspuns: răspuns = new Responder (updateTrackingHandler, onFault

);

gateway-ul = NetConnection noi (); gateway.connect (gatewayURL);

gateway.call ("Videos.updatePlayCount", responder, Vid);

}

Odată ce numărul este actualizat, numărul de nou este returnat Flash. La fel ca apelurile remoting precedent, un handler de răspuns este necesară în scopul de a captura acest raspuns. În acest exemplu, numărul de nou este trimis la Textfield situat în cadrul videoMetaInfoMovieClip pentru a reflecta numarul actual.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

331 of 362 11/9/2

Page 332: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 332/362

 

updateTrackingHandler private function (răspuns: Object): void {

videoMetaInfo.viewsTxt.text = response.count;

}

Ultimul pas pentru a adăuga funcţia de urmărire este de a modifica existente listItemHandler metoda şi adăugaţi în apelul la metodă deactualizare, cum ar fi următoarele:

listItemHandler private function (e: Event): void {

updateVideoTracking (e.currentTarget.videoObj.vid);

}

În acest moment, adăugarea de urmărire este completă. După cum puteţi vedea, procesul de creaţie originală, în prima secţiune permite într-adevcapacitatea de a introduce noi funcţionalităţi cu actualizări minim.

Acum, player-ul video poate urmări în mod adecvat video şi a vă informa cu privire la care imaginile video sunt mai populare decât altele. Aiputea dezvolta cu uşurinţă un panou de administrare în cazul în care toate aceste date ar putea fi vizualizate, sau vă puteţi conecta la editorul SQsi uita-te la masa Clipuri pentru numărul de active pe fiecare video.

Acum, că Playerul video este destul de mult plin de caracteristici, este destul de sigur să se presupună site-ul Web ar trebui să solicite înregistrar în scopul de a utiliza player-ul. Adăugarea de înregistrare este o chestiune de a crea o formă de bază şi actualizarea un tabel de bază de date, nimdin ceea ce cateva linii de cod nu se poate realiza.

Partea mai avansate din această funcţie este nevoie de Flash de a interacţiona cu utilizatorul de conectare. Pentru a porni, aplicaţia are nevoie deFlash pentru a afişa un panou de conectare atunci când aplicaţia începe şi trebuie, de asemenea pentru a dezactiva interfaţa până ghidul de succesbusteni de inch

Păstrarea cu ideea de a face codul reutilizabil, haideţi să dezvolte componenta de conectare într-un fişier Flash nouă şi apoi picătură pur şi simplu în loc atunci când acesta este finalizat.

Începeţi prin deschiderea de conectare fişierul starter componenta, care are deja proiectul finalizat pentru tine, după cum se arată în figura 17.5. Tce trebuie să se preocupe de este codul din spatele componentei conectare.

FIGURA 17.5

Componenta de conectare care a fost proiectat anterior 

În cazul în care componenta este deschis, veţi observa MovieClip în bibliotecă este repartizat la o clasa cu un nume de LoginWindow. Nu avposibilitatea să particularizaţi această clasă astfel încât aveţi nevoie pentru a crea un fişier ActionScript nou şi salvaţi-l în dosarul proiectului cuFLA.

Dezvoltarea clasei LoginWindow

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

332 of 362 11/9/2

Page 333: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 333/362

 

Acum, că fişierul este creat puteţi începe să construiască codul de autentificare. Primul pas este acela de a construi scheletul de clasă şi să extindăMovieClip, care este acelaşi proces le-au fost următoarele în secţiunile anterioare.

Aceasta clasa nu trebuie numai să importe standard MovieClip clasă, dar de asemenea, este de gând să solicite unele noi. Aceste clase noi vor ffolosite pentru a crea acţiuni pentru a dezactiva interfaţa şi de manipulare a interacţiunii mouse-ul.

Pachetul {

flash.display.MovieClip de import; flash.geom.Rectangle de import; flash.events.Event de import;flash.events.MouseEvent de import; flash.net de import .*;

publice clasa LoginWindow extinde MovieClip {

Funcţia LoginWindow () {

}

}

}

Proprietăţile pentru această clasă sunt responsabile pentru eveniment manipularea şi crearea de referinţe la MovieClipE creat în timpul rulării.

de date publice var: Object;

privat var _visible: Boolean = false; var container privat: MovieClip; blocant privat var: MovieClip =null;

publice LOGIN_ATTEMPT static var: String = "onLoginAttempt";

LoginWindow constructor 

Constructorul de LoginWindow clasă este în cazul în care recipient proprietate este setată. Aceasta este, de asemenea, în cazul în careStivuitoare eveniment pentru butoanele sunt plasate. Acest lucru este făcut pentru a asigura butoanele sunt atribuite o dată pe vizibile pentru aasigura codul este stabilă.

Funcţia LoginWindow () {

container = acest lucru;

loginMC.resetBtn.addEventListener (MouseEvent.CLICK, resetHandler);

loginMC.loginBtn.addEventListener (MouseEvent.CLICK, loginHandler);

}

redesenaţi metoda

redesenaţi metoda este apelata ori de câte ori se schimbă interfaţa. Aceasta este cea mai mare parte un motiv de îngrijorare atunci cândutilizatorul are posibilitatea de a redimensiona Stage, deşi cele mai multe aplicaţii web site-ul să aibă o dimensiune fixă. Această metodă trebuie aibă o anumită logică în ceea ce priveşte clipul de blocare a se asigura că nu este tras de mai multe ori. Clipul de blocare este un movieclip careelimină interacţiune de la cererea pe care forţele ghidul pentru a vă conecta la de "blocare", a clicuri de mouse.

funcţia publică redesenaţi (): void {

dacă (blocant == null) {

}

else {

}

}

Conţinutul condiţionată pentru atunci când miniatura blocant este nulă atrage blocarea efectivă MovieClip folosind built-in API de desen.

blocant = new MovieClip (); blocker.alpha = 0,5;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

333 of 362 11/9/2

Page 334: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 334/362

 

blocker.graphics.beginFill (0x00 00 00); blocker.graphics.drawRect (0, 0, stage.stageWidth,stage.stageHeight);

Odată ce clipul a fost elaborat, următorul pas este acela de a atribui Stivuitoare fals eveniment la clip de blocare. Flash-ul nu are o interfaţă nativ pcare o puteţi dezactiva, deoarece cod ar putea fi personalizate. Modul în jurul valorii de acest lucru este sa construiesti un pseudo-disabler. Acestlucru nu este nimic mai mult decât o MovieClip introduse pe scena pe care captează toate interacţiunea mouse-ul şi anulează-l. Acest lucruprevine interfaţă care stau la baza cererii şi de a fi utilizate până la acest clip blocarea este eliminat.

blocker.addEventListener (MouseEvent.ROLL_OVER, dummyHandler); blocker.addEventListener(MouseEvent.ROLL_OUT, dummyHandler); blocker.addEventListener (MouseEvent.CLICK, dummyHandler);

După prima dată pe ecran este redesenat, blocante va fi fost deja creat. O lăţime şi simplu de ajustare a înălţimii este necesară doar actualizarea. Dfapt, dacă apelaţi standard redesenaţi metodă fără condiţionată, de fiecare dată când ar vedea un alt clip blocaj, astfel cum acestea încep să sti

 în sus.

blocker.width = stage.stageWidth; blocker.height = stage.stageHeight;

Indiferent dacă aceasta este prima trecere a redesenaţi metodă sau nu, clipul blocarea trebuie să fie repozitionate. Fereastra de conectare esteamplasat centrul mort, ceea ce înseamnă că puteţi calcula umplutură în jurul valorii de aceasta, se înmulţeşte aceasta pentru a crea un numărnegativ, iar locul miniatura blocarea folosind acest calcul.

/ / Inversă diferenţa în poziţia de blocare a blocker.y = y * -1; blocker.x = x * -1;

Atunci când toate calculele sunt complete, puteţi adăuga blocant MovieClip la DisplayList, ceea ce îl face vizibil în cerere.

addChild (blocant);

Efectuarea tuturor calculelor bazate pe posturi înainte de clipul, se adaugă la lista de afişare reduce pâlpâirea şi sărituri obiecte în cerere adumneavoastr ă.

Plasarea pompare a două MovieClips

ActionScript 3 nu are nici o adâncime de management cum ar fi ceea ce se găseşte în ActionScript 2 şi predecesorii săi. Echivalentă este de a lua ide un clip şi schimbarea cu un alt clip. Acest lucru pare să fie de management adâncime, cu excepţia faptului foarte important ca ActionScript aregrijă de reordonare când copiii sunt schimbate.

În acest exemplu, doriţi să vă asiguraţi că caseta de conectare de mai sus este un clip de blocare, deoarece în cazul în care este plasat sub ea,utilizatorul nu este capabil să interacţioneze sau să vă autentificaţi la cererea:

container.swapChildren (loginMC, blocante);

Centrarea un MovieClip

Ultimul pas de redesenare metodă este de centru caseta de login de pe scena pentru a se asigura că este întotdeauna la mijloc. Acest lucru esteactualizat în permanenţă atunci când redesenaţi Metoda se numeşte, deoarece redimensionarea stadiu ar face caseta de conectare stau la opoziţie noncentered.

loginMC.x = (stage.stageWidth / 2) - (loginMC.width / 2); loginMC.y = (stage.stageHeight / 2) -(loginMC.height / 2);

Calculul utilizează dimensiunile scenă şi dimensiuni caseta de autentificare pentru a determina punctul de mijloc. Acest lucru este în cazul în carloginMC MovieClip este plasat în cazul în care calculul este finalizată.

Metoda de aproape

aproape Metoda are o sarcină: de a elimina din caseta de conectare actuale şi pentru a permite ca cererea să fie folosite din nou. Procesul de îndepărtare este realizat prin eliminarea recipient copil, care conţine caseta de conectare şi blocarea MovieClip.

aproape de funcţia publică (): void {

container.parent.removeChild (container);

resetHandler metoda

resetHandler metoda este apelata ori de câte ori butonul Reset se face clic. Această metodă şterge toate mesajele de status şi goleşte de login s

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

334 of 362 11/9/2

Page 335: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 335/362

 

parola.

resetHandler private function (e: MouseEvent): void {

loginMC.username.text = ""; loginMC.password.text = ""; loginMC.responseTxt.text = "";

}

loginHandler metoda

loginHandler metodă este ataşat la CLICK eveniment de loginBtn. Această metodă se numeşte ori de câte ori loginBtn se face clic demouse-ul.

loginHandler private function (e: MouseEvent): void {

}

Această metodă este responsabil pentru verificarea campurile nume de utilizator şi parola pentru date valide. Dacă unul dintre aceste domenii esgol, funcţia este ieşit şi un mesaj de răspuns este afişat sub câmpul parolei.

loginMC.responseTxt.text = "";

dacă (loginMC.username.text == "" | | loginMC.password.text == "") {

loginMC.responseTxt.text = "nume de utilizator si parola necesare"; returnare;

}

Dacă numele de utilizator si parola sunt găsite de a avea valori acceptabile, aceste valori sunt stocate în de date de proprietate, care va fi citit dscript-ul de asteptare într-un handler eveniment particularizat.

date = {

Nume de utilizator: loginMC.username.text, parola: loginMC.password.text

};

Ultima parte a acestei metode este acela de a trânti un eveniment particularizat, alertarea script-ul de asteptare pe care un nume de utilizator siparola au fost capturaţi şi trebuie să fie validate.

dispatchEvent (nou Eveniment (LOGIN_ATTEMPT));

Această componentă a fost dezvoltat pentru a separa logica de afişare şi de securitate, ceea ce înseamnă componenta poate fi reutilizat, deoarecenimic nu este hardcoded în logica de conectare reală.

Ultima metodă reale este un setter, care este folosit pentru a seta extern şir de răspuns. Acest lucru ar fi numit din loginHandler în cazul în cavalidarea a eşuat şi doriţi să afişaţi sau ghidul, astfel încât el sau ea poate încerca un alt parola sau numele de utilizator.

a functiei publice set responseString (e: String): void {

loginMC.responseTxt.text = s;

}

dummyHandler Metoda nu are nici o funcţionalitate. Acesta este utilizat pentru a bloca orice evenimente care au loc pe mouse-ul de blocareMovieClip. Această metodă este necesar din cauza unei rutine de tratare eveniment are nevoie de o funcţie valabilă, şi dacă veţi defini unulanonim, acesta creează o scurgere de memorie lent.

dummyHandler private function (e: MouseEvent): void {

/ / Nici o acţiune

}

În acest moment aţi terminat LoginWindow de clasă şi poate trece la pasul următor, care este de a crea unele ActionScript simplu pentru a testacomponenta. În cazul în care este testat în mod corespunzător puteţi crea serviciul de PHP si efectuati componenta autentificare interac ţionează cubaza de date pentru a uita de fapt, pentru încercarea de utilizatori reali pentru a va autentifica

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

335 of 362 11/9/2

Page 336: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 336/362

 

Aici este complet LoginWindow clasă.

Pachetul {

flash.display.MovieClip de import; flash.geom.Rectangle de import; flash.events.Event de import;flash.events.MouseEvent de import; flash.net de import .*;

publice clasa LoginWindow extinde MovieClip {

de date publice var: Object;

privat var _visible: Boolean = false; var container privat: MovieClip; blocant privat var: MovieClip =null;

publice LOGIN_ATTEMPT static var: String = "onLoginAttempt";

Funcţia LoginWindow () {

container = acest lucru;

loginMC.resetBtn.addEventListener (MouseEvent.CLICK, resetHandler);

loginMC.loginBtn.addEventListener (MouseEvent.CLICK,

loginHandler);

}

funcţia publică redesenaţi (): void {

dacă (blocant == null) {

blocant = new MovieClip ();

blocker.alpha = 0,5;

blocker.graphics.beginFill (0x00 00 00);

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

);

}

else {

blocker.width = stage.stageWidth;

blocker.height = stage.stageHeight;

}

/ / Inversă diferenţa în poziţia de blocare a blocker.y = y * -1; blocker.x = x * -1;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

336 of 362 11/9/2

Page 337: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 337/362

 

addChild (blocant);

container.swapChildren (loginMC, blocante);

loginMC.x = (stage.stageWidth / 2) - (loginMC.width / 2);

loginMC.y = (stage.stageHeight / 2) - (loginMC.height / 2); _visible = true;

}

aproape de funcţia publică (): void {

container.parent.removeChild (container);

}

resetHandler private function (e: MouseEvent): void {

loginMC.username.text = ""; loginMC.password.text = ""; loginMC.responseTxt.text = "";

}

loginHandler private function (e: MouseEvent): void {

loginMC.responseTxt.text = ""; dacă (

loginMC.username.text == "" | | loginMC.password.text == "")

{

loginMC.responseTxt.text =

"Nume de utilizator si parola necesare"; returnare;

}

date = {

Nume de utilizator: loginMC.username.text,

Parola: loginMC.password.text};

dispatchEvent (nou Eveniment (LOGIN_ATTEMPT));

}

a functiei publice set responseString (e: String): void {

loginMC.responseTxt.text = s;

}

dummyHandler private function (e: MouseEvent): void {

//

}

}

}

Testarea componenta de autentificare

Urmatorul pas este de a testa componenta login pentru a vă asigura că totul funcţionează corect. Primul pas este de a crea o nouă instanţă aLoginWindow componentă a unui FLA stand-alone, sau puteţi folosi fişierul mostră a constatat cu codul sursa al cărţii.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

337 of 362 11/9/2

Page 338: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 338/362

 

var autentificare: LoginWindow = new LoginWindow ();

Odată ce instanţă este creată, următorul pas este de a atribui o tratare a evenimentului pentru obiceiul LOGIN_ATTMEPT cazul în care se numeşteatunci când ghidul de tipuri de date în ambele numele de utilizator si parola si apoi clic pe butonul Login.

login.addEventListener (LoginWindow.LOGIN_ATTEMPT, loginHandler);

După ce încarcă fereastra componenta Conectati-va si de tratare a evenimentelor propriu-zis este atribuit, urmatorul pas este sa-l adăugaţi la lista afişaj, care o face vizibilă.

addChild (autentificare);

Atribuirea unui handler eveniment e tapă

Doriţi să vă asiguraţi că orice modificare la stadiul de redesenează componenta de conectare, sau obiecte care au fost blocate se pot repozitionaaccidental se dincolo de blocare MovieClip.

stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE, stageResizeHandler);

După ce evenimentul este atribuit etapă obiect, trebuie să creaţi funcţia care se face referire în ascultător eveniment. Pentru aceasta aplicatie,conductorul face pur şi simplu un apel la redesenaţi metoda de login componente. Într-o aplicaţie din lumea reală este posibil să aveţi mmultă funcţionalitate, în acest caz, dar pentru moment acest lucru este bine pentru testare.

stageResizeHandler funcţie (e: Event): void {

login.redraw ();

}

Manipularea încercarea de autentificare

Funcţia următoare este folosită să se ocupe de încercări de conectare. Pentru simplitate, această funcţie are un nume de utilizator şi parola pe carepredefinite este mai târziu înlocuit cu un serviciu de remoting în secţiunea următoare.

Dacă o autentificare validă este atins, aproape metoda de login componentă se numeşte. Astfel, se elimină caseta de conectare şi permite încare cererea de sesiune.

loginHandler funcţie (e: Event): void {

dacă (login.data.username == "clienţilor" & & login.data.password == "pass")

{

login.close ();

}

}

Această aplicaţie nu stocheaza datele de conectare, ceea ce înseamnă de conectare valabil este numai pentru sesiunea activă. Utilizatorii vor trebusă vă conectaţi în fiecare dată când vizitează cererii.

loginHandler Funcţia este manipularea autentificări de succes, dar nu notifică ghidul de o încercare de conectare incorect. Acest lucru poate fi

stabilit prin adăugarea unei altfel declaraţia că actualizările caseta de răspuns în caseta de conectare.

loginHandler funcţie (e: Event): void {

dacă (login.data.username == "clienţilor" & & login.data.password == "pass")

{

login.close ();

}

else {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

338 of 362 11/9/2

Page 339: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 339/362

 

login.responseString = "nume de utilizator şi parolă incorectă";

}

}

Ultimul pas este de a face apelul iniţial la redimensionare eveniment să elaboreze componenta de login pentru prima dată. Puteţi apela, deasemenea, redesenaţi Metoda direct, mai degrabă decât trece prin redimensionare eveniment.

stage.dispatchEvent (Eveniment nou (Event.RESIZE));

Aici este codul completate pentru acest test. Cea mai mare parte a componentei de conectare este manipulat pe plan intern, dar încă mai oferăuzabilitate final.

var autentificare: LoginWindow = new LoginWindow ();

login.addEventListener (LoginWindow.LOGIN_ATTEMPT, loginHandler); addChild (autentificare);

stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE, stageResizeHandler);

stageResizeHandler funcţie (e: Event): void {

login.redraw ();

}

loginHandler funcţie (e: Event): void {

trace ("Do Login");

trace ("Nume de utilizator:" + login.data.username); urme ("Password:" + login.data.password);

dacă (login.data.username == "clienţilor" & & login.data.password == "pass")

{

trace ("ghidul de conectat"); login.close ();

}

else {

login.responseString = "nume de utilizator şi parolă incorectă";

}

}

stage.dispatchEvent (Eveniment nou (Event.RESIZE));

Acum, că aţi terminat ActionScript necesare pentru proba, pute ţi testa componenta de autentificare. Tu ar trebui să fie prezentate cu ecranul deautentificare imediat şi să nu fie în măsură să interacţioneze cu orice parte a filmului, cu excepţia ecranul de conectare, astfel cum se arată în figur17.6, până când tastaţi conectare corecte.

FIGURA 17.6

Cererea de propoziţii afişarea componenta autentificare

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

339 of 362 11/9/2

Page 340: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 340/362

 

Construirea managerul PHP clasa de autentificare

Următorul pas în construirea sistemul de login este de a se conecta la baza de date a utilizatorilor, deoarece o conectare hard-coded si parola nueste foarte practic şi cu siguranţă nu este sigur.

Crearea tabelului utilizatorului MySQL

Primul pas este de a crea masa utilizatorului în baza de date existentă:

CREATE TABLE "utilizatori" (

"Id" int NU (11) NULL auto_increment, "username" varchar (25) NULL default, "parola" varchar (40) defaulNULL, "activă" varchar (l) default '1 ', PRIMARY KEY ("id") ) ENGINE = MyISAM;

Apoi, aveţi posibilitatea prefill tabelul cu datele de conectare unele proba pentru testare:

INSERT INTO utilizatori (nume de utilizator, parola) VALUES ('clienţilor', MD5 ("trecere"));

INSERT INTO utilizatori (nume de utilizator, parola) VALUES ('Timmy ", MD5 (" pasăre "));

O diferenţă distinctă de login-uri predefinite in Flash este faptul că aceste date de autentificare au parole criptate ca un nivel suplimentar desecuritate.

Înainte de a putea adăuga logica pentru conectarea la serviciu, aveţi nevoie pentru a crea clasa de PHP. Această clasă va verifica pentru utilizatorivalide, iar dacă una este găsit, acesta va returna un adevărat, ceea ce înseamnă că utilizatorul este valabil, iar caseta de conectare pot fieliminate.

Construirea ghidul de clasa

User.php clasă este la fel ca alte clase de servicii, în sensul că extinde DatabaseConnector clasă pentru toate comunicările de baze de date.Aici este scheletul de utilizator clasa:

<? Php

require_once "DatabaseConnector.php";

Ghid de clasa extinde {DatabaseConnector

Ghid de utilizare function () {

}

} ?>

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

340 of 362 11/9/2

Page 341: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 341/362

 

Metoda de autentificare

Prima metodă, şi numai în această clasă este autentificare. Această metodă acceptă două argumente: numele de utilizator şi parola pentru valida. Prima parte a acestei metode este de a crea o nouă conexiune la

Baza de date: /**

* Check auth ghidul de

* © acces de la distanţă

* © returnează starea de încercare de conectare de utilizare

*/

Intra in functie ($ user, $ pass) {

$ Link = $ this-> getConnection ();

}

În cazul în care conexiunea de date este stabilit, aveţi posibilitatea să marcaţi ca ghidul de nu esti logat inch Acest lucru previne orice tentative deposibil de hacking care ar putea face din gre şeală sau ghidul va autentifica

$ Loggedin = false;

Următorul este interogarea SQL care încearcă să valideze numele de utilizator şi parola Combo. Parola este trecut în md5 funcţioneze deoareceFlash trimite parola în text clar, dar baza de date stochează md5 rezultat.

$ Query = sprintf ("SELECT * FROM utilizatori WHERE username = '% s', I

parola = MD5 ('% s') ", ghidul de $, ($ pass));

Următorul pas este de a face apel în baza de date şi se depozitează de răspuns în $ Rezultat variabilă, după cum se arată în codul de mai jos:

$ Rezultat = mysql_query ($ query, $ link);

Odată ce răspunsul este stocat, o declaraţie condiţionată este utilizată pentru a determina dacă orice rânduri au fost returnate. În cazul în care unrând este returnat, inseamna ca datele sunt valabile, iar utilizatorul a fost autentificat pe baza prerogativelor el sau ea a trecut de-a lungul.

Când un răspuns valabil este găsit, $ Loggedin variabilă este setată ca adevărat Flash pentru a informa că utilizatorul este, de fapt, valabilare acum succes autentificat inch

if (mysql_num_rows ($ result)> 0) {

$ Loggedin = true;

}

Ultimul pas este să se întoarcă rezultatul, astfel Flash poate acţiona în consecinţă. matrice retur ('răspuns' => $ loggedin);

Acum, că aţi terminat clasa PHP, următorul pas este să-l testa. Pentru acest test se poate utiliza browser-ul de serviciu care este inclus cu AMFPHVeţi descoperi că browser-ul la o adresă URL similară cu următoarele, în funcţie de locul în care aţi instalat sursa:

http://localhost/flashphp/amfphp/browser/

În sfârşit, aici este complet Utilizator clasă, care ar trebui să fie salvat ca User.php în directorul de servicii de instalare AMFPHPdumneavoastră dacă nu aţi făcut deja acest lucru:

<? Php

require_once "DatabaseConnector.php";

Ghid de clasa extinde {DatabaseConnector

/**

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

341 of 362 11/9/2

Page 342: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 342/362

 

* Check auth ghidul de

* © acces de la distanţă

* © returnează starea de încercare de conectare de utilizare

*/

Intra in functie ($ user, $ pass) {

$ Link = $ this-> getConnection (); $ loggedin = false;

$ Query = sprintf ("SELECT * FROM utilizatori WHERE username = '% s', I

parola = MD5 ('% s') ", ghidul de $, ($ pass)); $ rezultat = mysql_query ($ query, $ link);

if (mysql_num_rows ($ result)> 0) {

$ Loggedin = true;

}

matrice retur ('răspuns' => $ loggedin);

}

} ?>

Adăugarea de remoting pentru a componentei autentificare

Acum, că aţi terminat clasa Ghid de utilizare PHP, următorul pas este de a modifica componenta autentificare existente, pentru a utiliza acest nouserviciu clasă.

Primul pas este să adăugaţi poartă variabilă şi URL-ul în cazul în care gateway.php fişier poate fi găsită pe serverul dvs. de dezvoltare.

var gateway-ului: NetConnection;

var gatewayURL: String = "http://localhost/amfphp/gateway.php";

Exemplul originală a făcut de validare numele de utilizator direct în cadrul fişierului Flash. În timp ce acest lucru a fost funcţionale, aceasta nu afost foarte practic, deoarece de un singur login sau parola poate fi utilizat.

loginHandler metoda

Acest nou sistem modifică existente loginHandler Funcţia prin adăugarea unui apel de servicii remoting, trimite numele de utilizator şi parocare a fost capturat de către componenta fereastra login.

loginHandler funcţie (e: Event): void {

trace ("Do Login");

trace ("Nume de utilizator:" + login.data.username); urme ("Password:" + login.data.password);

 var răspuns: răspuns = new Responder (loginRespHandler,

onFault); gateway-ul = NetConnection noi (); gateway.connect (gatewayURL); gateway.call ("User.login",responder, login.data.username, login.data.password 

);

}

Responder clasă are nevoie de un handler de răspuns definit, astfel încât următoarea funcţie se ocupă de acest serviciu de răspuns. Pentru acestexemplu, serviciul va reveni fie o booleană pentru indiferent dacă utilizatorul este logat sau nu, sau o eroare în cazul în care ceva nu merge bine.

Funcţia loginRespHandler (o: Object): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

342 of 362 11/9/2

Page 343: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 343/362

 

}

O simplă declaraţie condiţională este utilizată pentru a determina dacă utilizatorul este conectat în funcţie de răspunsul de la serviciul remoting.

Manipularea r ăspuns autentificare

În cazul în care utilizatorul este conectat, un apel la aproape metoda de componente de conectare se face pentru a ascunde fereastra de conectarşi pentru a permite interfaţa aplicaţiei.

Funcţia loginRespHandler (o: Object): void {

dacă (o.response == true) {

login.close ();

}

O altfel opţiune este adăugată să se ocupe de încercări incorecte de conectare prin actualizarea mesaj de răspuns a componentei de conectare

Funcţia loginRespHandler (o: Object): void {

dacă (o.response == true) {

login.close ();

}

else {

login.responseString = "nume de utilizator şi parolă incorectă";

}

}

Manipulare erori de r ăspuns

Funcţia de ultima necesare pentru sistemul de login este onFault, care se ocupă de erori în apelurile de serviciu. De exemplu, în cazul în carescript-ul a reuşit să încerce un cec fără conectare cu numele de utilizator sau parola, SQL ar eşua. Această eroare va fi ridicată de către clasa PHP ş

trimis înapoi la Flash, presupunând că este corect manipulat.

Funcţia onFault (răspunde: Object): void {

trace ("Debug:: Eroare");

pentru (var i răspunde în) {

trace ("" + răspunde [i]);

}

}

Acum, că

codul de remoting a fost adăugat

ăla componenta precedent autentificare exemplu, îl pute

ţi testa,

şi tu chiar nu ar trebui s

ăobserva

ţi or

diferenţă. Singura modificare ar fi capacitatea de a folosi mai mult de un nume de utilizator, atâta timp cât aceasta se reg ăseşte în tabelul deutilizatorii care l-aţi creat la începutul acestei secţiuni.

Aici este un exemplu componenta de conectare cu codul remoting corectă a inclus: var gateway-ului: NetConnection;

var gatewayURL: String = "http://localhost/amfphp/gateway.php"; Var autentificare: LoginWindow = newLoginWindow ();

login.addEventListener (LoginWindow.LOGIN_ATTEMPT, loginHandler); addChild (autentificare);

stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE, stageResizeHandler);

stageResizeHandler funcţie (e: Event): void {

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

343 of 362 11/9/2

Page 344: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 344/362

 

login.redraw ();

}

loginHandler funcţie (e: Event): void {

trace ("Do Login");

trace ("Nume de utilizator:" + login.data.username); urme ("Password:" + login.data.password);

var răspuns: răspuns = new Responder (loginRespHandler, onFault); gateway-ul = NetConnection noi ();gateway.connect (gatewayURL); gateway.call ("User.login", responder, login.data.username,login.data.password

);

}

Funcţia loginRespHandler (o: Object): void {

trace ("Răspuns:" + o.response);

dacă (o.response == true) {

trace ("ghidul de conectat"); login.close ();

}

else {

login.responseString = "nume de utilizator şi parolă incorectă";

}

}

Funcţia onFault (răspunde: Object): void {

trace ("Debug:: Eroare");

pentru (var i răspunde în) {

trace ("" + răspunde [i]);

}

}

stage.dispatchEvent (Eveniment nou (Event.RESIZE));

Ultima secţiune a acestui capitol este de a finaliza player video. Veţi pune în aplicare componenta de conectare pe care le construit în secţiunea

anterioară şi să înveţe cum să utilizeze o bibliotecă extern.

Utilizarea unei biblioteci extern

Avantajul de a utiliza o bibliotecă externă este, trebuie doar să actualizeze o singură locaţie şi toate cazurile de utilizare a bibliotecii, care sunt, deasemenea, actualizate.

De exemplu, imaginati-va ca au un logo cu o anumită culoare pe ea şi brusc compania decide că vrea să recolorarea logo-ul. Mai degrabă decâtdeschiderea fiecare instanţă a acelei logo-ul şi editarea ei, aveţi posibilitatea să deschideţi FLA comandantului, că editaţi, apoi actualizaţi instanţecare reflectă în mod automat modificările.

Puteţi utiliza acest concept pentru mult mai mult decât un logo simplu, pentru că vă va fi de încărcare componenta de autentificare din fişierul deexemplu, aţi construit în secţiunea anterioară.

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

344 of 362 11/9/2

Page 345: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 345/362

 

Adăugarea componenta de autentificare

Începeţi prin deschiderea VideoPlayer.fla fişier dacă nu este deja deschis. Apoi selectaţi Fişier Import O Biblioteci O Deschideţi externă.

În această casetă de dialog, aveţi posibilitatea să navigaţi la directorul în cazul în care componenta de conectare este stocată şi selectaţi acel fişier.Cu fişierul selectat, faceţi clic pe Deschidere.

Trageţi LoginWindowMC din această bibliotecă în bibliotecă a VideoPlayer FLA. Ar trebui să vedeţi acum două noi MovieClipE înbiblioteca dumneavoastră VideoPlayer fişier. Acest lucru se datorează faptului că LoginWindowMC are un fişier de sprijin care conţine toatede design, care este copiat automat atunci când glisaţi-mamă.

Acum, că componenta de conectare, se adaugă, aveţi posibilitatea să modificaţi existente VideoPlayer clasa de fişier pentru a adăuga aceastăfuncţionalitate nouă. Pentru a începe, adăugaţi crearea de componenta, dar uita de logica de conectare.

Noul cod ar trebui să fie adăugate la funcţia constructor, similară cu următoarea:

VideoPlayer function () {

gatewayURL = "http://localhost/amfphp/gateway.php"; GetCategories ();

videoPlayer.visible = false; videoListCombo.enabled = false;

 var autentificare: LoginWindow = new LoginWindow (); login.addEventListener (LoginWindow.LOGIN_ATTEMPT,loginHandler);

addChild (login); login.redraw ();

}

Înainte de a testa codul, adăugaţi loginHandler metodă pentru a evita orice erori de rulare. Puteţi adăuga această metodă la orice punct dincod. Vă recomandăm undeva spre partea de jos a clasei de a menţine fluxul de ansamblu a fişierului.

updateTrackingHandler private function (răspuns: Object): void {

}

loginHandler private function (răspuns: Object): void {

}

Ultimul pas este de a importa LoginWindow clasă, astfel încât proprietatea statice pot fi încărcate pentru tratare a evenimentului.

Pachetul {

de import de import de import import

{publice

}

}

Atunci când aplicaţia de testare ar trebui să vedeţi imediat fereastra de conectare. Pentru că nu aţi adăuga orice logică în acest moment, nu există

nici o modalitate de a închide fereastra de autentificare, dar puteţi vedea că este de lucru, astfel încât să puteţi continua.

Logică, care este responsabil pentru serviciul de asteptare remoting, trebuie să fie adăugate la existente loginHandler metodă.

loginHandler funcţie (e: Event): void {

 var răspuns: răspuns = new Responder (loginRespHandler,

onFault); gateway-ul = NetConnection noi (); gateway.connect (gatewayURL); gateway.call ("User.login",responder, login.data.username, login.data.password 

);

flash.display.MovieClip; flash.events.Event, flash.net .*; LoginWindow;

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

345 of 362 11/9/2

Page 346: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 346/362

 

clasa VideoPlayer extinde MovieClip

Următorul pas este de a copia loginRespHandler şi adăugaţi-l de mai jos loginHandler în VideoPlayer clasă.

Funcţia loginRespHandler (o: Object): void {

trace ("Răspuns:" + o.response);

dacă (o.response == true) {

trace ("ghidul de conectat"); login.close ();

}

else {

login.responseString = "nume de utilizator şi parolă incorectă";

}

}

Codul corect a fost acum adăugată la VideoPlayer clasă; cu toate acestea, există o modificare definitivă necesare înainte de componenta deconectare va funcţiona corect.

login variabilă, ce este definit în constructor trebuie să fie o proprietate la nivel mondial, pentru că în forma sa actuală, chiar acum, nici o altămetodă în această clasă are acces la ea.

Pachetul {

publice VideoPlayer clasa extinde MovieClip {

privat selectedCatID var: Numărul; autentificare privat var: LoginWindow;

VideoPlayer function () {

Intra in = new LoginWindow ();

}

}

}

Acum, că login variabilă este definită în mod corespunzător, puteţi testa aplicaţia, după cum se arată în figura 17.7. Tu ar trebui să poată să tastun nume de utilizator valid şi o parolă, şi componenta de autentificare ar trebui să dispară atunci când faceţi acest lucru.

După cum puteţi vedea, componenta de conectare fiind construit în acest fel într-adevăr face posibilă pentru ao adăuga la orice proiect existent.Pentru a extinde pe acest exemplu, aţi putea adăuga un obiect comun care să-şi păstreze şi să-l sesiune astfel încât utilizatorul nu trebuie să văconectaţi de fiecare dată.

Trebuie să aveţi acum o înţelegere mare de clădiri şi de lucru cu avansate, lumea reală aplicaţii. Sunt sigur că te gândeşti de mai multe aplicaţiidiferite pentru a construi după ce a văzut modul în care acestea funcţionează în profunzime.

FIGURA 17.7

Player video definitivă cu caseta de conectare vizibil

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

346 of 362 11/9/2

Page 347: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 347/362

 

Ceea ce urmează este un tabel care prezintă numele de fişiere şi în cazul în care acestea ar fi păstrat pentru această aplicaţie completă. Calea sebazează pe directorul de proiect, care ar trebui să fie în directorul dvs. de pornire Apache pentru ca cererea pentru a rula corect.

Aplicarea Fişier sursă Locaţii

Numele fişierului

Salvaţi Path

/

/

/

/

/

LoginWindow.swf 

LoginWindow.fla

LoginWindow.as

VideoListItem.as

VideoPlayer.as

SkinOverPlayStopSeekMuteVol.swf 

/

a continuat 

Aplicarea Fişier sursă Locaţii (Continuare)Numele fişierului Salvaţi Pathcolor.flv / Clipuri

Categories.php / Amfphp / servicii

DatabaseConnector.php / Amfphp / servicii

Videos.php / Amfphp / servicii

Tracking.php / Amfphp / servicii

User.php / Amfphp / servicii

În acest capitol, aţi început prin construirea un video player foarte de bază şi sa extins pe acest concept pentru a construi un video player

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

347 of 362 11/9/2

Page 348: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 348/362

 

multicategory. Utilizarea PHP să se ocupe de date între Flash şi baza de date a depus cererea mai dinamice.

Odată ce aţi avut video player terminat, ati inceput sa se extinda pe faptul că, prin adăugarea de urmărire video. Aţi învăţat cât de uşor a fost săpună în aplicare noi caracteristici în codul existent bazat pe modul în care originalul cererii player-video a fost dezvoltată în secţiunea anterioară.

A patra parte a capitolului şi-a prezentat procesul de dezvoltare a componentelor personalizate, care ar putea fi refolosite în proiectele tale viitoarPentru acest exemplu, ati dezvoltat o componentă de conectare care ar putea dezactiva o cerere până când utilizatorul conectat inch

Partea a cincea şi ultima a fost aducerea toate aceste tehnici pentru a dezvolta împreună o finala din lumea reala aplicaţie player video cu un modde autentificare şi de urmărire video de la secţiunile anterioare. Tot ce trebuie să faci acum este popula baza de date cu date reale şi vei avea un

sistem complet extensibile, multicategory, urmărirea, asigura punerea în aplicare player video.

Simboluri şi numerice

* Wildcard, 145; (punct şi virgulă), 382 | (ţeavă), 426 "(ghilimele simple), 133

A

absolută la nivel mondial classpath, 195 act 123 variabilă,

Mesaj de acţiune Format (AMF), 198 _action 234 variabilă, acţiune 293 variabila, $ acţiune variabilă, 348 ActionScript

adăugarea de film de urmărire a, 463 şi AMFPHP, 195, 216-218 aplicatii client de chat

manipulare XML răspuns, 248-251 listă, 242-245

opri caching cu date dinamice, 245-248 de anunţuri banner dinamic de dezvoltare PHP, 283 ferestrei browserului de deschidere, 281-282 list ă, 279-281 selecţiealeatoare, 283-284 de date dinamice, 85 hit counter, 286 galerie foto, 261-266 şi PHP cookie-uri, 121 cereri sondaj, 368-372 monitorizează site-ul, 351-359 de datestatice, 85 aplicatii video player de bază, 360-364

categoryHandler Metoda, 450

categoryResponseHandlermetodă, 449-450

Functia constructor, 448

clasa document de crearea, 446-448

getCategoriesmetodă, 448-449

getVideosMetoda, 451

manipularea erori in raspunsurile remoting, 453-456

listItemHandler metodă, listă 452-453, 446

videosResponseHandler metodă, 451-452 editori ActionScript, 60-61 ActionScript panou, 60, 81-83 ActionsScript 3 (AS3), 198-201 activ ă sandbox

aplicaţii care rulează în sandbox locale, 147-150 cererea de descărcare, 150-151 Adauga in cos buton, 303 addChild funcţie, 233, 265, 324 addDataToObject Funcţia,121 addEventListener apel, 263 addItem () funcţie, 217, 275, 376 addItemHandler Funcţia, 306 addProduct Metoda, 301 addServer () Funcţia, 420 addslash() funcţie, 133, 134, 137 administratori, e-mail site-ul, 349-351 ads.php fişier, 283 anunţuri, banner dinamic de dezvoltare PHP, 283 ferestrei browserului dedeschidere, 281-282 listă, 279-281 selecţie aleatoare, 283-284 Album de clasă, 214 allFields 108 variabilă, allowDomain () funcţie, 145, 164 valori alfa, 457-458 urmsubsidiar, 389-391 Amazon căutare listă aplicaţii, 317

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

348 of 362 11/9/2

Page 349: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 349/362

 

simplificarea răspuns XML, folosind AWS 319-326, 317-319 AMF (Message Format de acţiune), 198 AMFPHP

ActionScript pentru integrare, 216-218 AS3 şi dezvoltatorii PHP gateway-ul de depanare, 200-201 unelte de depanare, 199 instalarea, browser-ul de serviciu 198-199200

AMFPHP (Continuare) în Flash, 205-210 lumea reala cerere, 210-218 de testare cu servicii personalizate, 201-205 tag-ul Anchor, 247 ŞI condiţie, 58 funcţii anonime,263-266 răspuns variabilă, 368 Apache

adăugând la servere Web UNIX, 9-13 Ferestre, 4-9, 13 construirea o alt ă versiune de pe acelaşi sistem, 406-407 comentarii în, 397 Ecranul implicit Bine ai venit, 8module de stabilire instalat, 40-42 versiunea de stabilire, 40 de modificarea de eroare personalizate documente, 43 optimizarea, 412-413 pornirea si oprirea, 40 Apacdirector de configurare, 29-31 apachect1 aplicaţie, 11 appendText metodă, 208, 387 Application Programming Interface (API), 289 cereri

Amazon Search privire de ansamblu, 317

simplificarea răspuns XML, folosind AWS 319-326, 317-319 de chat client

Flash porţie, listă 242-251, 242 cod PHP, 252-260 PHP server de soclu pentru, 168-175 depanare

subsidiar urmă, 389-391 raportarea erorilor în PHP, 381-385 în Flash, 385-389 listă, 381 de desen

 în Flash, 336-341 listă, 335-336 anunţurile banner dinamic de dezvoltare PHP, 283 ferestrei browserului de deschidere, 281-282 list ă, 279-281 selecţie aleatoare,elemente de 283-284, 239-242 asigurând utilizarea Exlusive, 151-152 lovit contoare, 285-286

 întreţinere

ChangeLog,399-400 comentând cod, biblioteci personalizate 395-399, 403-404 listă, 395 de control al versiunii, 401-403 listă, 239 PayPal coş

privire de ansamblu, 290-291 POST de date, 293-294 sendToURLmetodă, 294 înfiinţarea de comunicare, 294-295 pentru semnarea PayPal Premier, 291-293 galerie fot

 în curs de dezvoltare ActionScript, 261-266 în curs de dezvoltare cu ajutorul flickr, 326-333 de navigare, 266-270 list ă, 260-261 pentru PHP, 270-274

sondaj

clădire PHP si MySQL, 364-368 în curs de dezvoltare ActionScript, 368-372 listă, 364 lumea reală

Amazon Search cerere, 317-326 galeria de poze în curs de dezvoltare cu ajutorul flickr, 326-333 cerere de desen, 335-341 HG bibliotecă, listă 341-346, 289-290, 335PayPal coş, 290-295 cerere sondaj, 364-372 editor simplă a fişierelor , 373-379 monitorizează site-ul, player video 347-359, 359-364 cititori RSS

importatoare clase, 275 de încărcare PHP, 275-279 listă, 274-275 de funcţionare în sandbox locale, scalabile 147-150, 219, 242 coşul de cumpărături

clădire PHP, 298-315

 în curs de dezvoltare ShoppingCartItem clasă, 298-306 în curs de dezvoltare StoreItem clasă, 296-298 listă, 295-296 descărcare, 150-151 player video

Detalii de adăugarea de probă la mese, 434-435 de dezvoltare avansate, 446-456 de bază, 429-432

construirea de baze de date şi tabelele MySQL, 433-434 constructii VideoListItemclasă, finalizarea 456-461, 481-486 listă, 429, 432 de baze de date de testare,435-437 autentificare componenta user, 465-481 folosind Flash pentru a dezvolta, 359-364 de urmărire video, 461-464 argumente, 50, 130 Array tip, 297 tablouri, 48,383

array_search Funcţia, 175 array_shift funcţie, 171 AS3 (ActionsScript 3), 198-201 as3CoreLib bibliotecă, 192, 196 atribut () metodă, 354 atribute, 118 deauto-play, 430-431 auto_increment funcţie, 255 actualizări automate, 406 AWS_ACCESS_KEY ID-ul de acces, 318

B

SbackupCmdvariabilă, 423 SbackupDirdirector, 424 backupDir fişier, 422 copii de rezervă serverul

de backup de management, 421-424 de gestionare a fişierelor, 421 folosind PHP, 424-427 de control al versiunii, 403 anunţuri banner, dinamice PHP în curs dedezvoltare, 283 ferestrei browserului de deschidere, 281-282 listă, 279-281 selecţie aleatoare, 283-284 SbannerAdsmatrice, 283 de autentificare de bază, 38-39 cucaracter obligatoriu, soclu, 154 BitmapData clasă, 345 de sângerare de ultimă oră, 407 comentarii bloc, 396-397 bodyTxt Textarea funcţie, 376 tag-ul Bold, 247

BookItem clasă, 323-324 BookSearch clasă, 321 boolean, 48 pauză de control, 53

Tag-ul Break, 247 concediu, 54

ferestre de browser, de deschidere, 281-282 bug tracking, 399-400 componenta buton, 242-243 criptare buton, 292 Cumpara acum buton, 295

C

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

349 of 362 11/9/2

Page 350: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 350/362

 

cache Busters, 244-246, 249 cache

cu sistem de memcached

instalarea pe Linux, 416-418 instalarea pe Windows, servere de gestionare 418-420, 420-421 listă, 416 coduri PHP, 410 salvarea datelor, 418-419 butonul de apelare, 2apel Metoda, 451 callback funcţiei, 87, 141, 389 callDatabase Metoda, 221 callPaypal Funcţia, 294 callServermetodă, 234-cămilă caz, 91 de aplicaţii PayPalcoş

privire de ansamblu, 290-291 POST de date, 293-294 sendToURLmetodă, 294 înfiinţarea de comunicare, 294-295 pentru semnarea PayPal Premier, 291-293 co şul decumpărături

clădire PHP, 298-315

 în curs de dezvoltare ShoppingCartItem clasă, 298-306 în curs de dezvoltare StoreItem clasă, 296-298 listă, 295-296 cartContents matrice, 301 cartItemCountdclasă, 301 categories.php fişier, 270 SCategoriivariabilă, 270 de clasă Categorie, 443-444 categoriemetodă, 445, 448 categoryHandlerMetoda, 450categoryResponseHandlermetodă, 449-450 SCHIMBAREA eveniment, 180 A modificărilor,399-400 Charles Web Debugging Proxy, 133, 388

chat-ul client aplicatii Flash parte, 242-251

manipulare XML răspuns, 248-251 listă, 242-245

opri caching cu date dinamice, 245-248 listă, 242 cod PHP, 252-260

conectarea la MySQL, 256-259 crearea de baze de date tabel, listă 259-260, 252-255 PHP server de soclu pentru, 168-175 conexiunea se încheie, 175

excl. serverul master de la comunicare, 171 erori de manipulare, de 174-175 client conexiune de master, to ţi clienţii care fac notificarea 172-173, 174 client notificarea

specifice, proprietăţi 173-174, 168-171 monitorizare server, 175 parametrii de construcţii, 171-172 ChatServer clasă, 176 Checkout buton, 300 checkSite () metod356 soclu copil de resurse id, 157 SchildSocketvariabilă, 157-158 importurile de clasă, 299 variabile de clasă, 258

clase. Vezi de asemenea şi cursuri individuale de nume de bază socket, 165-166 particularizate, definite 231-235, 220-221 in Flash, 229-231 pentru încărcarea de date în Fla86-87 în PHP, 225-228 remoting, 205-210 RSS aplicaţiile cititor, 275 în siguranţă scris fişier, 137-138 Class.method,223 URL-uri curate, 38 clare () Metoda, 119clearButtonHandler Funcţia, 180 clearIndicators funcţie, 108 CLI (command-line versiune), 155-156 CLICK eveniment, 294 clickHandler metodă, 458 conexiclient, 154, 157-158 close () metodă, 420, 468, 473, 479 closeHandler Funcţia, 182

 închidere

conexiuni în cache server, 420 conexiuni MySQL, 75-76 CMS (sisteme de management al con ţinutului), 373-379 cod comentând, 395-399 editor de cod, 60. A se vedea,

asemenea, ActionScript fragmente de cod panou, 51 informatii de cod, cod schelet 398, 106-107

ComboBox componente, 359, 361, 373, 377, 449 din linia de comandă versiune (CLI), 155-156 cod comentând, 395-399 biblioteci comerciale Flash, 192-193 decomunicare, PayPal, 294-295 comunicator clasă, 233 comentarii compilator, 397 COMPLET eveniment, 275 Inspector Component, 432 Components panoul, 430 date

concatenarea, 71 Concurrent Versions System (CVS), 401 condiţii, MySQL ŞI, 58 SAU, 59 UNDE, 58 conf / Culegere, 407 fisiere de configurare, 256, 413 variabile dconfigurare, 256 connect () metodă, 206, 213, 391, 420, 438 connectHandler funcţie, 163 de legătură în Flash

tipuri de conexiune, 65-69 statutul de stabilire a PHP, 64-65 Flash pentru PHP

Detalii de concatenarea, 71 mai multe piese de date, 71-73 PHP pentru MySQL

aducând toate împreună, 77-84 conexiune de închidere, 75-76 statutul de stabilire al MySQL, 73-74 conexiune permanentă, 75 de baze de date selectând, 74, 76conexiuneMetoda, 212 _connectionvariabilă privat, 212 conexiuni

client, server de 157-158 de închidere cache, 420 de baze de date, 257 de master, 154 maestru client, 172-173 MySQL, 75-76 parametru, 213 persistente, 75 soclu de ladistanţă, 163-164 metoda de proprietăţi de chat constructor, 169 definite, 221

 în curs de dezvoltare ActionScript, 360 LoginWindow clasă, 466-467 metoda statica, 223 VideoListItem, 457 VideoPlayer clasă, 448 de răspuns XML, 322constructori. Vedea Metoda de constructor formular de contact

PHP de asteptare, 103 Stivuitoare eveniment, 103-105 de coresponden ţă în PHP, 105-106 copil container, 468 recipientde proprietate, 466 sisteme de managemenconţinutului (CMS), 373-379 continua de control, 53-54 structuri de control, PHP pauză de control, 53 continuade control, 53-54 altfel declaraţii, 51-52 elseifdeclaraţii, 52 foreach buclă, 53 dacă declaraţii, 51 includedeclaraţie, 55 include_once declaraţie, 56 pentru buclă, 52-53 necesita declaraţie, 54-55require_once declaraţie, 55 comutatorde control, 54 în timp ce buclă, 52 $ _COOKIE 114 variabilă, cookiename cookie-uri variabile, 123 Flash

aducând toate împreună, 119-122 ştergerea obiecte partajate, 119 obiecte partajate de încărcare, 118 obiecte de economisire partajate, 118-119 listă, 113

PHP

atribuirea multiple, 117-118 ştergerea, care expiră 116, 116 de încărcare, 114-115 de salvare, de 115 de partajare, 114 createMasterClient metodă, 172-173createNewTextField Metoda, 233 cron serviciu, 421 crontab fişier, 422-424 crossdomain.xml fişier, 164 cripto pachet, 196 CS3 ,401-402 currentID 261 variabilcurrentImage variabilă, 265-266 sistem de autentificare personalizat, 38-39 clase personalizate, 231-235 documente personalizate de eroare

documente dinamic eroare, 43-46 modificarea Apache, 43 de listă, 42 extensii personalizate fişier, 38 biblioteci personalizate, 403-404 opţiunea Personalizat, 6-7

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

350 of 362 11/9/2

Page 351: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 351/362

 

Stivuitoare redare personalizate, 431 URL-uri personalizate, 38 de definiţii personalizate variabilă, 71 particularizate documentele XML, 332 -333 CVS (ConcurrentVersions System), 401

D

de date

 încărcare

 în Flash, 85-87 one-way, 88 cu două sensuri, 88-89 XML în Flash, 89-92 XML în PHP, PHP 92-93, 95-97 returnarea, 143-144 trimiterea la server, 67-68 stocarea

parole, folosind PHP, 141-142 în siguranţă scris la dosar, ghidul de 137-141

Detalii de HTML, 136 igienizare, 133-135 XML în PHP, 93-95

de date obiect, 118 de date proprietate, 275, 469 conexiune de date, 257 de baze de date editor, 434 de baze de date plug-inuri, 409 incetiniri baza de date, 416

DatabaseConnectorclasă, 437-439, 441, 476 DatabaseConnector.php fişier, 438 baze de date

suport cu PHP, 424-427 aplicatii video player, componenta DataGrid 433-434, 216-217 dataLoaded () metodă, 370 de masă data, 255 dateAdded rând, 255, 259SdaysBeforeExpiration 116 variabilă, dbconn.php fişier, 252, 254, 256, 307, 347 Gateway Debug, 200 debuggateway.php fişier, 200 de depanare aplicaţii

subsidiar urmă, 389-391 raportarea erorilor în PHP, 381-385 în Flash, 385-389 listă, 381 ajutoare eliminarea, 399 unelte de depanare, 199 debugTxt exemplu, 387servere dedicate, 412 şterge () Metoda, 420 DELETE declaraţie, 58 elemente în ştergerea cache, 420 dependenţe, server, 407-408 Sdesc variabilă, 278 accesordescendent, 91-92, cererea de proiectare, dezvoltare sisteme de 240-241, 4, 406-408 Sdir variabilă, 422 directoare, backup, 422-424 dezactivaţi Funcţia, 182

disableInterface funcţie, 182 dezactivarea de auto-play, 430-431 dispatchEventFuncţia, 180 display_errors directivă, 129 displayImageFuncţia, 265DisplayObjectde clasă, 222 Document clasă

schelet pentru clasa, metoda constructor de 352, 360 în Flash, 229-230 discu ţie principal, 446-448

galerie foto, 327-329 PollItem clasă, 368 Timeline ActionScript, 304 Dom XML, 92-93 domeniu, 114 bară oblică dublă, 138 descărcarea, 417 remiză ()Metoda, 345drawCategories funcţie, 262, 263 cereri de desen în Flash, 336-341 list ă, 335-336 Dreamweaver CS3 programului, 31-32 dummyHandler metodă, 470 anunţuri bannedinamic de dezvoltare PHP, 283 ferestrei browserului de deschidere, 281-282 listă, 279-281 selecţie aleatoare, 283-284 de date dinamice, 85, 162 de documentedinamice de eroare, 43-46 obiecte dinamice, 121 câmp de text dinamic, 286 XML dinamice

din baza de date, 94-95 de imprimare, 93-94

E

E_ALLmesaj, 384

ecou Funcţia, 383

E_COMPILE_ERROR mesaj, 384

Avertizate E_COMPILE_WARNINGmesaj, 384

E_CORE_ERROR mesaj, 384

E_CORE_WARNING mesaj, 384

editori, fişier, 373-379

E_ERRORmesaj, 384

E4X ,89-92

element al matricii, 327

opţiune altceva, 480

altfel declaraţii, 51-52, 474

elseif declaraţii, 52

$ EmailInfo 349 variabilă,

e-mail administratorii site-ului, 349-351

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

351 of 362 11/9/2

Page 352: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 352/362

 

parolă gol, 134

gol string, 254

permite Funcţia, 182

 încapsulare, 225

string criptat, 141

E_NOTICE mesaj, 384

ENT_COMPAT constanta, 136 ENT_NOQUOTES constanta, 136 ENT_QUOTES constanta, 136 E_PARSEmesaj, 384 documente de eroare, particularizate

documente dinamic eroare, 43-46 modificarea Apache, 43 de listă, 42 error_log funcţie, 382 erori

importatoare clase în PHP, 226 niveluri de, 383-385 mesaje, 319 optimizarea Apache, 413 în răspunsurile remoting, 453-456 de raportare, 259, 381-385 jucător ghidul conectare video component, 480-481 E_STRICT mesaj, 384 E_USER_ERROR mesaj, 384 E_USER_NOTICE mesaj, 384 E_USER_WARNING mesaj, 384 faza de evaluare, 239-Eveniment clasă, 447 Stivuitoare eveniment

formular de contact, 103-105 modul de conectare, 107-110 sandbox, 149 prize, 162-163 etapă, 473 ascultători eveniment, 68, 87-88, 162, 178 E_WARNING mesaj, 384example.orgdomeniu, 152 parametrii de ieşire, 175 cereri de ieşire, 171-172 extindemetodă, 440 Extension Manager, 194 extensiile, memcached PHP, 417-418 claexterne, 298 biblioteci externe, 192, 482

F

-F opţiune, 158

failedAttempts variabilă, 356, 357 de pavilion fals, 419

Fatal Error: Funcţia, 197 $ Pentru hrana animalelor 278 variabilă, feedBody Textarea Funcţia, 276 feedHandler () funcţie, 275 editori fişier, 373-379

file locking, 63 fişier caseta de încărcare, încărcarea fişierelor 130, 128-130 file_get_contentsfuncţie, 320, 374 fileContents obiect, 377 $ FileContents 374variabilă, fileManager.php fişier, 374 fileNameTxt variabilă, 131 fisiere

plat, 57, 63 limitarea, 421 în siguranţă scris la cursuri, 137-138

magic_quotes opţiuni, 138-139 obiecte partajate, 139-141 untarring, 10 Firefox browser Web, 389 FLA (Flash File), 321 Flash

editori subsidiar, 61 conectarea la PHP, 71-73 tipuri de conexiuni, 65-69 obiecte ştergerea comun, 119 statutul de stabilire a PHP, 64-65 Flash dispozitive activate, 62dezvoltare formă, 99-100 datele de încărcare, în, 85-87 de încărcare obiectele partajate, 118 de încărcare în XML, 89-92 modulul de logare

Codul de schelet, 106-107 Stivuitoare eveniment, 107-110 server pentru integrare, 110-111 obiecte partajate de economisire, prize 118-119, 161-167 Flash client, 177-18Flash CS3, 194-196 Flash File (FLA), 321 Flash IDE, 59-61 Flash de securitate activ ă Sandbox

aplicaţii care rulează în sandbox locale, 147-150 descărcare cerere, aplicatii 150-151, 151-152 sandboxType de proprietate, 145-147 tip de setare, 145 flashChatdemasă, 255, 259 flashservicesCulegere, 198 fişiere plate, 57, 63 Flickr galerii foto

clădire particularizate XML document, 332-333 interfatarea cu serviciu Web, 331 listă, 326-330 flush () metodă, 118-119 FLVPlayback componente, 430 tag-ul Fon247 fopen Funcţia, 374 de buclă,52-53, 152 de, bucla., 217, 252, 300, 332

pentru fiecare .. buclă, 53, 91-92, 170, 173, 248, 262, 323, 328,

353, 422, 450 pentru .. în bucla, 207 de dezvoltare formă, Flash, 99-100 $ De la funcţii de variabilă, 350

addChild, 233, 265, 324 addDataToObject, 121 addItem (), 217, 275, 376 addItemHandler,306 addServer (),420 addslashes (), 133, 134, 137 allowDomai(), 145164 263-266 anonime, array_search,175 array_shift,171 auto_increment, 255 bodyTxt Textarea, 376 callback, 87, 141, 389 callPaypal,294clearButtonHandler,180 clearIndicators, 108 closeHandler,182 connectHandler, 163 dezactivaţi,182 disableInterface,182 dispatchEvent,180displayImage,265 drawCategories,262, 263 ecou, 383 activaţi, 182 error_log,382 Fatal Eroare:, 197 feedBody Textarea, 276 feedHandler (), 275file_get_contents,320, 374 fopen,374 fwrite (),374

getCategories (), 270, 438, 441, 444, 448-449, 451

getDate (), 201, 206, 208, 425 getPhotosFromID (), 272 getTimer (),149,249 gzip, 425

handleServerResp () , 286 htmlentities (), 136 imagecreatetruecolor (),343 imagejpeg (),343 imageLoaded, 264-265, 280 imagesetpixel,344 import229 includ, 226, 424 init ()

 în curs de dezvoltare ActionScript, Flash 261, 244

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

352 of 362 11/9/2

Page 353: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 353/362

 

messages de gestionare, 247 ferestre de browser de deschidere, 281 galerie foto de navigare, 267 aplica ţii care rulează în sandbox locale, cererile de descărcare 148,150 initLoop, 169, 172 IO_ERROR, 356 is_numeric (), Lungime 132, 132

loadCategories (),261-262 loadFeeds,276 loadHitCounter (),286 loadImage (),264, 280 loadMessages (),244, 247 loadMessagesHandler, 249loginHandler,107-108, 469-472, 483 loginMCMovieClip, 468 e-mail (),349-350 md5, 477

movieclip, 323, 339 msgTxt TextInput,180 mt_rand (), 283 mysql_close, 75-76, 409 mysql_connect (), 75, 256, 435 mysql_fetch_array (),79,253mysql_num_rows () , 252,442, 462 mysql_pconnect, 75 mysql_query (), 252, 254, 444 mysql_real_escape_string, 134, 136 mysql_select_db, 76navigateToURL (), 65-66, 281, 294 nextImage (), 266 onResult, 207, 216 output_errors,382

PHP, 49-50 phpinfo (), 139 phpize,417

populateFileList (), 377 preg_replace (),278, 422 prevImage (), 266 de imprimare, 383, 409 print_r (), 383 removeChild, 324 removeChildAt, 150necesită, 226, 424 de răspuns, 69, 143 saveCookie,117 searchAndReplace,206, 207 sendHandler, 102-103, 109 SendMessage,102 sendMessageHandler,2sendRequest, 182 serverResponse , 70-72 set_time_limit,156 setcookie, 115, 117 siteContainermovleclip, 352 socket_accept,157 socket_create, 1socket_listen, 173 socket_read, 157, 160 socket_select, 170 socket_write,157, 173 sursă handler, 97 sprint (), 331-332, 348, 425, 463 {START_FILE},336 startTimer,148-149 statusMessage,183 stopServer,169 StoreItemmovleclip, 305 strlen (), 254 strpos,130 subşir,183 table_name, 414 Textarea184 timp (), 116, 142, 252 timerHandler, 245 trigger_ eroare, 453 typeof, 132 ucwords, 202 unset (), 257, 410 upperCaseWords,205, 207 URLLoader, 27URLRequest,141, 265, 275, 322 varchar (),259

whichSandbox,146 writeLine, 182 xmlHandler,91 fwrite () Funcţia, 374

G

gallery.php fişier, 273 gateway-ul de proprietate, 304 gateway-ul url 206 variabilă, poartă 478 variabilă, gateway.php fişier, 198-199, 478 HG bibliotecă

colectare de date pixel in Flash, 345-346 imagine generatoare de in, 343-345 list ă, 341-343 EEG format, 317 EEG cerere, 328, 343, 370, 374 $ _GET ['Action'] 273variabilă, getAlbumByGenrelDMetoda, 213 getCategories () funcţie, 270, 438, 441, 444,

448-449, 451 getDate () funcţie, 201, 206, 208, 425 getIDMetoda, 302 getlnstanceMetoda, 224 getMessages.php fişier, 252 getPhotosFromID () Funcţia, 272getPhotos.php fişier, 272 getproducts opţiune, 307, 308 getsites valoare, getters 348 şi setteri

metode de definire, 459-461 listă, 224-225 getTimer () funcţie, 149, 249 getVideosmetodă, 440, 450, 451 la nivel mondial variabilă, 283 globals, 105-106gskinner, 192 GUI-activat unelte, 415 gzip Funcţia, 425

H

handleErrormetodă, 174 funcţii handler, 68-69, 87 Stivuitoare

redare personalizate, 431 eveniment

formular de contact, 103-105 modul de conectare, 107-110 sandbox, 149

Stivuitoare (Continuare)

prize de curent, 162-163 etapă, eveniment mouse-ul 473, 337 eveniment de scenă, 473 handleServerResp () funcţie, 286 de hardware, Apache, 412 haşiş metodă196 algoritmi de hashing, 111 header () apel, 273 HelloWorld Metoda, 227 ajutor comandă, 172 ajutoare, depana, 399 cereri hit counter, 285-286 . Htaccessfişiere, 37-39, 397 de date HTML, tag-uri HTML 136, 247

htmlentities () Funcţia, 136 httpd.conf fişiere, 407, 413 HTTPS apel, 293

Eu

id rând, 259, 438 id 368 variabilă, dacă Declaraţii

activă sandbox, existenţa 148 dosar de verificare, 226 structuri de control, 51 valorile dat ă, 425 în curs de dezvoltare ActionScript, 360 sondaj cerere în curs dedezvoltare, 366 editorului de fişiere, 373

interfaţare cu serviciu Web, 331 ordinea logică a datelor, 137 cookie-uri PHP, 123 ShoppingCartItem clasă, 303 rânduri valabil, 444 coduri validarea ZIP, 132 dacăaltcevadeclaraţii, 409 incarcator imagine, 96-97 tag-ul Image, 247

imagecreatetruecolor () Funcţia, 343 imageDir 261 variabilă, imagejpeg () Funcţia, 343 imageLoaded funcţie, 264-265, 280 ImageMagick bibliotecă, 193 imag

generatoare de HG în bibliotecă, 343-345 de navigaţie în aplicaţii galeria de poze, 266-270 imagesetpixelFuncţia, 344 import funcţie, 229 clase importatoare

 în Flash, 229 în PHP, 226

RSS aplicaţii cititor, OOP 275, 222 include funcţie, 226, 424 includedeclaraţie, 55 include_once () declaraţie, 56 $ IncomingData 157 variabilă, info.php fişie

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

353 of 362 11/9/2

Page 354: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 354/362

 

382 ini cale, 382 init () funcţie

 în curs de dezvoltare ActionScript, Flash 261, 244

mesaje de gestionare, 247 ferestre de browser de deschidere, 281 galerie foto de navigare, 267 aplica ţii care rulează în sandbox locale, aplicatii 148 descărcare, 150variabile de iniţializare, 97, 244, 336 initLoop funcţie, 169, 172 comentarii inline, 396 InnoDB motoare de stocare, 16-18 caseta de intrare, 130

INSERT declaraţii, 57-58, 255, 306, 434 Instalare Apache HTTP Server 2.0 si programele de comenzi rapide pentru: op ţiune, 6

instalarea

AMFPHP, 198-199 Apache

UNIX, 9-12 Ferestre, 4-9 sisteme de dezvoltare, memcached 406-408, 416-420 MySQL, 24-26 bibliotec ă MySQL, PHP 197-198

pentru UNIX, 33-34 pentru Windows, 27, 31 biblioteci 'terţă parte

in Flash CS3, 194-195 în PHP, 195 exemplu variabilă, 227 instanţiere, de clasă, 226-227

interacţionează, cu formular de contact utilizatori, 101-106 de dezvoltare formă folosind Flash, 99-100 modul de autentificare în Flash, 106-111 interfaţare, galerii foflickr, 331 IO_ERROR Funcţia, 356 IOError eveniment, 87 is_numeric () Funcţia, 132 isDrawing 337 variabilă, isset () metodă, 123 tag-ul Italic, 247

ITEM_CLICK eveniment, 259, 276, 457-458 ItemAttributes nod, 320 itemLength variabilă, 72-73 Elemente nod, 320

J

. Jpg fişierextensie, 128

L

etichetă de proprietate, 275 lungime Funcţia, 132 libevent bibliotecă, 416 libjpeg bibliotecă, 407 biblioteci

as3CoreLib, 192, 196 personalizate, extern 403-404, 192, 482 HG

colectare de date pixel in Flash, 345-346 imagine generatoare de in, 343-345 list ă, 341-343 ImageMagick, 193 MySQL, 197-198 PDF, 193 RED5, 192

SimpleXML, 278, 308, 320 spell-check, 192 terţi

AMFPHP, 198-218 comerciale Flash, 192-193 în Flash CS3, MySQL 194-196, 197-198 list ă, 191-192 în PHP, 193, 195 clase de Bibliotecă, 230-231 linie de comentariu, 39Legătură într- variabilă, 256, 441, 462 Identifier Transmisia, 230

Linux, 416-420

Listă componente, 275

Postul tag listă, 247

Ascultă directivă, 13

ascultare, prize, 154

ListEventde clasă, 275

listItemHandler metodă, 452-453, 464

LiveHTTPHeaders,389

loadbtnMetoda, 376

loadCategories () Funcţia, 261-262

loadData () Metoda, 360

datele încărcate, 88-89

loadedResultsHandler () Metoda, 323 încărcătorvariabile, 70 loaderInfo obiect, 151 loadFeedsFuncţia, 276 loadFile Metoda, 376 loadHitCounter ()Funcţia, 286 loadImage () funcţie, 264, 280 de încărcare

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

354 of 362 11/9/2

Page 355: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 355/362

 

datele din cache, cookie-uri 420

Flash, PHP 118-122, 114-118 de date

 în Flash, 85-87 în PHP, 92-93 XML în Flash, 89-92 one-way, 88

PHP, RSS reader aplicaţii, 275-279 cu două sensuri, 88-89 procese de încărcare, 88-89 loadingMessages248-249 variabilă, loadMessages () funcţie, 244, 247loadMessagesHandlerFuncţia, 249 loadPolicyFile fişier, 164 loadSites () Metoda, 352 loadThumbmetodă, 325, 330 local string, 148 LocalConnectiondeclasă, 389 localhostdomeniu, 176 localhost 256 variabilă, locale-sigura sandbox, 145 locale-cu-sistem de fişiere sandbox, 145 locale-cu-networking-sandbox sandbox, 145 loggedin 109-110 variabilă, $ Loggedin variabilă, 477 de logare

optimizarea Apache, MySQL lent interogări 413, 414

logica, contoare lovit, 285 autentificare

listă, 292 ghidul de autentificare componentă

adăugarea de remoting, 478-481 adăugând la jucător, 482-486 LoginWindow clasă, 466-472 listă, 465

PHP autentificare clasa manager, 476-478 de testare, 473-475 componenta autentificare, 473 manager de clasa autentificare, 476-478 login metodă, 221, 477-478autentificare modul Flash

Codul de schelet, 106-107 Stivuitoare eveniment, 107-110 integrare server, 110-111 componente formă, 106 login 484 variabilă, LOGIN_ATTEMPTeveniment, 473loginBtn Metoda, 469

loginHandler funcţie, 107-108, 469-472, 483 loginMC MovieClip Funcţia, 468 loginRespHandler metodă, login-uri 484, 476 LoginWindow clasă

centrare MovieClip, 468 aproape metoda, constructor 468, 466-467 în Flash, 465

loginHandler metodă, listă 469-472, 466 redesenaţi metodă, 467-468 resetHandler metodă, 469 de plasare schimbarea de MovieClips, 468 LoginWindowMCfişier, 482 bucle. A se vedea, de asemenea, bucle individuale pe denumirestructuri de control, 52-54 recursive, 160

M

magic_quotes_gpc de proprietate, 138-139 e-mail () funcţie, 349-350 de corespondenţă în PHP

globals, 105-106 de securitate, 106

de întreţinere, aplicarea ChangeLog, 399-400 Cod comentând, 395-399 biblioteci personalizate, 403-404 listă, de control al versiunii 395, 401-403 face comenzi, 11makeCall () metodă, 233 clasă manager, 476-478 servere de gestionare, 420-421 conexiuni client de master, 172-173 conexiuni maestru, 154 prize de master, 154

MAX_ATTEMPTS 356-357 constant, MaxClientsdirectivă, 413 MD5de clasă, 196 md5Funcţia, 477 md5141 hash, Membru clasă, 222 sistem memcached instalarea, 416-42servere de gestionare, 420-421 listă, 416 tampon mesaj, 171 nod mesaj, 248 mesaj rând, 259 messages.php fişier, 252, 254-255 messagesTxt, 243 messagesTxtTextarea caz, metoda de 246 tabele, 201, 204, 212 metode. A se vedea, de asemenea, metode individuale de nume accesibilitate, 169 definite, 50 static, 223 comentarii deamestecare, 397-398 script moderaţie, 260 monitor.php fişier, 348, 350 Stivuitoare eveniment mouse-ul, metode de manipulare de 337 mouse-ului, 431, 458 mouse-uevenimentului, 337 MovieClip clasa de centrare, 468 Document clasă, componentă de conectare 230, 465-466 StoreItem clasă, 296 de pompare plasarea, video play468, 447 VideoListItemde clasă, 456

movieclip funcţie, 323, 339 msgTxt caseta, 180

msgTxt TextInput Funcţia, 180

mt_rand () Funcţia, 283

mai multe versiune de întreţinere cerere, 401-403

mai multe clase, PHP, 228

MXP fişier, 194

MylSAM motoare de stocare, 16-17 myPlayBtn,431 myPlayer, 430 MySQL

Condiţii ŞI, 58 SAU, 59 UNDE, 58 bibliotecă, 197-198 linie de comentariu, 396 interogări de logare lent, optimizarea 414, 413-415 de performanţă, 414 PHP

 închidere conexiuni, conectarea la 75-76, 74-75 statutul de stabilire al MySQL, 73-74 conexiuni persistente, 75 baze de date selectând, 76 aplicatii sondaj, 364-368declaraţii

DELETE declaraţie, 58 INSERT declaraţie, 57-58, 77 SELECT declaraţie, 57 tabele, 57 UNIX server Web

comandă de proprietate, 25 parole, 27 teste, 26 aplicatii video player

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

355 of 362 11/9/2

Page 356: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 356/362

 

clădire în tabele, tabele ghidul de 433-434, 476 site-ul, 14 pentru Windows server Web

Cel mai bun suport pentru opţiunea multilingvism, 20 conexiuni concurente, 18-19 procesul de configurare, 22-23 comenzi server de baze de date, 24 Dedicated ServMySQL opţiune Masini, 16 opţiunea de configurare detaliat, 14-15 opţiune Masini Developer, 16 descărcarea, 14

Activează acces root de la opţiunea de la distanţă maşini, 22 Activeaza optiunea modul strict, 19 Activează TCP / IP opţiune, 19 de memorie liberă, 16

Includeţi Director Bin în opţiunea de cale Windows, 21 Manuala selectate setul de caractere standard / Colectia

opţiune, 20-21 opţiunea de reglare manuală, 19 opţiunea Bază de date multifunctionale, 16-17 opţiuni de reţea, 19-20 noi prompt de comandă, 23-24 non-tranzacţionopţiune bazei de date numai, 17 OLTP opţiune, 18 parole, 26 opţiuni de securitate, 22 Server opţiune maşină, 16 Set Standard opţiune de caractere, 20 de opţiunea d

configurare standard, 15 de testare, 23-24

Baza de date tranzacţională opţiune Numai, 17 optiunea de instalare tipice, 14 mysql bibliotecă fişier, 195 mysql_close funcţie, 75-76, 409 mysql_connect ()funcţiei, 75, 256, 435 mysql_fetch_array () funcţiei, 79, 253 mysql_num_rows () funcţie, 252, 442, 462 mysql_pconnect Funcţia, 75 mysql_query () funcţie, 25254, 444 mysql_query () Metoda, 213 mysql_real_escape_string funcţie, 134, 136 mysql_select_dbFuncţia, 76 myStopBtn, 431

N

navigateToURL () funcţie, 65-66, 281, 294 de navigare, galerie foto, 266-270net .* pachet, 447

NetConnectionde clasă, 205, 206, 448, 463 $ NewCount 285 variabilă, newMsgTxt exemplu, 243 nextImage () Funcţia, 266 nextY variabilă, 451-452 valori nod, 92nodeCount 320 variabilă, noResponse () Metoda, 356 notifyClientsmetodă, 174 valori numerice, coduri zip, 132

O

Obiect tip, 297 Obiect variabilă, 72 programarea orientată pe obiecte (OOP) clasele de

clădire particularizat, 231-235 definite, 220-221 în Flash, 229-231 în PHP, constructor 225-228, 221 şi getters setteri, 224-225 importatoare, 222 listă, 219-220 pachete,singletons 221-222, 223 - 224 metode statice şi proprietăţi, 223 obiecte, definite, 48-49. A se vedea, de asemenea, obiecte individuale pe denumireOldfilename.php fişier, 4Omiterea Acţiuni Trace, 399 cu un singur sens de comunicare, 65-67 cu un singur sens de încărcare, 88 onFaultmetodă, 207, 463 onResult funcţie, 207, 216 OOP(programarea orientată pe obiecte) clase

clădire particularizat, 231-235 definite, 220-221 în Flash, 229-231 în PHP, constructor 225-228, 221 şi getters setteri, 224-225 importatoare, 222 listă, 219-220 pachete,singletons 221-222, 223 - 224 metode statice şi proprietăţi, 223 parametrii de funcţionare, 319 optimizarea

Apache, MySQL 412-413, 413-415 PHP, 408-412 SAU condiţie, 59 tampon de ieşire, 409 output_errorsFuncţia, 382

P

Paamayim Nekudotayim, 227 pachete

cripto, 196 biblioteci personalizate, 403 listă, 221-222 standard de clasă, 194-195 Papervision3D, 192 tag-ul articolului, 247 parametrii

conexiune, 213 ieşire, 175 funcţionarea, 319 căutare, 320 de chat speciale, 171-172 mamă de referinţă, 302-a trecut în date, 133, 210 parola de creare a comanda, 38-39setarea parolelor PayPal, 292 pe UNIX, 27 setarea pe Windows, 26 depozitare folosind PHP, 141-142 PayPal co ş listă aplicaţii, 290-291 POST de date, 293-294sendToURLmetodă, 294 înfiinţarea de comunicare, 294-295 pentru semnarea PayPal Premier, 291-293 PDF Library, 193 de pere, 193

conexiuni persistente, 75 server de soclu persistente, 160-161 _personde proprietate, 225 galerie foto cererea ActionScript, 261-266 în curs de dezvoltare cu ajutoruFlickr

clădire particularizate XML document, 332-333 interfatarea cu serviciu Web, 331 listă, 326-330 Document clasă, 327-329 de navigare, 266-270 listă, 260-261 pentru PH270-274 PhotoItem exemplu, 329

PHP

AMFPHP

şi ActionScript 3, 198 gateway-ul de depanare, 200-201 unelte de depanare, 199 instalarea, 198 browser-ul de serviciu, 200 de instalare de testare, 199 structura decodificare, 47, 122 conectarea la Flash, 71-73 conectarea la MySQL, 73-84 structuri de control, 51 -55 cookie-uri, 114-124 statutul de stabilire a, 64-65 Locul deamplasare file, 69 functii, 49-50 de discuţii, 105-106 MySQL, 57-59 datele partajate obiect, prize 140-141, 155-161 parole depozitare, 141 - 142 biblioteci 'ter ţă parte, 19197-198 de control tip, 56-57 variabile, 47-49, 56, pe serverele web, site-ul 27-35, 93 date XML, 92-95 php fişiere, 176, 304, 410 phpde referinţă, 275 PHP socketulserverului

pentru clientii de chat, 168-171 conexiuni se încheie, 175

excl. serverul master de la comunicare, 171 erori de manipulare, de 174-175 client conexiune de master, to ţi clienţii care fac notificarea 172-173, 174 client notificareaspecifice, monitorizare server 173-174, 175 parametrii de construcţii de chat, 171-172 PHP clasa Manual de utilizare, 478 PHPEclipse, 385 phpFile 286 variabilă,phpinfo fişier, 73-74, 197 phpinfo () Funcţia, 139 php.ini fişier, 129, 195, 197, 381, 384, 407, 426 phpize funcţie, 417 pipe (|) caracterul, 426 datele pixelilor, pent

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

356 of 362 11/9/2

Page 357: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 357/362

 

HG bibliotecă, 345-346 stadiul de planificare, aplicatii, 240-242 joacă metodă, 431 controalele de redare, redare 432 Stivuitoare, la comanda, 431 fişierelor de politic164 de aplicaţii sondaj

clădire PHP si MySQL, 364-368 ActionScript în curs de dezvoltare, 368-372 listă, 364 PollItem de clasă, 368, 483 cazuri PollItem, 370 pollItem 370 variabilă,pollItemsmatrice, 371 populateFileList () funcţie, 377 numere de port, 156, 176 porturi, 407

POST de date, 67-68, 122, 292-294, 343

piei precompilate video, 432

login predefinite, 476

prefixe, 11

prefork modul, 413

preg_replace () funcţie, 278, 422

prevImage () Funcţia, 266

imprimare funcţie, 383, 409

imprimaredeclaraţie, 79

print_r () Funcţia, 383

proprietăţi private, 225

privat variabile, 296, 369, 437

procesoare, PHP, 409

, programe de scalabile, 219

bare de progres, 7

proprietăţi. A se vedea, de asemenea, proprietăţi individuale pe denumire accesibilitate, 169 listă, 47 privat, 225 static, 223 Property Inspector, 230, 432 protejarea MySQL

setarea parola pe UNIX, 27 parola de setare de pe Windows, 26 serverul de conţinut web, 38-39 pseudo-cod, 240-241 public de clasă, 220

Publicare caseta de dialog Setări, 195, 399, 404 SWCs publicarea, 404 metoda împinge, 153

Q

-Q opţiune, 176 interogări

MySQL, SQL 414, 133-135 opţiunile Quick Start, 342 $ Citat 133 variabilă,

R

memorie cu acces aleator (RAM), 409

selecţie aleatorie, anunţuri banner dinamic, 283-284

$ RawXml variabilă, 320, 331

lumea reală aplicaţii. A se vedea, de asemenea, de cumparaturi Cosul de aplicaţii de căutare pe Amazon listă cerere, 317

simplificarea răspuns XML, folosind 319-326 Amazon Web Service, 317-319 galeria de poze în curs de dezvoltare cu ajutorul Flickr

clădire particularizate XML document, 332-333 interfatarea cu serviciu Web, 331 listă, 326-332 cerere de desen în Flash, 336-341 listă, 335-336 HG bibliotecă

colectare de date pixel in Flash, 345-346 imagine generatoare de in, 343-345 list ă, 341-343 listă, 289-290, 335 PayPal coş

privire de ansamblu, 290-291 POST de date, 293-294 sendToURLmetodă, 294 înfiinţarea de comunicare, 294-295 pentru semnarea PayPal Premier, 291-293 cerere son

clădire PHP si MySQL, 364-368 ActionScript în curs de dezvoltare, 368-372 listă, 364 editor simplă de fişiere, 373-379 monitorizează site-ul

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

357 of 362 11/9/2

Page 358: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 358/362

 

ActionScript în curs de dezvoltare pentru, 351-359 PHP în curs de dezvoltare pentru, 347-349 list ă, 347

folosind PHP la e-mail de administrator, 349-351 video player

 în curs de dezvoltare ActionScript, 360-364 listă, 359-360 înregistrări, valabile, 462-463

Recordsetde clasă, 214 de înregistrărimetodă, 449 bucle recursive, 160 RED5 bibliotecă, 192

redesenaţi metodă, 467-468, 473-474 conexiunile la distanţă soclu, 163-164 remoting

clase, 205-210

erori în răspunsurile, 453-456

video player integrare

DatabaseConnectorclasă, 437-439 listă, 437 clase de testare, 445-446 video de clasă, 439-445 jucător ghidul de conectare video component, 478-481 îndepărtaMetoda, 303 removeAllMetoda, 216 removeChildFuncţia, 324 removeChildAtFuncţia, 150 removeOldPhotosmetodă, 329 buton removeProduct, 301 comentareliminarea, 399 repetarea cod, 49-50 de raportare, d e eroare, 381-385 de transfer de stat de reprezentare (REST), 317 necesita funcţie, 226, 424 necesitadeclaraţ54-55 require_oncedeclaraţie, 55 resetHandler metodă, eveniment redimensiona 469, 474 resp de proprietate, 286 resp 123-124 variabilă, răspunde () Metod232 Responderde clasă, 206, 463, 479 Responder exemplu, 448-449, 451 răspuns funcţiei, 69, 143 $ Răspuns 157 variabilă, responseTxt TextInput componente,196 ODIHNĂ (Transfer de stat de reprezentare), 317 $ Rezultat variabilă, 252, 477 rezultate fila, 202

inversă pachet calea de domeniu, 221 de Rich Internet Applications (RIA), 62 parole rădăcină, 22 $ Row de date, 348 $ Rânduri variabilă, 253, 444 cereri RSS readerclase importatoare, 275 de încărcare PHP, 275-279 listă, caseta de dialog Run 274-275, 155

SsandboxTypede proprietate, 145-147 salva de acţiune, 373 saveCookie funcţie, 117 de date de economisire la cache, 418-419 aplicaţii scalabile, 219, 242 RezolutieOperator Domeniul de aplicare, versiunea 227 SCPlugin de control manager, 402 ScrollPane componente, 451-452, 461 parametri de căutare, 320 SEARCH_TERMScuvinte cheie, 318 searchAndReplace funcţie, 206, 207 searchHandler () metodă, 322, 327 sec variabilă, 150 de securitate

conectarea PHP la MySQL, 256 Flash Securitate Sandbox activă, 147-151 aplicaţii, 151-152 sandboxTypede proprietate, 145-147 tip de setare, 145 de corespondenţăPHP, 106 date returnarea, prize de 143-144, 154 stocare a datelor

parole, folosind PHP, 141-142 în siguranţă scris la dosar, ghidul de 137-141 de date

 încărcări de fişiere, 128-130 de date HTML, 136 igienizare, 133-135 de intrare valabil, 131-132 Windows Web Server, 22 Securitate clasă, 145 de securitate încrede164

Security.sandboxType de proprietate, 145 SELECT declaraţie, 57, 366 selectedCatID de proprietate, 450 selectedItem obiect, 377 selectedItem de proprieta450 de selecţie, aleatoare, 283-284 punct şi virgulă (;), 382 trimite () metodă, 247, 391 sendBtn Numele exemplu, 243 sendHandler funcţie, 102-103, 109SendMessageFuncţia, 102 sendMessageHandler Funcţia, 247 sendRequest Funcţia, 182 sendToURL Metoda, 66, 294, 346 serverHandler () Metoda, 234

serverMessagemetodă, 174-175 serverResponse funcţiei, 70-72 servere

caching cu memcached instalarea, 416-420 listă, 416 sisteme de dezvoltare, 406-408 backup-uri de manipulare

de backup de management, 421-424 de gestionare a fişierelor, listă 421, 421

folosind PHP la spre spate sus baze de date, integrarea 424-427, 110-111 de gestionare, 420-421 optimizarea

Apache, MySQL 412-413, 413-415 PHP, 408-412 listă, 405 de funcţionare actualizate, 405-406 soclu

clădire, 156-158

răspunde la conexiune client, 157-158 simplu PHP-server bazat pe soclu, 156-157 de testare, 158-160 UNIX server Web Apache, 9-13 instalarea PHP, MySQL 34-35,24-26 parole setare de pe, 27 Windows Web Server Apache, 4-13

instalarea pe memcached, 418-420 MySQL, PHP 14-24, 27-33

setarea parolelor pe, browser-ul de serviciu 26, 200, 205 / Servicii director, 202 set_time_limitFuncţia, 156 setcookie funcţie, 115, 117 setGatewayURLMetoda, 304 setItemmetodă, 457-458 setteri, şi getters, 224-225, 459-461 setValuesmetodă, 325, 329 obiecte partajate ştergerea, 119 de încărcare, 118 setările de distanţă, 122 de salvare, de 118-119 în siguranţă scris la dosar, 139-141 SharedObject de clasă, 118

cumpărături aplicaţii coş clădire PHP

listă, 306-309 cod PHP, 315-317 ShoppingCartde clasă, 304, 309-313 ShoppingCartItem clasă, 298-306, 313 StoreItem clasă, 313-314 Timeline cod, 314-315 în cursdezvoltare ShoppingCartItem clasă, 298-306 în curs de dezvoltare StoreItem clasă, 296-298 listă, 295-296 ShoppingCart de clasă, 304, 309-313 ShoppingCartItclasă, 298-306, 313 SHOW_ERRORSde proprietate, 174-175 simplă XML, 93

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

358 of 362 11/9/2

Page 359: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 359/362

 

SimpleSocket clasă, 166-167 SimpleXMLbibliotecă, 278, 308, 320 simplexml_ load_string () metodă, 331 citat simple ('), 133 singletons, 223-224 monitorizeazăsite-ul

ActionScript în curs de dezvoltare pentru, 351-359 PHP în curs de dezvoltare pentru, 347-349 list ă, 347

folosind PHP la e-mail de administrator, 349-351 siteContainer movieclip funcţie, 352 siteItem 354 variabilă, SiteMonitorItem de clasă, 353, 355, 357siteResponsedHandler () Metoda, 356 dimensiune de proprietate, 119 piei, video precompilat, 432 $ Ciorap 156 variabilă, Priză de clasă, 162, 177 opţiuni desoclu, 173 de terminare metoda de soclu, 175 $ Soclu 156 variabilă, socket_acceptFuncţia, 157 socket_create Funcţia, 156 socket_listen Funcţia, 173socket_read funcţie, 157, 160 socket_selectFuncţia, 170 socket_write funcţie, 157, 173 prize

clădire Flash client

verificarea de introducere text de lungime, 180-181 de compensare de intrare mesaj, 180 de funcţii de tratare a evenimentului, 179 actualizări de stare de manipular183-188

menţinerea interfaţă stabile, 181-182 listă, 177-179 trimite solicitarea iniţială, mesaje 182 trimiterea la serverul soclu, 182-183 prezinte handler mesaj, 180 prese capcancheie, 179-180 conectarea la socket server, conexiunile 175-177, 154 în bliţ

clasă pentru conexiuni soclu, 164-167 Stivuitoare eveniment, 162-163 conexiune soclu de initializare, 161-162 conexiunile la distanţă socket, 163-164 server de punere aplicare, 154 de master, 154 listă, 153 în PHP

server de constructii, 156-158 clienti de chat, CLI 167-175, 155-156 listă, 154-156 server de soclu persistente, 160-161 server de testare, 158-160 de securitate, 154 $SocketsChanged variabilă, 169 coduri sursă, 9-11 fişierele sursă, 69 SourceForge site-ul Web, 198 sourceFunction manipulare, 97 tag Span, 247 Vorbi clasă, 227extensii de fişier de specialitate, 38 spell-check bibliotecă, 192

sprint () funcţie, 331-332, 348, 425, 463

Spirit de clasă, 230

Interogări SQL, 133-135

$ Sql string, 213

sqltest.php fişier, 436

Stivuitoare eveniment etapă, 473

obiect etapă, 473

variabile independente, 325

standard de clasa pachet

particularizate classpath, 194-195 classpaths implicit, 195 {START_FILE} Funcţia, 336 startDrawing () Metoda, 337 startTimer funcţie, 148-149 Opţiuni de porniMySQL, 415

declaraţii, 57-58. A se vedea, de asemenea, declaraţiile individuale pe denumire

date statice, 85

metode statice, 223

proprietăţilor statice, 223

statusMessageFuncţia, 183

stopChecking () metodă, 356-357

stopServer Funcţia, 169

storedFileData variabilă, 376

$ StoredPassword 111 variabilă,

StoreItem clasă, 296-298, 313-314

StoreItemMetoda, 296

StoreItemmovieclip funcţie, 305

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

359 of 362 11/9/2

Page 360: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 360/362

 

str. 183 variabilă,

Şir tip, 297

şir 171 variabilă,

siruri de caractere, 47, 141. A se vedea, de asemenea, siruri de caractere individuale pe denumire

strlen () Funcţia, 254

strpos Funcţia, 130

stiluri, pentru codul de comentare, 396-398

subdomenii, 114

Pe butonul Submit, 373

Remitere componente, 275

substringFuncţia, 183

Subversion (SVN), 401

SWCs, 404

comutatorde control, 54

Comutator caz .. declaraţie, 179

Sistemul de () comandă, 426

T

table_name funcţie, 414 tabele

verificarea MySQL, 414-415 aplicatii video player

Detalii de adăugarea de probă, 434-435 constructii, 433-434 ghidul de MySQL, 476 valoare tag-ul, 331 tag-uri variabilă, 328 de echipe, cu bug tracking, 399-400

Telnet, 161 fila de testare, testare 202

AMFPHP, cu servicii personalizate, 201-205 PHP, 31-33

servere soclu, 158-160 UNIX server Web, 26 aplicatii video player

baze de date, 435-437 clase remoting de integrare, 445-446 autentificare componenta user, 473-475 Windows Web Server, 23-24 test.php fişier, 421 fisiere text, de încărcare, 85-86 Textarea Componenta fişier editor de proiectare, 373 clienţi în curs de dezvoltare de chat, 242 clase de conectivitate de încărcare, 207 messagesTx243 cititori RSS, 275 Textarea Funcţia, 184 TextBox de clasă, 230 Textfield de clasă, 233, 296, 298, 373 Textfield exemplu, 263 TextInput componente Flash, 24

newMsgTxt exemplu, 243 usernameTxtexemplu, 243 $ Această 227 variabilă, $ This-> legătură într- de proprietate, 438 miniatură Argumentul cale, 330timp () funcţie, 116, 142, 252 copii de rezervă temporizate, 421-422 Timeline ActionScript, 304 codul de cronologie, 314-315 time_logged_in cookie, 115 TIMEReveniment, 244 timer handler, 244, 247 Programatorulobiect, 244 timerHandlerFuncţia, 245 timerTxt textfield, 149 titlu argument, 330 noduri titlu, 320 titde proprietate, 458 titleTxt componente, 330 unelte

depanare, AMFPHP, 199 GUI-a permis, 415 Zend Optimizer instrument, 410-411 Zend Studio instrument, 411-412 TortoiseSVN manager de versiune de control, 402alternative urmă, 389-391 urmă declaraţii, 82-84, 306, 386 de urmărire

bug, 399-400 video, 461-464

trigger_errorFuncţia, 453 trigger_error () metodă, 383, 440 adevăratpavilion, 419

încercaţi .. captură stil de programare, 182

comunicarea în ambele sensuri, 68-69

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

360 of 362 11/9/2

Page 361: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 361/362

 

două sensuri de încărcare, 88-89

txt263 variabilă,

verificarea tip, 56-57

tip370 variabilă,

typeof Funcţia, 132

Uucwords funcţie, 202 Subliniere tag-ul, 247 UNIX server Web Apache

instalarea, 9-12 modificarea, 13 de instalarea PHP, MySQL 34-35, 24-26 setarea parolelor, 27 unset () funcţie, 257, 410 fisiere untarring, 10 servere actualizate,405-406 updateList Metoda, 303 updateTotalMetoda, 303 updateVideoTracking metodă, 463-464 majuscule Metoda, 207 upperCaseWords funcţie, 205, 207urlde proprietate, 151

URLLoaderde clasă, 86, 103-104, 124 URLLoader Funcţia, 275 URLRequest de clasă, 86, 103 URLRequest funcţie, 141, 265, 275, 322 urlRequest 81 variabile,URLRequestMethod clasă, 67-68 URLVariables de clasă, 67, 103, 123, 124, 286 URLVariables obiect, 246, 346 Utilizator clasă, 478 de date ghidul de igienizare

Detalii de HTML, 136 interogări SQL, 133-135 de securitate

 încărcări de fişiere, 128-130 de intrare valabil, 131-132 ID-ul de utilizator, 139

ghidul de autentificare componentă

adăugarea de remoting, 478-481 adăugând la jucător, 482-486 LoginWindow clasă

centrare MovieClip, 468 aproape metoda, constructor 468, 466-467 loginHandler metodă, listă 469-472, 466 redesenaţi metodă, 467-468 resetHandler metod469 de plasare schimbarea de MovieClips,Listă 468, 465

PHP autentificare clasa manager, 476-478 de testare, 473-475 ghidul de tabele MySQL, 476 UserCredentialsde clasă, 222 Nume de utilizator rând, 259usernameTxtexemplu, 243 User.php de clasă, 476, 478 utilizatori

formular de contact, 101-106

dezvoltarea formă folosind Flash, 99-100

Vvalabilă de intrare

verificarea, codurile ZIP 131-132, 132 înregistrări valide, 462-463 validare 144 variabilă, var_dump apel, 341 varchar () funcţie, 259 variabile. A se vedea, de asemen

variabile individuale pe denumireActionScript, 261 de depanare, PayPal 383, 293 PHP

tablouri, 48 boolean, 48 obiecte, 48-49 siruri de caractere, conexiuni 47 şi soclu, 162 si tipuri, 225 de control al versiunii

listă, folosind 401-403 biblioteci personalizate cu, 403 Version Cue cerere, 401-402 vi comandă, 382

vi editor de text, 12 video, 445 clasa de filme

listă, actualizarea 439-445, 462-463 aplicatii video player avansat de dezvoltare

categoryHandler Metoda, 450 categoryResponseHandler metodă, 449-450 document clasă, 446-448 getCategoriesmetodă, 448-449 getVideos metodă, 451erori de manipulare în răspunsurile remoting, 453-456 listItemHandlermetodă, listă 452-453, 446 VideoPlayer de clasă, 448 videosResponseHandler metodă,451-452 de bază, 429-432

clădire VideoListItemclasă

definirea unor metode getter si setter, 459-461 metode de tratare a mouse-ului, 458 listă, 456-457 setItem metodă, 457-458 VideoListItemconstructor, 457finalizarea

adăugarea de componente de conectare, listă 482-486, 481 folosind biblioteca externă, 482 Noţiuni de început

Detalii de adăugarea de probă la tabele, 434-435 de baze de date clădire şi tabele MySQL, 433-434 listă, 432 de baze de date de testare, 435-437 listă, 429 de integraremoting

file:///D:/Documents and Settings/STUDIO/My Documents/Fla

361 of 362 11/9/2

Page 362: Flash and PHP

5/11/2018 Flash and PHP - slidepdf.com

http://slidepdf.com/reader/full/flash-and-php 362/362

 

DatabaseConnectorclasă, 437-439 listă, 437 clase de testare, 445-446 video de clasă, 439-445 autentificare componenta user

remoting adăugarea, 478-481 LoginWindow clasă, 465-473 listă, 465

PHP autentificare clasa manager, 476-478 de testare, 473-475 folosind Flash pentru a dezvolta

ActionScript în curs de dezvoltare, 360-364 listă, 359-360 de urmărire video, 461-464

VideoListItemconstructorul clasei, 457

definirea unor metode getter si setter, 459-461 metode de tratare a mouse-ului, 458 listă, 456-457 setItem metodă, 457-458 videosResponseHandler metodă,

451-452 VideoListItem.as fişier, 456 videoMetaInfoMovieClip metodă, 453, 464 VideoPlayer clasă, 359-360, 446, 448, 453, 482 VideoPlayer.as fişier, 446VideoPlayer.fla fişier, 482 Clipuri de clasă, 441, 444 Videos.php fişier, 442, 463 videosResponseHandler metodă, 451-452 $ VidSQL 441 variabilă, vot368variabilă,

W

Servere Web

Htaccess fişiere., Adăugarea de 37-38 la Apache, 4-13 instalarea pentru UNIX, 9-12 instalarea pentru Windows, 4-9 modificarea pentru Windows şi UNIX, 13 Apach

module instalate de stabilire, 40-42 versiunea de stabilire, 40 de pornirea si oprirea, 40 de documente de eroare personalizate

documente dinamic eroare, 43-46 modificarea Apache, 43 de listă, 42 de conţinut protejarea, 38-39 înfiinţarea PHP in UNIX, 33-35 Windows, UNIX 27-33

Apache, 9-13 instalarea PHP, MySQL 34-35, 24-26 setare de pe parole, 27 pentru Windows

Apache, 4-13

instalarea pe memcached, 418-420 MySQL, PHP 14-24, 27-33

setarea parolelor pe, 26

507

file:///D:/Documents and Settings/STUDIO/My Documents/Fla