Sunteți pe pagina 1din 325

Programao de jogos em PHP 2004 Premier Press, uma diviso da Course Technology. Todos os direitos reservados.

. Nenhuma parte deste livro pode ser reproduzida ou transmitida de qualquer forma ou por qualquer meio, eletrnico ou mecnico, incluindo fotocpia, gravao, ou por qualquer armazenamento de informao ou sistema de recuperao sem permisso por escrito do Curso PTR, exceto para a incluso ofATT breves citaes em uma reviso. O logotipo da Premier imprensa e trade dress relacionados so marcas registradas da Premier Imprensa e no podem ser utilizadas sem autorizao escrita. Paint Shop Pro 8 uma marca registrada da Software Jasc. PHP Coder uma marca comercial da phpIDE. Todas as outras marcas so de propriedade de seus respectivos proprietrios. Importante: Curso de PTR no pode fornecer suporte de software. Entre em contato linha do fabricante do software apropriado de suporte tcnico ou Web site para obter assistncia.Curso de PTR e autor tentou ao longo deste livro para distinguir marcas proprietrias de termos descritivos, seguindo o estilo de capitalizao usada pelo fabricante. Informaes contidas neste livro tem sido obtido por Curso PTR a partir de fontes consideradas confiveis. No entanto, devido a possibilidade de erro humano ou mecnico por nossas fontes, PTR Curso, ou outros, o Publisher no garante a exatido, adequao ou a completitude de qualquer informao e no responsvel por quaisquer erros ou omisses ou os resultados obtidos com uso de tais informaes. Leitores deve estar particularmente ciente do fato de que a Internet uma everchanging entidade. Alguns fatos podem ter mudado desde que este livro foi para imprensa. Estabelecimentos de ensino, empresas e organizaes interessadas em mltiplos cpias ou licenciamento deste livro deve contatar o editor para informaes desconto de quantidade. Manuais de formao, CDROMs, e pores deste livro tambm esto disponveis individualmente ou podem ser adaptados para necessidades especficas. ISBN: 1-59200-153-X Biblioteca do Congresso Nmero do carto de Catlogo: 2004090731 Impresso nos Estados Unidos da Amrica 04 BH 05 06 07 08 10 9 8 7 6 5 4 3 2 1 Curso PTR, uma diviso de Tecnologia de Curso 25 Place Thomson Boston, MA 02210 http://www.courseptr.com SVP, do Curso Profissional, Comrcio, Grupo de referncia: Andy Shafran Editora: Stacy L. Hiquet Gerente de Marketing Snior: Sarah O'Donnell Gerente de Marketing: Heather Hurley Editor da Srie: Andr LaMothe Gerente de Servios Editorial: Heather Talbot Editor de Aquisies snior: Emi Smith Gerente de Marketing Associado:

Kristin Eisenzopf Editor do projeto e editor de cpia: Dan Foster, Tribe Scribe Revisor Tcnico: Joo Freitas Coordenador de Mercado de Varejo: Sarah Dubois Divises: Marian Hartsough Cover Designer: Steve Deschene CD-ROM Produtor: Brandon Penticuff Indexador: Kelly Talbot Revisor: Estelle Manticas Para Jenai. Obrigado. Agradecimentos T aqui so tantas pessoas que tornaram este livro possvel para mim. Em primeiro lugar eu gostaria de agradecer a Andr LaMothe por me dar esta oportunidade. Eu tambm gostaria de agradecer ao meu editor, Dan Foster, por todo seu trabalho duro. Eu tambm preciso agradecer aos meus empresa, DATA Inc. (www.datausa.com) para a compreenso de minha agenda rigorosa. Agradecer voc Mike Gesner (Presidente e CEO), Michael Melson (Diretor Tcnico), Randy Chong (Director de Design Game), Wesley Potter (Designer do jogo), e Jonathan Shusta (Diretor de Arte) de Dragonfly Game Design (www.dragonflygamedesign.com) para fazer o MMO possvel. Sem vocs este livro no teria sido to legal quanto . Eu tambm gostaria de agradecer Jenai por ser meu apoio constante e colocandose com as minhas horas mpares, humor mpar, e estranheza geral em toda a criao de todo este livro. Sobre o Autor M ATT R UTLEDGE (ruts@datausa.com) desenvolvedor lder em DATA, Inc. (www.datausa.com), uma empresa de visualizao Denver, Colorado digital baseado especializada em animao por computador 3D e desenvolvimento web. Matt tem 7 anos de experincia no mundo multimdia. Ele desenvolveu diversas aplicaes de telecomunicaes antes de se mudar para o reino da Desenvolvimento web. Matt especializada em banco de dados orientado e aplicaes interativas online. Matt tambm activamente escreve artigos para asp101 (www.asp101.com) e do MSDNAA (Www.msdnaa.net).

Sobre o Editor da Srie A L Ndre A outr M, CEO, Xtreme Games LLC, foi envolvido na indstria de computao por mais de 25 anos. Ele escreveu seu primeiro jogo para o TRS-80 e tem sido ligado desde ento! Sua experincia inclui grficos 2D/3D, AI pesquisa da NASA, compilador design, robtica, realidade virtual, e telecomunicaes. Seus livros so vendidos em o gnero de programao do jogo, e sua experincia repetida no jogo de Imprensa Premier Livros de desenvolvimento.

Carta do Editor da Srie Ao longo dos ltimos cinco anos ou mais, um pequeno pedao de software chamado PHP tem gerado uma srie de novidades e tem subido rapidamente a partir de um nico programador projeto paralelo para a linguagem de programao web. Agora na verso 5, PHP (uma abreviatura recursiva para PHP Hypertext Preprocessor) praticamente sinnimo de desenvolvimento de sites dinmicos e contedos flexveis. Mas o que poucos sabem que ele capaz de muito mais do que apenas tornar os stios Web em verdade, ele est mostrando potencial srio para fazer jogos! Com o aumento da popularidade da Web baseados em jogos e aplicativos como Habbo Hotel, o conselho do Yahoo carto, e jogos de puzzles, e at mesmo The Sims, no h nunca foi um melhor momento para se envolver no desenvolvimento de jogos online. E com PHP, uma ferramenta completamente livre, ele nunca foi mais barato ou mais fcil! Isso que to emocionante sobre PHP programao de jogos. Matt Rutledge tomou as tarefas formidvel de ensino, tanto de desenvolvimento de jogos e da linguagem PHP e condensado-los em um fcil de ler o texto que faz tudo parecer fcil. Mas o que torna este livro to especial que no apenas significou para os desenvolvedores de jogos, qualquer um que quer aprender PHP vai achar que este livro ensina-lo de uma forma divertida que muito mais envolvente do que os inmeros livros de PHP outros nas prateleiras. Afinal de contas, fazer jogos muito mais divertido do que classificar os registros de empregados! Mas no pense que este livro tem tudo a ver brincadeiras. Do Captulo 1, voc obter uma educao de PHP hardcore que comea no trincheiras, com tudo que voc precisa saber sobre a configurao do servidor e configurao. Uma vez que voc est trancado e carregado, voc completa uma turn da prpria linguagem, abrangendo todas as construes de grandes e funcionalidades.

Sintaxe PHP muito semelhante s lnguas como C, C + + e Java, e se voc j est familiarizado com um desses, em seguida, este material ser muito fcil de absorver. Finalmente, toda a metade final do livro dedicados a temas programao sria de jogo, de grficos para algoritmos de xadrez para dinmica terrenos campo de batalha. Em concluso, no ser muito antes de tudo, desde seus sapatos para sua geladeira tem uma conexo com a Internet e jogos on-line so certamente liderando o caminho para o mundo ultraconectado do futuro. Muitos programadores encontram-se deixando linguagens como C ou C + + para trs em favor das lnguas com built-in rede recursos como Java, Perl e PHP. Com uma ferramenta de desenvolvimento to poderoso e acessvel como PHP, esta sua chance de transformar suas idias de jogos online em uma realidade! Atenciosamente, Andr LaMothe Series Editor, Premier Series Desenvolvimento de Jogos

Contedo Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Parte I Introduo ao Mundo do PHP. . . . . 1 Captulo 1 Ento o que todas essas coisas Server? . . . . . . . . . . . . . . . . . . . . . 3 Captulo 2 Travando a Guerra de configurao. . . . . . . . . . . . . . . . . . . . . . 23 Compreender a relao cliente / servidor. . . . . . . . . . . . . . . . . . . 3 Web Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Sesses e variveis de sesso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 TCP / IP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Instalando o Servidor Web IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Instalao no Windows 2000/XP Professional. . . . . . . . . . . . . . . . . . 15 Instalao no Windows 98. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Instalando o Apache Web Server no Windows ME / XP. . . . . . . . . . . 18 Instalando o Servidor Web Apache em UNIX. . . . . . . . . . . . . . . . . . . . 19 As plataformas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Construo e Instalao de PHP em UNIX. . . . . . . . . . . . . . . . . . . . . . . . . 24 Instalao em Windows para IIS / Apache. . . . . . . . . . . . . . . . . . . . . . . 26 Instalar as extenses de Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Testando a instalao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 viii www.baixebr.org

Contentsix Captulo 3 Eu venci o Server, Let Me no Cdigo! . . . . . . 31 O Bsico da Tag HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 O Todo-Poderoso Documento HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 O Corpo HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Grficos e HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Os formatos de arquivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Usando a formatos de arquivo no seu documento. . . . . . . . . . . . . . . . . . . . . 39 Tabelas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Layouts, tabelas e grficos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Criando formulrios para entrada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Parte II Digite o idioma. . . . . . . . . . . . . . . . 53 Captulo 4 Diga Ol para PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Captulo 5 Operadores, instrues e funes. . . . . . . . . . . . . . . . 77 Criando uma pgina PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Tipos de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Tipo de Casting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Variveis variveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Convenes de nomenclatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Funes para variveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Funes para Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 printf () e sprintf (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Expresses Regulares e casamento de padres. . . . . . . . . . . . . . . . . . . . . 66 Usando as Funes de Expresses Regulares. . . . . . . . . . . . . . . . . . . . . . . 68 Processamento de formulrios com PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Operadores aritmticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Operadores de comparao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Operadores lgicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Operador ternrio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Operadores bit a bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Atalhos Atribuio varivel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Operao Precedncia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 x Contedo Declaraes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 se Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 A declarao switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 tempo e fazer ... enquanto Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 O para Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Funes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Passando parmetros para uma funo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Recurso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 A Magia da Incluindo arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Arrays parte III, jogos e grficos. . . . . . . 101

Captulo 6 Matrizes! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Captulo 7 Jogando com Xadrez e bancos de dados. . . . . . . . . . . . . . . . . . 133 Inicializar matrizes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Usando cordas para ndices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Loop atravs Arrays seqencial. . . . . . . . . . . . . . . . . . . . . . . . . 106 Loop atravs Non-Sequential Arrays. . . . . . . . . . . . . . . . . . . . . 108 Multi-Dimensional Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Classificao Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Seu Jogo PHP First. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 No-bancos de dados relacionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Criando e Abrindo um banco de dados. . . . . . . . . . . . . . . . . . . . . . . . . . 134 Looping atravs do banco de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Inserindo uma entrada em seu banco de dados. . . . . . . . . . . . . . . . . . . . . . . 137 Atualizar uma entrada em seu banco de dados. . . . . . . . . . . . . . . . . . . . . . . . 139 Excluindo uma entrada do banco de dados. . . . . . . . . . . . . . . . . . . . . . . 140 Programao de xadrez: Uma Viso Geral. . . . . . . . . . . . . . . . . . . . . . 140 Iniciando o jogo de xadrez. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Trabalhar com as peas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Recebendo a entrada do usurio e modificar o banco de dados. . . . . . . . . . . . 151 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Contentsxi Captulo 8 GD Resumo Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . 157 O que GD?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Instalao de GD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Criando e usando uma nova imagem. . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Como utilizar as cores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Alocao de cores para uma imagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Preenchimento da Imagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Definio de sua cor transparente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Convertendo uma imagem true-color para uma imagem de paleta. . . . . . . . . . . . . 165 Cores contagem em uma imagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Recuperando uma cor em um ponto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Desenhando formas bsicas em sua tela vazia. . . . . . . . . . . . . . . . . . 167 Pixels e linhas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 De Linhas de retngulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 De retngulos de polgonos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 A partir de polgonos para Arcos e Elipses. . . . . . . . . . . . . . . . . . . . . . . . . . 174 Criando Imagens com Texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Salvar suas imagens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Usando imagens existentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Captulo 9 Criando Battle Tank e usando Terrain dinmico. . . . . . . 193 Planejamento Battle Tank. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Criando a Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Criando a lgica do jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Criando Terrain dinmico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Parte IV Extras e Projetos Final. . . . . . . . . 211 Captulo 10 PHP e Sockets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Basics soquete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Criando um servidor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Criando o cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Integrao com Sockets Battle Tank. . . . . . . . . . . . . . . . . . . . . . . . 224 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Contedo xii Captulo 11 Kiddy Cartel-Criando seu prprio MMO. . . . . . . . . . . . . 229 Instalando o MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Bancos de dados relacional: um rpido resumo. . . . . . . . . . . . . . . . . . . . . 231 Kiddy Cartel: as normas e especificaes. . . . . . . . . . . . . . . . . . . . 233 Aes criando a sua base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Criao de um comando com Sub-Comandos. . . . . . . . . . . . . . . . . . . 240 Criao de um Comando sem Sub-Comandos. . . . . . . . . . . . . . . . . 245 Olhe para todos os comandos ... e agora? . . . . . . . . . . . . . . . . . . . . . 248 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Captulo 12 Construindo suas habilidades PHP. . . . . . . . . . . . . . . . . . . . . . . . . . 257 PHP e Ming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Como criar um filme Flash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Desenho para seu filme Flash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Objetos com enchimento Ming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Adicionando animao ao seu filme Flash. . . . . . . . . . . . . . . . . . . . . . 271 Adicionando o ActionScript a sua parte Flash. . . . . . . . . . . . . . . . . . . . . . 275 Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Parte V Apndices. . . . . . . . . . . . . . . . . . . . . . 281 Apndice A Referncia de linguagem HTML. . . . . . . . . . . . . . . . . . . . . . . . 283 . . . . . . . . . . . . . . . . . . . . . . . . . . 309 . . . . . . . . . . . . . . . . . . 329 Apndice B Referncia da Linguagem PHP Apndice C Apoio Debugging ApplicationsApndice D GD Referncia de linguagem SDK. . . . . . . . . . . . . . . . . . . . . . 341 Erros de sintaxe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Erros de semntica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Erros de lgica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 PHP e Relatrio de erros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Manipulando erros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Aplicao e problemas de instalao. . . . . . . . . . . . . . . . . . . . . . . 335 ndice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Introduo O ver os ltimos anos da World Wide Web tem crescido tremendamente. Desde a sua estgios beb quando uma pgina da Web no era nada mais do que o texto com HTML

dinmico, robusto, extensvel, rico contedo multimdia. Cinco anos atrs voc nunca pensou em jogar um jogo na web, mas hoje, com linguagens de script atual, voc pode fazer exatamente isso. PHP transformou a Web como a conhecemos. PHP fornece rpido, dinmico, em tempo real, ferramentas para trazer vida para Web sites. PHP (tambm conhecido como o pr-processador de hipertexto) estourou na cena em 1994, quando Rasmus Lendorf lanou um pacote de "Personal Home Page" ferramentas para o pblico. Como mais interesse para estas ferramentas cresceu, Rasmus decidiu criar seu prprio mecanismo de script para analisar entrada de um formulrio HTML. A primeira verso do PHP nasceu, foi chamado de PHP / FI. A comunidade cresceu rapidamente programao de PHP / FI, PHP e logo se tornou o API como voc sabe que hoje em dia. Se voc conhece C / C + + ou Java ento aprender as construes bsicas PHP ser extremamente fcil. PHP uma ferramenta maravilhosa, com rpida, on-the-fly, compilao. Ele tambm oferece-lhe uma tonelada de bibliotecas para trabalhar com a criao de grficos, peas Flash, conexes com bancos de dados e conexes para outros computadores. O foco principal deste livro levar todas essas ferramentas e dar-lhe o conhecimento e poder de criar por sua vez baseado em jogos na Internet. xiii xiv Introduo Por que PHP? Voc pode perguntar, por que PHP? Qual a diferena entre PHP e outro embutido linguagem de script como ASP? A principal diferena entre essas lnguas , obviamente, sintaxe. Mas, alm disso PHP oferece-lhe toneladas de bibliotecas, tudo de graa. A interpretao dos cdigo mais rpido que ASP, e se conectar a um banco de dados requer apenas duas a trs linhas de cdigo. A melhor parte do PHP que uma linguagem orientada a objetos, o que d inerentemente Voc d uma grande flexibilidade em seus jogos. Quem deve ler este livro? Este livro para quem quer implementar nenhum jogo Web-based. Uma compreenso de HTML seria til. Eu inclu, no entanto, uma seco dedicada ao ensino voc algumas noes bsicas de HTML. Conhecimento de seu sistema operacional ser muito til. Desde PHP uma linguagem multi-plataforma que pode cobrir somente tanto na maneira de instalar o PHP.

Se algo der errado durante a instalao ele vai ajudar se voc souber o seu sistema operacional. Este livro no para algum com conhecimentos avanados em PHP. O que est no CD? Todo o cdigo fonte no livro O instalador do PHP para Windows e UNIX PHP bibliotecas Avaliao edio do Jasc Paint Shop Pro 8 PHP ST Software Ambiente de Desenvolvimento Integrado MySQL 4.0 Como este livro est organizado Eu pretendia este livro para ser lido em ordem seqencial. Se voc um novato e esta a sua primeira exposio ao PHP eu sugiro que voc leia o livro desta maneira. No entanto, se voc j ter um conhecimento de PHP voc pode se sentir livre para pular em torno de captulo para captulo. Este livro dividido em quatro partes principais. A primeira parte deste livro percorre configurao do PHP e servidor Web. A segunda parte apresenta o PHP em si. No terceira parte deste livro que voc comear a criar seu prprio Web PHP baseado em jogos. No quarta parte deste livro voc dar uma olhada em todas as coisas legais PHP pode fazer. Lembre-se que todo o cdigo que mostrado neste livro fornecido por voc na includo CD. H tambm vrias aplicaes includas no CD para ajud-lo a desenvolver seus jogos PHP. Introduo xv Captulo 1-Ento o que todas essas coisas Server?. Este captulo fornece uma viso geral da arquitetura do servidor e como a Web funciona normalmente. Voc tambm vai aprender a instalar um servidor IIS e um servidor Web Apache. Captulo 2-travando a guerra de configurao. Depois de ter instalado o seu Web servidor, este captulo o guiar atravs das etapas de instalao do CGI PHP Intrprete. Este captulo tambm ir mostrar-lhe alguns dos princpios bsicos para a configurao PHP. Captulo 3-Eu venci o Server, Let Me no Cdigo! Este captulo ensinar-lhe os conceitos bsicos de HTML. Ele tambm inclui uma breve explicao de como as imagens trabalho no World Wide Web. Captulo 4-Diga Ol para PHP. Este captulo apresenta a linguagem PHP em si. Voc vai aprender os pontos bsicos de PHP, por exemplo, como criar uma pgina PHP, como declarar variveis em PHP, e como usar expresses regulares.

Captulo 5-operadores, instrues e funes. Neste captulo voc vai aprender sobre aritmtica, lgica e operadores bit a bit. Voc tambm vai aprender como criar declaraes de lgica e funes. Captulo 6-Arrays! Este captulo lhe ensinar como alocar e usar arrays em PHP. Depois que voc aprendeu todos os melhores pontos de matrizes que voc vai criar o seu primeiro jogo. Captulo 7 Jogando com Xadrez e bancos de dados. Neste captulo voc vai aprender sobre a no-bancos de dados relacionais. Voc tambm vai criar um simples jogo de xadrez que utiliza um no-relacionais de banco de dados para rastrear movimentos. Captulo 8-GD Resumo Graphics. Este captulo apresenta GD Boutell de grficos biblioteca. Voc vai aprender como criar grficos, manipular grficos, e adicionar texto dinmico para seus grficos. Captulo 9-Criao de Battle Tank e usando Terrain dinmico. Neste captulo, voc vai criar primeiro um remake do jogo Scorched Earth chamado Battle Tank. Depois de ter criou o jogo inicial voc ir adicionar terreno dinmico. Captulo 10-PHP e Sockets. Este captulo apresenta a programao de soquetes com o PHP. Ele descreve como enviar e receber dados atravs de sockets. Captulo 11-Kiddy Cartel-Criando seu prprio MMO. Aqui voc vai criar o seu muito jogo MMO prpria. Neste jogo voc vai controlar a sua prpria vizinhana. basicamente como atender as crianas da mfia. xvi Introduo Captulo 12 Construindo suas habilidades PHP. Neste captulo final voc vai dar uma olhada aplicaes adicionais para PHP, como o uso de Ming para criar Flash dinmico filmes. Apndice Referncia da Linguagem A-HTML Apndice B-Referncia da Linguagem PHP Apndice C-Apoio Debugging Applications Apndice D-GD SDK Referncia da Linguagem Introduo para o Mundo de PHP Captulo 1 Ento o que todas essas coisas Server? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,3 Captulo 2 Travando a Guerra de configurao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,23 Captulo 3 Eu venci o Server, Let Me no Cdigo! . . . . . . . . . . . . . . 0,31 PARTE I

Esta pgina foi intencionalmente deixada em branco captulo 1 Assim que todo Este material Server? Como a relao cliente / servidor Obras O servidor Web Sesses e Session Variables TCP / IP Instalar o IIS Web Server Instalar o Apache Web Server em Windows Instalar o Servidor Web Apache em UNIX B ntes de chegar configurao e instalao de PHP, importante saber como um servidor Web e um navegador Web trabalham juntos. Assim, este captulo cobrem cerca de arquitetura de servidor bsico e discutir alguns pontos que vo mudar a maneira de projetar suas aplicaes. Se voc sente que voc j conhece esses conceitos, voc pode pular esta seo e ir para a seo de instalao. Compreender a relao cliente / servidor Quando voc fala sobre a exibio de uma pgina PHP, voc est se referindo a uma pgina Web. Quando voc vai para uma pgina Web uma srie de eventos ocorrer. Estes eventos comeam no cliente com o pedido, v a um servidor para obter a pgina, e no fim de volta ao cliente para visualizao. D uma olhada nestes eventos, conforme listado abaixo e mostrado na Figura 1.1. 1. O computador cliente se conecta Internet. 2. O cliente abre um navegador da Web. 3 4 Captulo 1 Ento o que todas essas coisas Server? 3. O cliente solicita uma pgina de um site. Quando voc fizer isso, uma mensagem enviada atravs da Internet para um servidor de nome, eo nome do servidor, em seguida, direciona para o servidor que hospeda a pgina da Web. 4. O servidor que hospeda a pgina da Web recebe o seu pedido e recupera a solicitado pgina. 5. Se a pgina uma pgina de script, como uma pgina PHP, o servidor compila a pgina atravs de um compilador just-in-time que gera HTML. 6. O servidor ento transmite o HTML concluda volta para o cliente (o navegador). 7. O navegador da Web recebe o cdigo HTML e exibe uma interpretao da pgina. Tudo isso bastante simples, quase como mgica. H apenas um catch-de navegador para navegador, suas pginas da Web no so exibidos de forma idntica. por isso que dizemos que o navegador interpreta a pgina. Por exemplo, quando o Internet Explorer recebe uma pgina que

inclui tabelas aninhadas, ambos com alturas de 100%, o Internet Explorer interpreta a altura da tabela interna em relao altura da tabela externa. No entanto, no Netscape Navigator, o navegador vai fazer tanto interna e externa da mesa a altura do browser janela. Isto coloca um problema se voc quiser uma pgina para a mesma aparncia em vrios navegadores. Fica pior quando voc alternar entre as plataformas OS. Vamos dizer que voc tem uma pgina de texto, e por alguma razo, o texto determina o layout da pgina, e voc ter que olhar perfeito em uma plataforma Windows. Quando voc ento ver a pgina em um Macintosh, a fonte Recebido pedido Reqest Pgina Recebido HTML A Pgina de Internet Sent Servidor Web Web Client / Browser Figura 1.1 O processo de cliente / servidor. Sesses e Sesso Variables5 prestados de forma muito diferente. O kerning (espao entre os caracteres) e do (lder espao entre linhas) totalmente diferente. Na verdade, a fonte em si pode ser alterado para um diferente font completamente. Folhas de estilo podem atenuar alguns destes problemas, mas voc ainda vai executar em questes de layout. O ponto que o que o navegador exibe no uma fotografia, por isso, se voc quer seus jogos para trabalhar em vrios navegadores diferentes voc tem que ter cuidado com os tipos de elementos (texto e grficos) que voc usa. O servidor Web Agora que voc tem uma compreenso geral de como uma relao de cliente / servidor funciona, voc pode dar uma olhada no corao da besta: o servidor Web em si. Um servidor Web executado o que chamado de daemon HTTP. Este daemon controla todas as pedidos recebidos em uma porta particular. O daemon HTTP vai ouvir duas portas-port 80 e 443. Porta 80 a porta Web geral (http://). A porta 443 o padro para secure socket (https://). Um servidor Web tambm dito ser aptridas. Isto , no permanente conexo mantida entre o cliente eo servidor. Isso extremamente importante de entender. Isso far com que a depurao ou a resoluo de certos problemas muito mais fcil, e, mais importante, esse conceito vai mudar completamente a maneira de projetar seus jogos. Ele no ser to fcil como fazer uma biblioteca de funes ou um motor simples e chamar funes.

Voc precisar desenvolver uma maneira de manter o estado. Pense nisso por um minuto. O que isso realmente significa? Bem, isso significa que cada vez um determinado evento acontece no seu jogo de PHP, por exemplo, o usurio digita as coordenadas e os cliques o boto de fogo navegador da Web ir reabrir a conexo com o servidor, reenvie o pedido para o servidor, eo servidor ir processar a pgina e envi-lo de volta. Agora voc necessidade de recarregar todas as suas variveis / estados e atualizar a pgina apropriadamente. Caso contrrio todo o jogo iria comear de novo, e que no seria divertido. No me interpretem mal-l so algumas linguagens client-side script, como JavaScript, que voc pode usar para clientside processamento de eventos. No entanto, que est alm do escopo deste livro, que se concentra em como fazer jogos com PHP. Ento, como exatamente voc faz isso? Sesses e Session Variables Para manter o estado que voc precisa para utilizar variveis de sesso. Toda vez que voc bater um site que voc comear a uma sesso, e esta sesso identificada por um GUID exclusivo (Globally Unique Identifier). A sesso definida como o perodo de tempo durante o qual um usurio interage com um nico Web aplicao. Como o programador, voc pode armazenar variveis na sesso. Este um extremamente til ferramenta. Voc no tem que manter o controle de cada usurio e seu estado; voc s tem que referenciar a sesso. Vou discutir como fazer referncia a sesses mais tarde. 6 Captulo 1 Ento o que todas essas coisas Server? Quando se trabalha com sesses h algumas coisas importantes para lembrar. Se voc tem um executando o servidor fazenda, uma sesso do usurio no segui-lo como ele se move atravs de um servidor para servidor. Em outras palavras, uma sesso s vlido em um nico servidor. A sesso um processo dependente. Isto significa que se o servidor Web precisa ser reiniciado e no so atuais sesses ativas, em seguida, as sesses sero perdidos. Uma caracterstica nica de sesses em PHP que eles no so dependentes de cookie. Portanto, se um cliente no aceita cookies HTTP, o cliente pode ainda aproveitar as sesses. Existem actualmente dois mtodos suportados para a passagem de sesses em PHP4: Cookies O parmetro URL

Cookies so, naturalmente, o mtodo preferido, mas desde que eles no esto sempre disponveis voc pode passar o id da sesso ao longo da cadeia de consulta como um parmetro de URL. Aqui est um exemplo de como voc pode passar o id de sesso ao longo da seqncia de consulta em PHP. <? Php if (! session_is_registered ('nCount')) { session_register ('nCount'); $ NCount = 1; } outro { $ NCount + +; } ?> <p> Ol, voc tem visto esta pgina <php echo $ nCount;?>. vezes </ p> <p> Para continuar, <a href = somepage.php "<? php echo strip_tags (SID )? >"> clique aqui (sompage.php? <? php echo strip_tags (SID )?>)</ A> </ p> Neste exemplo, vamos verificar para ver se o nCount varivel de sesso registrado. Se no est registrado que registr-lo e inicializ-lo. Caso contrrio, adicionar 1 ao contar e mostrar a nossa mensagem para o usurio. A sada desta pgina pode ser algo como voc v na figura 1.2. Nota URLs no relativas so assumidos para apontar para sites externos e no adicionado o SID, como seria um risco de segurana. Sesses e Sesso Variables7 Figura 1.2 Um exemplo de sada de passar um id de sesso. Esse nmero longa no final do link, ada6906d1e4bf2d0c753f91edc585b80, a sesso id. PHP armazena essas sesses na pasta sessiondata, geralmente C: \ PHP \ sessiondata. Se voc olha nesta pasta voc ver os arquivos que comeam com sess_ e terminam com um GUID longa como o da final da URL. Isto como o PHP em si se mantm informado dos dados da sesso. Quando voc iniciar a depurao voc provavelmente fazem referncia a esta pasta, muitas vezes, porque voc pode abrir esses arquivos e ver se as variveis de sesso definidas so armazenados. Se eles so no sendo armazenado, ento voc ter que verificar o seu arquivo php.ini para fazer sesses de certeza so habilitado. Agora que voc tem um conhecimento geral de como as sesses de trabalho em PHP, d uma olhada no

opes de configurao disponveis para voc eo que cada um deles significa. H 21 opes configurveis para as sesses em PHP (ver Tabela 1.1) e cada um destes comportamentos configurvel no arquivo php.ini. Todas estas opes, exceto user_trans_sid, pode ser colocado em qualquer lugar usando o ini_set () funo. 8 Captulo 1 Ento o que todas essas coisas Server? Opes de Configurao da sesso Nome da Opo save_path "tmp /" nome "PHPSESSID" save_handler "files" auto_start 0 serialize_handler "php" gc_probability 1 gc_dividend 100 gc_maxlifetime 1440 cookie_path "/" cookie_domain "" cookie_secure "" use_cookies 1 use_only_cookies 0 cookie_lifetime 0 referer_check "" entropy_file "" 0 entropy_length cache_limiter "nocache" cache_expire 180 user_trans_sid 0 url_rewriter.tags "a = href rea, = href, frame = src forma, a entrada src = = fakeentry" Tabela 1.1 Valor padro Aqui est uma viso geral de cada uma destas opes de sesso configurvel. session.save_handler session.save_handler define o nome do manipulador que usado para as sesses gerenciamento de dados. session.save_path session.save_path Este o lugar onde as sesses so armazenados se session.save_handler est definido aos arquivos. H um argumento N opcional para esta opo que determina o nmero de nveis de diretrio que suas sesses sero armazenados em. Por exemplo, a definio a opo save_path a 5;. / temp, onde 5 o argumento opcional, ir resultar em uma diretrio algo estrutura como esta:

./tmp/5/c/4/e/1/sess_ ada6906d1e4bf2d0c753f91edc585b80. Sesses e Sesso Variables9 Se o argumento usado N voc deve criar a estrutura de diretrios mesmo. Alm disso, se voc usar o argumento N voc deve colocar o session.save_path entre aspas porque a vrgula tambm usada para comentrios no arquivo php.ini. Para nossos propsitos, Eu no recomendo usar esta opo. session.name session.name especifica o nome da sesso que usada para fazer referncia ao sessionid em cookies. Isto deve levar apenas caracteres alfanumricos. session.auto_start session.auto_start especifica se o mdulo da sesso deve iniciar automaticamente. Se voc use session.auto_start ento voc no pode colocar objetos em suas sesses, pois a definio de classe deve ser carregada antes de iniciar a sesso. session.serialize_handler session.serialize_handler o nome do manipulador que usado para serializar ou desserializar dados na sesso. Atualmente, apenas os formatos internos "php" e "WDDX" so vlidos. WDDX est tambm disponvel apenas se o PHP compilado com WDDX apoio. session.gc_probability e session.gc_dividend session.gc_probability especifica a probabilidade quando o processo de coleta de lixo deve comear. Isto calculado usando gc_probability / gc_dividend. session.gc_maxlifetime session.gc_maxlifetime o nmero de segundos em que os dados da sesso visto como lixo e limpeza. session.cookie_path session.cookie_path o caminho para o qual o cookie vlido. session.cookie_domain session.cookie_domain o domnio para o qual o cookie vlido. session.cookie_secure session.cookie_secure diz os cookies se eles devem ser enviados atravs de conexes seguras apenas. session.use_cookies session.use_cookies especifica se o mdulo da sesso deve armazenar os ids de sesso sobre o lado do cliente. 10 Captulo 1 Ento o que todas essas coisas Server? session.use_only_cookies session.use_only_cookies diz o mdulo da sesso que s deve usar cookies para

armazenar os ids de sesso. Isso evita que ataques de variveis de sesso sendo passada ao longo da URL. session.cookie_lifetime session.cookie_lifetime especifica o tempo de vida do cookie em segundos. O padro valor 0 significa esperar at que o navegador for fechado para expirar o cookie. session.referer_check session.referer_check contm uma string para o qual voc quer checar para cada HTTP referer. Se o PHP no encontrar este substring, a id de sesso embutida ser marcada como invlida. session.entropy_file session.entropy_file d um caminho para um arquivo externo que ser usado como um complemento na criao da id da sesso. O arquivo externo contribuir para a aleatoriedade na criao sesso. session.entropy_length session.entropy_length especifica o nmero de bytes que sero lidos a partir do session.entropy_file varivel. Quando ajustado para o valor padro de 0, ele desabilita o opes de entropia. session.cache_limiter session.cache_limiter especifica o mtodo de controle de cache para usar. Opes vlidas para isso so nenhum, nocache, privado, private_no_expire e pblico. session.cache_expire session.cache_expire a hora de viver para pginas de sesso em cache em minutos. Este opo no tem efeito se session.cache_limiter est definido para nocache. session.user_trans_sid session.user_trans_sid especifica se ou no suporte a sid transparente est habilitado. url_rewriter.tags url_rewriter.tags especifica quais tags HTML deve ser reescrito para incluir a sesso id se session.user_trans_sid definido como 1. Wow, h uma srie de opes de configurao para as sesses. PHP muito original e personalizvel. Voc no precisa especificar todas essas opes no arquivo php.ini, como uma questo de fato, PHP d-lhe vrias funes que expor essas opes para seu cdigo. Ento, se voc necessidade de alterar qualquer uma destas em aplicaes especficas que voc pode chamar as funes listadas na Tabela 1.2. Sesses e Sesso Variables11 Funes para Sesso Argumentos da funo Nome Descrio

session_cache_expire [new_cache_expire int] session.cache_expire substitudo por session_cache_limiter [string cache_limiter] retorna o nome da configurao atual para session_decode session_encode vazio retorna uma string codificada com o contedo do sesso atual. vazio session_destroy destri a sesso atual e todos os dados associados com a sesso atual. session_get_cookie_params vazio retorna uma matriz com o cookie sesses atuais session_id deve chamar isso antes de session_start (). session_is_registered session_module_name em seu lugar. session_name [nome string] especificado, ele define o nome da sesso atual. vazio session_regenerate_id vai gerar o ID de sesso e substituir o actual id da sesso com o id de sesso recm-gerado. session_register] argumentos podem ser uma string contendo o nome de um esse nome na sesso atual. session_save_path [path string] retorna o caminho do diretrio atual onde caminho atual substitudo com o caminho. session_set_cookie_params vida int [, string path] [, Domnio string] Tabela 1.2 retorna a configurao atual para session.cache_expire. Se new_cache_expire especificado, a corrente new_cache_expire. session.cache_limiter. Se cache_limiter especificado, o nome do session.cache_limiter est definido para cache_limiter. cadeia val decodifica a sesso de dados na varivel val. da informao. A matriz contm os seguintes itens: caminho de vida, domnio, e seguro. [String val] retorna o id da sesso atual. Se val for especificado ele ser substituir o id de sesso atual. Se voc especificado val cadeia val retorna true se h uma varivel global com uma nome especificado no val. [String val] retorna o nome do mdulo da sesso atual. Se val for especificado, esse mdulo ser usado retorna o nome da sesso atual. Se o nome nome misturado [, mixed ... aceita um nmero varivel de argumentos; qualquer uma dessas varivel ou um array de nomes de variveis ou outras matrizes. Para cada um dos nomes especificados, session_register () registra uma varivel global com sesses esto sendo armazenados. Se o caminho for especificado, a define os parmetros do cookie, vida, caminho, domnio

e seguro. [, Bool seguro] 12 Captulo 1 Ento o que todas essas coisas Server? Funes sesso (continuao) Argumentos da funo Nome Descrio session_set_save_handler define a funes de sesso de armazenamento utilizado para armazenar e vazio session_start tudo com base no id de sesso atual. session_unregister vazio session_unset session_write_close vazio isso vai acabar a sesso atual e armazenar a sesso Tabela 1.2 corda aberta, perto de cordas, cadeia de ler, escrever string, recuperao de dados. Voc usaria isso quando voc queria cadeia de destruir, string gc para criar a sua prpria sesso funes de manipulao. cria uma sesso ou retoma a sesso atual. Este var string cancela o registro de variveis globais com o nome especificado na var. Isso libera todas as variveis da sesso atualmente registradas. de dados. Voc no precisa chamar explicitamente esta funo. Eu sei que voc est dizendo para si mesmo: "Que diabos eu vou fazer com todos isso? "Para dizer a verdade, voc no vai usar metade dessas funes para o que voc ser fazendo. S porque voc no ir utiliz-los nos exemplos no significa que voc no vai usar -los em alguns de seus jogos. Como para as funes que voc vai usar, aqui est um exemplo PHP script que define algumas variveis de sesso. No se preocupe com a sintaxe de todos os cdigos de direito Agora, vou cobrir isso no Captulo 4. Por agora, basta olhar para como eu estou usando as funes listadas na Tabela 1.2. <? Php / / Use $ _SESSION, em vez de session_register devido a problemas de segurana session_start (); $ Turn = $ _SESSION ['virar']; if (! isset ($ de volta)) { $ Turn = 1; $ _SESSION ['Turn'] = $ turno; } printf ("valor atual por sua vez:" + $ _SESSION ['turn']); unset ($ turno); session_destroy (); ?>

Agora dar uma olhada e ver o que este pequeno exemplo est fazendo. Primeiro voc inicia a sesso com session_start (). Em seguida, tentar obter uma varivel chamada voltar da sesso. Se a virada $ varivel no definida, ento voc ainda no comeou realmente a sesso e voc precisa TCP / IP 13 para inicializar a varivel. Depois de inicializar a varivel, ele define a varivel de sesso para transformar tudo o que no turno $ varivel. Ento, o valor atual impresso, a varivel est em branco, ea sesso destruda. No se preocupe se voc no est confortvel com tudo isso ainda. Voc estar usando sesses em todos os projetos neste livro, por isso vai fazer mais sentido quando voc v as sesses sendo usado em um contexto real. Se voc estiver sentindo um pouco sobrecarregado este provavelmente seria um bom momento para fazer uma pausa. Se voc est pronto para mais, continuar com a discusso de como as negociaes para o servidor Web cliente com TCP / IP. Depois disso, voc ir instalar e configurar um IIS (Internet Information Server) do servidor Web e um servidor Web Apache. TCP / IP TCP / IP (Transmission Control Protocol / Internet Protocol) simplesmente uma comunicao protocolo que os computadores usam para falar uns com os outros. O que os diferentes componentes da TCP / IP faz? TCP. Este responsvel por verificar a entrega correta dos dados de um cliente para um servidor ou um servidor para um cliente. TCP foi construdo com verificao de erros e ir desencadear transmisses at que os dados com sucesso, chegou ao seu destino. IP. Este responsvel pela movimentao de pacotes de dados de n em n. Encaminha IP esses pacotes com base em um endereo de destino de quatro bytes (endereo IP). Assim como todos os protocolos de outras comunicaes, TCP / IP construda em camadas, no entanto, cada uma das camadas no TCP / IP lgico, em vez de fsica. Todo o trfego de rede se move atravs destas camadas medida que viajam atravs do hardware. Aqui esto as camadas e um pouco bit de informao sobre cada um. Camada de Aplicao. Esta camada lida com tudo o que no TCP / IP. O Web browser, no nosso caso, a camada de aplicao.

Camada de Transporte. Esta camada lida com todos os roteamento e entrega de dados. Esta camada tambm inclui o controle de erros e verificao de seqncia. Camada de Internet. Esta a camada responsvel pela transmisso de dados de endereamento, fragmentao de pacotes e pacotes de remontagem. Camada de Acesso Rede. Esta camada lida com a transmisso dos dados atravs da rede, incluindo a determinao como acessar o hardware. Como tudo isso funciona? Antes de enviar dados atravs da rede, TCP / IP estabelece uma conexo com a mquina de destino, enviando o que chamamos de pacotes de gesto. Depois TCP / IP estabelece esta conexo, os dados podem ser enviados gratuitamente. Uma vez que o aplicativo que foi usando TCP / IP para enviar dados acabado de transmitir, ele envia pacotes para uma gesto mais a mquina do cliente para dizer-lhe para fechar a conexo. TCP / IP tambm controla a vazo de 14 Captulo 1 Ento o que todas essas coisas Server? os dados para alcanar a taxa de cmbio de dados mxima, evitando congestionamentos e perda de pacotes. TCP / IP tenta tambm pacote de dados, tanto em um pacote possvel. Para sustentar uma taxa de transferncia de dados aceitveis, evitando sobrecarga na rede, TCP / IP contm quatro algoritmos: Slow Start, Congestion Avoidance, Fast retransmitir, e rpida recuperao. O algoritmo Slow Start evita injeo de vrios segmentos na rede durante o transmisso. A razo para isso se houver roteadores e links mais lento entre os emissor eo receptor voc comea a perder pacotes e voc abrandar a sua conexo. Assim o algoritmo Slow Start permite TCP / IP para apenas enviar dados a uma taxa que os reconhecimentos so retornados. O algoritmo Congestion Avoidance faz o que o nome diz-que evita congestionamentos. Congestionamento da rede geralmente ocorre quando uma grande quantidade de dados enviado para fora de um grande tubo e recebidos em um tubo menor. Congestionamento tambm pode ocorrer quando mltiplos fluxos de dados chegam em um roteador cuja sada capacidade menor, ento a soma dos insumos. O algoritmo Fast retransmitir acionado quando o fim receptor envia uma duplicata reconhecimento. Isso ocorre quando um segmento fora-de-ordem recebida, um ACK duplicado recebida, ou um pacote perdido. Quando isso ocorre, o TCP / IP ir retransmitir o pacote que

foi exceo. O algoritmo de recuperao rpida acionado aps o Fast retransmitir envia os desaparecidos segmento de pacotes. Isto permite que o TCP / IP para se recuperar do segmento em falta e ainda evitando congestionamento da rede. Se a recuperao rpida no estava disponvel, o usurio pode ver uma significativa diminuio da transmisso de dados. Agora que voc sabe como TCP / IP funciona, voc est definida com o conhecimento que voc precisa para continuar a marcha. O prximo passo instalar o servidor Web. Seguem-se orientaes de instalao para o IIS e Apache. Instalando o IIS Web Server IIS (Internet Information Server) includo com o disco de instalao do Windows 2000. PWS (Personal Web Server), uma verso de IIS aparadas para baixo, est disponvel com o Windows 98 disco de instalao. As diferenas entre o IIS eo PWS so relativamente pequenas, o maiores diferenas so: PWS no pode hospedar vrios sites em uma nica mquina. PWS no pode log para um banco de dados compatvel com ODBC. PWS no pode restringir o acesso por endereo IP. PWS no pode executar a indexao. PWS no pode isolar processos. Instalando o IIS Web Server 15 Felizmente para ns, nada disso afeta o nosso desenvolvimento. Basicamente, PWS no se destina a ser um servidor de produo. Ento, se voc quiser executar seus prprios sites alm de apenas o desenvolvimento voc precisar instalar o IIS. C Aution IIS / PWS no suportado no Windows ME ou Windows XP Home Edition, ento voc vai precisar instalar Apache Web Server para Windows. Antes de instalar o IIS, se houver qualquer outros servidores Web em execuo em sua mquina, voc vai precisa desinstal-los. Se o IIS ou PWS j est instalado em sua mquina, por favor, pule para a Captulo 2 para configurar o PHP. Instalao no Windows 2000/XP Professional IIS / PWS, que eu s vou referir como IIS a partir daqui, um componente do Windows, assim voc precisar ter o seu disco de instalao do Windows pronto. Para iniciar a instalao, clique em Iniciar> Configuraes> Painel de Controle e clique duas vezes no cone Adicionar / Remover Programas como mostrado na Figura 1.3. Figura 1.3 O Painel de Controle do Windows.

16 Captulo 1 Ento o que todas essas coisas Server? C Aution Seu painel de controle pode ser diferente daquele na Figura 1.3. Agora clique na aba de componentes do Windows (se voc estiver usando o Windows XP, clique no Adicionar / Remover Componentes do Windows boto) no lado esquerdo e desa at voc v o Internet Information Services (IIS). Clique em Internet Information Services (IIS), em seguida, clique no boto Detalhes no canto inferior direito da janela. Voc dever ver uma tela semelhante a Figura 1.4. Agora voc pode selecionar os componentes que deseja instalar com o IIS. Por padro, Common Arquivos, Internet Information Services snap-in, Personal Web Manager, e World Wide Servidor Web deve ser selecionada. No Windows XP, voc no ver o Personal Web Manager opo. Alm disso, o World Wide Web Servidor realmente Servios World Wide Web em Windows XP. Se estes no forem selecionados, ento voc deve selecion-los e clique em OK. Para instalar, clique no boto Avanar. Depois que o Windows terminar de instalar o IIS para C: \ Inetpub, haver diversos novos itens em seu computador. Em C: \ Inetpub h cinco pastas: AdminScripts, iissamples, Scripts, webpub e wwwroot. A pasta wwwroot o lugar onde o site padro para a vida IIS. Voc estar trabalhando principalmente com esta pasta e virtual diretrios. T ip Um diretrio virtual pode viver em qualquer lugar em seu computador, mas ele mostra-se sob o site padro. Isto extremamente til se voc no quiser manter seus arquivos de Web sob o diretrio C: \ Inetpub. Figura 1.4 A guia de componentes do Windows. Instalando o IIS Web Server17 isso a! IIS agora est instalado em sua mquina. Com esta instalao voc pode executar HTML e ASP pginas. Agora hora de adicionar o Intrprete CGI PHP para a sua instalao do IIS. Voc pode nem continue a ler para ver como este processo est concludo para Windows 98/ME e do Apache Web Server, ou voc pode simplesmente pular direto para o captulo 2 para aprender a instalar o PHP. Instalao no Windows 98 Para instalar o PWS no Windows 98 voc ter que inserir o disco de instalao e navegar

ao add-ons \ pws pasta. Quando chegar ao add-ons \ pws pasta, clique duas vezes sobre o setup.exe cone. Isto ir iniciar o instalador PWS. Voc ser presenteado com uma tela com trs botes: mnima, tpica, personalizada e. Clique em Personalizar. Voc dever ver uma tela que se parece com a Figura 1.5. Assim que chegar a esta tela certifique-se o seguinte so verificados: Arquivos de programas comuns FrontPage 98 Server Extensions Microsoft Data Access Components Personal Web Server (PWS) Transaction Server Depois de ter selecionado as opes, clique no boto Next e verifique se a instalao diretrio para o servio WWW definido para C: \ Inetpub \ wwwroot, como mostrado na figura 1.6. Figura 1.5 O PWS Instalao de instalao-Custom tela. 18 Captulo 1 Ento o que todas essas coisas Server? Figura 1.6 O PWS-instalao de tela WWW Service. Clique em Avanar para concluir a instalao. Quando a instalao estiver completa, voc pode pular para Captulo 2 para instalar o interpretador CGI PHP. Instalando o Apache Web Server no Windows ME / XP Instalando Apache no Windows ME ou Windows XP Home Edition muito fcil. Tenho incluiu o Apache 2.0.46 instalador msi no CD no diretrio do Apache. Se uma nova verso est disponvel no momento em que voc l este, voc pode baix-lo em www.apache.org. Para instalar o Apache, d um duplo clique no apache_2.0.46-win32-x86no_src.msi na Apache diretrio no CD que acompanha este livro. Assim que a instalao comea ele vai pedir-lhe algumas coisas. Domnio de Rede. Isto onde voc entra no domnio DNS para o qual o servidor ser registrado. Basta digitar mydomain.com. Nome do servidor. Este o nome do seu servidor de domnio totalmente qualificado. Digite server.mydomain.com. Endereo Administrador E-Mail. Basta digitar o seu endereo de e-mail aqui. Para quem instalar o Apache. Selecione para todos os usurios, na porta 80, e como um servio. Sua tela deve agora olhar como figura 1.7. Instalando o Servidor Web Apache em Windows ME/XP19 Figura 1.7 O instalador MSI Apache.

Depois de ter todas as informaes que entraram, clique no boto Avanar. Selecione Instalao tpica, e clique em Avanar. Clique em Avanar mais uma vez para aceitar o diretrio padro, C: \ Program Files \ Apache Group. A instalao ir criar um subdiretrio no diretrio padro chamado Apache2-este o lugar onde todos os arquivos para o Apache vai viver. isso a! No foi assim to fcil? Agora voc pode passar para o captulo 2 e instalar o PHP CGI Intrprete. Instalando o Servidor Web Apache em UNIX A primeira coisa que voc precisa fazer obter o cdigo fonte para o servidor Apache. Eu inclu verso 2.0.46 no CD no diretrio do Apache. Pode haver uma verso mais recente fora quando voc ler este livro, se voc gostaria de verificar, voc pode baixar a verso mais recente de www.apache.org. H um perodo de dois requisitos bsicos que voc precisa instalar o Apache. Espao em disco. Voc precisa de pelo menos 50 megabytes de espao em disco temporrio livre disponvel. Depois Apache instalado, ele ocupa 10 megabytes. Compiler. Voc deve ter o compilador C ANSI-instalado. Voc pode obter o GNU C Compiler (GCC) para livre de www.gnu.org / software / gcc / gcc.html. 20 Captulo 1 Ento o que todas essas coisas Server? Agora que voc sabe os requisitos e tem os arquivos fonte do Apache, voc precisa extra-los a partir do tarball. Para fazer isso, digite o seguinte no prompt de comando: $ Gzip-d httpd-2.0.46.tar.gz $ Tar xvf httpd-2.0.46.tar Isso ir criar um novo diretrio em seu diretrio atual de trabalho, contendo o cdigo fonte da distribuio. Voc vai precisar de cd para o diretrio antes de compilar o servidor. $ Cd httpd-2.0.46 Agora voc precisa configurar a rvore de fonte do Apache. Isso feito usando o configure script que est no diretrio raiz da distribuio que voc acabou de extrair. Antes de executar este script, existem vrias variveis de ambiente e bandeiras que o script configure pode tomar. As variveis de ambiente esto listadas na Tabela 1.3 e aparecem sempre antes da configurar comando. Dependendo da configurao do seu computador, voc precisar definir algumas destas ambiente variveis. Um exemplo do comando configure poderia ser algo como o seguinte:

$ CC = "gcc". / Configure-prefix = / sw / pkg / apache Para uma lista completa das opes de configurao, execute. / Configure-help. Depois de configurar foi executado, ele ir levar alguns minutos para testar a disponibilidade de recursos em sua mquina e para terminar de construir o Makefiles. Depois que o script configure terminar a execuo voc pode construir a distribuio digitando fazer no prompt de comando. Isto ir criar os arquivos de instalao. Seja paciente com este processo, que normalmente demora cerca de 3 minutos para terminar. Poderia ser ainda mais dependendo do nmero de mdulos que voc selecionou. CC = CPPFLAGS = CFLAGS = LDFLAGS = LIBS = informaes sobre a localizao da Biblioteca. INCLUI = TARGET = SHLIB_PATH = Tabela 1.3 Variveis Ambiente Descrio Nome da varivel O nome do compilador C. Vrios opes do compilador C pr-processador. Depurao e otimizaes para o compilador C. Opes para o linker. Cabealho de diretrios de busca de arquivos. Nome do executvel que ser construda. O padro httpd. Opes que especificam caminhos biblioteca compartilhada para o compilador eo linker. Instalando o Servidor Web Apache em INIX21 Assim que o script faz terminado, voc pode instalar o pacote Apache Web Server. Para fazer isso, basta digitar make install no prompt de comando. Depois que o script de instalao for concludo, Apache est instalado e pronto para ir. H algumas personalizaes que voc pode fazer editando o arquivo httpd.conf. Existem toneladas de opes neste arquivodemasiadas para ir por aqui neste livro. Ento, eu dirigi-lo com a documentao on-line no Apache http://httpd.apache.org/docs-2.0/. Depois que voc terminar de personalizar a instalao do Apache, voc deve ter para iniciar o servidor. Durante a instalao, o Apache colocar um script de inicializao em seu diretrio bin chamado apachectl. Para iniciar o servidor basta digitar o seguinte: $ / Apache / bin / apachectl start Agora voc deve ser capaz de solicitar uma pgina Web atravs de uma URL (http://localhost/). Se voc alguma vez

necessidade de parar o servidor, voc digita: $ / Apache / bin / apachectl stop isso a! Agora voc deve ter o servidor Web Apache instalado e funcionando. Agora voc pode seguir em frente e instalar o interpretador PHP CGI e avanar em PHP. Esta pgina foi intencionalmente deixada em branco Captulo 2 Travando o Configurao da Guerra As plataformas Construo e Instalao de PHP em UNIX Instalao em Windows para IIS / Apache Testando a instalao P HP uma linguagem muito verstil e vem com uma infinidade de opes. PHP suporta vrias centenas de APIs e interfaces para outras ferramentas de programao. Por isso, valeria a pena considerar o que voc quer PHP para fazer e instalar apenas os mdulos que voc precisa. Voc ser configurar o interpretador PHP com alguns mdulos extras, um dos quais GD Boutell da biblioteca (GD SDK). O SDK do GD permite gerar e manipular imagens na mosca, que eu considero ser muito importante no desenvolvimento de jogos. Se voc gostaria de instalar outros mdulos, sinta-se livre. A maioria das instalaes so muito semelhantes. Vamos a isso! Plataformas Desde o PHP no dependente de sistema operacional que ir instalar e configurar o PHP para UNIX e Windows. Quando se fala em UNIX, o servidor Web Apache de escolha. Voc pode configurar o PHP de duas maneiras diferentes quando voc instalar no Apache. Como intrprete CGI. Como um mdulo Apache. 23 24 Captulo 2 travando a guerra Configurao Nota Voc s pode configurar o PHP como um mdulo do Apache com o servidor Apache. Quando o PHP compilado como um mdulo do Apache, ele executado no mesmo espao de memria como o Servidor Apache. Isto significa duas coisas para voc: 1) voc recebe um aumento de performance ao interpretar pginas, mas 2) voc se ferrar se uma pgina d errado. Se uma de suas pginas PHP vai haywire quando executado no mesmo espao de memria como o servidor Apache, o servidor Apache

ser interrompido. Isto significa que voc est morto nas pginas de gua no ser servido at que seja reiniciado. No entanto, se voc configurar o PHP como um intrprete a evitar toda a questo completamente. A desvantagem , obviamente, um impacto na performance menor, mas insignificante. Do outro lado da moeda o Microsoft Windows com o IIS (Internet Information Server) ou PWS (Personal Web Server). Distribuies de PHP esto disponveis a partir do IIS 3 at IIS 5; Eu inclu o instala o IIS e Apache no CD fornecido com o livro. Construo e Instalao de PHP em UNIX Se voc vai instalar o PHP em uma plataforma Windows, voc pode continuar para a prxima seo, a menos que este tema realmente de seu interesse. A instalao em sistemas UNIX-like bastante simples. Voc precisa para gerar o fazer arquivos, executando os scripts autoconf e depois realizar um fazer e instalar. Vou apenas fazer a cobertura como instalar o PHP como um CGI Intrprete para simplificar. Vamos comear. O primeiro passo descompactar a distribuio e extrair os arquivos. $ Gzip-cd php-4.2.3.tar.gz | tar xvf Agora voc deve alterar para o diretrio onde a distribuio foi descompactado e execute o configure script para gerar os arquivos de tornar necessrio. Voc pode passar outras opes para contar a configure script mdulos que deseja instalar. Por exemplo: $. / Configure - with-gd = / usr/src/gd-2.0.4 - enable-gd-ttf-natal - enable-gdimgstrttf -With-jpeg-dir = / usr - with-png-dir = / usr O-with-gd opo um exemplo de como voc pode especificar em tempo de compilao mdulos que gostaria de instalar. Alguns desses extras ou add-on mdulos so detectados automaticamente; outros add-ons que voc pode precisar especificar especificamente no script configure. Se voc tiver qualquer dvida de que o mdulo no ser instalado automaticamente, voc deve especific-lo na opes. Consulte a Tabela 2.1 para uma lista dos mdulos e seus comandos. Construo e Instalao de PHP em UNIX25 Add-Ons configurao Argumento Add-On Descrio do Mdulo Verificao de redirecionamentos internos - enable-force-cgi-redirect Localizao do arquivo de configurao - with-config-file-path = DIR Especifica o local do php4.ini arquivo de configurao.

Diretrio de arquivos executveis - com-exec-dir = DIR Quando o PHP executado em modo de segurana do executveis so escolhidos apenas a partir do diretrio especificado pela DIR. Escapando citaes de dados - enable-magic-quotes dados colocados em um banco de dados pode ter escapa estas citaes com uma barra invertida. - With-ldap = DIR Mcrypt apoio - with-mcrypt = DIR suporte criptografia mcrypt. Biblioteca de expresso regular - with-system-regex Remoto include () - enable-url-includes Tags curtas - <? Php> disable-short-tags scripts PHP so delimitados por Destaque de sintaxe - disable-sintaxe-hl Desativa o comportamento padro do destaque de sintaxe PHP. XML suporte - with-xml Ativa o suporte para XML. BC funcionalidade matemtica - enable-bcmath Adiciona suporte para Calculadora Bench Depurador - enable-debugger GD - with-gd = DIR Tabela 2.1 Recurso ou Configurar Este verifica se uma determinada solicitao foi um redirecionamento interno com respeito para o servidor. citaes na mesma. Ativar essa opo Variveis GPC enable-track-vars GPC-GET, POST variveis a partir de formas so enviados para o servidor. Se estiver habilitado o servidor vai controlar essas variveis. Suporte LDAP Ativa o suporte para a Light-Weight Directory Access Protocol. PHP permite utilizar o SO base do biblioteca de expresso regular. Isto permite que inclui desde HTTP e Locais FTP. etiquetas ou o <forma curta? ?>. Este opo ir desativar o ltimo. Avisos enable-mantenedor modo Liga compilador e dependncia avisos. funes matemticas. Permite o suporte para interno do PHP depurador. Permite o suporte para GD. DIR aponta para o diretrio para GD. * Esta uma pequena lista das opes de add-on. Para mais, execute configure-help. 26 Captulo 2 travando a guerra Configurao

Agora, se o script de configurao anterior foi executado com xito deve existir um arquivo chamado fazer no diretrio. Este o arquivo que ir construir a distribuio. Para execut-lo, digite o seguinte: $ Make Se voc ver um fracasso tempo de ligao, voc mais provvel faltando uma referncia a uma biblioteca. Se uma biblioteca est em um local no-padro voc ter que especificar o caminho para a biblioteca e re-run a fazer arquivo novamente. $ Export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / var / otherlibdir $ Make Depois de todos os arquivos de origem tm sido compilado com sucesso e ligado voc pode instalar o distribuio. Para fazer isso voc deve ter privilgios de root. Estou supondo que voc est instalar como root, se voc no for voc ter que assumir que o usurio super. T ip Para assumir o super usurio, ou o usurio root a partir de uma linha de comando, basta digitar su no prompt de comando e digite a senha. Para instalar a distribuio, basta digitar o seguinte comando: $ Make install isso a. Agora voc deve ter o PHP instalado em seu sistema. A nica coisa que resta a fazer Apache dizer o que fazer com pginas PHP. Navegue at a pasta onde sua configurao do Apache vidas arquivo (normalmente httpd.conf), abri-lo e digite as seguintes linhas: AddType application/x-httpd-php4. Php4. Php AddType application/x-httpd-php4-source. Phps Ao application/x-httpd-php4 / cgi-bin/php DirectoryIndex index.html index.shtml index.php index.cgi index.php4 AddIcon / icons script.gif /. Conf. Sh. Shar. Csh. Ksh. Tcl. Php4. Php. Phps Finalmente, voc precisar reiniciar o servidor Web Apache. Isso tudo que voc precisa fazerVoc acabou de configurar PHP e Apache. Agora provavelmente seria um bom momento para fazer uma quebrar e comear outro Mountain Dew. . . . Prximo passo: testar! Instalao em Windows para IIS / Apache O pessoal da www.php.net fizeram a instalao para o Windows extremamente simples. Voc pode baixar os binrios j compilados, que eu inclu para voc no CD, ou voc pode baixar o cdigo fonte e compil-la. Eu no vou passar por cima de como compilar Instalao em Windows para IIS/Apache27 a fonte em uma mquina Windows, mas se voc realmente gostaria de aprender isso, no maravilhoso documentao em www.php.net. Para iniciar a instalao do PHP, d um duplo clique no arquivo php-4.3.2installer.exe no CD.

Isso far com que o assistente de instalao. V em frente e clique no boto Avanar e concorda o contrato de licena. Certifique-se que o tipo de instalao definida como padro e clique em no boto Avanar. Se o diretrio C: \ PHP onde voc quer a instalao, clique em Avanar; de outra forma alterar o diretrio. Agora voc ser presenteado com uma tela para inserir o seu SMTP servidor e do endereo para a funo mail. Basta deix-las como elas so (SMTP Server = localhost, e de address = me@localhost.com), e clique em Avanar. Voc dever ver uma tela parecida com a Figura 2.1. Isto onde voc ir selecionar a Web servidor que voc instalou no Captulo 1. Se voc instalou o IIS para o Windows 2000/XP ir deseja selecionar Microsoft IIS 4 ou superior. Se voc instalou o PWS para Windows 98 voc vai deseja selecionar PWS Microsoft Windows 9x. Se voc instalou o Apache para o Windows ME voc vai querer escolher Apache. Depois de ter selecionado seu servidor Web, clique em Avanar para iniciar a instalao. Se voc for solicitado para selecionar ns de script para adicionar mapeamentos para PHP, clique em Selecionar tudo e clique em em OK. Aps a instalao estiver concluda, voc pode adicionar os mdulos que voc precisa. Figura 2.1 Selecione o seu servidor web. 28 Captulo 2 travando a guerra Configurao Extenso de nome de DLL Extenso Extenso Descrio Bzip2 Compression php_bz2.dll funes Funes de Calendrio ClibPDF Rachadura php_crack.dll Permite testar a fora de uma senha. CURL php_curl.dll DataBase (dbm-style) php_dba.dll DBase DBX php_dbx.dll DOM XML php_domxml.dll Permite operar em um documento XML. Leia EXIF FDF Permite-lhe lidar com formas em um documento PDF. GD php_gd2.dll php_gettext.dll Iconv IIS Gesto php_iisfunc.dll IMAP InterBase Multi-Byte php_mbstring.dll Cordas Mhash php_mhash.dll Expe algumas funes usadas para hash. Ming php_ming.dll

mSQL php_mSQL.dll MSSQL php_mssql.dll Orculo Php_openssl.dll Open SSL Expe funes OpenSSL para criptografar / descriptografar. PDF Impressora W32api php_w32api.dll XML-RPC php_xmlrpc.dll php_xslt.dll php_yaz.dll Zip ZLib Tabela 2.2 Disponvel Extenses PHP php_calendar.dll php_cpdf.dll Permite criar arquivos PDF. CType Character php_ctype.dll e funes string. Biblioteca URL cliente. Funes para acessar bancos de dados estilo Berkley DB. Funes php_dbase.dll para acessar bancos de dados dbase estilo. Permite que voc acesse todas as bases de dados suportadas. php_exif.dll L os cabealhos EXIF de um arquivo JPEG. php_fdf.dll GD Boutell do SDK. Permite a manipulao de imagem. Obter texto Permite que voc para internacionalizar suas aplicaes PHP. Hyperwave php_hyperwave.dll Acesso s funes Hyperwave. php_iconv.dll Permite converter strings de caracteres entre vrias sets. Permite o gerenciamento do IIS atravs de cdigo. php_imap.dll IMAP, POP3, NNTP e funes. php_interbase.dll Permite o acesso ao banco de dados InterBase. Java php_java.dll Integra suporte Java ao PHP. LDAP php_ldap.dll Lightweight Directory Access Protocol. Lida com conjuntos de caracteres japoneses. Permite criar filmes em Flash on the fly. Permite o acesso ao banco de dados mSQL. Permite o acesso ao banco de dados MS SQL. php_oracle.dll Permite o acesso ao banco de dados Oracle. Mais funes php_pdf.dll PDF. php_printer.dll Expe funes para uma impressora. Sockets php_sockets.dll acesso a sockets. Acesso API Win32 a partir de PHP. Permite que voc escreva XML-RPC servidores e clientes. XSLT Expe funes para trabalhar com XSLT. YAZ Permite PHP para interface com o kit de ferramentas YAZ. php_zip.dll somente leitura o acesso a arquivos zip. php_zlib.dll Permite ler e gravar arquivos gzip. * Mais informaes sobre essas extenses podem ser encontradas em www.php.net / manual / en / install.windows.php Teste Seu Installation29

Instalar Extenses como fazer o Windows Agora que voc tem PHP instalado, voc pode adicionar extenses para a instalao. Tabela 2.2 fornece uma lista de extenses disponveis para Windows. Adicionando uma extenso muito fcil de tudo que voc precisa fazer copiar as dlls que voc quer e editar o arquivo php.ini. Primeiro crie um diretrio chamado extenses na pasta onde voc instalou o PHP (geralmente C: \ PHP). Agora extraia o arquivo php-4.3.2-win32.zip que est includo no CD. V para o diretrio que o arquivo zip e extrado para copiar todos os dlls fora do dlls diretrio e col-los em C: \ WINNT \ system32, se voc est em um Windows 2000 mquina; C: \ WINDOWS \ system32 se em uma mquina Windows XP, ou se voc estiver em um Windows 98 mquina, C: \ WINDOWS \ system. Agora volte para a pasta onde o arquivo zip extrados para e copiar todas as dlls da pasta extenses e cole-os na extenses pasta que voc criou. Agora que voc tem a dlls em seus devidos lugares, abra o seu arquivo php.ini. DEVE-SE localizado na pasta C: \ <Windows diretrio \ php.ini. Depois de ter o arquivo aberto, v para o "Caminhos e diretrios" e olhar para extension_dir = ". /". Ns queremos definir esta para C: \ PHP \ extensions \. Agora v para o "Dynamic Extensions" e descomente a seo seguintes linhas: 1. extension = php_dbase.dll 2. extension = php_gd2.dll 3. extension = php_sockets.dll Nota importante que voc coloque a barra invertida em C: \ PHP \ extensions \ V em frente e salve seu arquivo php.ini e sair. Agora voc tem instalado as extenses e o interpretador PHP. Tudo o que resta a fazer testar a instalao para ter certeza que est analisando Pginas PHP. Testando a instalao PHP deve estar instalado e funcionando em sua mquina. V em frente e testlo. Abra seu editor de texto favorito e digite o seguinte: <? Php phpinfo (); ?> 30 Captulo 2 Travando a Guerra Configurao Em seguida, salvar esse arquivo como teste.php e mov-lo para um lugar onde voc ser capaz de bat-lo. SE VOC

esto no Windows, voc pode coloc-lo em C: \ Inetpub \ wwwroot test.php \; se voc estiver no UNIX voc pode coloc-lo em / usr / web / teste / php. Abra um navegador Web e digite http://localhost/test.php e voc deve ver algo semelhante da Figura 2.2. Figura 2.2 Os resultados do teste de sua instalao nova do PHP. Captulo 3 Eu venci o servidor, Deixe-me ao Cdigo! O Bsico da Tag HTML O Todo-Poderoso Documento HTML O Corpo HTML Grficos e HTML Tabelas Criando formulrios para entrada Ongratulations C; se voc est aqui, ento voc tem sucesso instalado e configurado o servidor Web e do intrprete PHP CGI. Neste captulo vou cobrir HTML (Hyper Text Markup Language). HTML muito importante para ns, porque sem que no seramos capazes de mostrar qualquer coisa para o nosso usurio. Isso no seria um jogo muito divertido no ? Se voc se sentir confortvel com HTML voc pode pular direto para o Captulo 4 e iniciar o servio em PHP. No entanto, se voc sente que precisa de uma reciclagem em HTML, pegue alguns snacks, abrir uma Mountain Dew, em seguida, abra seu editor de texto favorito e vamos comear. O Bsico da Tag HTML Tags HTML so simples de entender. Voc tem uma marca de incio e um fim tag. Em outras palavras, cada tag tem dois elementos que so colocados juntos. O incio tag parece <tag_name> ea marca final parece </ tag_name>. A nica diferena entre essas duas marcas a barra na tag final. Quase todos os tag em HTML 31 32 Captulo 3 Eu venci o Server, Let Me no Cdigo! tem atributos. Para usar estes atributos a sua tag ficaria assim: <tag_name attribute1 = "someValue"> </ tag_name>. As tags apenas em HTML que no tm atributos que pode definir na tag so <HTML> </ HTML> <HEAD>, </ HEAD>, e <TITLE> </ TITLE>. Todas as outras marcas tm um ou mais atributos que podem ser aplicadas a eles. Agora que voc sabe o bsico de uma tag HTML, d uma olhada nas diferentes elementos de uma Documento HTML e como ela estruturada. O Todo-Poderoso Documento HTML Um documento HTML normalmente tem uma extenso de htm ou html;.. No entanto, desde que voc

ser codificao em PHP em um futuro prximo voc deve apenas adquirir o hbito de salvar seu HTML documentos com a extenso. php. Para comear, consulte a Tabela 3.1, que contm o quatro marcas bsicas que compem o incio de um documento HTML. Como voc pode imaginar, tudo o que acontece em seu documento HTML ser cercado por as tags <HTML> e qualquer coisa que voc deseja exibir vai entre as tags <BODY>. As tags so importantes <HTML>; embora a maioria dos navegadores l fora, pode lidar com um documento sem as tags HTML, ainda h uma chance de que sua pgina ser mal interpretado. mais seguro para inclu-los. Nota Cada tag comea com <name_of_tag> e termina com </ name_of_tag>. A seo head do documento HTML (<HEAD> </ HEAD>) como uma espcie de referncia rpida para navegadores. Que fornece o ttulo do documento, contm dados META, e estabelece relaes entre documentos HTML e diretrios de arquivos. Para a maior parte, voc no vai estar lidando com todos esses em sua aplicao. A tag s voc realmente precisa se preocupar sobre o <TITLE> </ TITLE> tag. Todos tag isso faz dar a sua pgina um ttulo e exibi-lo em na barra de ttulo da janela, como na Figura 3.1. Descrio <HTML> </ HTML> Cria um documento HTML. <HEAD> </ HEAD> <TITLE> </ TITLE> Define o ttulo do documento. <BODY> </ BODY> Contm a rea visvel do documento. Tabela 3.1 Palavras-chave para o incio Etiqueta Contm o ttulo do documento e outras informaes que no exibido na web. O Todo-Poderoso HTML Document33 Figura 3.1 Uma tag title exemplo. Eu sugiro fortemente que voc d suas pginas nomes lgicos para aliviar a confuso quando voc editar -los mais tarde, no use nomes de pginas como "Pgina 1". Da mesma forma, no fazem seus ttulos extremamente tempo. Uma boa regra de ouro , se o seu ttulo mais do que 3-5 palavras, ento muito tempo. Vamos em frente e passar para o mago da questo de HTML. Se voc no est muito claro sobre como todas essas marcas se encaixam, no se preocupe, vou mostrar um exemplo em breve. O Corpo HTML Tabela 3.2 mostra os atributos tag BODY.

Tudo o que exibe em sua pgina HTML acontece dentro do <BODY> </ BODY> tags. Quando Eu digo "tudo" eu quero dizer tudo o que visvel para o usurio. Que inclui imagens, texto, tabelas, links, cores de fundo, cores de texto, cores dos links, formulrios e botes. A maioria do que iremos utilizar em nossos jogos lidar com layouts, formulrios, imagens, e alguns formatao de texto. No haver que a formatao de texto muito porque a maioria dos nossos jogos sero as imagens e formas, mas voc pode querer criar uma seo de ajuda para o seu jogo com aparncia profissional, ento d uma olhada no tags de formatao de texto disponvel. 34 Captulo 3 Eu venci o Server, Let Me no Cdigo! Descrio atributo Bgcolor # RRGGBB Texto # RRGGBB Link # RRGGBB Vlink # RRGGBB Alink # RRGGBB Define a cor do link quando o usurio est clicando sobre ela. URL para a imagem de fundo Topmargin n de pixels Leftmargin n de pixels Marginheight n de pixels Marginwidth n de pixels Tabela 3.2 Atributos Tag BODY Valores Define a cor para o valor HEX especificado. Define o texto para a cor especificada. Define o link para a cor especificada. Define os estados visitados de links para a cor especificada. Define o fundo do documento a uma imagem especificada. Define o valor da margem superior do documento em Internet Explorer. Define o valor da margem esquerda do documento na Internet Explorer. Define o valor da margem superior do documento no Netscape. Define o valor da margem esquerda do documento em Netscape. * Uma lista completa de marcas est includa no Apndice A. Na maioria das vezes voc s quer fazer o texto se destacam um pouco mais, talvez por um cabealho ou algo assim. Por exemplo, voc pode querer rotular um campo de entrada ou apenas fazer pargrafos para dar instrues. Assim, estaremos usando o <H3> </ H3>, </ B> <P>, </ P> e Tags <BR> a maioria do tempo. D uma olhada em um exemplo de um documento HTML com estes elementos na mesma. <HTML>

<HEAD> Exemplo de cdigo <TITLE>> </ TITLE> </ HEAD> <BODY Bgcolor="#FFFFFF"> <H3> Bem-vindo! </ H3> <p> <b> Instrues </ b> <br> Para dominar a arte de programao PHP jogo voc precisa ser fluente em HTML. Se no o fizer um ser capaz de ver o seu jogo. </ p> </ BODY> </ HTML> O Todo-Poderoso HTML Document35 Descrio <pre> </ pre> Cria um bloco de texto pr-formatado. <h1> </ h1> <h2> </ h2>, <h3> </ h3>, <h4> </ h4>, <h5> </ h5>, <h6> </ h6>. <h6> </ h6> <b> </ b> Texto Bolds. <i> </ i> coloca em itlico o texto. <u> </ u> Sublinha o texto. <tt> </ tt> </ strong> Texto Bolds. </ p> Cria um pargrafo. Insere <br> uma quebra de linha. <blockquote> </ blockquote> <dl> </ dl> Cria uma lista de definies. <dt> </ dt> Cria um termo de definio. <dd> </ dd> Cria uma definio. <ol> </ ol> Cria uma lista numerada. <ul> </ ul> Cria uma lista com marcadores. <li> </ li> Precede cada item da lista e adiciona um nmero ou uma bala, dependendo do tipo de lista. </ div> com uma folha de estilo. Tabela 3.3 Formatao de texto Tag Etiqueta Cria o maior ttulo que o HTML oferece. H seis ttulo tamanhos disponveis: cria o menor tamanho de ttulo. Cria Teletype ou mquina de escrever estilo de texto. Travesses texto de ambos os lados. Isto usado para formatar grandes blocos de HTML. geralmente usado em conjunto * Uma lista completa de marcas est includa no Apndice A. D uma olhada no cdigo. Observe que o documento inteiro vive entre o <HTML> </ HTML> tags. Ao descermos a nossa linha seguinte, iniciar o cabealho do documento, colocando o

incio <HEAD> tag. Desde o nosso ttulo vai na cabea do documento em que colocamos nossa <TITLE> </ TITLE> tag, com o nosso ttulo, e fechar a nossa </ HEAD> tag. Voc est percebendo um padro ainda? Deixe-me repetir: tudo est indo sempre no meio tags. 36 Captulo 3 Eu venci o Server, Let Me no Cdigo! Em seguida, voc iniciar o <BODY> do documento. Observe o atributo BGCOLOR = "# ffffff". Tudo isso faz definir a cor de fundo do documento para branco. Para o resto dos atributos associado ao <BODY> </ BODY> tag consulte a Tabela 3.2. Em seguida, voc vai usar uma da rubrica tags. Eu costumo usar <H3> </ H3> para uma tag posio, porque no parece muito grande ou muito de pequeno porte. Novamente, o texto que eu quero exibido vai entre as tags de abertura e fechamento. Agora voc vai comear um novo pargrafo. A palavra em negrito em primeiro lugar, voltar para a prxima linha, e insira o texto. T ip A tag <BR> em HTML exatamente a mesma coisa que colocar em um n \ ou \ n \ r no C / C + +. D uma olhada nos resultados, que deve ser semelhante Figura 3.2. Ver, o quo fcil foi isso? Ok, agora que voc pode dominar qualquer texto que possa vir a maneira vamos adicionar alguns grficos para ele e faz-la bonita. Grficos e HTML Atualmente, existem trs tipos de formatos de imagem que suporta HTML:. Jpg, gif, png e... Cada formato tem suas prprias especificaes e nuances. H, naturalmente, vantagens e desvantagens de usar cada um. Vamos dar uma olhada nesses formatos e ver as suas capacidades. Figura 3.2 Os resultados do cdigo HTML exemplo. Grficos e HTML37 Os formatos de arquivo O formato de arquivo. Jpg, pronuncia-se "jay-peg", melhor usado quando voc quer mostrar as fotos porque suporta uma paleta de cores de 24 bits. um algoritmo de compresso "lossy", o que significa que o algoritmo que comprime o crunches informao de cor do arquivos em tamanho, mas a qualidade da imagem leva um golpe. Na maioria das vezes voc no consegue ver a diferena na qualidade da imagem, a menos que voc estiver imprimindo o grfico numa setter imagem profissional, que no estamos indo fazer. O. Gif (Graphics Interchange Format) projetado para lidar com uma de 256 cores

paleta. Quando um gif. Comprime uma imagem que utiliza um algoritmo de compresso "lossless". Este significa que a compresso torna o arquivo menor de tal forma que a imagem original pode ser reconstrudo bit a bit. Para isso, remapeia as cores de uma imagem, usando o que chamado de cor Look Up Table (CLUT) para novas cores em uma paleta de 256 cores. Em seguida, a imagem compactado usando Run Length Encoding (RLE). RLE no uma forma eficiente para comprimir imagens se h muitas mudanas de cor atravs de uma linha de pixels, mas ele faz um trabalho estrondo-up quando uma linha de pixels tem muitos pixels da mesma cor. . Gifs tambm suportam transparncia. Voc pode fazer isso atravs da definio de uma das cores na CLUT para ser uma cor transparente. Em seguida, os pixels na imagem que so mapeados para que determinado cores tornam-se transparentes. Isto muito til para a criao de imagens em cima de outras imagens ou ter uma nica imagem que pode ser mostrado com diversas formaes diferentes. Transparncias tambm permitem que voc faa de forma estranha imagens, como setas ou crculos, que no mostram uma moldura retangular. No s. Transparncias apoio gif, mas ele tambm suporta mltiplas imagens. Significado que voc pode ter vrias imagens e quadros compactados em um mesmo arquivo. Isso significa que que voc pode criar pequenas imagens animadas. T ip Ao escolher uma cor para uma transparncia, use roxo brilhante, rosa brilhante, verde brilhante ou uma vez que estes cores normalmente no aparecem em uma imagem. O formato final compatvel com imagens. Png (Portable Network Graphics), pronunciado "Ping". Este formato foi desenvolvido para substituir os antigos e mais simples. Formato gif. . Png tem quatro principais vantagens sobre o formato gif:. canal alfa suporte, correo gama, melhor entrelaamento e melhor compresso. No entanto,. Png no suporta animao frames, ento se voc quiser uma imagem animada que voc deve usar. gif. . Png foi desenvolvido para ser um imagem nica nico formato. Compresso. Png excelente porque suporta true color, escalas de cinza, paleta e baseado em imagens. . Jpg suporta os dois primeiros, e. Gif suporta a terceiros. . Pngs normalmente recebe 5% a 25% melhor compresso de arquivos. gif. 38 Captulo 3 Eu venci o Server, Let Me no Cdigo!

C Aution Se os seus arquivos. Png so salvos usando o modo de cores verdadeiras, muitas vezes eles vo ser maiores do que o esperado. Fazer se voc usar o modo de paleta baseada ao salvar imagens simples. . Png suporta transparncias gosta. Gif faz, mas ele faz isso de uma maneira diferente. Em vez de especificando uma cor na CLUT, voc especifica um canal alfa ou um canal de mscara. Todos os trs . Tipos de imagem png (cor verdadeira, em tons de cinza, e paleta) pode armazenar um canal alfa. Ento, o que que isso significa? Bem, onde. Gif armazena um valor de 3-bit RGB para a cor de transparncia para cada pixel,. png armazena um valor de 4 bits RGBA para cada pixel. Voc pode estar se perguntando por que isso diferente da transparncia gif.. Quando um gif. colocado sobre um fundo e tem valores de transparncia, voc pode ver algumas arestas irregulares ao redor da imagem onde ela encontra o fundo. Mas quando um transparente. Png colocado sobre um fundo, no artifacting ocorre. Um grande exemplo disso quando voc tem uma imagem com uma sombra, como na Figura 3.3. Agora que voc ver a diferena entre as imagens que eu sei que voc est se perguntando: "Ok parece melhor, mas ele disse que armazenado um bit extra de informao. No esta tornar o arquivo tamanho maior? "E a resposta sim, mas s se voc usar o canal alfa em uma excessiva caminho. Ento, se voc tiver um. Png paleta de alfa e voc quer quatro nveis de transparncia, voc tem usar quatro entradas de paleta diferente. Mas desde que para a maioria dos casos, voc vai precisar de apenas um nvel de transparncia, este no ser um problema eo png. sair sempre a um nvel comparvel tamanho. Agora que todos esses formatos grficos esto disponveis para voc, como voc vai saber que um de usar? A resposta muito simples:. Jpgs use se voc estiver exibindo algo com um total paleta de cores que tem muitas cores em mudana. Uso. Gif se voc quer fazer uma pequena animao ou transparncia. Uso. Png se voc no deseja usar. Gif, desde que voc pode obter os mesmos resultados com. pngs como voc pode com. gifs. Figura 3.3. Gif versus. Transparncia png. Grficos e HTML39 Usando os formatos de arquivo em seu documento Todos sadem a tag de imagem. Sim, isso mesmo, a tag de imagem. Ele permite que voc exibir imagens em

sua pgina. O que que lhe parece? Aqui est uma repartio da tag de imagem: <img> accessKey - Define ou recupera a chave de acessibilidade. align - Define o alinhamento da imagem, os valores possveis so absbottom, absmiddle, fundo base, esquerda, centro, direita, texttop, top. alt - O texto alternativo da imagem. Esta ser exibido se a imagem no mostrado ou se algum tem o seu conjunto browser no mostrar imagens. fronteira - A quantidade de fronteira, em pixels, que voc quer em torno de sua imagem. id - Define o ID da imagem. altura - Define a altura da imagem. nome - Define o nome da imagem. src - Esta a localizao e origem da imagem. usemap - Define a URL para usar como um mapa de imagem do lado do cliente. width - Define a largura da imagem. O verdadeiro corao da marca o atributo src. SRC a fonte da imagem. Pode ser um parente caminho ou um caminho absoluto. Um caminho relativo relativo a onde voc est no seu diretrio estrutura. Se voc especificar um caminho absoluto que no importa onde voc est no estrutura de diretrio. Por exemplo, um caminho relativo seria algo parecido com isso: <img src = "... / images / someimage.gif" border = "0">, onde um caminho absoluto pode ficar assim: <img src="http://www.somewhere.com/images/someimage.gif" border="0">, ou como isto: <img border="0"> "src="/images/someimage.gif. Voc estar usando todos os caminhos relativos por duas razes: 1) ele faz a sua aplicao mais escalvel, e 2) que torna a sua aplicao auto-contido. Se voc tivesse que usar caminhos relativos ea imagem no somewhere.com desapareceu, voc teria agora uma imagem quebrada. Mas, se voc manter tudo dentro do seu aplicao que voc no ter esse problema. A nica maneira que voc ir obter uma imagem quebrada se voc no referenci-lo corretamente. Voc deve tornar-se muito familiar com a tag de imagem. Voc poder us-lo muitas vezes, e saber como ajustar os atributos da tag lhe dar controle sobre a soberba aparncia da pgina. D uma olhada em um exemplo usando a tag de imagem. <html> <head> <title> Exemplo Imagem </ title> </ Head>

<body bgcolor="#FFFFFF"> <img src="images/someimage.gif" border="0" align="right" alt="some image"> 40 Captulo 3 Eu venci o Server, Let Me no Cdigo! Aqui est uma imagem com a imagem alinhada direita do texto. <img src="images/someimage.gif" border="0" alt="some image"> Aqui est uma imagem sem a tag align nele em tudo. <img src="images/someimage.gif" border="0" width="100" height="100" alt="some image"> Aqui a mesma imagem, mas realmente grande. <img src="images/someimage.gif" border="0" width="10" height="10" alt="some image"> Aqui a mesma imagem, mas muito pequeno. </ Body> </ Html> A tag de imagem muito fcil de entender e usar. No exemplo de cdigo, repare que o tag de imagem no tem um fim tag-este um outro caso especial em HTML. Temos basicamente quatro imagens exibidas na tela, um est alinhada direita de algum texto. Isso foi feito usando o atributo align. Voc pode querer brincar com o atributo align um pouco para ver o que cada uma das propriedades pode fazer sua imagem. Isto muito til se voc desejar que o texto envolver em torno de uma imagem. A imagem seguinte apenas colocada na tela sem nenhum atributo align. Isto como voc vai usar a tag de imagem com mais freqncia. As duas prximas imagens usar a largura e atributos altura. Estes sistemas permitem alterar a largura e altura de uma imagem. Um deles maior, ento a imagem original e uma muito menor do que a imagem original. D uma olhada a Figura 3.4 para os resultados da nossa amostra de cdigo pouco. Figura 3.4 O resultado da imagem do exemplo de cdigo. Grficos e HTML41 Agora que voc sabe quase tudo o que h para saber sobre as imagens, voc pode se concentrar imposio de um quadro para os seus jogos. Para fazer isso voc deve compreender como as tabelas de trabalho. Eu no posso forar bastante como isso importante para o layout e para manter o seu jogo juntos. Tabelas Acredite ou no, as tabelas so seus melhores amigos. Voc vai usar tabelas para controlar onde as coisas acabam at na sua pgina. Voc pode fazer tabelas espalhar-se e ocupam a pgina inteira, no importa quo grande a janela do navegador , ou voc pode fazer a tabela muito rgida e ocupar apenas uma parte

da tela. O primeiro passo saber com as tabelas que voc pode fazer com eles. Qualquer coisa que voc pode colocar para fora em uma grade deveria ser definido em tabelas. Se voc tiver uma imagem que curvy, coloque uma grade sobre ele e descobrir onde voc pode fazer fatias para criar uma tabela. (Eu vou cobrir este com mais detalhes posteriormente.) H trs elementos muito bsicos em uma tabela: no a prpria tabela, uma linha da tabela, e uma clula da tabela. As tags para estes so <table> </ table>, <tr> </ tr> e <td> </ td>, respectivamente. Voc pode se perguntar: "Por que a tag para uma clula de tabela <td> </ td>?" Bem, "td" realmente significa tabela de dados, ento se eu falar sobre os dados da tabela Refiro-me a clula da tabela. Para fazer uma tabela, voc inicia o tag da tabela, iniciar uma tag linha da tabela, iniciar uma tag dados da tabela, encerrar uma tabela de marcas de dados, acabar com a tag linha da tabela, e ento terminar a tag table. Como este: <table border="1"> <tr> <td> Clula 1 </ td> <td> Clula 2 </ td> <td> Clula 3 </ td> </ Tr> </ Table> Faz sentido? Para cada clula que voc precisa colocar uma <td> </ td> tag entre o <tr> </ tr> tags. Para cada linha que voc precisa colocar uma <tr> </ tr> tag entre o <table> </ table> tags. Basta lembrar que voc pode ter uma clula de clulas abranger vrios, e voc pode ter uma extenso de mltiplas linhas linhas, mas voc no pode ter uma clula sem um palmo de uma linha de baixo mais larga do que qualquer linha acima dele. Lembre-se que ele tem que ser uma grade. D uma olhada os atributos da tabela, linha da tabela, e dados marcas de tabela. <table> </ table> Fronteira - Define a quantidade de borda que voc quer em torno de sua mesa. Se o valor for 0 ento nenhuma borda ser exibida. O valor padro de fronteira 0. Cellspacing - Define a quantidade de espao, em pixels, entre as clulas. O padro valor 2. 42 Captulo 3 Eu venci o Server, Let Me no Cdigo! Cellpadding - Define a quantidade de espao, em pixels, entre a borda da clula e sua contedo. O valor padro 2. Width - Define a largura da tabela. Pode ser um nmero, em pixels, ou um per -

percentual. A porcentagem baseada em quo grande ou pequena janela do cliente . Altura - Define a altura da tabela. Ele tambm pode ser um nmero ou uma porcentagem, apenas como a propriedade de largura. Align - Define o alinhamento da tabela. Valores possveis so esquerda, centro e direita. Por padro, as tabelas sero alinhadas esquerda. Bgcolor - define a cor de fundo da tabela. <tr> </ tr> Align - Define o alinhamento da linha da tabela. Valores possveis so o centro, justificar, esquerda, e direita. Por padro, para a esquerda selecionado. Bgcolor - define a cor de fundo da linha da tabela. Isso substitui o bgcolor em a marca de tabela para a linha especial que especificado em. Width - Define a largura da linha da tabela. Altura - Define a altura da linha da tabela. Valign - Define o alinhamento vertical da linha da tabela. Possveis valores so de meia, linha de base, inferior, superior e. Por padro, o meio selecionado. <td> </ td> Align - Define o alinhamento dos dados ea justificao do texto na clula da tabela. Pos veis valores so o centro, justificar, esquerda e direita. Por padro, para a esquerda selecionado. Bgcolor - define a cor de fundo da clula da tabela. Isso substitui o bgcolor em a marca de linha da tabela para a clula em particular que especificado em. Colspan - Define o nmero de colunas ou clulas, que esta clula ser instalada. Rowspan - Define o nmero de linhas que esta clula ser instalada. Width - Define a largura da clula. Altura - Define a altura da clula. Nowrap - Define se o navegador ir executar automaticamente a quebra de texto em da clula. Valign - Define o alinhamento vertical de dados e de texto na clula da tabela. Valores possveis so de meia, de base, inferior e superior. Por padro, o meio selecionado. Antes de continuar, eu quero te mostrar o que essas opes podem fazer. Vamos criar uma tabela com uma borda de 1, no cellpadding, trs linhas, trs clulas em cada linha com um mltiplo abrangendo colunas, e as cores de fundo em algumas clulas. Grficos e HTML43 <html> <head> <title> Exemplo de tabela </ title> </ Head> <body bgcolor="#FFFFFF">

<table border="1" cellpadding="0" cellspacing="0" width="450"> <tr height="25"> <td align="left" valign="top"> Alinhados esquerda e superior </ td> <td align="center" valign="middle"> Alinhados centro e meio </ td> <td align="right" valign="bottom"> Alinhados direita e inferior </ td> </ Tr> <tr height="25"> <td align="left" valign="top" colspan="2"> Este abrange duas clulas de dados </ td> <td align="left" valign="top" rowspan="2"> Note que isto to grande quanto o de clulas acima dela. Esta clula tambm abrange duas linhas </ td> </ Tr> <tr height="25"> <td align="left" valign="top" cor # cccccc bgcolor="#cccccc"> </ td> <td align="left" valign="top" Cor bgcolor="#999999"> # 999999 </ td> </ Tr> </ Table> </ Body> </ Html> Este cdigo deve ser algo como a Figura 3.5. Figura 3.5 Exemplo de cdigo resultados depois de usar a tabela de mesa, linha, e as tags dados da tabela. 44 Captulo 3 Eu venci o Server, Let Me no Cdigo! Ver todas as coisas legais que voc pode fazer com tabelas? Uma vez que voc pegar o jeito de as tabelas e os maneira que o fluxo pode comear tabelas de nidificao dentro de outras tabelas para obter diferentes efeitos. Para futuros jogos neste livro, voc vai comear com uma tabela base que ser chamado o quadro mesa. Esta tabela inclui os cinco elementos principais para uma pgina: um cabealho, uma barra esquerda, um painel de contedo, uma barra direita, e um rodap. Ento, dentro de cada um desses voc pode ter alguns contedo, um menu, ou nada. Mas voc sempre comear com esta tabela base bsicos: <table border="0" cellpadding="0" cellspacing="0" width="750"> <tr> <td align="left" valign="top" colspan="3"> HEADER </ td> </ Tr> <tr> <td align="left" valign="top" width="100"> ESQUERDA </ td> <td align="left" valign="top" JOGO width="550"> GOES AQUI </ td> <td align="left" valign="top" width="100"> DIREITO </ td> </ Tr> <tr> <td align="left" valign="top" colspan="3"> FOOTER </ td> </ Tr> </ Table>

Para o propsito deste livro, seus jogos ser composta de vrias tabelas ou formulrios que so formatados com tabelas, e eles vo entrar no painel de contedo. Voc vai escrever seu cabealho, esquerda, direita, e painis de rodap com PHP em si. Mas no vamos ficar frente de ns mesmos; Vou cobrir tudo isso no prximo captulo. Por agora, comear alguma prtica com a imposio tabelas com vrios grficos para fazer uma interface boa aparncia. Layouts, tabelas e grficos Como prometido, voc est indo fazer uma interface boa aparncia. Voc pode usar esta interface em seus jogos se voc gosta ou voc pode criar o seu prprio. Pelo tempo que voc terminar com esta seo voc ser um mestre em colocar para fora tabelas. Ao dispor de grficos para trabalhar com ele til para ter um aplicativo grfico, como Photoshop ou Paint Shop Pro. Estes programas permitem criar os grficos para a Web e eles vo fazer o corte de grficos muito mais fcil. Eu inclu o Paint Shop Pro no CD, mas voc pode usar qualquer aplicativo grfico que voc preferir, desde que ele pode salvar . Gifs ou. Jpgs. Grficos e HTML45 Ao dispor de uma mesa, comeam sempre no canto superior esquerdo da imagem e fazer o seu caminho atravs do topo em colunas. Isso o que chamamos de esquerda para a direita da ordem. Construo de uma tabela desta forma ser melhor permitir que voc veja o layout final table no cdigo. Tenho includa uma imagem no CD no diretrio chamado Captulo 3 interface.pcx. Continuar e abra a imagem que voc possa criar um layout de tabela com grficos. Agora voc tem que tomar a imagem e dividi-lo em colunas. Eu costumo criar trs colunas em uma tabela. Isto parece dar flexibilidade muito bom em como o produto final se transforma para fora no para mencionar que ele se encaixa em nosso layout cinco painel muito bem. Para criar as colunas e linhas que voc vai precisar de arrastar as linhas de grade em sua imagem. No Paint Shop Pro isso feito simplesmente arrastando o mouse da rgua para a imagem. Criar duas linhas verticais da grade na imagem. Iniciar a linha primeira grade logo direita da mo esquerda bar e trabalhar sua maneira transversalmente. Coloque sua linha de segunda grade vertical, diretamente para o esquerda da barra direita. Criar uma linha de grade horizontal logo acima da barra inferior. Agora criar

uma linha de grade horizontal logo abaixo da barra superior do grfico. Seus resultados deve ser semelhante Figura 3.6. Figura 3.6 Criando o primeiro conjunto de linhas de grade. 46 Captulo 3 Eu venci o Server, Let Me no Cdigo! Perceba como voc pode comear a ver um layout de tabela aparecendo. A parte superior da imagem torna-se uma linha e trs colunas. Assim, o layout da tabela geral em HTML ser parecido com este: <table border="0" cellpadding="0" cellspacing="0"> <tr> <td align="left" valign="top"> <img src="images/topLeft.gif" border="0"> </ td> <td align="left" valign="top"> <img src="images/center.gif" border="0"> </ td> <td align="left" valign="top"> <img src="images/topRight.gif" border="0"> </ td> </ Tr> </ Table> Voc no necessariamente tem que fatiar sua imagem como este que, existem vrias opes disponveis para voc. Uma alternativa seria a fatia a imagem de topo como um grfico grande assim que voc teria, ento, uma nica linha com uma nica coluna na mesma. Se voc precisava topo linha para abranger vrias colunas voc apenas colocar um colspan nos dados da tabela. C Aution Apenas uma fatia fora as imagens como imagens grandes se no houver uma grande quantidade de informaes de cor em si. Caso contrrio voc vai acabar com arquivos muito grandes e os tempos de carregamento muito longo. Agora voc deve ter todas as linhas de grade no lugar e ter uma boa idia de como criar a sua tabela. A nica coisa que resta a fazer antes de deixar o reino grficos e cabea de volta ao cdigo para cortar as imagens e guard-las em um formato que podemos usar. Para cortar fora uma imagem, basta clicar sobre a ferramenta Selecionar e arrastar o cursor entre as linhas de grade. A seleo deve presso para as linhas de grade. Depois de ter uma seo da imagem selecionado, copiar a seleo, iniciar uma nova imagem do tamanho da seleo que voc fez, e cole a seleo para a nova imagem. Depois de ter feito isso, voc vai precisar salvar a imagem como gif. ou um jpg.. Uma vez que temos um pouco de informao de cor que precisamos vamos utilizar o formato de arquivo. jpg por todas as razes descritas anteriormente.

Depois de ter cortado fora e salva todas as imagens, voc pode criar a tabela. Ao fazer layouts com imagens de recriar um olhar especfico, voc no quer ter qualquer fronteiras, cellpadding, cellspacing ou na sua mesa. Se voc tinha cellpadding ou cellspacing na sua tabela, ento quando voc coloca as imagens em que eles no butt-up uns contra os outros. Isto acabaria com o efeito que voc est tentando alcanar. Lembre-se, tudo que voc est tentando fazer criar um shell para o seu jogo, voc no est tentando mostrar alguma planilha do Excel onde voc precisaria de fronteiras e de preenchimento para torn-lo legvel. Grficos e HTML47 Uma vez criada, a tabela deve ser algo como o seguinte: Teste Uma vez criada, a tabela deve ser algo como o seguinte: <table border="0" cellpadding="0" cellspacing="0" width="750"> <tr> <td align="left" valign="top"> <img src="images/topleft.jpg" border="0"> </ td> <td align="left" valign="top"> <img src="images/topcenter.jpg" border="0"> </ td> <td align="left" valign="top"> <img src="images/topright.jpg" border="0"> </ td> </ Tr> <tr> <td align=left" valign="top"> <img src="images/leftbar.jpg" border="0"> </ td> <td align="left" JOGO valign="top"> GOES AQUI </ td> <td align=left" valign="top"> <img src="images/rightbar.jpg" border="0"> </ td> </ Tr> <tr> <td align="left" valign="top"> <img src="images/btmleft.jpg" border="0"> </ td> <td align="left" valign="top"> <img src="images/btmcenter.jpg" border="0"> </ td> <td align="left" valign="top"> <img src="images/btmright.jpg" border="0"> </ td> </ Tr> </ Table> Depois de tudo isto loucura voc vai acabar com algo que se parece com a Figura 3.7, quando voc bater com seu navegador. Figura 3.7 Resultados de criar sua tabela com grficos. 48 Captulo 3 Eu venci o Server, Let Me no Cdigo!

Grande, agora voc entender quando usar os diferentes tipos grfico e como lay out tabelas simples ou complexas. A nica coisa que resta ficar de entrada em seu jogo. Este o lugar onde formas vm dentro Forms dar o seu usurio uma maneira de entrar na informao que eles querem. Criando formulrios para entrada Criao de um formulrio para entrada bastante simples. como usar cada tag HTML outros. A forma essencialmente consiste em trs elementos: a forma em si, os campos do formulrio, e alguns elemento para enviar o formulrio. D uma olhada os atributos da tag Form. <form> </ form> Ao - Define o URL ao qual o formulrio lanado para o processamento. Pode ser um parente ou o caminho absoluto, ou um mailto para processar o formulrio via email. Enctype - Define o tipo de codificao MIME do formulrio. Isso geralmente usado somente quando o upload de arquivos para o servidor. Mtodo - Define como o formulrio vai ser recuperada pela pgina de processamento. Possvel valores para isso so POST (ir postar as informaes para o servidor) e GET (Vai colocar os pares nome-valor do formulrio na string de consulta). Name - Define o nome do formulrio. Nota Quando voc usa um formulrio nos exemplos neste livro que voc ir utilizar o valor para o mtodo POST. A principal razo para isto que quando voc usa o mtodo POST voc no est limitado na quantidade de dados que podem ser enviados para o servidor HTTP. O mtodo GET limita a durao mxima de uma URL, que atualmente 2048 bytes. 2048 bytes no um monte de informaes, voc poderia preencher esse up com apenas um poucos campos de texto. Para permitir que o usurio insira informaes que voc deve dar-lhes uma maneira de digitar essas informaes. HTML oferece controles de formulrios diversos para que voc possa fazer isso. <INPUT> Name - Define o nome deste elemento. Tipo - Define o tipo de elemento de entrada. Valores possveis para este atributo so TEXT, Button, CheckBox, RADIO, de Arquivo de Imagem, HIDDEN, RESET, enviar e PASSWORD. Width - Define a largura em caracteres do campo de entrada, se for do tipo texto, outras sbio define a largura do controle em pixels. Value - Define o valor inicial do campo de entrada, se for do tipo, rdio caixa de texto, ou arquivo. Esse atributo opcional, exceto para o elemento rdio.

Criando Formulrios para Input49 Verificados - Se esse elemento de tipo checkbox ou radio ele ir selecionar este elemento. Accept - Define os tipos de contedo deste elemento ir aceitar, se de tipo de arquivo. Readonly - Define este elemento para ser somente leitura. Tabindex - define a ordem em que este elemento ser selecionado se o usurio acessa a tecla Tab. <TEXTAREA> </ TEXTAREA> Name - Define o nome deste elemento. Linhas - Define o nmero de linhas em caracteres para esta caixa de rea de texto. Cols - Define o nmero de colunas em caracteres para esta caixa de rea de texto. Tabindex - Define a ordem em que este elemento ser selecionado se o usurio acessa a tecla Tab. Wrap - Define como o texto no elemento ser ajustado. Valores possveis so macios, duros, e desligado. Agrupamento de palavras suaves significa que o texto ser exibido com quebra ping mas apresentados sem retornos de carro. Texto significa rgido exibido com agrupamento de palavras e enviado com retornos de carro. Off significa quebra de linha desativada. H mais um controle que precisa ser coberto: o controle SELECT. Este um especial controle por dois motivos: 1) ela tem o seu prprio filho controles, opes chamadas, e 2) ele pode criar um drop-down ou uma caixa de lista. T ip A lista drop-down um elemento que permite que voc selecione um nico item de uma caixa drop-down. Uma lista caixa um elemento que permite que voc selecione vrios itens em uma lista. D uma olhada no exemplo de cdigo abaixo para ver como usar o controle SELECT. <SELECT Name="dropDownList"> <OPTION Elemento value="1"> 1 </ option> <OPTION VALUE="2" selecionada> Elemento 2 </ option> <OPTION VALUE="3"> Elemento 3 </ option> </ SELECT> <SELECT Name="listBox" size="4" multiple> <OPTION Elemento value="1"> 1 </ option> <OPTION Elemento VALUE="2"> 2 </ option> <OPTION VALUE="3"> Elemento 3 </ option> </ SELECT>

50 Captulo 3 Eu venci o Server, Let Me no Cdigo! D uma olhada rpida no primeiro elemento SELECT. apenas uma lista dropdown com trs valores nele. Para especificar os valores na lista drop-down que voc simplesmente usar a tag OPTION. A tag OPTION tem apenas dois atributos que podem ser usados: VALOR e selecionado. VALOR define o valor para esse elemento, e SELECIONADOS especifica o elemento que est inicialmente selecionado quando o formulrio carregado. O texto entre as tags OPO exatamente o que o usurio ver. No h muita diferena entre o primeiro elemento SELECT eo segundo SELECT elemento. As principais diferenas so o atributo SIZE eo atributo MULTIPLE. O Atributo SIZE diz a caixa de seleo quantos itens para mostrar de uma vez, enquanto o MULTIPLE atributo diz a caixa de seleo que o usurio tem permisso para selecionar vrios itens. L voc tem! Esses so todos os controles de formulrio que voc pode ter em uma forma para permitir que o usurio insira dados. S para ter certeza que voc entender como tudo funciona em conjunto, dar uma olhada no seguinte exemplo de cdigo: <HTML> <HEAD> <TITLE> Exemplo Form </ TITLE> </ HEAD> <BODY Bgcolor="#FFFFFF"> <FORM Name"frm_Example" action="#" method="post"> <b> Caixa de Texto </ b> <input type="text" name="txtSingleLine" width="25"> <br> <b> Text Area </ b> <textarea name="txtArea" rows="10" cols="15"> </ textarea> <br> <b> Check Box </ b> <input type="checkbox" name="chkBox" value="1"> <br> <b> Radio Button </ b> <input type="radio" name="rbButon" value="1"> <input type="radio" name="rbButton" value="2" checked> <br> Gota <b> de Down List </ b> <SELECT Name="dropDownList"> <OPTION Elemento value="1"> 1 </ option> <OPTION VALUE="2" selecionada> Elemento 2 </ option> <OPTION VALUE="3"> Elemento 3 </ option> </ SELECT> <br> <b> Box List </ b> <SELECT Name="listBox" size="4" multiple> <OPTION Elemento value="1"> 1 </ option> <OPTION Elemento VALUE="2"> 2 </ option> <OPTION VALUE="3"> Elemento 3 </ option> </ SELECT>

</ FORM> <p> isso a ... olhe que p !!!</ form> </ BODY> </ HTML> Conclusion51 Figura 3.8 O formulrio de exemplo. Agora voc deve ter algo parecido com a Figura 3.8. H muito mais que voc poderia fazer com esta forma para torn-la melhor e leia mais claramente. Um dos maiores passos que voc pode tomar para melhorar essa forma coloc-lo em uma tabela layout para que todos os seus rtulos e linha de elementos de formulrio para cima. Voc tambm pode organizar a forma elementos de forma diferente na tabela. Concluso Que era um monte de informaes para tomar polegadas Voc tem feito um pouco neste captulo e deve estar muito orgulhoso de si mesmo. Voc aprendeu a estrutura bsica do documento HTML, como formatar o texto, como trabalhar com tabelas para criar layouts, como usar grficos em um Pgina web, como usar grficos e tabelas em conjunto para criar um olhar realmente grande e sentir o seu jogo, e como criar um formulrio para tirar a entrada do seu usurio. No entanto, h uma ltima coisa antes de passar para combinar o seu HTML newfound conhecimento com PHP. Este captulo forneceu uma viso limitada do HTML, assim vivamente incentiv-lo a investigar HTML mais e aprender mais sobre ele. Use a Web e outros recursos para aprender sobre DHTML, JavaScript e CSS (Cascading Style Sheets). Todos destes elementos permitir que voc controle supremo da sua pgina Web. Agora sobre PHP! Esta pgina foi intencionalmente deixada em branco Digite o Linguagem Captulo 4 Diga Ol para PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,55 Captulo 5 Operadores, instrues e funes. . . . . . . . . . . . . . . . . . . . . . . . 0,77 PARTE II Esta pgina foi intencionalmente deixada em branco captulo 4 Diga Ol para PHP Criar uma pgina PHP Tipos de Dados Tipo Fundio Variveis Varivel Constantes Convenes de Nomeao

Funes de Variveis Funes para Cordas Expresses Regulares e Pattern Matching Processamento de formulrios com PHP W chapu PHP pode fazer por voc? PHP pode criar aplicaes dinmicas que podem ser entregues atravs da Internet. Em comparao, HTML s pode criar contedo esttico porque o navegador Web interpreta a pgina quando ela solicitada, o servidor no faz nada, mas enviar a pgina para o navegador. Mas quando uma pgina PHP solicitada no servidor, o prprio servidor processa o cdigo que est no delimitadores adequada e envia os resultados finais para o navegador Web. Isso permite que voc puxar o contedo diferente na pgina cada vez que solicitado. Isto muito til para voc, porque agora voc pode criar um interativo jogo que atualizado a partir da entrada do usurio. 55 56 Captulo 4 Diga Ol para PHP Criando uma pgina PHP Criao de uma pgina PHP muito semelhante criao de uma pgina HTML, mas h dois grandes diferenas. Primeiro, sua extenso pgina ser. Php em vez de. Html e, segundo, voc vai tambm tem um cdigo PHP. Para iniciar um bloco de cdigo PHP que voc use os delimitadores a seguir:? <Php, que ir iniciar o bloco de cdigo PHP e>, que terminar o bloco de cdigo PHP. D uma olhada na pgina PHP a seguir: <HTML> <HEAD> <TITLE> Pgina PHP Primeiro </ TITLE> </ HEAD> <BODY Bgcolor="#FFFFFF"> <? Php echo ("Este texto foi escrito por PHP"); ?> </ BODY> </ HTML> Nota Em ASP, os delimitadores para blocos de cdigo so <%%>. Se voc gosta destes melhor, voc pode configurar o PHP intrprete para us-los em vez de <? php?> delimitadores. Tudo isso faz simplesmente imprimir o texto "Este texto foi escrito por PHP" no navegador. Voc tambm pode imprimir tags HTML na declarao echo, assim: echo ("<p> <b> Este texto est em negrito e escrito por PHP </ b> </ p>");

Isto muito importante manter em mente. Por qu? Bem, se voc precisasse de algum cdigo do lado do cliente que as variveis usadas do lado do servidor, voc pode escrever o cdigo do lado do cliente com o PHP. Eu no vou cobrir qualquer das lnguas do lado do cliente como JavaScript, mas ainda importante para manter em mente. Outra nota muito importante o fim de uma linha de cdigo PHP. Termina com o ponto e vrgula (;). Se voc no tem isso, seu cdigo no ir funcionar corretamente. Se voc no tiver sido codificao em C / C + + ou Java, ento voc precisa adquirir o hbito de colocar ponto e vrgula no final do seu cdigo. Estes so os princpios de criar uma pgina PHP. Agora voc pode se mover ao longo dos tipos de dados disponveis para PHP. Dados Types57 Tipos de Dados PHP tem muitos dos tipos de dados que uma linguagem como C / C + + tem. Ele usa o bsico de trs tipos: integer, double, string e. PHP tambm usa constantes, matrizes e objetos. A nica parte do PHP que voc no declarar explicitamente o tipo para a varivel em PHP. A razo para isso que o PHP converte as variveis em tempo real para o tipo apropriado. Isto chamado de type juggling. Aqui est um exemplo de criao de variveis usando os trs tipos bsicos: $ Var1 = 1; / integer / $ Var2 = 2,0; / / double $ Var3 = "21"; / / string T ip Todas as variveis comeam com um $, e deve, ento, comear com um caractere no-numrico. uma boa prtica para declarar todas as suas variveis antes de us-los, embora isso no seja necessrio, faz que o cdigo um pouco mais clara para quem est lendo. Voc deve ter notado que o tipo Boolean no foi mencionado. Isso porque PHP no apoi-lo. Em vez disso, PHP avalia o verdadeiro eo falso, como C / C + + faz. Qualquer inteiro que igual a 0 vai avaliar para false e qualquer coisa que diferente de zero ir avaliar para true. Com strings, qualquer seqncia que est em branco ("") ir avaliar para false, e qualquer string com um caractere em que ir avaliar a verdade. Variveis em PHP tambm so case sensitive. Isso significa que US $ somevar no o mesmo que

$ SomeVar. No entanto, built-in funes e estruturas no so case sensitive. Ento, o eco mesmo que o ECHO. Para esclarecer o conceito de type juggling, confira os seguintes exemplos: $ Somevar = 1; / / Este definido como um inteiro. Somevar $ = 2,67; / / Agora definido para um casal. $ Somevar = "String 123A" / / Agora definida como uma string. $ X = 1; / / Este um nmero inteiro. / / Este ainda um nmero inteiro. Aps a adio do valor agora 126. $ X = 3 + $ somevar; Veja como isso funciona? Ele pode vir a calhar em alguns casos porque ele corta para trs no nmero de variveis que voc vai precisar. No mesmo sentido ele pode ficar muito louco se voc est tentando para depurar um cdigo e malabarismo tipos em voc. Quando o PHP strings tipo de malabarismo, ele segue algumas regras bsicas. Se a string comea com uma inteiro vlido, a string ser avaliada a esse valor. Se a string inclui um inteiro e no no comeo, a corda vai avaliar a 0. Uma seqncia ser lanado como um tipo de casal se e somente se o valor da string o dobro. Assim, a string "1.10" avaliar a um 58 Captulo 4 Diga Ol para PHP dupla com o valor de 1.10. Mas uma string com o valor de 88,5 por cento ser avaliada como um inteiro com um valor de 88. Fundio tipo PHP tambm oferece uma forma explicitamente fundido tipo de suas variveis. A principal razo para isso seria se voc precisasse certifique-se de que voc estava comparando um inteiro para um inteiro. if ((int) $ somvar1 = = (int) $ somevar2) { echo ("Estes so os mesmos"); } D uma olhada na Tabela 4.1 para os disponveis Tipo de lana. Variveis variveis PHP tambm suporta variveis variveis. Na maioria dos casos, as variveis tm valores dinmicos (ou seja, eles mudam). Mas variveis variveis tornar o nome da varivel dinmica. Variveis variveis no so muito prticas e criar um pouco de confuso, mas eles so muito legal. D uma olhada no que eles podem fazer: $ Somevar = "Gun1"; $ $ Somevar = "Gun2"; echo ($ Gun1) / / imprime Gun2 echo ($ $ somevar) / / imprime Gun2

Veja o que eu quero dizer? muito confuso, mas muito legal. Aqui est o que est acontecendo. O primeiro linha de cdigo cria uma varivel do tipo string chamada $ somevar. A segunda linha de cdigo usa o valor da primeira varivel ($ somevar) para criar o nome da nova varivel. Assim, a nova varivel chamada $ Gun1. Quando voc imprimir essas duas variveis que voc acabar com exatamente o mesmos resultados. Constantes Constantes so valores em seu aplicativo que nunca vai mudar. Por exemplo, em vez de incluindo o literal "Game My Cool" string, voc cria uma constante e de referncia a constante todo o seu cdigo. Isso faz com que o seu cdigo muito mais fcil de atualizar. Em vez de mudar centenas de linhas de cdigo onde "Game My Cool" existe, basta alterar a constante. Resultado (Int) (Inteiro) (Duplo) (Float) (Real) (Matriz) (Objeto) Tipo tabela 4.1 Casts Elenco tipo Lana a varivel para um inteiro. Lana a varivel para um inteiro. Lana a varivel para um casal. Lana a varivel para um casal. Lana a varivel para um casal. Lana a varivel para um array. Lana a varivel para um objeto. * Estas alterar o tipo de dados de uma varivel Naming Conventions59 Para definir uma constante em PHP voc usa a funo define (). define ("GAME_TITLE", "My Game Cool"); A funo define () tem dois parmetros. O primeiro o nome da constante, e os segundo o valor da constante. Para fazer referncia a esta constante posteriormente no seu cdigo voc simplesmente usar o que voc entrou como o primeiro parmetro. echo (GAME_TITLE); Voc tambm pode dizer se uma constante definida usando a definio (funo). Isso ir retornar um se a constante definida e 0 se o constante no definida. if (defined (GAME_TITLE)) { echo (GAME_TITLE);

} PHP tambm inclui vrias constantes internas que esto disponveis para voc. PHP tem definido TRUE como 1 e FALSE como 0. Voc pode recuperar a verso do PHP voc est usando, fazendo referncia o php_version constante. PHP_OS vai dizer o que OS PHP est sendo executado. Voc pode recuperar o arquivo que est sendo analisado eo nmero da linha atual, fazendo referncia as constantes _file_ e _line_. Alm disso, PHP d acesso a algumas constantes de relatrios de erros, tais como E_ERROR, E_PARSE, e E_WARNING. Voc tambm pode acessar diversas variveis que so predefinidos. Voc pode descobrir o que essas variveis so, usando a funo phpinfo (). Voc utilizou esta funo ao testar a sua instalao do PHP no Captulo 2. Convenes de nomeao Agora voc e eu sabemos que tipo PHP lana todos os de suas variveis. No entanto, eu ainda gostaria de prefixo minha variveis e formam os nomes dos elementos com o que eu vou us-los para. Por exemplo, se eu vou estar usando o elemento do formulrio como uma string eu prefixo o nome com str. Se eu fosse usar a varivel como um inteiro Gostaria de prefixo a varivel com um n. Voc no tem que fazer isso em tudo, mas faz a leitura cdigo muito mais fcil, especialmente com todo o tipo elenco malabarismo que o PHP faz. Ela ajuda a manter coisas retas. Se voc ainda no tem uma nomeao conveno para variveis, vem com um. Tabela Inteiro n f flutuar dupla dbl string str char c caractere sz srie conjunto arr classe C m_ Tabela 4.2 Prefixos Varivel Prefixo de dados Tipo varivel de membro 4.2 mostra as notaes eu uso com mais freqncia. 60 Captulo 4 Diga Ol para PHP Esses so apenas alguns dos prefixos que eu uso. Novamente, voc no tem que us-los em tudo, mas eu fao Recomendamos que voc venha com algum tipo de conveno de nomenclatura. Realmente ajuda para fora quando voc voltar a um pedao de cdigo depois de um tempo, ou quando algum est lendo seu cdigo.

Como voc pode ter notado, nada mais do que a notao hngara. Se voc estiver familiarizado com programao do Windows, ento voc provavelmente est muito confortvel com Hngaro notao. Funes para variveis Agora voc sabe quais os tipos de variveis PHP pode manipular e como usar a maioria dos -los. (Vou cobrir objetos e arrays mais tarde.) Agora, d uma olhada nas funes built-in que o PHP nos d para trabalhar com variveis. gettype () gettype () determina que tipo de dados de uma varivel. gettype () retorna um string. Possvel retornar valores para gettype () so: integer, double, string array, objeto e tipo desconhecido (e desde PHP 4: Boolean, recursos e NULL). if (gettype ($ somevar) == "string") { echo ($ somevar); } settype () settype () define explicitamente o tipo de dados de uma varivel. O tipo passado como uma string. Valores possveis so: integer, double, string, array ou objeto. Se o tipo sucesso definido, ento settype () retorna verdadeiro, caso contrrio ele retorna falso. If (settype ($ somevar, "inteiro") { echo ("definir o tipo de sucesso para um nmero inteiro"); } isset () isset () usado para determinar se uma varivel foi atribudo um valor. Se a varivel foi dado um valor, ento isset () retorna verdadeiro, caso contrrio ele retorna falso. if (isset ($ somevar)) { echo ("A varivel tem um valor"); } Funes para Strings61 unset () unset () usado para remover uma varivel, ou destru-lo. Isto essencialmente libera toda a memria que est associado a essa varivel. unset ($ somevar); if (isset (($ somevar)) { echo ("Este texto no ser impresso!"); } empty ()

empty () exatamente o oposto do isset () funo. Ele ir retornar true se a varivel no foi definido, e false se tiver sido definido. Isso seria o mesmo que dizer: if (! isset ($ somevar)) is_datatype () is_int (), is_integer (), e is_long () todos fazem exatamente a mesma coisa. Eles dizem para voc se a varivel em questo um inteiro. O tipo de dados dupla tambm tem trs funes: is_double (), is_float (), e is_real (). O is_string () funo lhe diz a varivel uma string, ea is_array () e is_object () funes funcionam da mesma caminho com os seus respectivos tipos de dados. $ Somevar = "esta uma string"; if (* is_string $ somevar)) { echo ("A varivel uma string"); } Funes para Cordas Compreenso de como manipular strings em PHP ir ajud-lo tremendamente. Permitir voc para validar entrada do usurio e extrair dados de arquivos de texto de uma maneira eficiente. PHP d voc um enorme nmero de funes para manipular strings, d uma olhada no Quadro 4.3. A maioria das funes so bastante auto-explicativo, como strlen (). Mas outros precisam de um pouco . pouco mais de ateno printf () e sprintf () so bons exemplos destes, vamos tomar uma anlise mais olhar para estas duas funes. 62 Captulo 4 Diga Ol para PHP Funes para String Descrio da funo addslashes string (string) Adiciona barras de escape para uma string. bin2hex string (string) cortar string (string) Remove o espao em branco direita de uma string. chr string (ASCII) chunk_split string ([chunklen], Inseres cadeia de acabar com a seqncia de caracteres em cada chunklen na [End]) string especificada. convert_cyr_string (string, string Converte a seqncia especificada de um caractere cirlico de, para) cypt (string) string DES-criptografa a string. echo void (string) Imprime a string especificada. explodir srie (string separador,) flush () void get_meta_tags (filename Array, [Use_include_path]) htmlentities string (string) Converte os caracteres da seqncia de caracteres especificada para o seu

htmlspecialchars string (string) Converte todos os caracteres especiais na string a sua implode (string delimitador, array) Usa o delimitador a unir-se cada elemento em uma matriz em uma string. ltrim string (string) Tiras o espao em branco do incio da string. md5 string (string) Calcula o hash MD5 da seqncia especificada. Insere nl2br (string) string a tag <BR> antes de toda a linha de quebra na string. ord (string) int a cadeia. parse_str void (string) vazio de impresso (string) Imprime a string especificada. printf (string, [arg]) void Mostra uma string formatada. quoted_printable_decode string (string) Converte uma string quoted printable para uma string de 8 bits. Quotemeta string (string) Escapa os caracteres meta na cadeia. Tabela 4.3 Retorno Tipo de dados Converte uma string binrio em hexadecimal ASCII. Retorna o caractere especificado para o cdigo ASCII. conjunto para outro. Divide a seqncia de caracteres especificada em um array. Libera tudo o que est esperando no buffer de sada. Retorna uma matriz de todas as tags <META> na arquivo especificado. Equivalente HTML. Equivalente HTML. Retorna o valor ASCII especificado da primeira letra do Analisa a string em variveis como se fosse uma seqncia de consulta. Funes para Cordas 63 Funes String (continuao) Descrio da funo rawurldecode string (string) Decodifica uma string URL-codificado. rawurlencode string (string) Codifica uma string para uma string URLcodificado. setlocale string (categoria, local) Define as informaes de localizao de funes no similar_text (string1, string2, int Calcula a similaridade entre string1 e string2. [Por cento]) string (string) soundex sprintf (formato, [args]) string Retorna uma string formatada. str_replace (string, Substitui todas as ocorrncias do padro com substituio string de substituio), na string. strchr (string1, string2) string strcmp int (string1, string2) Compara string1 string2 contra. strcpsn int (string1, string2) Retorna o nmero de caracteres no incio de string1 que no corresponde a nenhum dos personagens em string2.

strip_tags string (string) Tiras todas as tags HTML e PHP a partir do especificado string. stripslashes string (string) Tiras de todas as barras de escape caracter da cadeia. strlen int (string) strpos (stirng1, string2) int strrev string (string) strrpos (string1, string2) int strstr (string1, string2) string strtok (sring1, string2) string strtolower string (string) strtoupper string (string) strtr string (string, de, para) substr (string, incio, [length]) Retorna a cadeia de caracteres na cadeia desde o incio especificado ponto. ucfirst string (string) ucwords string (string) Tabela 4.3 Retorno Tipo de dados categoria especificada. Calcula a chave soundex para a cadeia. Encontra a primeira ocorrncia de string2 em string1. Retorna o comprimento da corda em caracteres. Encontra a primeira ocorrncia de string2 em string1. Retorna a seqncia especificada na ordem inversa. Localiza a ltima ocorrncia de string2 em string1. Encontra a primeira ocorrncia de string2 em string1. Tokeniza string1 em segmentos separados por string2. Converte todos os caracteres na string para minsculas. Converte todos os caracteres na string para maiscula. Substitui todas as ocorrncias de partir na cadeia com a. Converte o primeiro caractere da string para maisculas. Converte o primeiro caractere de cada palavra em maisculas. 64 Captulo 4 Diga Ol para PHP printf () e sprintf () Cada uma destas funes produz uma string formatada. Printf () imprime o string formatada para a pgina, enquanto sprintf () retorna a string formatada sem imprimi-lo. Tomar uma olhada na funo sprintf (): string (string formato, misturado [args] ...) sprintf; Nota Em PHP, printf () e sprintf () funcionam como printf () e sprintf () em C / C + +. A cadeia de formato indica como cada um dos argumentos deve ser formatado. H 10 diferentes argumentos de formatao. d inteiro decimal b Binary integer

o inteiro octal x inteiro hexadecimal com letras minsculas X inteiro Hexadecimal com letras maisculas Personagem c cujo cdigo ASCII o valor inteiro do argumento f Duplo e duas vezes usando a notao exponencial s String Um sinal de porcentagem% literal A cadeia de formato usa esses argumentos para criar uma string. Por exemplo: / / A linha a seguir obtm uma string para posterior impresso $ StrFormatted = sprintf ("Voc disparou sua arma% d vezes", $ numFired); Veja como isso funciona? Basta criar uma string, e depois colocar no argumento apropriado onde voc quer uma de suas variveis para aparecer. Todos os argumentos comeam com um sinal%. Ento, para imprimir o sinal de porcentagem literal, a seqncia ficaria assim: printf ("Este de 40 %%"); Note como o sinal de porcentagem no tem quaisquer argumentos adicionais. Voc tambm pode adicionar preenchimento ou formatao de nmeros para a seqncia. O delimitador para adicionar padding um nico quote (') e, em seguida, o elemento de preenchimento especificada. Por exemplo, para adicionar uma seqncia de perodos a uma linha depois de uma srie que voc use '.' como argumento padding. Argumentos so de preenchimento no exigido, e por padro, eles so um nico espao. D uma olhada no exemplo de cdigo abaixo para ver como usar o argumento de padding. "O nmero, ttulo $, $," printf ("%'.-% 80.80s "0,3% d s <BR>"); Funes para Strings65 D uma olhada os argumentos para esta cadeia. Ele consiste de trs directivas: uma string, um inteiro, e uma corda. O primeiro argumento,% ',-80.80s, mostra que os perodos devem ser utilizados, o hfen indica a seqncia a ser alinhados esquerda, e estabelece o mnimo eo mximo larguras de 80. O segundo argumento produz um direito-justificado, perodo acolchoada, integer elemento com uma largura mxima de trs caracteres. O argumento final simplesmente uma string que voc especificar para colocar em um <BR> HTML. Se voc tivesse especificado os valores para o ttulo e variveis nmero, a sada seria algo parecido com isto: Apndice .................... 456 Anterior, mencionei a possibilidade de formatar nmeros tambm. Este o mesmo princpio do estofamento em uma string. Voc simplesmente especifica quantos dgitos voc gostaria de ver. Se voc especificar uma largura para um nmero inteiro, voc ver apenas caracteres que muitos, e se voc especificar uma largura

para um flutuador que ir especificar quantos dgitos aparecero aps o ponto decimal. D uma olhada na amostra de cdigo seguinte: Someint $ = 4,356; $ Dlares = 20; printf ("% 3d% .2 f", $ someint, $ dlares); / / A sada se parece com 435 20,00 No exemplo acima, os limites de 3d% que o argumento de imprimir trs personagens. O% .2 f argumento especifica que um nmero de ponto flutuante, e que ela deve imprimir mais dois caracteres depois do ponto decimal. Se isso no for suficiente controle sobre sua formatao de nmeros, PHP oferece-lhe um nmero funo de formatao chamado number_format (). cadeia number_format (float num, int preciso, string dec_point, string thousands_sep) O number_format () funo pode levar at quatro argumentos e retorna um string. Olhar para o seguinte exemplo: $ Num = 987654321.1234567; echo (number_format ($ num)); echo (number_format ($ num, 2)); echo (number_format ($ num, 7, chr (44), "")); A sada do cdigo anterior parecido com este: 987654321 987,654,321.12 987 654 321,1234567 Agora que voc tem controle total sobre a formatao ea maioria das funes para manipulao de string, eu vou passar para expresses regulares. 66 Captulo 4 Diga Ol para PHP Expresses Regulares e Pattern Matching Expresses regulares so usados para fornecer strings avanado e manipulao. A padro em uma expresso regular nada mais do que um conjunto de caracteres que descreve o natureza de uma string. Por exemplo, voc poderia encontrar uma string literal ou validar o que a entrada do usurio digitou foi realmente um endereo de e-mail. Expresses regulares tm uma mini-linguagem de seus prprios. Uma vez que voc aprende, voc pode aplic-la a muitas outras lnguas, alm de PHP. Voc vai usar expresses regulares com moderao em seus jogos. Maior parte do tempo ser para simplesmente validar que a entrada inseriu na forma que voc espera-lo, o que muito importante, no ? Examine o padro de expresso regular a seguir: ^ Criar

O carat (^) neste padro diz ao motor de expresses regulares que s deve corresponder este padro no incio de strings. Assim, a string "Criar um novo personagem" se reuniria os critrios para o jogo, mas "Para criar um novo personagem" no satisfazem os critrios. Expresses regulares tambm oferecer-lhe um sinal de dlar personagem ($) para comparar strings que terminam com o padro. Se voc pegar o exemplo anterior de ^ criar e transform-la na string criada $, ento ele no mais encontrar uma combinao em "Criar um novo personagem", mas seria encontrar uma correspondncia na "Seu personagem foi criado." E se voc combinar o carat (^) eo sinal de cifro ($) juntos assim: ^ Criar $ agora voc pode corresponder a uma palavra exata. Assim, "Para criar um novo personagem" seria agora atender as critrios do padro. Voc no est limitado a correspondncia em personagens literal quer. Voc pode Tambm jogo em caracteres especiais, como uma nova linha ou uma guia. Para fazer isso, voc poderia simplesmente use o caractere de escape adequada, na sua string. Por exemplo, para combinar com um guia na incio de uma linha que voc faria isso: ^\T Para combinar em uma nova linha, um retorno de carro, ou um avano de formulrio voc usaria o respectivo caracteres de escape \ n, \ r ou \ f. Para sinais de pontuao voc tambm escapar do carter; por exemplo, um perodo literal seria \. e uma barra invertida literal seria \ \. At agora voc sabe como combinar literais apenas, mas voc precisar de uma maneira de descrever o padro mais frouxamente. Voc pode descrever esse padro com classes de personagens. Criando um personagem classe muito simples: voc simplesmente colocar o contedo entre colchetes. Por exemplo, se voc queria corresponder a todos os vogais que voc criaria uma classe de personagem que se parece com isto: [AaEeIiOoUu] Expresses Regulares e Padro Matching67 Voc tambm pode especificar intervalos em classes de seu personagem usando um hfen, assim: [Az] / / encontrou nenhum letra minscula [AZ] / / encontrou nenhum letra maiscula [0-9] / / encontrou nenhum dgito [\ F \ t \ r \ n] / / partida qualquer espao em branco Digamos que voc queira criar uma classe de caracteres de proibir um dgito de ser o primeiro caractere

em uma string. Para fazer isso voc poderia usar novamente o carat (^). Dentro de uma classe de personagem do carat (^) significa "no" em vez de o incio da string. ^ [^ 0-9] [az] $ Isso ir corresponder a qualquer strings como "all23" ou "U47". Mas no vai coincidir com strings como "7all" ou "8teen". PHP tem diversas destas classes de personagens j construdos dentro D uma olhada na Tabela 4.4. Para permitir maior flexibilidade em seus padres, voc pode usar chaves ({}) para coincidir com mltiplos casos de caracteres ou classes de personagens. Ento, para corresponder exatamente x nmero de ocorrncias do ano anterior carter ou carcter de classe que voc faria algo como isto: ^ A {1,5} $ / / jogos: a, aa, aaa, aaaa, ou aaaaa Character Classes PHP Carter Descrio da classe [[: Alpha:]] [[:: Digit:]] Corresponde a qualquer dgito. [[: Xdigit:]] Corresponde a qualquer dgito hexadecimal. [[: Alnum:]] Corresponde a qualquer carta ou qualquer dgito. [[: Space:]] [[: Upper:]] [[: Lower:]] [[: Punct:]] Corresponde a qualquer sinal de pontuao. Tabela 4.4 Corresponde a qualquer letra. Corresponde a qualquer espao em branco. Corresponde a qualquer letra maiscula. Corresponde a qualquer letra minscula. * Estas classes so definidas em PHP e pode no funcionar corretamente se voc tentar us-los em outras lnguas. Voc tambm pode encontrar uma string com x ou mais ocorrncias de um caractere ou classe de personagem. Para exemplo: ^ B {2} Isso ir corresponder a uma corda com dois ou mais b nele. Por isso, iria encontrar um jogo em bbooo, ou bbblood, etc H cinco personagens mais especiais em expresses regulares voc deve saber sobre. Eles so: perodo. ponto de interrogao? * estrelas mais +

tubos | Teste Captulo 70 4 Diga Ol para PHP Os resultados do exemplo anterior so: ruts@datausa.com um endereo de e-mail vlido Nome de usurio: ruts Domnio: datausa Nvel superior: com Ento o que fazer exatamente isso? Depois ereg () verificaram o padro, a string original foi armazenada no primeiro ndice do array. Ento a primeira substring parnteses do padro armazenadas no segundo ndice da matriz. Primeira substring entre parnteses, claro, ser o nome de usurio, ruts. Em seguida, ele correspondeu ao smbolo "@" e passou a corresponder a terceira argumento no padro. Depois de ter encontrado uma correspondncia para o terceiro argumento que criou outra ndice no array contendo o nome de domnio, datausa. Finalmente, correspondeu ao nvel mais alto nome de domnio, com, e criou o ndice final do array. ereg () tambm tem uma irm chamada funo eregi (). eregi () funciona exatamente da mesma ereg () mas ignora, quando se atenta para os padres correspondentes. Agora dar uma olhada nas duas funes para procurar e substituir strings: ereg_replace () e eregi_replace (). Ambas estas funes para pesquisar um determinado padro e substituir todos os ocorrncias desse padro com a nova string que voc especificar. eregi_replace () faz exatamente a mesma coisa que ereg_replace (), mas no case sensitive. Cada uma destas funes recebe trs argumentos: cadeia ereg_replace (string, troca de string, fonte string); Voc especificar um padro que voc gostaria de procurar um substituto para quaisquer ocorrncias de que o padro, ea fonte que voc est procurando. Estas funes no tm uma argumento de matriz opcional, mas eles tm algo semelhante. Qualquer substring entre parnteses no padro sero armazenadas em um buffer que voc pode acessar referenciando-o como \ \ 1. L So nove faixas que voc pode acessar, (\ \ 1 ... \ \ 9). D uma olhada no seguinte exemplo: $ StrSource = "Games so grandes"; $ StrModified = ereg_replace ("G (AME) s", "g \ \ 1S", $ strSource); echo ($ strModified); Este exemplo assume a string, "Games so grandes", e procura por um padro de "G (AME) s", onde se encontra uma correspondncia no incio da string e substitui o jogo com "jogos",

e retorna a string modificada. Os resultados assim: jogos so grandes Voc pode fazer referncia a "ame" personagens usando o \ \ 1, porque uma substring entre parnteses. Se o padro foram quebradas como, "G (am) (es)", depois "am" seria referenciado como \ \ 1, e "es" seria referenciada como \ \ 2. Processamento de formulrios com PHP71 A quinta e ltima funo que usa expresses regulares o split () funo. O split () funo de busca em uma palavra de origem de um padro e quebra a cadeia de origem em uma matriz com base em jogos do padro. A grande utilidade da funo split se voc est leitura de uma lista separada por vrgulas e necessidade de quebrar as cordas para que possa trabalhar com eles. $ StrSource = "e1, d4, e5, e6"; $ Arr = split (",", $ strSource); echo ("$ arr [0] <br> $ arr [1] <br> $ arr [2] <br> $ arr [3]"); O exemplo acima divide a string de origem no carter literal "," e cria uma matriz com cada seqncia em seu prprio ndice. Os resultados assim: e1 d4 e5 e6 Ao contrrio de ereg_replace () e eregi_replace, split () tem um terceiro argumento opcional. Voc pode especificar um limite de quantos elementos voc gostaria de dividir. Aqui a separao completa funo: dividir array (cadeia de caracteres padro fonte string,, int [limite]); Formas de processamento com PHP No captulo 3, voc aprendeu como criar um formulrio com HTML. Agora hora de aprender para obter os dados de forma que voc possa us-lo. Obter os dados em PHP muito fcil. Quando um formulrio enviado para o servidor usando um mtodo de GET, cada elemento do formulrio cria uma varivel PHP. Quando um formulrio enviado com um mtodo de POST, voc precisa acessar a matriz global $ _POST PHP. Quando usar GET, o valor da varivel criada o contedo do elemento de formulrio. Ao usar o POST, o ndice para a matriz o elemento do formulrio nome. Este o lugar onde o valor do elemento de formulrio est armazenado. D uma olhada no seguinte exemplo: <-! Htmlform.php -> <HTML>

<HEAD> <TITLE> Processamento de formulrio de exemplo </ TITLE> </ HEAD> <BODY Bgcolor="#FFFFFF"> <FORM Name="frmSample" action="htmlform.php" method="post"> <b> Qual o nome do seu personagem? </ b> <br> <input type="text" name="strCharacter"> 72 Captulo 4 Diga Ol para PHP <input type="submit" value="Submit"> </ FORM> <? Php if (isset ($ _POST ["strCharacter"])) { echo ("Welcome",. $ _POST ["strCharacter"]. "!"); } ?> </ BODY> </ HTML> Se voc estava usando o mtodo GET, o exemplo ficaria assim: <-! Htmlform.php -> <HTML> <HEAD> <TITLE> Processamento de formulrio de exemplo </ TITLE> </ HEAD> <BODY Bgcolor="#FFFFFF"> <FORM Name="frmSample" action="htmlform.php" method="get"> <b> Qual o nome do seu personagem? </ b> <br> <input type="text" name="strCharacter"> <input type="submit" value="Submit"> </ FORM> <? Php if (isset ($ strCharacter)) { echo ("Welcome",. $ _REQUEST ["strCharacter"]. "!"); } ?> </ BODY> </ HTML> Observe que para cada uma dessas formas uma ao especificada. Voc disse o formulrio para ir para "Htmlform.php" para processamento. O formulrio apontando para voltar para a mesma pgina em que vive para processamento, mas voc poderia ter apontou-a para uma pgina diferente se voc quisesse. Os resultados da este exemplo deve ser semelhante Figura 4.1. Na maioria das vezes voc ir sempre apontar a pgina de volta para si mesmo para processamento. Desde que voc est desenvolvimento de jogos, voc precisa de quase tudo para ocorrer em uma pgina. H excees

para isso, no entanto, por exemplo, se voc estivesse desenvolvendo um Massive Multiplayer On-line Game (MMORPG), que discutirei no Captulo 12, voc usaria vrias pginas para processo de construo de unidades e estruturas. Uma boa regra de ouro para desmantelar formas , "faz-lo em sees." Isto significa acabar com o seu jogo em sees. Se voc est simplesmente Processamento de formulrios com PHP73 Figura 4.1 Exemplo de formulrio de processamento utilizando o mtodo GET. levando-se em coordenadas para um jogo de xadrez, ento todo o processamento deve ser feito em um pgina. Mas se voc estiver indo para uma seo de seu jogo para gerenciar unidades e um completamente seo diferente de gerir edifcios, ento a sua unidade de processamento inteiro deve ser feito em uma pgina e todo o seu processamento edifcio deve ser feito em outro. Basicamente, mantenha tudo modular. Agora, d uma olhada em um exemplo mais complexo que voc possa ver como processar todos os da forma elementos. <-! Allformelements.php -> <HTML> <HEAD> <TITLE> Processing Elements Todos Form </ TITLE> </ HEAD> <BODY Bgcolor="#FFFFFF"> <FORM Name="frm_Example" action=" allformelements.php" method="post"> <table border="0" cellpadding="2" cellspacing="0"> <tr> <td align="left" valign="top"> <b> nome do personagem </ b> </ td> <td align="left" valign="top"> <input type="text" name="strCharacter"> </ td> </ Tr> <tr> <td align="left" valign="top"> Valor <b> A partir de Ouro </ b> </ td> 74 Captulo 4 Diga Ol para PHP <td align="left" valign="top"> <select name="dblGold"> <option value="1000"> 1000 </ option> <option value="2000"> 2000 </ option> <option value="3000"> 3000 </ option> </ Select> </ Td> </ Tr> <tr> <td align="left" valign="top"> <b> Comeando Localizao </ b> </ td> <td align="left" valign="top"> <input type="radio" name="strLocation" value="mountains"> Montanhas

<input type="radio" name="strLocation" value="plains" checked> Plains <input type="radio" name="strLocation" value="swamp"> Pntano </ Td> </ Tr> <tr> <td align="left" valign="top"> <b> Equipamentos </ b> </ td> <td align="left" valign="top"> <input type="checkbox" name="nEquipmentID[]" value="1" Espada checked> <input type="checkbox" name="nEquipmentID[]" value="2" Chain Mail checked> <input type="checkbox" name="nEquipmentID[]" value="3" checked> Escudo <input type="checkbox" name="nEquipmentID[]" Bow Cruz value="4"> <input type="checkbox" name="nEquipmentID[]" value="5"> Arrows </ Td> </ Tr> <tr> <td align="left" valign="top" colspan="2"> <input type="submit" value="Submit"> </ td> </ Tr> </ Table> </ FORM> <? Php if ($ _POST) { StrCharacter $ = $ _POST ['strCharacter']; DblGold $ = $ _POST ['dblGold']; StrLocation $ = $ _POST ['strLocation']; echo ("Voc escolheu: <BR> $ strCharacter <BR> $ dblGold <BR> $ strLocation <BR>"); Listvals $ = $ _POST ['nEquipmentID']; Processamento de formulrios com PHP75 for ($ i = 0; $ i <count ($ _POST ['nEquipmentID']);$ i + +) echo "ID Equipamento $ i =" $ listvals [$ i] "<br> \ n"..; } ?> </ BODY> </ HTML> Os resultados devem parecer com a Figura 4.2. H uma nuance da seguinte forma: a nomeao de as caixas de seleo. Observe como os nomes so todos iguais e no final do nome, "nEquipmentID", eu tenho dois colchetes []. Isto simplesmente para fazer este elemento forma uma matriz. Sem os dois colchetes no final da nome do elemento forma voc no seria capaz de acessar os elementos do formulrio corretamente. Outros Fora isso, voc acessar a outros elementos de formulrio como discutido antes, usando a varivel global

$ _POST. Para acessar os elementos individuais da caixa de seleo ", nEquipmentID", uma matriz chamado "listvals" criado, solicitando o elemento de formulrio apropriado. Ento voc passa por cada elemento da "listvals" array e imprimir o valor. Voc vai aprender mais sobre matrizes no Captulo 6. Figura 4.2 exemplo forma de processamento utilizando o mtodo POST. 76 Captulo 4 Diga Ol para PHP Concluso Muito legal, hein? Bem, bem, eu tenho certeza que ele poderia ser muito mais frio, mas no se preocupe, voc est vai fazer um monte de coisas legais no futuro prximo. Next up voc estar aprendendo como controlar o fluxo do seu cdigo, os operadores bsicos que voc tem acesso, e como fazer todo o seu cdigo modular usando funes. Agora provavelmente seria um bom momento para voc fazer uma de suas prprias formas e processo de os dados usando todo o seu conhecimento recm-descoberto. Se voc ainda estiver sentindo um pouco abalada com tudo desta, no se preocupe, a prtica torna perfeito. Acredite, voc vai ter muita prtica. Mos obra! captulo 5 Operadores, Declaraes, e Funes Operadores Aritmticos Operadores Logic Operadores bit a bit Instrues condicionais Loops Funes Arquivos Incluindo Eu n Neste captulo voc vai aprender os operadores PHP, como criar expresses lgicas em PHP para controlar o fluxo do seu cdigo, e como criar funes para ajud-lo em cdigo reutilizao. Este o ltimo dos princpios bsicos do PHP. Aps isso, voc estar pronto para criar a sua primeiro jogo! Operadores Um operador usado para determinar um valor atravs da realizao de uma operao em um ou mais valores. Sem operadores voc no seria capaz de comparar os valores das variveis, execute operaes matemticas, strings concatenar, manipular bits, ou mesmo atribuir um valor a uma varivel. Que no deixa muita coisa que voc pode fazer, no ? Nota

Operadores em PHP so semelhantes aos de outras linguagens como C / C + +. 77 78 Captulo 5 operadores, instrues, e Funes Operadores Aritmticos Tabela 5.1 Operadores Aritmticos Assim como todas as outras linguagens de programao, PHP usa o operador matemtico bsico operadores (ver Tabela 5.1). + Voc provavelmente j viu tudo isso antes; o nico que pode ser estranho para voc * o operador mdulo. Todos os modulus o / Operador% faz calcular o restante do uma operao. Por exemplo: $ X = 7% 2; / / Set $ x para 1 Operao realizada Adio Subtrao Multiplicao Diviso Mdulo No exemplo acima, 7 dividido por 2 eo restante, que neste caso 1, definida como o valor da varivel $ x. Como voc deve ter notado por agora, voc atribui as variveis com o sinal de igual. Isso chamado o operador de atribuio. Digamos que voc queria criar uma varivel com um valor negativo de 1. Aqui est como voc fazer isso: $ X = -1; Todos bastante simples? Agora, d uma olhada no expresses utilizadas para comparar valores. Operadores de Comparao Operadores de comparao so usados para testar uma condio. Os resultados de uma operao de comparao ser sempre um valor booleano ou seja, verdadeiro ou falso. $ I = 350; echo ($ i == 250); Aqui uma varivel, $ i, definido como um nmero, em Neste caso 350. Ento a varivel comparado Tabela 5.2 Operadores de Comparao para outro valor, 250. Porque os dois Operao val-Operador Interpretada ues no so iguais, a exemplo imprime falsa == para a tela. D uma olhada na Tabela 5.2 para um! = lista de todos os operadores de comparao dis-<> capaz de PHP. < > <= Eu gostaria de salientar uma palavra de cautela aqui: ao usar o equals (==) operador ser

cuidado para se certificar que voc use dois igual a> = igual a No igual a No igual a Menor que Maior do que Menor ou igual a Maior ou igual a Operators79 sinais. Caso contrrio, a varivel ser atribudo ao que voc pensou que estava comparando que ele. $ I = 25; / / Isso vai atribuir 350 para o / / Varivel $ i e sempre ser verdadeiro if ($ i = 7) echo (" igual a 7"); / / Isto ir imprimir cada vez A atribuio de uma declarao, se perfeitamente legal em PHP. No exemplo acima, em vez de verificar o valor da varivel com 7, ela simplesmente atribuda a 7 de valor para a varivel e avaliados como true, dando os resultados que foram totalmente inesperados. Eu no posso forar bastante a importncia do uso adequado dos operadores. Uma maneira muito simples de resolver o problema seria colocar o valor literal na mo esquerda lado do operando, assim: if (350 = $ i) Isso ir gerar um erro porque o valor no pode ser atribudo a um literal. No entanto, voc ainda tenho o mesmo problema se voc est comparando duas variveis. Se voc encontrar o seu cdigo no trabalhar como voc pensou que seria, verifique se voc est usando o operador adequado. Operadores lgicos Os operadores lgicos so usados para combinar con Tabela-5.3 Operadores lgicos es, por isso vrias expresses podem ser avaliadas em uma nica instruo. D uma olhada na Operao Operador Interpretada Tabela 5.3 para uma lista completa da lgica & & E operadores |. | Ou Observe que h dois operadores para a "Lgico e" e os operadores "ou lgico". Estes operadores dar o resultado final mesmo mas tm diferentes ordens de execuo. O e ou xor ! E

Ou Ou exclusivo No ampersands dupla ser executado antes do "E", e os tubos de duplo ser executado antes do "ou". Eu recomendo escolher um ou o outros e us-lo de forma consistente. No s este vai ajudar a legibilidade do cdigo, ele vai tambm ajud-lo quando tentar resolver problemas que possam ocorrer. 80 Captulo 5 operadores, instrues, e Funes S para ter certeza de que tudo claro, dar uma olhada em alguns exemplos: $ X = 2; $ Y = 5; $ Z = 0; if ($ x == 2 & & $ y == 5 & & $ z == 0) { echo ("Este texto ser impresso, porque todas as declaraes avaliar a verdade."); } Neste exemplo, a declarao vai imprimir na tela, pois todas as declaraes avaliar a verdade. Se qualquer uma dessas declaraes avaliado para false, a string nunca iria imprimir para a tela. if ($ x == 3 | | $ z == 0) { echo ("Este texto ser impresso para o navegador"); } O texto neste exemplo ser impresso para o navegador, mesmo que a instruo $ x == 3 avalia para false. A razo para isto o lgico ou operador, se uma das condies avaliada como verdadeira, a declarao inteira verdadeira. if (($ x == 2 | | $ z == 3) xor ($ x == 5 | | $ y == 3) xor ($ x == 1 | | $ z == 1)) { {echo "Esse texto ser impresso para o navegador); } Este exemplo um pouco mais complexa do que os exemplos anteriores. Cada entre parnteses primeira expresso avaliada para determinar se ela verdadeira ou falsa. Uma vez determinada a ser verdade ou falso, esse valor usado na instruo xor geral. Porque a primeira declarao nesse expresso avaliada como verdadeira, toda a expresso avaliada como verdadeira, e por sua vez, o texto impresso para o navegador. E basicamente isso para os operadores lgicos. Em seguida, voc ter um olhar para o operador ternrio. Operador Ternrio

Todos os operadores lgicos que acabaram de ser discutido so considerados operadores binrios, o que significa que eles desempenham a sua lgica usando dois operandos. O operador ternrio especial. Ele usa trs operandos para realizar uma nica operao. O operador ternrio usado para rpida de uma linha se declaraes. Voc pode ter visto isso antes, mas se parece com isso: $ X == 0? echo ("sim"): echo ("no") 81 operadores A primeira das trs partes do operador ternrio uma condio Boolean antes da pergunta interrogao (?). A segunda das trs partes uma afirmao entre os? E do clon (:), Que executado se a condio na frente do avaliado como verdadeiro, e um valor depois? o clon, que retornado se a condio for avaliada como falsa. Nota Para aqueles de vocs que esto familiarizados com C / C + +, o operador ternrio em PHP age exatamente como o operador ternrio em C / C + +. Como mencionado anteriormente, o operador ternrio um atalho para uma instruo if ... else. D uma olhada em como o seguinte, se ... instruo else convertido para o uso do operador ternrio: if ($ nKingStatus == 1) { echo ("check"); } outro { echo ("= ir para a" $ de "", $ para...); } / / Agora, a mesma declarao usando o operador ternrio $ NKingStatus == 1? echo ("check"): echo ("move =" $ de "", $ para...) Veja como muito mais curto que isso? Voc obtm os mesmos resultados de uma linha de cdigo que voc fez a partir de quatro linhas de cdigo. No entanto, o operador ternrio no faz muito para facilitar a leitura, assim completamente at voc a forma como voc gostaria de us-lo. H uma pequena coisa que eu gostaria de mencionar. Como voc deve ter notado nos ltimos captulos e no exemplo anterior, eu coloquei um ponto (.) entre as cordas na exemplo. Tudo isso faz juntar as cordas juntos. O perodo, quando usado no meio strings, chamado de operador de concatenao de string. Nota Concatenao apenas uma palavra chique para se juntar, ou adicionando, dois objetos.

Vamos passar para os operadores bit a bit e depois para alguns atalhos atribuio de varivel que vai lhe poupar algum digitao. 82 Captulo 5 operadores, instrues, e Funes Operadores bit a bit Antes de entrar os prprios operadores, Eu quero lhe dar uma pequena lio de representao binria, e como o computador armazena nmeros na memria. Caso contrrio nada do que eu estou indo mostrar-lhe vai fazer sentido. Um nmero binrio usa apenas 1s e 0s compem um nmero. Cada 1 e 0 referido como um bit. Supe-se que ao armazenar um 32-bit inteiro na memria que a utilizao de quatro bytes. H 8 bits para um nico byte. Utilizao esses 1s e 0s voc pode criar qualquer nmero. D uma olhada na Tabela 5.4. D uma olhada na Figura 5.1 para ver como voc contagem de um nmero binrio. Como voc pode ver, voc realmente contar da direita para a esquerda, passando por mltiplos de 2. Assim, o primeiro pouco sobre o lado direito 1, ento o prximo 2, depois 4, 8, 16 e assim por diante. Agora que voc tem uma compreenso bsica do representaes binrias, d uma olhada no operadores bit a bit voc pode usar em PHP. H seis operadores bit a bit todos juntos, quatro dos eles permitem que voc compare bits, e dois deles permitem que voc mudar os bits tanto para a esquerda ou para a direita. D uma olhada na Tabela 5.5 para todos os seis operadores bit a bit. Uma das maiores razes para entender operadores bit a bit de que eles so usados todos os tempo na programao de jogos de tabuleiro. No prximo captulo voc ir criar um jogo de xadrez que usa placas-bit. Se voc no eram claros sobre como usar operadores bit a bit, voc no entender como o programa vai funcionar. Nmero binrio Representaes Binrio Integer nmero 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7

1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 Tabela 5.4 Correspondente * Para simplificar, usei apenas 4 bits, ou 1 byte, para representar nmeros neste exemplo. Figura 5.1 Como contar nmeros binrios. Operators83 Operadores bit a bit Nome do operador E operador E 11 (1011) e 13 (1101) = 9 (1001) | Ou operador de 11 (1011) | 13 (1101) = 15 (1111) ^ Exclusiva ou 11 (1011) ^ 13 (1101) = 6 (0110) No operador ~ ~ 11 (1011) = -12 (1000000000001100) >> Shift bits para a direita por 11 (1011)>> 2 = 2 (0010) <<Shift bits para a esquerda por 11 (1011) <<2 = 44 (101100) Tabela 5.5 Exemplo rpida Tudo o que os operadores bit a bit fazer realizar operaes anlogas lgica e, ou, xor, e no em cada conjunto de bits. Imagine que os bits esto alinhados um em cima do outro. Quando voc "e" dois bits juntos, se ambos forem 1 (true & & true), o resultado verdadeiro, ou o bit lgico 1. D uma olhada na Figura 5.2. Veja como o bit menos significativo em ambos os nmeros definido como 1. Quando eles so "anded" em conjunto o resultado verdadeiro, ou 1. Mas quando os bits seguintes so "anded" juntos, o resultado falsa, ou 0, porque ambos os bits so falsos, para comear. Agora fazer a mesma coisa exata com o "|" Operador para ver as diferenas. Figura 5.3 mostra os resultados. Neste exemplo voc pode ver que o "|" operador avaliada como verdadeira qualquer momento um pouco verdade aparece no valor. Assim, quando o bit menos significativo em ambos os nmeros (1 e 1) "or'ed" a expresso lgica seria: true ou verdadeiro, o resultado verdadeiro. Mas quando os bits seguintes so Figura 5.2 Usando o operador "&" bit a bit. 84 Captulo 5 operadores, instrues, e Funes Figura 5.3 Usando o "|" operador bit a bit. "Or'ed" juntos (0 e 0) a expresso lgica seria falso ou falso, ento o resultado

falsa. Os atos operadora exclusiva ou (^) como o "|" operador mas vai avaliar a verdade s se um dos bits definido como 1 eo bit outro definido como 0. Portanto, a expresso 1^1 avalia a 0, mas a expresso 1^0 avalia a 1, porque a expresso s pode ser verdade uma maneira. O operador "~" (no) muito original porque no funciona em dois bits. Em vez disso, opera em apenas um bit por vez. Lembre-se o exemplo na Tabela 5.5 para o operador "~"? ~ 11 (1011) = -12 (1000000000001100) Isto est levando o nmero binrio 1011 (11 em nmeros reais) e fazendo com que cada bit do nmero oposto e tornando-o negativo. Tem o mesmo efeito de multiplicao de um decimal nmero em um negativo (-1) e subtraindo 1. A razo para isso porque o mais pouco significativo em um valor de 32 bits diz o nmero se ou no negativo. O "~" operador no ser usado tanto assim, mas til para saber. Os dois ltimos operadores bit a bit que suporta PHP so a mudana esquerda (<<) e deslocar o direito (>>) Operadores. Cada um destes operadores assumir dois valores: o valor esquerda o nmero que voc quer mudar os bits, e o segundo valor o nmero de pedaos que voc vai mudar o primeiro valor por. Por exemplo: 11 <<2 Operators85 Isso levar o nmero decimal 11, que o nmero binrio 1011, e transferi-lo por dois bits para a esquerda. Para tornar este exemplo mais claro que vou ampliar o nmero de 11-16-bits. 0000000000001011 <<2 = 000000000101100 Ver como ele mudou todos os bits para a esquerda por dois, e depois dois zeros direita foram adicionados ao o nmero binrio? Qualquer bits para alm do valor de 32 bits cair do lado esquerdo e se perdem, mantendo o nmero um valor de 32 bits. O operador de deslocamento para a direita executa o equivalente a esquerda mudana de operador, mas o caminho oposto. 0000000000001011>> 2 = 0000000000000010 Neste caso zeros foram adicionados ao incio do valor e os bits no lado direito caiu o nmero. Atalhos varivel Atribuio Assim como em C / C + +, PHP tem operadores de atalho para comandos de atribuio, onde o primeiro

operando a varivel eo resultado armazenado na mesma varivel. D uma olhada neste exemplo: $ A = $ a + 25; $ A + = 25; / / Esta a mesma declarao exata como a linha acima. D uma olhada na Tabela 5.6 para obter uma lista dos atalhos de atribuio de varivel disponvel em PHP. Equivalente Exemplo de atalho +=$X+$i=$x=$x+$i -= X -= $ $ i $ x = $ x - $ i *= $ X *= $ i $ x = $ x * $ i /=$X/$i=$x=$x/$i % = $ X% = $ i $ x = $ x% $ i &=$X &= $i$x=$x&$i |=$X|=$i$x=$x|$i ^^=$X =$i$x= $x^$i .= $ X .= $ i >> = $ X>> = $ i $ x = $ x>> $ i <<= $ X <<= $ i $ x = $ x <<$ i ++++$X$x=$x+1 $X-$x=$x-1 Tabela 5.6 Varivel Atalhos Atribuio $ X = $ x. $ I 86 Captulo 5 operadores, instrues, e Funes O operador de incremento + + eo operador de decremento - pode aparecer antes das variveis, da mesma forma que pode aparecer aps as variveis. A colocao do operador pode mudar o ordem dos eventos. Por exemplo, se a + + colocado antes da varivel, o valor incrementado eo novo valor retornado. Mas se o + + colocado aps a varivel, ento o varivel pr-incrementado e, em seguida, o valor atribudo. / * Quando usado por si s, o operador de incremento tem o mesmo efeito se ele aparece antes ou depois da varivel * / $ X = 10; $ X + +; / / x = 11 $ X = 10; + + $ X / / x = 11 $ X = 10; $ Y = $ x + +; / / y = 10 e x = 11 $ X = 10; $ Y = + + $ x; / / y = 11 e x = 11 C Aution Isso pode afetar seus loops, por isso certifique-se de compreender a ordem das operaes que ocorrem aqui. Antes de passar s declaraes, vou cobrir a operao precedncia. Eu tenho mencionado vrias vezes antes e s quero ter certeza de que voc sabe o que isso significa. Operao Precedncia

Precedncia simplesmente a ordem em que as operaes iro ocorrer, assim como no anterior exemplo onde o operador de incremento foi antes ou depois da varivel. Precedncia pode alterar o valor do resultado esperado. Cada operador em PHP tem certa precedncia; Tabela 5.7 mostra cada operador com maior precedncia em primeiro lugar. Declaraes Quais so as declaraes? Declaraes fornecer a estrutura lgica da sua aplicao. Condicional declaraes e loops dar seus programas a capacidade de tomar decises baseadas em regras limitado. 87 declaraes Operao Precedncia Operao operador () O estabelecimento de precedncia instanciao de objetos novos [] O ndice da matriz de acesso ! Lgica no ~ No Bitwise O incremento + + - Decrementation @ Supresso de erro funcional * Multiplicao / Diviso Modulus% Adio + - Subtrao . Concatenao <<Shift esquerda bit a bit >> Mudana Bitwise direito <Menor que <= Menor ou igual a > Maior que > = Maior ou igual a == Igual a ! = No igual a & & Bitwise ^ XOR bit a bit | Ou Bitwise & & E lgico | | OU lgico ? = + = -= *= / =% = .= & =! = ~ = <<=>> = Atribuio e lgico e xor XOR Mltiplas ou OU lgico , Tabela 5.7

Operador condicional ternrio Avaliao mltiplas 88 Captulo 5 operadores, instrues, e Funes Demonstraes se A declarao se provavelmente uma das mais importantes caractersticas de cada programao linguagem. Ele permite que voc execute linhas de cdigo apenas quando as condies especificadas forem verdadeiro. Lembre-se de todos os operadores lgicos discutido anteriormente neste captulo? Este o lugar onde voc comea a coloc-las em bom uso. Voc pode fazer se declaraes to complexa e to simples como voc gostaria. Eu recomendo o que os torna bastante simples de ler, caso contrrio, quando voc vai volta para o seu cdigo de um ms mais tarde isso pode levar um tempo para descobrir o que est acontecendo. D uma olhada no seguinte exemplo: <? Php $ BInitialized = 1; if ($ bInitialized == 1) { ?> <table border=1 cellpadding=0 cellspacing=0 width=256 height=256> <tr> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> </ Tr> </ Table> <? Php } echo ("Este impressa uma linha de alternncia blocos coloridos, pois a instruo if avaliada como true "); ?> Voc pode criar condies muito ramificada, o que significa que se uma das declaraes avalia como false, voc pode cair em outro bloco de cdigo a ser executado. Isso realizado por usando o se ... instruo else. Aqui est um exemplo: <? Php $ BInitialized = 1; if ($ bInitialized == 1) { ?> <table border=1 cellpadding=0 cellspacing=0 width=256 height=256>

<tr> Statements89 <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> </ Tr> </ Table> <? Php echo ("Este impressa uma linha de alternncia blocos coloridos, pois a instruo if avaliada como true "); } outro { echo ("Desculpe o programa no inicializado"); } ?> Voc tambm pode testar vrias condies, se uma das declaraes avalia a falsa usando o elseif palavra-chave, como esta: <? Php if ($ bInitialized == 1) { echo ("O programa inicializado"); } elseif ($ bInitialized == 2) { echo ("jogo de partida"); } elseif ($ bInitialized == 3) { echo ("O jogo est em execuo); } outro { echo ("Desculpe o programa no inicializado"); } ?> 90 Captulo 5 operadores, instrues, e Funes Nota Certifique-se que, ao usar a palavra-chave elseif voc no colocar um espao entre os mais e os if. tudo uma palavra em PHP, ao contrrio de outras linguagens como C / C + +. PHP tambm oferece uma sintaxe alternativa para a instruo se, se: ... endif;. Que normalmente

usar essa sintaxe se voc fosse a impresso de grandes blocos de HTML entre blocos de cdigo PHP. Embora voc poderia fazer as mesmas coisas com a sintaxe C / C + +-like. D uma olhada no seguinte exemplo: <? Php $ BInitialized = 1; if ($ bInitialized == 1): ?> <table border=1 cellpadding=0 cellspacing=0 width=256 height=256> <tr> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> <td align="left" valign="top" bgcolor="#FFFFFF"> </ td> <td align="left" valign="top" bgcolor="#000000"> </ td> </ Tr> </ Table> <? Php endif; ?> isso para a instruo if. Agora voc pode passar para a declarao se o irmo, o interruptor de declarao. A instruo switch A razo de eu chamar a instruo switch do se irmo declarao porque o switch atua declarao como um bando de se .... ... elseif. else. Tomar as seguintes if ... elseif ... else declarao por exemplo: <? Php if ($ bInitialized == 1) { echo ("O programa inicializado"); } Statements91 elseif ($ bInitialized == 2) { echo ("jogo de partida"); } elseif ($ bInitialized == 3) { echo ("O jogo est em execuo"); } outro { echo ("Desculpe o programa no inicializado"); }

?> Neste exemplo, voc est verificando repetidamente a varivel $ bInitialized para um determinado valor, embora o valor de US $ bInitialized no muda de linha para linha. Para fazer esta mais eficiente que voc gostaria de verificar o valor de US $ bInitialized apenas uma vez. Voc pode fazer que, com a instruo switch. Aqui est como voc pode converter o exemplo acima em um instruo switch: <? Php switch ($ bInitialized) { case 1: { echo ("O programa inicializado"); break; } case 2: { echo ("Jogo de partida"); break; } case 3: { echo ("O jogo est em execuo"); break; } default: { echo ("Desculpe o programa no inicializado"); } } ?> Teste Captulo 70 4 92 Captulo 5 operadores, instrues, e Funes A instruo switch ir comparar os valores de cada caso com o valor da varivel, assim como se voc usou uma declarao if ... elseif ... else, mas assim que ele encontrar uma correspondncia que executa s bloco que de cdigo. Se o switch no encontrar uma correspondncia, em seguida, caso o padro executado. Observe a quebra no final de cada caso. Estes so muito importantes porque se voc no usar uma pausa, ento o cdigo ir cair at o prximo caso. Todos quebrar o faz dizer o cdigo para parar de executar o bloco e passe para a prxima instruo. Se voc estiver familiarizado com outras linguagens, como C / C + + ou Java, voc ser muito familiar

com a declarao switch. Na verdade, a sintaxe exatamente o mesmo. No entanto, switch do PHP declarao muito mais flexvel, por duas razes principais: 1) Cada caso no tem que ser um valor-it escalar pode ser qualquer valor, e 2) Voc pode usar variveis em cada um de seus casos. O exemplo a seguir demonstra o uso de variveis em uma instruo caso: <? Php switch (_SESSION ["GAME_STATE"]) { caso $ bInitialized: { echo ("O programa inicializado"); break; } bStarting caso $: { echo ("Jogo de partida"); break; } caso $ Brunning: { echo ("O jogo est em execuo"); break; } default: { echo ("Desculpe o programa no inicializado"); } } ?> Nota Os nicos tipos de variveis que no so vlidos em um comunicado caso so matrizes e objetos. Statements93 Neste exemplo, h uma varivel na sesso de dados global chamado GAME_STATE. Quando o instruo switch executa ele ir verificar o valor de cada uma das variveis processo contra o GAME_STATE varivel e quando encontra um valor que corresponda, ele ir executar o bloco de cdigo. tempo e fazer ... enquanto Loops Um loop while o mais simples loop em PHP; age semelhante a uma declarao if. Um loop while avalia uma expresso booleana. Se a expresso for verdadeira, ento o cdigo dentro do loop executados. Para sair de um loop while voc tem que fazer a expresso booleana que est

teste para avaliar como falso, ou explicitamente usar o comando break. Caso contrrio voc vai acabar em um loop infinito, que no bom. <? Php $ I = 0; while ($ i <8) { if (($ i% 2)! = 1) $ Color = "# ffffff"; outro $ Color = "# 000000"; echo ("<td align=left valign=top bgcolor=" $color ."> </ td>."); $ I + +; } ?> Nota O loop while tambm oferece uma sintaxe alternativa exatamente como a declarao se faz. <? Php while:> HTML AQUI <? Php endwhile;> Digamos que voc deseja que o cdigo do bloco a ser executado na primeira vez, e se um Boolean expresso avaliada como verdade que voc gostaria de executar o bloco de cdigo novamente. Voc pode fazer isso com o fazer ... enquanto loop. A fazer ... while sempre executar o loop pelo menos uma vez. Ento, se a expresso booleana avalia a verdade, ele vai executar o loop at que a expresso booleana avalia a falsa. <? Php $ I = 0; echo ("<SELECT NAME=level>"); fazer { echo ("<OPTION value=" $i Nvel ">.." $ i "</ option>"..); 94 Captulo 5 operadores, instrues, e Funes } While (+ + $ i <$ nLevels); echo ("</ SELECT>"); ?> Neste exemplo a opo, Nvel 0, sempre ser impresso mesmo que a varivel $ nLevels igual a 0. Uma vez que a varivel $ i igual a $ nLevels o loop while ir parar e seguir em frente e imprimir a ltima linha da demonstrao HTML select. Para o lao O lao for tem trs expresses separadas por ponto e vrgula. A primeira expresso um declarao de atribuio para inicializar a varivel do lao controle, o segundo um booleano expresso. Enquanto a expresso booleana avalia para true, o loop ser executado.

A expresso terceira e ltima qualquer declarao que ser executado no final de cada iterao do loop. Nota O lao for em PHP tem a mesma sintaxe exata como em C / C + +. Agora pegue o fazer ... while usado no exemplo anterior e convert-lo em um loop for. <? Php echo ("<SELECT NAME=level>"); for ($ loopCount = 0; $ loopCount <$ nLevels; $ loopCount + +) { echo ("<OPTION value=" $loopCount Nvel ">.." $ loopCount "</ option>"..); } echo ("</ SELECT>"); ?> Isto produz os mesmos resultados como o do ... while, mas em menos linhas de cdigo. Voc pode usar qualquer loops que voc se sinta confortvel com, mas eu geralmente uso um loop while quando o nmero de loops desconhecida, e um lao for quando o nmero de loops so conhecidos. Nota O lao for tambm oferece uma sintaxe alternativa como a declarao se eo loop while. ? <Php for ($ i = 0; $ i <10; $ i + +):?> Alguns <HTML php endfor;>? Funes O que uma funo? Uma funo um bloco de cdigo que podem ser definidas uma vez e reutilizadas em vrias partes do programa. Esta uma ferramenta muito til para um programador de ter. Com funes 95 as funes que voc seria forado a reescrever grandes pedaos de seu programa de cada vez voc precisava para repetir uma operao. Sem funes que voc seria mais provvel ir insano ou pelo menos voc no seria a codificao. Muitas vezes assumem funes de vrios parmetros, um parmetro nada mais que uma localizada varivel que a funo ir operar. Esses parmetros permitem transmitir dados e fora de suas funes. Mas uma funo no tem que tomar todos os parmetros em tudo. Supor voc tem uma funo para escrever o cabealho do documento HTML, que ficaria algo como isto: WriteHTMLHeader function () { echo ("<HTML> \ n"); echo ("<HEAD> <TITLE> My Application </ TITLE> </ HEAD> \ n"); echo ("<BODY bgColor=#ffffff> \ n");

} Voc declara funes usando a funo de palavra-chave, seguido do nome que voc deseja para a funo. No exemplo acima, o nome da funo WriteHTMLHeader. Tecnicamente esta funo no vai fazer nada at que voc cham-lo de outro ponto na cdigo. Para chamar uma funo, basta cham-lo pelo nome seguido por quaisquer parmetros que ele tem. Se a funo no tem nenhum parmetro, basta deixar os parnteses em branco. Aqui um exemplo de chamar a funo WriteHTMLHeader. / / Algum cdigo aqui WriteHTMLHeader (); Cdigo / / mais Voc poderia chamar essa funo vrias vezes em uma fileira, se voc gosta e que iria imprimir o mesmo HTML cabealho para o browser de cada vez. Passando parmetros para uma funo Passando parmetros para uma funo extremamente simples. Tudo que voc precisa fazer declarar uma varivel para cada parmetro que voc deseja receber. Por exemplo, digamos que voc quer uma funo que aparece uma mensagem de erro JavaScript com a mensagem que voc passa para ele. ErrorPopup funo ($ msg) { / / Criar um alerta de JavaScript echo ("<SCRIPT LANGUAGE='JavaScript'> \ n"); echo ("<!- \ n "); echo ("alert (\" $ msg \ "); \ n"); echo ("//-> \ n "); echo ("</ SCRIPT> \ n"); } 96 Captulo 5 operadores, instrues, e Funes Agora, quando voc invocar esta funo que voc vai escrever a seguinte linha de cdigo: ErrorPopup ("Esta uma mensagem de erro!"); Como voc pode ver, neste momento, quando voc chamou a funo que voc passou um parmetro. Quando a funo foi chamada, o valor da funo msg $ varivel foi definida para a cadeia: "Este uma mensagem de erro! ", ento qualquer momento voc faz referncia a $ msg na funo de seu valor ser o que voc passou dentro No exemplo anterior a varivel foi passada por valor, o que significa que qualquer coisa feita para a varivel na funo no afetou o valor do que foi passado para ele. Por exemplo: <? Php quadrados de funo ($ num)

{ $ Num *= $ num; return $ num; } $ SomeNum = 6; echo ("Variable antes de ir para a funo =" $ someNum.); $ Resultados = quadrado ($ someNum); echo (Variable "<br> depois de ir para o = funo ". $ SomeNum. "Resultados <br> = funo "$ resultados).; ?> Os resultados deste pedao de cdigo semelhante Figura 5.4. Veja como o valor de US $ someNum no foi afetada pelas operaes que o quadrado da funo () fez? Suponha que voc queira a funo para alterar o valor da varivel que voc est passando a. Como voc faria isso? Voc deve passar a varivel em referncia. Para passar uma varivel em uma funo por referncia preciso ter um e comercial (&) na frente do parmetro. Vamos dar o mesmo exemplo de cima e fazer a mudana de funo do valor da varivel por pass-lo por referncia. <? Php funo quadrado (& $ num) { $ Num *= $ num; } $ SomeNum = 6; echo ("Variable antes de ir para a funo =" $ someNum.); quadrados ($ someNum); echo ("Variable <br> depois de ir para a funo =" $ someNum.); ?> Functions97 Figura 5.4 Resultados de passar variveis por valor. Figura 5.5 Resultados de passar variveis por referncia. 98 Captulo 5 operadores, instrues, e Funes Veja como o valor de US $ someNum mudou? Seu valor o resultado das operaes dentro a funo. Passando variveis por referncia uma forma muito til para retornar resultados de vrios variveis, pois uma funo pode retornar apenas um valor se voc estiver usando o retorno palavra-chave. Recurso Funes PHP tambm suporta a recursividade. Recurso simplesmente quando uma funo chama a si mesma. Uma das maneiras mais fceis de explicar a recursividade apenas para mostrar a voc, tome este, por exemplo: poder de funo ($ base, $ expoente) {

if ($ expoente) { return $ base de poder * ($ base, $ expoente - 1); } return 1; } Observe como a instruo de retorno est chamando a funo de potncia, mas uma subtrao expoente da varivel $ a cada vez que for chamado. Eventualmente $ expoente vai chegar a zero ea if no ser executado. Neste ponto quando a recurso termina. Tome uma profundidade em ver como isso funciona. echo (alimentao (2,3)); 1. O poder funo chamada com o conjunto de base para o expoente 2 e definido para 3. 2. Em seguida, o expoente $ testado, j que ele diferente de zero se bemsucedido e procede-se linha seguinte. 3. A instruo de retorno chama a funo de poder de novo, s que desta vez a base 2 eo expoente tambm 2. 4. A varivel $ expoente testado novamente. Ainda um valor no-zero. 5. Energia chamada novamente com o valor 2 como a base e 1 como o expoente. 6. A varivel expoente testado novamente, mas ainda um valor diferente de zero. 7. Energia chamado pela ltima vez com o valor 2 como base e 0 como o expoente. 8. Desta vez o teste falhar ea funo retorna 1 para a invocao tero dos funo. 9. 1 agora multiplicado pela base ea invocao terceiro da funo retorna 2 para a segunda chamada da funo. A Magia da Incluindo Files99 10. 2 est agora multiplicado pelo valor base, dando-nos 4, e 4 retornado para o primeiro invocao da funo de potncia. 11. 4 est agora multiplicada pela base, dando-nos o valor final, de 8, e 8 devolvido da funo de potncia de volta ao seu programa. Bastante confuso, n? Recurso pode ser uma besta desagradvel, mas voc pode fazer algumas muito legal coisas com ele. A Magia da Incluindo arquivos Agora que voc tem todo esse conhecimento legal sobre como fazer funes, voc precisa de uma maneira para incluir as bibliotecas (por assim dizer) em suas pginas PHP. Basicamente o que voc pode fazer fazer uma arquivo completo de funes comuns que voc usa todo o tempo e coloc-los em todos os seus jogos.

Por exemplo, se voc der uma olhada no CD, eu inclu um arquivo PHP (common.php) que tem algumas funes de base que ser usado em todos os jogos neste livro. PHP oferece duas maneiras para incluir arquivos no seu aplicativo. Voc pode usar a instruo requerem ou o include. Quando o interpretador PHP encontros da instruo require ele coloca o arquivo no cdigo e agora geralmente disponveis para sua pgina. O include declarao avalia e executa o cdigo cada vez que a instruo include encontrado. Isto permite-lhe ter dinmica inclui em seus arquivos. Por exemplo: for ($ loopCounter = 0; $ loopCounter <5; $ loopCounter + +) { include ("arquivo" $ loopCounter "php"...); } Se voc fez o exemplo acima com a declarao exige, ento, o nico arquivo que seria includas seria file4.php. Em vez de se preocupar com o que melhor eu apenas sempre usar a instruo include. No h nenhum impacto no desempenho e voc pode ser muito mais flexvel em sua codificao. Nota PHP assume os arquivos incluem esto no diretrio especificado pela diretiva include_path no arquivo php.ini. Se os seus arquivos incluem no esto no diretrio que voc precisa especificar o caminho completo junto com o nome do arquivo para inclu-lo. 100 Captulo 5 operadores, instrues, e Funes Concluso Voc cobriu uma tonelada de informaes neste captulo. Voc j sabe tudo sobre operadores e como controlar o fluxo do seu cdigo com a lgica de som. Voc tambm sabe como criar blocos de cdigo reutilizveis usando funes. Voc nem sabe como fazer uma mini-biblioteca e inclu-lo em todas as suas pginas PHP. Prximo passo: matrizes, e depois o seu jogo PHP em primeiro lugar! Matrizes, Games, e Imagens Captulo 6 Matrizes! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,103 Captulo 7 Jogando com Xadrez e bancos de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . 0,133 Captulo 8 Resumo GD Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,157 Captulo 9 Criando Battle Tank e usando Terrain dinmico. . . . . . . . . . . . . . . 0,193 PARTE III Esta pgina foi intencionalmente deixada em branco

captulo 6 Matrizes! Inicializando Matrizes Usar Cordas para ndices Looping atravs Arrays Sequential Looping por meio no-sequencial Arrays Multi-Dimensional Arrays Arrays Classificando O Jogo PHP Primeiro Eu n captulo 4, quando voc estava fazendo o exemplo de processamento do formulrio, as caixas de seleo foram nomeados nEquipmentID []. Os dois suportes de dizer que um array. Um array consiste de vrios elementos, cada um dos quais tem um valor. Voc pode acessar cada elemento na matriz usando um ndice. Em PHP o ndice pode ser tanto um integer ou uma string, que permite uma grande flexibilidade em seu cdigo. Nota Como em C / C + +, arrays no PHP so base zero, o que significa que o primeiro ndice no array comea em 0. D uma olhada na Figura 6.1. Esta representao deve deixar claro como uma matriz armazena seus de dados. 103 104 Captulo 6 Arrays! $ Bordo [0] $ bordo [1] $ bordo [2] $ bordo [3] "A" "B" "C" "D" Figura 6.1 Como um array armazena dados. Neste caso a matriz chamada $ bordo, e tem quatro elementos. O primeiro elemento da array, $ bordo [0], igual a "A". O segundo elemento do array, $ bordo [1], igual a "B", e assim por diante. Assim como voc criar matrizes? Arrays inicializar Existem vrias maneiras que voc pode inicializar matrizes. Voc poderia simplesmente lista a varivel com o valor que voc gostaria de adicionar matriz, assim: $ Bordo [] = "A": $ Bordo [] = "B": $ Placa [] = "C": $ Bordo [] = "D": Porque voc no especificar um ndice, os elementos so adicionados automaticamente em seqencial da ordem. Voc tambm pode ter sido especificado o ndice que voc gostaria que o elemento aparea em, como este: $ Bordo [0] = "A": $ Bordo [1] = "B": $ Bordo [5] = "C":

$ Bordo [7] = "D": Este mais prtico, mas vlida a mesma coisa. Normalmente, quando a atribuio de elementos para um matriz que voc deve faz-lo em uma ordem seqencial. Desta forma no h confuso sobre onde o elemento . No entanto, h momentos em que voc vai querer criar uma chave de hash e usar que para o ndice. Se voc alguma vez atribuir itens em uma ordem no seqencial e depois adicionar um elemento para o array sem especificar o ndice que deve aparecer, ento o elemento ser automaticamente adicionado ao ndice mais elevado seguinte. Por exemplo: $ Bordo [0] = "A": $ Bordo [1] = "B": Usando cordas para ndices 105 $ Bordo [60] = "C": $ Bordo [] = "D": / / "D" sero acrescentados ao ndice de 61 no, 2. A ltima maneira de declarar um array usar o array () funo. Voc simplesmente passar os valores voc quer na matriz como parmetros para a funo. $ Board = array ("A", "B", "C", "D"); Isto ir criar uma matriz exatamente como o primeiro exemplo fez. "A" o primeiro elemento na array com um ndice de 0. "B" o segundo elemento da matriz com um ndice de 1, e assim em. Se voc deseja mudar o ndice de um elemento usando o array () funo, voc pode fazer assim como este: $ Board = array (1 => "a", "b", 7 => "c", "d"); No exemplo acima, "a" ser no ndice 1, "b" ser localizado no ndice 2, "c" ser localizada no ndice 7, e "d" ser localizado na posio 8. Voc pode colocar o operador => antes qualquer elemento da matriz para mudar seu ndice. Usando cordas para ndices Como mencionado anteriormente neste captulo, voc pode usar strings como ndices para suas matrizes. O _SESSION varivel global no PHP usa cordas como seus ndices. A sintaxe para acessar um matriz que usa strings como um ndice parecido com este: _SESSION ["GTurn"]; Criao de uma matriz que usa cordas de um ndice muito simples. Lembrese do primeiro exemplo que eu usado para inicializar uma matriz com elementos em um ndice especfico. $ Bordo [0] = "A": $ Bordo [1] = "B": $ Bordo [5] = "C": $ Bordo [7] = "D":

Em vez de usar um inteiro como um ndice que voc simplesmente substitu-lo com uma corda, como o exemplo a seguir demonstra: $ Bordo ["element1"] = "A": $ Bordo ["elemento2"] = "B": $ Bordo ["element3"] = "C": $ Bordo ["element4"] = "D": 106 Captulo 6 Arrays! Voc tambm pode usar o operador => juntamente com o array () funo para criar uma matriz com strings como ndices. $ Bordo = array ("element1" => "A", "elemento2" => "B", "Element3" => "C", "element4" => "D"); Se voc usar strings como ndices em sua matriz, voc tem que acessar a matriz com o especificado ndices string. Em outras palavras, se voc digitou o seguinte cdigo: <? Php $ Bordo = array ("element1" => "A", "elemento2" => "B", "Element3" => "C", "element4" => "D"); echo ($ bordo ["element1"]); echo ($ bordo [0]); ?> Voc teria um erro quando o interpretador PHP tentou imprimir a ltima linha, echo ($ bordo [0] "), que se parece com a Figura 6.2. Loop atravs Arrays Sequential A maneira mais fcil para percorrer arrays seqencial usar o loop for. Sei que voc est provavelmente pensando: "Como eu sei quantos elementos esto na matriz?" Voc pode acessar Figura 6.2 Tentando acessar uma matriz de seqncia indexada com um nmero inteiro. Loop atravs Arrays Sequential 107 o nmero de elementos na matriz usando a funo count (). Seu loop para deve parecido com o seguinte: <? Php $ Board = array ("a", "b", "c", "d"); for ($ index = 0; $ index <count ($ placa); $ index + +) { / / Imprime cada elemento em sua prpria linha echo ("ndice =" $ index ", Element =" $ bordo [$ index] "<BR>"....); } ?> Primeiro voc inicializar a matriz com todos os elementos que voc precisa. Em seguida, na primeira declarao do loop for, voc inicializa a varivel de indexao ($ index). A segunda declarao do loop for a sua expresso booleana. Isto diz o loop quando parar, neste caso o de ciclo vai parar quando atinge um a menos que o nmero total de elementos na matriz

$ Bordo. Por que voc no especificar a parar quando o loop alcana a contagem total dos elementos? Porque voc tem que lembrar que o PHP usa um ndice inicial de zero para arrays. Se voc foi para a contagem total dos elementos que se obtm um erro quando voc tentou imprimir o valor, porque esse ndice no existe na matriz. A terceira e ltima declarao do loop for simplesmente incrementa a varivel de indexao reiniciado cada vez que o loop. O resultados deve ser semelhante a Figura 6.3. Figura 6.3 Resultados de looping atravs de uma matriz seqencial. 108 Captulo 6 Arrays! Loop atravs da matriz com um loop for perfeito, desde que voc sabe que a matriz baseado em zero e ordenadas seqencialmente. Assim como voc percorrer uma matriz que no ordenadas seqencialmente? Loop atravs Non-Sequential Arrays Este um momento perfeito para usar um loop while. Claro, voc estar usando o loop while em juntamente com trs outras funes: reset (), list () e each (). A funo de reset sets o ndice atual da matriz de volta para o primeiro elemento disponvel. Ele leva um argumento, e que a matriz que voc gostaria de reinicializar. reset ($ someArray); A funo lista tem dois parmetros: uma varivel para armazenar o ndice do elemento e um varivel para armazenar o valor do elemento. list ($ ndice, $ value); A funo each () recebe um argumento, e que a matriz que deseja iterar por diante. each ($ someArray); D uma olhada no seguinte exemplo de como usar essas trs funes juntos em um while loop para iterar atravs de uma matriz no-seqencial. <? Php $ Board = array ("a", 7 => "b", 25 => "c", 50 => "d"); reset ($ placa); while (list ($ ndice, $ value) = each ($ placa)) { echo ("ndice =" $ index ", Element =" $ valor "<BR>"....); } ?> Os resultados do exemplo acima aparecer exatamente como na Figura 6.3, embora os ndices nesta matriz em particular no esto em uma ordem seqencial. Chamar o reset () funo neste

exemplo completamente desnecessrio porque, desde a matriz acaba de ser criado, a corrente ndice , obviamente, o primeiro elemento disponvel. Mas uma boa prtica para entrar, porque voc pode acabar tentando percorrer um array e ele poderia estar comeando no meio dele, e que no seria bom. Loop atravs Non-Sequential Arrays 109 PHP tambm oferece vrias outras funes para operar sobre matrizes, como a current (), key (), next (), e prev (), para citar apenas alguns. Para uma lista completa de funes que o PHP suporta, consulte o Apndice B. D uma olhada no exemplo a seguir e Figura 6.4 para ver o que funes a chave () e corrente () fazer: <? Php $ Board = array ("a", "b", "c", "d"); $ Index = chave ($ placa); $ Valor = corrente ($ placa); echo ("ndice =" $ index ", Element =" $ valor "<BR>"....); ?> Nota Chave e ndice significa exatamente a mesma coisa; a funo em PHP chamado de chave () em vez de index (). Figura 6.4 Um exemplo da chave () e corrente () funes. 110 Captulo 6 Arrays! Anterior, mencionei next () e prev (). Estas duas funes so uma outra maneira de navegar atravs de uma matriz. Como voc pode imaginar, next () vai para o prximo ndice disponvel no array, e retorna o elemento. prev () faz a mesma coisa, mas em vez de ir para o prximo ndice disponvel, ele vai para o ndice anterior. D uma olhada no seguinte loop: <? Php $ Board = array ("a", "b", "c", "d"); reset ($ placa); for ($ i = 0; $ i <4; $ i + +) { $ Index = chave ($ placa); $ Valor = corrente ($ placa); next ($ placa); echo ("ndice =" $ index ", Element =" $ valor "<BR>"....); } Isto ir imprimir os mesmos resultados para o navegador como Figura 6.3 fez, mas faz isso de uma forma diferente caminho. Mas tenha cuidado se voc usar o next () e prev () funes. Lembro que eu disse que retorna o valor do elemento do prximo ndice na matriz? Bem, e se o valor 0? D uma olhada neste exemplo:

<? Php Conselho $ array = (3, 0, 2, 4); fazer { $ Index = chave ($ placa); $ Valor = corrente ($ placa); echo ("ndice =" $ index ", Element =" $ valor "<BR>"....); } While (next ($ placa)); ?> Este loop ir parar quando ele chega ao segundo elemento da matriz porque a instruo while ir avaliar para false. Ento, ter muito cuidado se voc usa o next () e prev () funes. Se Voc j executado em um loop que est parando de repente, dar uma olhada para se certificar de que o seu Expresso booleana no est sendo avaliada para falso. Multi-Dimensional Arrays Te Criando arrays multi-dimensionais em PHP muito semelhante criao de multi-dimensional arrays em C / C + +. Em C / C + + voc tem suporte para matrizes unidimensionais, mas criar um array multi-dimensional por uma matriz de nidificao como um elemento em uma matriz pai. Isto Multi-Dimensional Arrays 111 exatamente como voc criar multi-dimensional arrays em PHP. Voc faz uma matriz que contm um array. <? Php $ Board = array ("linha1" => array ("a", "b"), "linha2" => array ("c", "d", "e")); echo ($ bordo ["linha1"] [0]); / / Imprime "a" echo ($ bordo ["linha2"] [2]) / / Imprime "e" ?> Um grande utilidade para multi-dimensional arrays que voc pode representar um tabuleiro de jogo utilizando uma matriz bidimensional. Em seguida, coloque cada um no tabuleiro de jogo, no local dizem e1, seria realizar um valor que lhe diria se h uma parte em que quadrado ou no. Ou voc poderia usar um loop, como no exemplo a seguir, para imprimir o tabuleiro de jogo: <? Php $ Bordo = array (array ("r", "k", "b", "q", "k", "b", "k", "r"), array ("p", "p", "p", "p", "p", "p", "p", "p"), array ("", "", "", "", "", "" "" ""), array ("", "", "", "", "", "" "" ""), array ("", "", "", "", "", "" "" ""), array ("", "", "", "", "", "" "" ""),

array ("p", "p", "p", "p", "p", "p", "p", "p"), array ("r", "k", "b", "q", "k", "b", "k", "r")); echo ("<table border=1 cellpadding=2 cellspacing=0 width=250>"); for ($ yIndex = 0; $ yIndex count <($ placa); $ yIndex + +) { echo ("<tr>"); for ($ xIndex = 0; $ xIndex <count ($ bordo [$ yIndex]); $ xIndex + +) { echo ("<td align=center valign=middle>". $ Bordo [$ yIndex] [$ xIndex]. "</ Td>"); } echo ("</ tr>"); } echo ("</ table>"); ?> Os resultados deste ciclo parecido com a Figura 6.5. 112 Captulo 6 Arrays! Figura 6.5 Resultados de looping atravs de uma matriz multi-dimensional. Classificao Arrays PHP fornece toneladas de funes com o qual voc pode manipular as matrizes. Alguns dos handiest so as funes de classificao. D uma olhada na Tabela 6.1 para ver a lista de classificao funes. Funes de classificao Nome Descrio da funo sort () asort () rsort () arsort () ksort () krsort () usort () A funo de classificao personalizada. uasort () uksort () Tabela 6.1 Classifica arrays em ordem alfabtica. Classifica arrays em ordem alfabtica, sem ndices mudando. Classifica matrizes na ordem inversa. Classifica matrizes na ordem inversa sem ndices mudando. Classifica arrays por valores-chave. Classifica arrays por valores-chave na ordem inversa. A funo de classificao personalizada que mantm ndices de string. A funo de classificao personalizvel que classifica por chave. * Uma lista completa das funes do PHP est disponvel no Apndice B. Classificao Arrays 113 Agora, d uma olhada em cada uma dessas funes de ordenao. O sort () funo ordena os elementos na matriz por ordem numrica e alfabtica. Nmeros vm em primeiro lugar, em seguida,

sinais de pontuao e, finalmente, as letras. Enquanto a funo de classificao, que atribui novamente a ndices para refletir a nova ordem. <? Php $ Items = array ("Espada", "Medpac", "Advanced Medpac", "Armor", "Blaster", "Shotgun"); / / Imprime os itens no separados for ($ index = 0; $ index <count ($ itens); $ index + +) { echo ("Index =" index $ "," $ items [ndice $] "<BR>"....); } / / Imprime os itens classificados sort ($ itens); for ($ index = 0; $ index <count ($ itens); $ index + +) { echo ("Index =" index $ "," $ items [$ index] "<BR>"....); } ?> Os resultados deste exemplo deve parecer com a Figura 6.6. Figura 6.6 A funo sort () em ao. 114 Captulo 6 Arrays! D uma olhada no que acontece quando voc tem um array com ndices especificado quando voc usa a funo de ordenao. <? Php $ Items = array ("Item1" => "Espada", "Item2" => "Medpac", "Item3" => "Advanced Medpac", "Item4" => "Armor", "item5" => "Blaster", "item6" => "Shotgun"); / / Imprime os itens no separados while (list ($ ndice, $ value) = each ($ itens)) { echo ("ndice =" $ ndice "," $ valor "<BR>"....); } echo ("<br>"); / / Imprime os itens classificados sort ($ itens); while (list ($ ndice, $ value) = each ($ itens)) { echo ("ndice =" $ ndice "," $ valor "<BR>"....); } ?> Se voc usar a funo de classificao com ndices especificados, como no exemplo acima, perder seus ndices. D uma olhada na Figura 6.7 para ver os resultados. Figura 6.7 A funo sort () com ndices especificados. Matrizes de classificao 115 Para evitar perder a sua ndices seqncia de caracteres especificada que voc precisa para usar o asort () funo. Isso vai classificar a matriz e seus elementos, sem tirar os ndices de sua string. Se voc quisesse classificar

esta matriz em sentido inverso voc usaria o rsort () funo. No entanto, o rsort (funo) vai tambm perdem ndices de seqncia de caracteres especificada, de modo a ordenar um array na ordem inversa, com ndices de string que voc precisa usar o arsort () funo. Voc tambm pode classificar por ndices sua string usando ksort (). <? Php $ Items = array ("item6" => "Espada", "item5" => "Medpac", "Item3" => "Advanced Medpac", "Item4" => "Armor", "Item2" => "Blaster", "Item1" => "Shotgun"); / / Imprime os itens no separados while (list ($ ndice, $ value) = each ($ itens)) { echo ("ndice =" $ ndice "," $ valor "<BR>"....); } echo ("<br>"); / / Imprime os itens classificados ksort ($ itens); while (list ($ ndice, $ value) = each ($ itens)) { echo ("ndice =" $ ndice "," $ valor "<BR>"....); } ?> Os resultados deste exemplo parecido com a Figura 6.8. Figura 6.8 O ksort () funo em ao. 116 Captulo 6 Arrays! Nota Voc pode classificar na ordem inversa pela chave, usando o krsort () funo. A ltima das funes de ordenao de arrays tem que ser o mais legal. Com usort () voc pode organizar suas matrizes como quiser. O usort () funo recebe dois argumentos: o primeira a matriz que voc gostaria de classificar, eo segundo um nome de uma funo que contm sua lgica prpria classificao. usort (someArray, someFunction); O exemplo a seguir ir classificar o array $ itens pelo comprimento de cada string: <? Php SortByLength funo ($ element1, $ elemento2) { $ LengthOfElement1 = strlen ($ element1); $ LengthOfElement2 = strlen ($ elemento2); if ($ lengthOfElement1 == $ lengthOfElement2) return 0; return ($ lengthOfElement1 <$ lengthOfElement2)? -1: 1; } $ Items = array ("item6" => "Espada", "item5" => "Medpac", "Item3" => "Advanced Medpac", "Item4" => "Armor", "Item2" => "Blaster", "Item1" => "Shotgun");

/ / Imprime os itens no separados while (list ($ ndice, $ value) = each ($ itens)) { echo ("ndice =" $ ndice "," $ valor "<BR>"....); } echo ("<br>"); / / Imprime os itens classificados usort ($ items, 'SortByLength'); while (list ($ ndice, $ value) = each ($ itens)) { echo ("ndice =" $ ndice "," $ valor "<BR>"....); } ?> Os resultados do exemplo acima so mostrados na Figura 6.9. Seu Jogo PHP First 117 Figura 6.9 O usort () funo em ao. C Aution Certifique-se de passar o nome da funo para usort () como uma string, caso contrrio voc ter uma tela de aviso no meio de sua pgina. Seu Jogo PHP Primeiro Agora hora de programar o seu primeiro jogo em PHP! Voc vai comear com um simples jogo de tic-tac-toe. Este jogo ir utilizar todos os aspectos que voc aprendeu em todos os anteriores captulos. Ele contm as variveis de sesso, arrays, funes e trabalhando em conjunto com PHP HTML. O primeiro passo voc precisa tomar para criar um novo jogo criar um diretrio para ele dentro seu servidor web. IIS para o diretrio ser C: \ Inetpub \ wwwroot, e se voc estiver usando um servidor Web Apache o diretrio seria / usr / web. Se voc estiver em Windows, o Apache diretrio seria algo parecido com C: \ Apache, dependendo de onde voc instalou o Apache. Voc pode nomear o diretrio que voc quiser. Vou nome-lo tictactoe. 118 Captulo 6 Arrays! Agora que voc tem um diretrio configurado voc pode criar um novo arquivo PHP. Eu recomendo seguir um esquema de nomenclatura regular. A pgina padro em um diretrio deve ser nomeado index.php ou default.php. Voc pode usar o que voc gosta. Desde que o jogo ser apenas em um arquivo s vou nome-lo index.php. O prximo passo voc precisa tomar definir todas as suas constantes e variveis globais, e incluem as funes comuns de arquivos que voc usa em todos os seus jogos. O primeiro conjunto de constantes que

voc precisa de quatro estados do jogo. O primeiro dos quatro estados dizer-lhe quando o jogo de partida, o segundo permite que voc saiba quando o jogo est em jogo, o terceiro diz-lhe se algum ganhou o jogo, eo quarto e ltimo estado diz que se algum perdeu o jogo. / / Inclui include ("common.php"); / / Jogo Estados define ("GAME_START", 0); define ("GAME_PLAY", 1); define ("GAME_WIN", 2); define ("game_over", 3); Para tic-tac-toe, os dois nicos outros define necessrios so um para o "X" da imagem e um para o "O" da imagem. / / Imagens define ("X_IMAGE", "imagens / X.gif"); define ("O_IMAGE", "imagens / O.gif"); A nica razo para voc definir esses porque torna mais fcil se voc quiser alterar o imagens mais tarde, mais ele economiza a digitao quando voc criar a funo de tornar para mostrar o seu conselho para o navegador. Voc tambm vai precisar de trs variveis globais para todas as suas funes de usar. As primeiras lojas que estado o jogo se encontra, as lojas segundo o estado do bordo, e as lojas o terceiro nvel de dificuldade da AI computador / / Globals global $ gGameState; gBoard $ global; gDifficulty $ global; Agora que as informaes globais para o jogo definido, voc ir definir o quadro HTML para o jogo. O quadro de HTML a forma que voc usar para obter entrada do usurio para seu jogo. A seguir est todo o HTML voc vai precisar para o jogo: <Doctype html pblico! "- / / W3C / / DTD HTML 4.0 / / EN"> <html> Seu Jogo PHP First 119 <head> <title> Tic-Tac-Toe </ title> <link rel="stylesheet" href="style.css" type="text/css"> </ Head> <body> <form action="index.php" method="post"> <Input type = name "escondida" = "turn" value = "<? printf ($ turno)> "> <Php WriteTableHeader ();?> <div align="center"> <input type="submit" name="btnNewGame" value="New Game"> <b> Nvel de Dificuldade </ b>

<select name="dlDifficulty"> <option value="1"> Fcil </ option> <option value="2" selecionada> normal </ option> value="3"> <option No-Likely </ option> </ Select> <br> <? Php / / Render o jogo Render (); ?> </ Div> <Php WriteTableFooter ();?> </ Form> </ Body> </ Html> Nota Lembre-se que todo este cdigo fornecido para voc no CD. O quadro para o jogo muito simples: o formulrio est redirecionando de volta para si mesmo. Em seguida, o cabealho para o layout da tabela legal escrito. Depois disso, alguns elementos do formulrio so criados. Um permite que o usurio iniciar um novo jogo, ea caixa de drop-down usado para escolher a dificuldade nvel da AI computador Depois de tudo isso, a funo de processamento chamado. Porque voc ainda no tm uma funo de render, voc precisa criar uma agora. A funo de tornar precisa para determinar o estado do jogo no usando o jogo global varivel de estado que foi declarado anteriormente. Se o estado do jogo est comeando, ento, tornar o funo precisa comear um novo jogo e mudar o estado a jogar. Se o estado do jogo 120 Captulo 6 Arrays! est desempenhando a funo tornar precisa de ter a entrada do usurio, process-lo, calcule o mover para o computador e atualizar o quadro. Se um dos jogadores ganhou o jogo, o tornar as necessidades funo para informar ao usurio que ele ou ganhou ou perdeu o jogo. Como voc pode ver, a funo de tornar precisa fazer uma tonelada de trabalho. Para realizar todas essas tarefas a funo de tornar vai precisar de algumas funes auxiliares. Voc vai precisar de uma funo para comear um novo jogo, uma funo para desenhar o tabuleiro, uma funo para verificar se h uma vitria, uma funo para verificar se a placa est cheia, e, finalmente, uma funo para terminar o jogo e sem o seu sesso. Vamos comear com a funo de tornar-se e depois continuar com a criana funes que render () ser chamada. Renderizao function ()

{ global $ gGameState; gBoard $ global; gDifficulty $ global; switch ($ gGameState) { GAME_PLAY caso: { / / Pega o movimento se o usurio fez uma if ($ _POST ['btnMove']! = "") { $ GBoard [$ _POST ['btnMove']] = "x"; $ _SESSION ['GBoard'] = $ gBoard; } / / Check para uma vitria if (CheckWin () == "X") { $ GGameState = GAME_WIN; Render (); retorno; } / / Verifique se a placa est cheio if (CheckFull () == 1) { $ GGameState = game_over; Render (); retorno; Seu Jogo PHP First 121 } / / Calcula mover o computador, se ainda podemos passar if ($ gGameState == GAME_PLAY & & $ _POST ['btnMove']! = "") { if ($ gDifficulty == 1) { ComputerRandomMove (); } elseif ($ gDifficulty == 2) { $ ComputerMove ComputerMove = (); if ($ computerMove == "") { ComputerRandomMove (); } outro { [ComputerMove $] $ gBoard = "o"; $ _SESSION ['GBoard'] = $ gBoard; } } elseif ($ gDifficulty == 3)

{ $ ComputerMove ComputerMove = (); if ($ computerMove =='') { if ($ gBoard [4] =='') $ ComputerMove = 4; elseif ($ gBoard [0] =='') $ ComputerMove = 0; elseif ($ gBoard [2] =='') $ ComputerMove = 2; elseif ($ gBoard [6] =='') $ ComputerMove = 6; elseif ($ gBoard [8] =='') ComputerMove $ = 8; if ($ computerMove =='') ComputerRandomMove (); } } 122 Captulo 6 Arrays! } / / Check para uma vitria if (CheckWin () == "O") { $ GGameState = game_over; Render (); retorno; } / / Verifique se a placa est cheio if (CheckFull () == 1) { $ GGameState = game_over; Render (); retorno; } / / Desenha a placa DrawBoard (); break; } GAME_WIN caso: { Endgame (); printf ("<br> <br> <img src = \" images / youWin.jpg \ " border = \ "0 \ ">"); break; } game_over caso: { Endgame (); printf ("<br> <br> <img src = \" images / gameOver.jpg \ " border = \ "0 \ ">");

break; } } / / Atualizar o nosso estado do jogo $ _SESSION ['GGameState'] = $ gGameState; } Seu Jogo PHP First 123 if ($ _POST ['dlDifficulty']! = "") { $ _POST GDifficulty = $ ['dlDifficulty']; Endgame (); $ GGameState = GAME_START; StartGame (); } if ($ gGameState == GAME_START) { StartGame (); } / / Verifique se o usurio est comeando um novo jogo if ($ _POST ['btnNewGame']! = "") { Endgame (); $ GGameState = GAME_START; StartGame (); } Como voc pode ver, uma instruo switch usada para determinar o estado do jogo. Voc tambm pode ter notado que no h um estado para o jogo de partida, isto porque todos os jogos comeam os eventos tm lugar fora da funo render. O jogo faz uma verificao para ver se o New Jogo boto foi clicado ou se o nvel de dificuldade foi alterada cada vez que o pgina carregada. Isso o que os trs se declaraes que vivem fora da funo de tornar so usados. Aqui est uma lista completa das funes que ainda precisam ser criados. StartGame () EndGame () DrawBoard () CheckWin () CheckFull () ComputerRandomMove () ComputerMove () 124 Captulo 6 Arrays! O StartGame () e EndGame () funes de controle das variveis de sesso. O StartGame () funo cria todas as variveis que sero armazenados na sesso e muda o jogo Estado de jogar. O fim do jogo () funo simplesmente unsets todas as variveis e destri o ativo sesso.

StartGame funo () { global $ gGameState; gBoard $ global; if ($ gGameState == GAME_START) { $ GGameState = GAME_PLAY; } / / Use $ _SESSION, em vez de session_register devido a problemas de segurana session_start (); $ Turn = $ _SESSION ['virar']; if (! isset ($ de volta)) { $ Turn = 1; $ GBoard = array ("","","","","","","","",""); $ _SESSION ['GGameState'] = $ gGameState; $ _SESSION ['GBoard'] = $ gBoard; $ _SESSION ['GDifficulty'] = $ gDifficulty; $ _SESSION ['Turn'] = $ turno; } / / Recuperar o estado bordo $ GBoard _SESSION = $ ['gBoard']; / / Pega o nvel de dificuldade $ GDifficulty _SESSION = $ ['gDifficulty']; } EndGame funo () { global $ gGameState; gBoard $ global; $ GGameState = game_over; unset ($ gBoard); Seu Jogo PHP First 125 unset ($ gGameState); unset ($ turno); session_destroy (); } As primeiras linhas do StartGame () funo dizer-lhe que a funo ir usar variveis globais. Em seguida, a funo altera o estado do jogo e comea a sesso. Iniciando a sesso cria um novo arquivo no diretrio onde as sesses so armazenados, o que especificado na arquivo php.ini. Aps a sesso iniciado ele verifica se a varivel de transformar $ foi definido. Se ele tem, ento ele no se preocupa em criar variveis nova sesso, mas se no tiver sido definida, em seguida, a funo cria a matriz para a placa, uma varivel de sesso para armazenar o estado do jogo, um

varivel de sesso para armazenar o estado da placa, e uma varivel de sesso para armazenar a dificuldade nvel e, finalmente, ele define a transformar $ varivel. As primeiras linhas do EndGame () funo tambm dizer o que variveis globais a serem usados. Ento a funo altera o estado do jogo para jogo. Aps o estado do jogo foi alterado, que unsets todas as variveis e destri a sesso. DrawBoard () simplesmente chama a bordo. Fantstico, no ? Ele usa HTML e PHP em conjunto para escrever a placa adequada para o navegador. DrawBoard function () { gBoard $ global; / / Inicia a tabela printf ("<table border=0 cellpadding=0 cellspacing=0>"); $ ILoop = 0; for ($ IRow = 0; $ IRow <5; $ IRow + +) { printf ("<tr> \ n"); for ($ iCol = 0; $ iCol <5; $ iCol + +) { if ($ IRow == 1 | | $ IRow == 3) { printf ("<td width = \" 12 \ "height = \" 5 \ " align = \ "center \" valign = \ "meio \" bgcolor = \ "# 000000 \"> </ td> \ n "); } outro { if ($ iCol == 1 | | $ iCol == 3) { 126 Captulo 6 Arrays! printf ("<td width = \" 12 \ "height = \" 115 \ "align = \" center \ " valign = \ "meio \" bgcolor = \ "# 000000 \"> </ td> \ n "); } outro { printf ("<td width = \" 115 \ "height = \" 115 \ " align = \ "center \" valign = \ meio "\ ">"); if ($ gBoard [$ iLoop] == "x") { printf ("<img src=\"" X_IMAGE "\">.."); } elseif ($ gBoard [$ iLoop] == "o") { printf ("<img src=\"" O_IMAGE "\">.."); } outro { printf ("<input type = \" submeter \ "name = \" btnMove \ "\ = valor \" ".

$ ILoop. "\ ">"); } printf ("</ td> \ n"); $ ILoop + +; } } } printf ("</ tr> \ n"); } / / Fim da mesa printf ("</ table>"); } O DrawBoard () funo usa apenas um global-o prprio conselho. Tem dois loops aninhados; o primeiro ciclo o nmero de linhas na tabela que devem ser prestados, ea segunda loop o nmero de colunas em cada linha que deve ser prestado. Se a contagem de US $ iCol 1 ou 3, ento ele chama o divisor entre as praas, caso contrrio ele verifica para ver se h uma pea no tabuleiro em que determinada linha e coluna particular. Se h um pedao torna-lo para o browser, caso contrrio ele coloca em um boto. As prximas duas funes, CheckFull () e CheckWin (), verifique se a placa est cheia ou se algum j ganhou o jogo. Seu Jogo PHP First 127 CheckFull function () { global $ gGameState; gBoard $ global; $ GGameState = game_over; for ($ iLoop = 0; $ iLoop <count ($ gBoard); $ iLoop + +) { if ($ gBoard [$ iLoop] == "") { $ GGameState = GAME_PLAY; return 0; } } return 1; } CheckWin funo () { global $ gGameState; gBoard $ global; $ Leitor = 1; while ($ leitor <= 2) { if ($ leitor == 1)

$ Telha = "o"; outro $ Telha = "x"; if ( # Horizontal ($ GBoard [0] gBoard telha == $ & & $ [1] telha == $ & & $ GBoard [2] == $ telha) | | ($ gBoard [3] == gBoard telha $ $ & & [4] telha == $ & & $ GBoard [5] == $ telha) | | (GBoard $ [6] == gBoard telha $ $ & & [7] telha == $ & & $ GBoard [8] == $ telha) | | # Verticais ($ GBoard [0] == gBoard telha $ $ & & [3] telha == $ & & $ GBoard [6] == $ telha) | | (GBoard $ [1] == gBoard telha $ $ & & [4] telha == $ & & $ GBoard [7] == $ telha) | | (GBoard $ [2] == gBoard telha $ $ & & [5] telha == $ & & $ GBoard [8] == $ telha) | | 128 Captulo 6 Arrays! # Diagonal ($ GBoard [0] == gBoard telha $ $ & & [4] telha == $ & & $ GBoard [8] == $ telha) | | (GBoard $ [2] == gBoard telha $ $ & & [4] telha == $ & & $ GBoard [6] == $ telha)) { retorno strtoupper ($ telha); } $ Jogador + +; } } O CheckFull (funo) comea assumindo que o jogo est terminado. Em seguida, loops atravs de cada casa do tabuleiro de verificao para ver se h um quadrado branco. Se o CheckFull (funo) encontra um quadrado em branco que define o estado do jogo de volta para jogar. O CheckWin () funo verifica trs peas em uma linha para cada jogador. Ele primeiro checa para ver se h trs telhas horizontal em uma linha com o mesmo marcador neles. Ele faz o mesmo procedimentos exatos para trs azulejos vertical numa fila e por trs peas em uma linha diagonal. Se houver destes testes para avaliar a verdade, ento a telha vencedora retornado para a funo render. O acordo final com duas funes do computador AI ComputerRandomMove () e ComputerMove () ambos calcular onde o computador deve colocar a sua pea. ComputerRandomMove () usado para o nvel de dificuldade mais fcil e ComputerMove () usado para o normal e impossvel nveis de dificuldade.

ComputerRandomMove funo () { gBoard $ global; ComputerMove $ = ""; srand ((double) microtime () * 1000000); while ($ computerMove == "") { $ Teste = rand (0, 8); if ($ gBoard [$ teste] == "") { ComputerMove $ = $ teste; [ComputerMove $] $ gBoard = "o"; $ _SESSION ['GBoard'] = $ gBoard; } } } Seu Primeiro Jogo PHP 129 ComputerMove function () { gBoard $ global; ComputerMove $ = ""; for ($ leitor = 0; $ jogador <= 1; $ player + +) { if ($ leitor == 0) { $ Telha = "o"; } outro { $ Telha = "x"; } if ($ gBoard [0] gBoard telha == $ & & $ [1] telha == $ & & $ GBoard [2] =='') $ ComputerMove = 2; if ($ gBoard [0] == gBoard telha $ $ & & [1] ==''& & $ gBoard [2] == $ telha) $ ComputerMove = 1; if ($ gBoard [0] ==''& & $ gBoard [1] telha == $ & & $ GBoard [2] == $ telha) $ ComputerMove = 0; if ($ gBoard [3] == gBoard telha $ $ & & [4] telha == $ & & $ GBoard [5] =='') $ ComputerMove = 5; if ($ gBoard [3] == gBoard telha $ $ & & [4] ==''& & $ GBoard [5] == $ telha) $ ComputerMove = 4; if ($ gBoard [3] ==''& & $ gBoard [4] telha == $ & & $ GBoard [5] == $ telha) $ ComputerMove = 3; if ($ gBoard [6] == gBoard telha $ $ & & [7] telha == $ & & $ GBoard [8] =='')

ComputerMove $ = 8; if ($ gBoard [6] == gBoard telha $ $ & & [7] ==''& & $ GBoard [8] == $ telha) ComputerMove $ = 7; if ($ gBoard [6] ==''& & $ gBoard [7] telha == $ & & $ GBoard [8] == $ telha) $ ComputerMove = 6; 130 Captulo 6 Arrays! if ($ gBoard gBoard [0] telha == $ & & $ [3] telha == $ GBoard [6] =='') $ ComputerMove = 6; if ($ gBoard gBoard [0] telha == $ & & $ [3] ==''& & $ GBoard [6] == telha $) $ ComputerMove = 3; if ($ gBoard [0] ==''& & $ gBoard [3] telha == $ & & $ GBoard [6] == telha $) $ ComputerMove = 0; if ($ gBoard [1] == gBoard telha $ $ & & [4] telha == $ GBoard [7] =='') ComputerMove $ = 7; if ($ gBoard [1] == gBoard telha $ $ & & [4] ==''& & $ GBoard [7] == $ telha) $ ComputerMove = 4; if ($ gBoard [1] ==''& & $ gBoard [4] telha == $ & & $ GBoard [7] == $ telha) $ ComputerMove = 1; if ($ gBoard [2] == gBoard telha $ $ & & [5] telha == $ GBoard [8] =='') ComputerMove $ = 8; if ($ gBoard [2] == gBoard telha $ $ & & [5] ==''& & $ GBoard [8] == $ telha) $ ComputerMove = 5; if ($ gBoard [2] ==''& & $ gBoard [5] telha == $ & & $ GBoard [8] == $ telha) $ ComputerMove = 2; if ($ gBoard gBoard [0] telha == $ & & $ [4] telha == $ GBoard [8] =='') ComputerMove $ = 8; if ($ gBoard gBoard [0] telha == $ & & $ [4] ==''& & $ GBoard [8] == $ telha) $ ComputerMove = 4; if ($ gBoard [0] ==''& & $ gBoard [4] telha == $ & & $ GBoard [8] == $ telha) $ ComputerMove = 0; if ($ gBoard [2] == gBoard telha $ $ & & [4] telha == $ GBoard [6] =='') $ ComputerMove = 6; Seu Jogo PHP First 131 if ($ gBoard [2] == gBoard telha $ $ & & [4] ==''& & $ GBoard [6] == telha $)

$&&

$&&

$&&

$&&

$&&

$ ComputerMove = 4; if ($ gBoard [2] ==''& & $ gBoard [4] telha == $ & & $ GBoard [6] == telha $) $ ComputerMove = 2; if (computerMove $ <>'') break; } return $ computerMove; } ComputerRandomMove () simplesmente calcula um nmero aleatrio de temporizador do servidor. Uma vez torna-se este nmero aleatrio que testa para ver se esse quadrado branco. Se o quadrado testado est em branco, o computador coloca a sua pea em que quadrado. Se o quadrado no testado em branco, ComputerRandomMove () executado novamente, at uma casa vazia encontrada. ComputerMove () olha para cada nico quadrado no tabuleiro. Se houver duas peas em uma linha com a telha opostas neles, o computador ir colocar a sua telha no terceiro quadrado aberto, assim bloqueio do adversrio. Este nvel de dificuldade maior na funo de processar com o seguintes linhas: $ ComputerMove ComputerMove = (); if ($ computerMove =='') { if ($ gBoard [4] =='') $ ComputerMove = 4; elseif ($ gBoard [0] =='') $ ComputerMove = 0; elseif ($ gBoard [2] =='') $ ComputerMove = 2; elseif ($ gBoard [6] =='') $ ComputerMove = 6; elseif ($ gBoard [8] =='') ComputerMove $ = 8; if ($ computerMove =='') ComputerRandomMove (); } Primeiro ele calcula mover o computador. Se mover o computador est em branco ele tenta pegar o quadrados em primeiro lugar. Se ele no encontrar uma praa disponveis, aleatoriamente calcula o movimento. Com estes trs mtodos de clculo se move, quase impossvel de vencer. Faz para um grande desafio. 132 Captulo 6 Arrays! Figura 6.10 Seu jogo PHP em primeiro lugar! Parabns! Voc concluiu com xito o seu primeiro jogo de PHP. Os resultados

de seus esforos deve ser semelhante a Figura 6.10. Nota Neste ponto, voc vai querer ir em seu arquivo php.ini e vire display_errors para fora. A razo para isso porque voc s quer mostrar os erros durante a depurao, caso contrrio voc ter de alerta avisos por todo o lugar que realmente no afetam a jogabilidade. Concluso Voc cobriu seu ltimo conceito bsico em PHP-matrizes. Voc aprendeu como inicializar matrizes, use cordas para ndices, percorrer arrays, criar matrizes multidimensionais e classificar suas matrizes. Voc tambm criaram o seu primeiro jogo de PHP. Ele s pode obter mais emocionante a partir daqui. Em seguida, voc vai fazer um tour atravs de bases de dados e criar a sua prpria jogo de xadrez. Eu sei que tic-tac-toe foi muito divertido, mas no muito difcil. hora de realmente testar suas habilidades. captulo 7 Jogando com Xadrez e bancos de dados No-Relational Databases Criar e Abrir um banco de dados Looping atravs de bancos de dados Modificar seu banco de dados Programao Bsico de Xadrez Comeando seu jogo de xadrez trabalhar com as peas Adicionando o banco de dados W chapu um banco de dados? Um banco de dados fornece armazenamento persistente de informao. Existem trs tipos de bases de dados: bancos de dados relacionais, bancos de dados no-relacional, e objeto bases de dados orientado. Em um banco de dados relacional os dados so armazenadas em um conjunto de tabelas e as informaes so relacionadas entre si por um identificador nico. Alguns exemplos de um sistema de banco de dados relacional so mySQL, SQL Server e Oracle. Bancos de dados relacionais costumam usar uma linguagem chamada T-SQL para acessar as informaes dentro de uma tabela. Objeto bancos de dados orientados usar objetos para representar muitos dados, como voc faria se voc estivesse criando classes e objetos para representar os dados internos do seu programa. Objeto bancos de dados orientados so muito novas, por isso os algoritmos de busca no so to bem definido como um banco de dados relacional,

mas este tipo de banco de dados d uma grande promessa para a comunidade de desenvolvimento orientado a objetos. Alguns dos bancos de dados objeto mais populares so orientados Versant (www.versant.com), GemStone (www.gemstone.com), e ObjectStore (www.odi.com/odilive/). 133 134 Captulo 7 Jogando com Xadrez e bancos de dados Para os seus propsitos com este livro voc ir usar um banco de dados norelacional. No-relacionais bancos de dados usam arquivos para armazenar suas informaes. Eles so chamados de no-bancos de dados relacionais porque os dados armazenados no est relacionado com quaisquer outros dados. Muito nome lgico, se voc me perguntar. No-bancos de dados relacionais Como mencionado, um banco de dados no-relacional armazena suas informaes em arquivos. Ento, como ele faz isso? PHP suporta uma coisa chamada DBA. DBA est para abstrao de banco de dados, e este pode lidar com vrios formatos de banco de dados diferente. Quando um banco de dados no-relacional armazena seus dados, ele armazena em um par chave / valor. Em outras palavras, cada entrada armazenada consiste em um valor com uma chave associada. Estes pares de chave / valor so seqncias simples, no arrays char, para que voc possa tambm armazenar informaes binrias nesses bancos de dados. Voc no est limitado s teclas que voc pode escolher porque as chaves no so estipulados pelo banco de dados. DBA permite criar bases de dados; atualizar bancos de dados existentes; inserir, atualizar e excluir novas entradas, e atravessar o banco de dados inteiro. O maior bnus para voc que no relacionais bases de dados no requerem qualquer software adicional. Tudo que voc precisa fazer permitir o DBA apoio no interpretador PHP editando o arquivo php.ini. Este j deve ser concluda; voc passou por esta etapa quando voc instalou o interpretador PHP. Criando e Abrindo um banco de dados PHP oferece diversas funes para DBA. A primeira funo voc deve saber o dba_open () funo. Isso permitir que voc crie um banco de dados, gravar em um banco de dados, ler um banco de dados, ou truncar um banco de dados. int dba_open (string sPath, string sMode, string Shandler, [int nMod]); O primeiro parmetro do dba_open () funo o caminho para o banco de dados, o segundo parmetro o modo em que voc deseja abrir o banco de dados. Valores possveis para isso pode ser qualquer um dos seguintes: r - Abra o banco de dados para leitura. w - Abra o banco de dados para a escrita. c - Criar um novo banco de dados.

n - truncar um banco de dados. O terceiro parmetro o nome do manipulador para o tipo de banco de dados que voc gostaria de uso. O terceiro parmetro pode ser qualquer um dos seguintes valores: dbm - banco de dados Berkley DB-style (obsoleto). ndbm-Uma nova base de dados Berkley DB-estilo. Isto muito limitada e tambm obsoleta. Criando e Abrindo um banco de dados 135 gdbm-O banco de dados GNU. db3 - O kit de ferramentas de banco de dados DB3 de Software Sleepycat. Este ser o banco de dados tipo que voc ir utilizar em seus projetos. cdb - banco de dados do Qmail. Este formato s permite operaes de leitura. O quarto parmetro opcional especifica o modo em que o banco de dados deve ser aberto. Este no um parmetro comumente usado e voc no poder us-lo em seus jogos. O dba_open () funo ir retornar um identificador para o banco de dados se ele foi bem sucedido, caso contrrio ele retorna 0 ou false quando ele falhar. Isto permitir que voc para verificar se o banco de dados aberto. Se a abertura falhar voc pode prender por ele e quer imprimir uma mensagem de aviso ou sair do aplicativo completamente. D uma olhada no seguinte exemplo de cdigo para ver como usar o dba_open () funo. <? Php / / Defina os parmetros db $ Dbpath = "myDatabase.db"; $ DbType = "db3"; CreateDatabase funo ($ thePath, $ theType) { $ Db = dba_open ($ thePath, "c", $ theType); if (! $ db) { printf ("No foi possvel criar o banco de dados"); return 0; } return $ db; } OpenDatabase funo ($ thePath, $ theType) { $ Db = dba_open ($ thePath, "r", $ theType); if (! $ db) { printf ("No foi possvel abrir o banco de dados"); return 0; }

return $ db; } 136 Captulo 7 Jogando com Xadrez e bancos de dados captulo 7 Jogando com Xadrez e bancos de dados No-Relational Databases Criar e Abrir um banco de dados Looping atravs de bancos de dados Modificar seu banco de dados Programao Bsico de Xadrez Comeando seu jogo de xadrez trabalhar com as peas Adicionando o banco de dados W chapu um banco de dados? Um banco de dados fornece armazenamento persistente de informao. Existem trs tipos de bases de dados: bancos de dados relacionais, bancos de dados no-relacional, e objeto bases de dados orientado. Em um banco de dados relacional os dados so armazenadas em um conjunto de tabelas e as informaes so relacionadas entre si por um identificador nico. Alguns exemplos de um sistema de banco de dados relacional so mySQL, SQL Server e Oracle. Bancos de dados relacionais costumam usar uma linguagem chamada T-SQL para acessar as informaes dentro de uma tabela. Objeto bancos de dados orientados usar objetos para representar muitos dados, como voc faria se voc estivesse criando classes e objetos para representar os dados internos do seu programa. Objeto bancos de dados orientados so muito novas, por isso os algoritmos de busca no so to bem definido como um banco de dados relacional, mas este tipo de banco de dados d uma grande promessa para a comunidade de desenvolvimento orientado a objetos. Alguns dos bancos de dados objeto mais populares so orientados Versant (www.versant.com), GemStone (www.gemstone.com), e ObjectStore (www.odi.com/odilive/). 133 134 Captulo 7 Jogando com Xadrez e bancos de dados Para os seus propsitos com este livro voc ir usar um banco de dados norelacional. No-relacionais bancos de dados usam arquivos para armazenar suas informaes. Eles so chamados de no-bancos de dados relacionais porque os dados armazenados no est relacionado com quaisquer outros dados. Muito nome lgico, se voc me perguntar. No-bancos de dados relacionais Como mencionado, um banco de dados no-relacional armazena suas informaes em arquivos. Ento, como ele faz

isso? PHP suporta uma coisa chamada DBA. DBA est para abstrao de banco de dados, e este pode lidar com vrios formatos de banco de dados diferente. Quando um banco de dados no-relacional armazena seus dados, ele armazena em um par chave / valor. Em outras palavras, cada entrada armazenada consiste em um valor com uma chave associada. Estes pares de chave / valor so seqncias simples, no arrays char, para que voc possa tambm armazenar informaes binrias nesses bancos de dados. Voc no est limitado s teclas que voc pode escolher porque as chaves no so estipulados pelo banco de dados. DBA permite criar bases de dados; atualizar bancos de dados existentes; inserir, atualizar e excluir novas entradas, e atravessar o banco de dados inteiro. O maior bnus para voc que no relacionais bases de dados no requerem qualquer software adicional. Tudo que voc precisa fazer permitir o DBA apoio no interpretador PHP editando o arquivo php.ini. Este j deve ser concluda; voc passou por esta etapa quando voc instalou o interpretador PHP. Criando e Abrindo um banco de dados PHP oferece diversas funes para DBA. A primeira funo voc deve saber o dba_open () funo. Isso permitir que voc crie um banco de dados, gravar em um banco de dados, ler um banco de dados, ou truncar um banco de dados. int dba_open (string sPath, string sMode, string Shandler, [int nMod]); O primeiro parmetro do dba_open () funo o caminho para o banco de dados, o segundo parmetro o modo em que voc deseja abrir o banco de dados. Valores possveis para isso pode ser qualquer um dos seguintes: r - Abra o banco de dados para leitura. w - Abra o banco de dados para a escrita. c - Criar um novo banco de dados. n - truncar um banco de dados. O terceiro parmetro o nome do manipulador para o tipo de banco de dados que voc gostaria de uso. O terceiro parmetro pode ser qualquer um dos seguintes valores: dbm - banco de dados Berkley DB-style (obsoleto). ndbm-Uma nova base de dados Berkley DB-estilo. Isto muito limitada e tambm obsoleta. Criando e Abrindo um banco de dados 135 gdbm-O banco de dados GNU. db3 - O kit de ferramentas de banco de dados DB3 de Software Sleepycat. Este ser o banco de dados tipo que voc ir utilizar em seus projetos. cdb - banco de dados do Qmail. Este formato s permite operaes de leitura.

O quarto parmetro opcional especifica o modo em que o banco de dados deve ser aberto. Este no um parmetro comumente usado e voc no poder us-lo em seus jogos. O dba_open () funo ir retornar um identificador para o banco de dados se ele foi bem sucedido, caso contrrio ele retorna 0 ou false quando ele falhar. Isto permitir que voc para verificar se o banco de dados aberto. Se a abertura falhar voc pode prender por ele e quer imprimir uma mensagem de aviso ou sair do aplicativo completamente. D uma olhada no seguinte exemplo de cdigo para ver como usar o dba_open () funo. <? Php / / Defina os parmetros db $ Dbpath = "myDatabase.db"; $ DbType = "db3"; CreateDatabase funo ($ thePath, $ theType) { $ Db = dba_open ($ thePath, "c", $ theType); if (! $ db) { printf ("No foi possvel criar o banco de dados"); return 0; } return $ db; } OpenDatabase funo ($ thePath, $ theType) { $ Db = dba_open ($ thePath, "r", $ theType); if (! $ db) { printf ("No foi possvel abrir o banco de dados"); return 0; } return $ db; } 136 Captulo 7 Jogando com Xadrez e bancos de dados / / Abre o banco de dados, se ele no estiver l, crie$ Db = OpenDatabase ($ dbpath, $ dbType); if (! $ db) { $ Db = CreateDatabase ($ dbpath, $ dbType); if (! $ db) { sada; } } / / Se voc chegar aqui o banco de dados aberto com sucesso e voc pode fazer o que quiser

com ele. ?> Looping atravs do banco de dados Agora que voc sabe como criar e abrir um banco de dados no-relacional que seria til saber como percorrer os dados no banco de dados para exibi-lo. Para percorrer uma registro de banco de dados set voc precisa para comear a chave primeiro. PHP oferece dba_firstkey () para obter a primeira chave de um banco de dados especificado. cadeia dba_firstkey (int databaseHandle); Depois de recuperar a primeira chave do banco de dados que voc precisa para fazer um loop atravs de cada registro at no existem mais registros. Para isso, voc ir usar um loop while, porque voc no vai saber o contagem dos elementos no conjunto de registros. Para obter o valor, voc usa o dba_fetch () funo. cadeia dba_fetch (string chave, int databaseHandle); O dba_fetch () ir retornar uma seqncia de false se no foi possvel obter os dados. Uma vez voc recuperou os dados que voc ter que unserialize os dados, assim como voc ter que serializar os dados para coloc-lo no banco de dados. cadeia unserialize (string someString); Depois de ter feito isso, voc pode fazer o que quiser com a corda desserializados. Ento voc necessidade de recuperar a chave prxima a fim de avanar para o prximo registro. D uma olhada no seguinte exemplo para ver como tudo funciona em conjunto: <? Php $ Dbpath = "myDatabase.db"; $ DbType = "db3"; $ Db = OpenDatabase ($ dbpath, $ dbType); Inserindo uma entrada em seu banco de dados 137 if (! $ db) { $ Db = CreateDatabase ($ dbpath, $ dbType); if (! $ db) { sada; } } / / Pega o primeiro registro $ Key = dba_firstkey ($ db); / / Percorre todo o banco de while ($ chave! = false) { $ Valor = dba_fetch ($ key, $ db); $ Entrada = unserialize ($ value); / / Faz alguma coisa com $ entrada

$ Key = dba_nextkey ($ db); } dba_close ($ db); ?> Nota Lembre-se sempre fechar o banco de dados voc est trabalhando com usando o dba_close () funo. Inserindo uma entrada em seu banco de dados Para inserir uma entrada, PHP fornece-lhe com a funo dba_insert (). Esta funo recebe trs argumentos. O primeiro a chave que voc quer dar o registro, o segundo argumento o valor para a chave, eo terceiro argumento o identificador para o banco de dados. bool dba_insert (string chave, valor string, int handle); Se a insero ao banco de dados bem sucedida dba_insert () retornar true. Se a inserir na banco de dados falhar dba_insert () ir retornar false. Ao inserir um valor no banco de dados fazer se voc serializar os dados em primeiro lugar. $ Resultados = dba_insert ($ myKey, serialize ($ myData), $ db); Todos os serialize () funo faz criar uma seqncia serializada de um tipo de dados mistos que voc passar para ele, assim voc pode passar em uma matriz e os resultados sero uma seqncia serializada. Ento quando voc recuperar os dados do banco de dados, voc unserialize a string usando o 138 Captulo 7 Jogando com Xadrez e bancos de dados unserialize () funo. D uma olhada no seguinte exemplo de cdigo para ver como voc coloc-lo todos juntos: <? Php $ Dbpath = "myDatabase.db"; $ DbType = "db3"; $ Data = "Meus Dados"; $ Db = OpenDatabase ($ dbpath, $ dbType); if (! $ db) { $ Db = CreateDatabase ($ dbpath, $ dbType); if (! $ db) { sada; } } / / Agora que o banco de dados aberta, voc precisa encontrar a chave disponvel seguinte $ NextID = 0; $ Key = dba_firstkey ($ db); while ($ chave! = false) {

if ($ key> $ NextID) { NextID $ = $ chave; } $ Key = dba_nextkey ($ db); } $ NextID + + / / Esta a chave mais prximo disponvel $ Result = $ dba_insert ($ chave, serialize ($ data), $ db); dba_close ($ db) if (! $ result) { printf ("Inserir no banco de dados falhou"); } outro { printf ("Adicionado com sucesso"); } ?> Atualizar uma entrada em seu banco de dados 139 Ento, qual este exemplo fazendo, exatamente? Primeiro, ele abre o banco de dados usando as funes que voc criou anteriormente neste captulo. Uma vez que o banco de dados aberto, voc precisa encontrar o prximo ID disponveis. Isso garante que voc est inserindo os dados no final do arquivo. Para fazer isso voc precisa pegar a chave em primeiro lugar no banco de dados, em seguida, percorra o banco de dados inteiro at chegar ao fim. Se uma chave for encontrada que maior que dos atuais US $ NextID ento o $ NextID definida como a maior chave. Uma vez que este lao terminado, voc tem a maior chave na banco de dados, assim que a chave , obviamente, disponvel seguinte $ NextID + 1. Agora voc pode inserir gratuitamente seu registro no banco de dados. Depois de ter chamado o dba_insert () funo que voc precisa verificar para ver se ele bem sucedido. Isso tudo que existe para ela. Atualizar uma entrada em seu banco de dados Atualizando registros em seu banco de dados muito semelhante ao inserir registros, mas em vez de chamar dba_insert () voc chama dba_replace (). O dba_replace () funo tambm tem trs argumentos. Voc consegue adivinhar o que so? isso mesmo, a chave que voc deseja atualizar os dados que voc vo atualizar o registro com, e lidar com o banco de dados. bool dba_replace (string chave, os dados string, banco de dados int); Agora, uma vez que voc chamar essa funo voc deve chamar o dba_sync () funo, ou ento seus dados no sero salvos no banco de dados. Esta pode ser uma dor na bunda para depurar se voc perder colocar nessa funo pouco.

bool dba_sync (banco de dados int); Ento, para atualizar um registro voc comear exatamente como se voc estivesse inserindo um registro que voc precisa para abrir o banco de dados. Mas desta vez voc no precisa de encontrar o prximo registro disponvel porque voc j sabe o registro que voc deseja atualizar. Se voc no sabe o registro que deseja atualizar ento voc provavelmente no deveria estar atualizando o banco de dados. <? Php funo UpdateRecord ($ id, $ value) { dbpath global $, $ dbType; $ Db = OpenDatabase ($ dbpath, $ dbType); dba_replace ($ id, serialize ($ valor), $ db); dba_sync ($ db); dba_close ($ db) } ?> Inserindo uma entrada em seu banco de dados Para inserir uma entrada, PHP fornece-lhe com a funo dba_insert (). Esta funo recebe trs argumentos. O primeiro a chave que voc quer dar o registro, o segundo argumento o valor para a chave, eo terceiro argumento o identificador para o banco de dados. bool dba_insert (string chave, valor string, int handle); Se a insero ao banco de dados bem sucedida dba_insert () retornar true. Se a inserir na banco de dados falhar dba_insert () ir retornar false. Ao inserir um valor no banco de dados fazer se voc serializar os dados em primeiro lugar. $ Resultados = dba_insert ($ myKey, serialize ($ myData), $ db); Todos os serialize () funo faz criar uma seqncia serializada de um tipo de dados mistos que voc passar para ele, assim voc pode passar em uma matriz e os resultados sero uma seqncia serializada. Ento quando voc recuperar os dados do banco de dados, voc unserialize a string usando o 138 Captulo 7 Jogando com Xadrez e bancos de dados unserialize () funo. D uma olhada no seguinte exemplo de cdigo para ver como voc coloc-lo todos juntos: <? Php $ Dbpath = "myDatabase.db"; $ DbType = "db3"; $ Data = "Meus Dados"; $ Db = OpenDatabase ($ dbpath, $ dbType); if (! $ db) {

$ Db = CreateDatabase ($ dbpath, $ dbType); if (! $ db) { sada; } } / / Agora que o banco de dados aberta, voc precisa encontrar a chave disponvel seguinte $ NextID = 0; $ Key = dba_firstkey ($ db); while ($ chave! = false) { if ($ key> $ NextID) { NextID $ = $ chave; } $ Key = dba_nextkey ($ db); } $ NextID + + / / Esta a chave mais prximo disponvel $ Result = $ dba_insert ($ chave, serialize ($ data), $ db); dba_close ($ db) if (! $ result) { printf ("Inserir no banco de dados falhou"); } outro { printf ("Adicionado com sucesso"); } ?> Atualizar uma entrada em seu banco de dados 139 Ento, qual este exemplo fazendo, exatamente? Primeiro, ele abre o banco de dados usando as funes que voc criou anteriormente neste captulo. Uma vez que o banco de dados aberto, voc precisa encontrar o prximo ID disponveis. Isso garante que voc est inserindo os dados no final do arquivo. Para fazer isso voc precisa pegar a chave em primeiro lugar no banco de dados, em seguida, percorra o banco de dados inteiro at chegar ao fim. Se uma chave for encontrada que maior que dos atuais US $ NextID ento o $ NextID definida como a maior chave. Uma vez que este lao terminado, voc tem a maior chave na banco de dados, assim que a chave , obviamente, disponvel seguinte $ NextID + 1. Agora voc pode inserir gratuitamente seu registro no banco de dados. Depois de ter chamado o dba_insert () funo que voc precisa verificar para ver se ele bem sucedido. Isso tudo que existe para ela. Atualizar uma entrada em seu banco de dados

Atualizando registros em seu banco de dados muito semelhante ao inserir registros, mas em vez de chamar dba_insert () voc chama dba_replace (). O dba_replace () funo tambm tem trs argumentos. Voc consegue adivinhar o que so? isso mesmo, a chave que voc deseja atualizar os dados que voc vo atualizar o registro com, e lidar com o banco de dados. bool dba_replace (string chave, os dados string, banco de dados int); Agora, uma vez que voc chamar essa funo voc deve chamar o dba_sync () funo, ou ento seus dados no sero salvos no banco de dados. Esta pode ser uma dor na bunda para depurar se voc perder colocar nessa funo pouco. bool dba_sync (banco de dados int); Ento, para atualizar um registro voc comear exatamente como se voc estivesse inserindo um registro que voc precisa para abrir o banco de dados. Mas desta vez voc no precisa de encontrar o prximo registro disponvel porque voc j sabe o registro que voc deseja atualizar. Se voc no sabe o registro que deseja atualizar ento voc provavelmente no deveria estar atualizando o banco de dados. <? Php funo UpdateRecord ($ id, $ value) { dbpath global $, $ dbType; $ Db = OpenDatabase ($ dbpath, $ dbType); dba_replace ($ id, serialize ($ valor), $ db); dba_sync ($ db); dba_close ($ db) } ?> 140 Captulo 7 Jogando com Xadrez e bancos de dados Excluindo uma entrada do banco de dados Com o poder de criar, voc tambm precisa do poder de destruir. Para excluir uma entrada a partir do seu banco de dados voc usa o dba_delete () funo. Nome incrvel, no ? O dba_delete () funo tem dois parmetros. O primeiro o id do registro que voc deseja apagar, ea segunda o identificador para o banco de dados. bool dba_delete (string chave, banco de dados int); Assim como quando voc atualizar o banco de dados, voc deve chamar o dba_sync () funo ou ento o seu banco de dados no ser atualizado. D uma olhada nesta funo acessveldndi. <? Php funo deleteRecord ($ id) {

dbpath global $, $ dbType; $ Db = OpenDatabase ($ dbpath, $ dbType); dba_delete ($ id, $ db); dba_sync ($ db); dba_close ($ db) } ?> C Aution Lembre-se sempre chamar dba_close () depois de voc terminar de operao no banco de dados. E sempre lembre-se de chamar dba_sync () para atualizar seu banco de dados. Programao de xadrez: Uma Viso Geral Antes de comear a programar o seu jogo de xadrez voc precisa entender como voc ir sobre ele. D uma olhada nos requisitos mnimos de software de um jogo de xadrez. Uma maneira de representar um tabuleiro de xadrez na memria. Isto onde voc ir armazenar todo o estado do jogo. Algum tipo de sistema para determinar se um lance ilegal foi feito. algum tipo de interface de usurio para que voc possa fazer suas jogadas. Lembre-se estes so os componentes de software mnimo que voc precisa para criar um jogo de xadrez. Isto no inclui um sistema de avaliao mover para que o computador pode fazer movimentos. Agora que voc tem uma boa direo para ir para comear a programar um jogo de xadrez, d uma olhada em como voc representaria um tabuleiro. Existem vrias maneiras de representar um tabuleiro de xadrez, mas a maneira mais bvia a utilizao de uma espcie de matriz para representar a bordo. Por um array? Porque voc quer ter uma vari Comeando O jogo de xadrez 141 capaz que voc pode percorrer para tornar a bordo, e um conjunto de dados a mais lgica estrutura. Para fazer um movimento no xadrez voc d a bordo de um dos quadrados (por exemplo, a1) e um para quadrados (por exemplo, a3). Se voc estiver usando uma matriz, ento voc pode percorrer estas colunas e linhas e tirar a placa na tela com bastante facilidade. O ideal seria usar tbuas de bits para representam posies das peas no tabuleiro em si. Uma placa de bit um array de 64 bytes que contm um pouco. A 1 seria em uma praa, se a praa tomada e um 0 seria em uma praa, se a praa est livre. Assim, voc pode representar um jogo de xadrez toda usando 12 placas bit. Um para a posio de todos os pees brancos, brancos torres, bispos brancos, cavaleiros branco, branco rainha, rei branco, pees pretos, e assim por diante. Com estas placas bit

a validao de movimentos e clculos de movimentos ser um lote inteiro mais rpido do que looping atravs de um array de 64 bytes para todo o conselho. No entanto, PHP no suporta Inteiros de 64 bits para que voc no pode usar placas de pouco menos que voc tenha um sistema de 64 bits. Esta uma viso muito rpida de programao de xadrez. Se voc quiser obter mais in-depth informaes sobre programao de xadrez, confira outros livros sobre o assunto. Vamos comear programao o nosso jogo de xadrez. Iniciando o Jogo de Xadrez O primeiro passo que voc deve tomar ao iniciar qualquer jogo criar o seu jogo e estados globals geral. Para este jogo de xadrez, voc ter apenas trs estados do jogo. Um diz-lhe quando o jogo est comeando, o segundo diz que o jogo est sendo executado, eo terceiro diz quando o jogo acaba. / / Jogo Estados define ("GAME_STARTING", 1); define ("GAME_RUNNING", 2); define ("game_over", 3); / / Globals global $ gGameState; gBoard $ global; gCurrentPlayer $ global; Agora vamos criar a estrutura HTML para o jogo. No deve ser nada muito extravagante. (Por uma questo de fato, ser muito parecido com o jogo tic-tac-toe voc criou nos ltimos captulo.) <Doctype html pblico! "- / / W3C / / DTD HTML 4.0 / / EN"> <html> <head> <title> Chess </ title> <link rel="stylesheet" href="style.css" type="text/css"> </ Head> <body> 142 Captulo 7 Jogando com Xadrez e bancos de dados <form action="chess.php" method="post"> <Input type = name "escondida" = "player" value = "<? printf ($ gCurrentPlayer)?> "> <Input type = name "escondida" = "turn" value = "<? printf ($ turno)> "> <Php WriteTableHeader ();?> <div align="center"> <input type="submit" name="btnNewGame" value="New Game"> Mova <b> From: </ b> <input type="text" name="fromSquare"> <b> Move To: </ b> <input type="text" name="toSquare"> <br> <? Php

/ / Render o jogo Render (); ?> </ Div> <Php WriteTableFooter ();?> </ Form> </ Body> </ Html> Este pequeno pedao de HTML torna o nosso quadro-a esfriar para iniciar um novo jogo, uma lugar para entrar em seus movimentos, eo resto do jogo. D uma olhada na Figura 7.1 para ver uma layout geral do que o jogo ser semelhante. Figura 7.1 layout geral do jogo de xadrez. Trabalhando com o Pieces 143 Trabalhar com as peas Agora que voc sabe como voc geralmente deseja colocar para fora o jogo de xadrez, voc pode criar a constantes para as peas e algumas funes para mover as peas. Alm disso, voc vai querer criar a funo de tornar geral para comear o seu jogo. <? Php Renderizao function () { global $ gGameState; gBoard $ global; switch ($ gGameState) { GAME_RUNNING caso: { DrawBoard (); } game_over caso: { printf ("Game is Over"); } } / / Atualizar o nosso estado do jogo $ _SESSION ['GGameState'] = $ gGameState; } ?> <!-Pieces.php -> <? Php / / Constantes para definies pedao define ("peo", 0); define ("Knight", 2); define ("bispo", 4); define ("ROOK", 6); define ("RAINHA", 8); define ("rei", 10);

define ("EMPTY_SQUARE", 12); / Coisas / para o bitboards define ("ALL_PIECES", 12); define ("ALL_SQUARES", 64); define ("ALL_BITBOARDS", 14); / / Peas Branco 144 Captulo 7 Jogando com Xadrez e bancos de dados define ("ALL_WHITE_PIECES", ALL_PIECES); define ("WHITE_PAWN", peo); define ("WHITE_KNIGHT", KNIGHT); define ("WHITE_BISHOP", BISHOP); define ("WHITE_ROOK", ROOK); define ("WHITE_QUEEN", QUEEN); define ("WHITE_KING", KING); / / Peas Preto define ("ALL_BLACK_PIECES", ALL_PIECES + 1); define ("BLACK_PAWN", PENHOR + 1); define ("BLACK_KNIGHT", CAVALEIRO + 1); define ("BLACK_BISHOP", BISPO + 1); define ("BLACK_ROOK", ROOK + 1); define ("BLACK_QUEEN", QUEEN + 1); define ("BLACK_KING", KING + 1); / Pea / Valores $ PieceValues [WHITE_PAWN] = 100; $ PieceValues [WHITE_KNIGHT] = 300; $ PieceValues [WHITE_BISHOP] = 350; $ PieceValues [WHITE_ROOK] = 500; $ PieceValues [WHITE_QUEEN] = 900; $ PieceValues [WHITE_KING] = 2000; $ PieceValues [BLACK_PAWN] = 100; $ PieceValues [BLACK_KNIGHT] = 300; $ PieceValues [BLACK_BISHOP] = 350; $ PieceValues [BLACK_ROOK] = 500; $ PieceValues [BLACK_QUEEN] = 900; $ PieceValues [BLACK_KING] = 2000; StartBoard function () { gBoard $ global; GBoard $ array = ( BLACK_ROOK, BLACK_KNIGHT, BLACK_BISHOP, BLACK_QUEEN, BLACK_KING, BLACK_BISHOP, BLACK_KNIGHT, BLACK_ROOK, BLACK_PAWN, BLACK_PAWN, BLACK_PAWN, BLACK_PAWN, BLACK_PAWN, BLACK_PAWN, BLACK_PAWN, BLACK_PAWN, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, Trabalhando com o Pieces 145 EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE,

EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, EMPTY_SQUARE, WHITE_PAWN, WHITE_PAWN, WHITE_PAWN, WHITE_PAWN, WHITE_PAWN, WHITE_PAWN, WHITE_PAWN, WHITE_PAWN, WHITE_ROOK, WHITE_KNIGHT, WHITE_BISHOP, WHITE_QUEEN, WHITE_KING, WHITE_BISHOP, WHITE_KNIGHT, WHITE_ROOK); } / / Coloca uma pea no tabuleiro / / $ Quadrado o quadrado da pea 0-63 / / $ Pea a pea que est se movendo PutPiece funo ($ square, $ piece) { gBoard $ global; / / Coloque a pea no tabuleiro $ GBoard [$ square] = $ pea; } / / Toma um pedao fora da placa / / $ Quadrado o quadrado da pea 0-63 voc est removendo TakePiece funo ($ quadrado) { gBoard $ global; / / Pegue o pedao fora da placa bit $ GBoard [$ square] = EMPTY_SQUARE; } / / Isso move uma pea MovePiece funo ($ fromSquare, toSquare $, $ piece) { PutPiece ($ toSquare, $ parte); TakePiece ($ fromSquare); } UpdateMoveList funo ($ fromSquare, $ toSquare) { $ Data = $ fromSquare + "-" + $ toSquare; 146 Captulo 7 Jogando com Xadrez e bancos de dados / / Abre o banco de dados $ Db = dba_open ("chess.db", "c", "db3"); if (! $ db) { dba_close (); $ Db = dba_open ("chess.db", "w", "db3"); if (! $ db) { printf ("Impossvel abrir o banco de dados."); WriteTableFooter (); } } / / Agora que o banco de dados aberta, voc precisa encontrar a chave disponvel seguinte $ NextID = 0; $ Key = dba_firstkey ($ db); while ($ chave! = false)

{ if ($ key> $ NextID) { NextID $ = $ chave; } $ Key = dba_nextkey ($ db); } $ NextID + + / / Esta a chave mais prximo disponvel $ Dba_insert ($ NextID, serialize ($ data), $ db); / / Fechar o banco de dados dba_close ($ db); } ?> Primeiro voc cria um escudo para o render () funo. Isto bastante simples e nada novo para voc. Em seguida, voc criar um novo arquivo chamado pieces.php. Isto o que voc vai incluir junto com o arquivo common.php. Em pieces.php ser toda a lgica para iniciar uma placa, mover uma pea, e tendo uma pea. Note que em pieces.php voc tem vrias constantes. Isto torna mais fcil para criar o necessrio peas para ambos os lados. Em seguida voc cria cada tipo de pea que est na placa usando o constantes que voc criou. Se voc ainda no adivinhou ainda, o jogador branco a constante 0 e as pretas a uma constante. Voc pode criar define para estes, se voc gosta, e voc provavelmente deveria. Trabalhando com o Pieces 147 O StartBoard () funo bastante simples. Ele inicializa todos os fruns e lugares as peas nos lugares apropriados. Uma vez que voc ser o jogador branco, voc est tecnicamente em parte inferior da placa eo preto est na parte superior do tabuleiro. Uma vez que o preto no topo da a placa que leva at os locais antes de a matriz e branco ocupa os locais ltima da matriz. O PutPiece () funo tem um quadrado e um pedao como seus parmetros. A praa o quadrados que voc gostaria de colocar a pea em, ea pea a pea que voc est colocando em que quadrado. O TakePiece () funo simplesmente pega um quadrado que est a tomar um pedao dos. O MovePiece () funo tem um quadrado e um pedao seguida, chama o PutPiece () funo e funo do TakePiece (). Agora voc tem a lgica bsica para colocar uma pea no tabuleiro, tendo uma pea fora do tabuleiro,

e comear uma nova diretoria. Alm disso, voc tem todas as variveis que voc precisa para as placas de bits e todas as variveis que voc precisa para representar as peas. Em seguida, voc precisa encontrar uma maneira de tornar o conselho para o navegador para que voc possa v-lo. Pense em como um tabuleiro de xadrez colocado para fora: uma placa de 8 8 com cores alternadas para quadrados. O quadrado no canto inferior direito da diretoria e da praa, no canto superior esquerdo da conselho deve ser o quadrado de cor clara. Seu crebro deve estar dizendo coisas como: "A ciclo seria bom. Mas espere, um 8 8 bordo ... dois loops seria melhor. " isso mesmo, voc precisa de dois loops, um para as oito linhas, e um para o oito colunas na placa. Vamos usar dois tons de marrom para o conselho. Para o uso cor mais clara # E4B578 e para o de cor escura quadrados vamos usar # B88645. DrawBoard function () { gBoard $ global; printf ("<table border=\"0\" cellpadding=\"0\" cellspacing=\"1\"> <td align=\"center\" valign=\"middle\" width=\"300\"> "); / / Start nossa mesa para conter a bordo printf ("<borda da tabela = \" 0 \ "cellpadding = \" 0 \ " cellspacing = \ "1 \" width = \ "240 \ ">"); CurrColor $ = "# E4B578"; for ($ row = 0; $ row <8; $ row + +) { / / Imprime uma linha nova tabela printf ("<tr>"); for ($ coluna = 0; $ col <8; $ col + +) 148 Captulo 7 Jogando com Xadrez e bancos de dados { / / Pega o pedao de prestar $ Parte = $ gBoard [$ linha * 8 + $ col]; / / Iniciar uma clula nova tabela para esta pea printf ("bgcolor=$currColor> <td"); / / Coloque a pea no tabuleiro switch ($ parte) { WHITE_PAWN caso: { printf ("<img src = \" images / wp.gif \ " border = \ 0 "\ ">"); break;} caso WHITE_KNIGHT: { printf ("<img src = \" images / wn.gif \ " border = \ 0 "\ ">"); break;} WHITE_BISHOP caso: { printf ("<img src = \" images / wb.gif \ " border = \ 0 "\ ">"); break;}

caso WHITE_ROOK: { printf ("<img src = \" images / wr.gif \ " border = \ 0 "\ ">"); break;} caso WHITE_QUEEN: { printf ("<img src = \" images / wq.gif \ " border = \ 0 "\ ">"); break;} WHITE_KING caso: { printf ("<img src = \" images / wk.gif \ " border = \ 0 "\ ">"); break;} BLACK_PAWN caso: { printf ("<img src = \" images / bp.gif \ " border = \ 0 "\ ">"); break;} caso BLACK_KNIGHT: { printf ("<img src = \" images / bn.gif \ " border = \ 0 "\ ">"); break;} BLACK_BISHOP caso: { printf ("<img src = \" images / bb.gif \ " border = \ 0 "\ ">"); break;} caso BLACK_ROOK: { printf ("<img src = \" images / br.gif \ " border = \ 0 "\ ">"); break;} Trabalhando com o Pieces 149 caso BLACK_QUEEN: { printf ("<img src = \" images / bq.gif \ " border = \ 0 "\ ">"); break;} BLACK_KING caso: { printf ("<img src = \" images / bk.gif \ " border = \ 0 "\ ">"); break;} caso EMPTY_SQUARE: { printf ("<img src=\"images/blank.gif\" border=\"0\">"); break;} default: { printf ("<img src=\"images/blank.gif\" border=\"0\">");} } / / End essa clula da tabela printf ("</ td> \ n"); / / Mude a cor if ($ currColor == "# E4B578") { CurrColor $ = "# B88645"; } outro { CurrColor $ = "# E4B578"; } } / / End essa linha da tabela printf ("</ tr> \ n"); / / Mude a cor if ($ currColor == "# E4B578") {

CurrColor $ = "# B88645"; } outro { CurrColor $ = "# E4B578"; } } 150 Captulo 7 Jogando com Xadrez e bancos de dados / / Fim da mesa printf ("</ table>"); printf ("</ td> <td align = \" center \ "valign = \" meio \ " width = \ "100 \"> STUFF DATABASE AQUI </ td> </ tr> </ table> "); WriteTableFooter (); } O DrawBoard () funo usa um global: o prprio conselho. Ele contm dois loops: uma para percorrer as linhas do tabuleiro ea outra para percorrer as colunas da bordo. Uma vez que voc estiver usando uma matriz unidimensional para armazenar o estado do tabuleiro, voc necessidade de calcular a linha e coluna. Para fazer isso voc multiplicar a linha que voc est de pelo nmero de colunas que voc tem, que neste caso 8. Ento voc adicionar a coluna que voc est atualmente, e isto lhe dar o seu ndice adequado para a sua matriz. Uma vez voc tem este ndice possvel recuperar a pea que est nessa posio e desenh-la no bordo. Depois de uma coluna feito, ele muda as cores dos quadrados e repete para todas as linhas e colunas. Os resultados deste deve ser semelhante a Figura 7.2. Figura 7.2 Resultados da sua funo render. Recebendo a entrada do usurio e modificar o banco de dados 151 Agora que voc tem a shell bsico do jogo, vamos dar a entrada do usurio, armazen-lo em um banco de dados, atualizar a placa e as "coisas DATABASE AQUI" seo. Recebendo a entrada do usurio e Modificando o banco de dados Para recuperar movimentos desejados do usurio que voc precisa para manter o controle de algumas coisas. Uma delas que por sua vez do jogador que . Lembre-se do mundial gCurrentPlayer $ varivel que voc criou quando comeou este jogo? Isso o que voc ir usar para manter o controle do jogador. Voc vai querer ter em sua entrada do usurio em um local central para a sua programao, e ento voc vai deseja atualizar a placa para que o usurio pode ver visualmente o que est acontecendo. funo ProcessInput () { gBoard global $, $ gCurrentPlayer; if ($ _POST ['fromSquare'] == "")

retorno; / / Pega o de e para a praa $ FromSquare obterCasa = ($ _POST ["fromSquare"]); $ ToSquare obterCasa = ($ _POST ["toSquare"]); / / Pega a pea a ser movida $ Parte = $ gBoard [$ fromSquare]; if (($% pedao 2)! gCurrentPlayer = 0 & & $ == "branco") { printf ("No a sua vez"); retorno; } / / Move a pea MovePiece ($ fromSquare, toSquare $, $ parte); / / Atualiza o banco de dados UpdateMoveList ($ _POST ["fromSquare"], $ _POST ["toSquare"]); / / Muda o jogador atual if ($ gCurrentPlayer == "branco") { $ GCurrentPlayer = "black"; 152 Captulo 7 Jogando com Xadrez e bancos de dados } outro { $ GCurrentPlayer = "branco"; } / / Loja da placa atualizado na sesso $ _SESSION ['GBoard'] = $ gBoard; $ _SESSION ['GCurrentPlayer'] = $ gCurrentPlayer; } funo obterCasa ($ strSquare) { $ Col = substr ($ strSquare, 0, 1); $ Linha = substr ($ strSquare, 1, 1); switch ($ col) { caso "a": {$ coluna = 0; break;} caso "b": {$ coluna = 1; break;} caso "c": {$ col = 2; break;} caso "d": {$ coluna = 3; break;} caso "e": {$ col = 4; break;} caso "f": {$ col = 5; break;} caso "g": {$ col = 6; break;} caso "h": {$ col = 7; break;} } switch ($ row) { caso "8": {$ linha = 0; break;} caso "7": {$ linha = 1; quebrar;} case "6": {$ linha = 2; break;} case "5": {$ linha = 3; break;}

"4" caso: {$ linha = 4; break;} case "3": {$ linha = 5; break;} case "2": {$ linha = 6; break;} case "1": {$ linha = 7; break;} } return ($ linha * 8 + $ col); } Recebendo a entrada do usurio e modificar o banco de dados 153 A funo ProcessInput () primeiro recupera o quadrado que voc est se movendo de e quadrada que voc est se movendo para usando o obterCasa () funo. O obterCasa (funo) Obtm a linha ea coluna que o usurio inseriu usando o substr () funo. A coluna o primeiro caractere na string, ea linha o segundo personagem na seqncia. Vez que o branco est no fundo e branco sempre se move em primeiro lugar, voc precisa virar o tabuleiro para obter os nmeros adequados. Isso o que as duas declaraes so usadas para mudar. O primeiro instruo switch refere uma carta a um nmero de coluna. A instruo switch segunda inverte a ordem das linhas. A declarao de retorno o clculo exato que voc usou na o DrawBoard () funo. Aps a praa de origem e destino da praa so recuperadas voc precisa verificar para ver se o usurio atual ainda permitido mover a pea que ele est tentando se mover. Se no for por sua vez que voc deix-lo saber. Voc pode determinar se a vez de branco ou no, porque a pea nmero que voc definiu no arquivo pieces.php so todos, mesmo para brancos e estranho para negros. Assim se voc executar um mdulo por dois na pea atual eo resultado zero, ento por sua vez branco, caso contrrio, a vez de negro. O ltimo passo para fazer uma jogada mover o pea no tabuleiro, atualizar o banco de dados, switch ligar o leitor atual, e atualizar o dados da sesso. O UpdateMoveList () funo recebe dois argumentos: o da praa e os de quadrados. Esta a funo que insere as informaes no banco de dados. D uma olhada nisso: UpdateMoveList funo ($ fromSquare, $ toSquare) { $ Data = $ fromSquare + "-" + $ toSquare; / / Abre o banco de dados $ Db = dba_open ("chess.db", "c", "db3"); if (! $ db)

{ dba_close (); $ Db = dba_open ("chess.db", "w", "db3"); if (! $ db) { printf ("Impossvel abrir o banco de dados."); WriteTableFooter (); } } / / Agora que o banco de dados aberta, voc precisa encontrar a chave disponvel seguinte $ NextID = 0; $ Key = dba_firstkey ($ db); while ($ chave! = false) 154 Captulo 7 Jogando com Xadrez e bancos de dados { if ($ key> $ NextID) { NextID $ = $ chave; } $ Key = dba_nextkey ($ db); } $ NextID + + / / Esta a chave mais prximo disponvel $ Dba_insert ($ NextID, serialize ($ data), $ db); / / Fechar o banco de dados dba_close ($ db); } A primeira coisa UpdateMoveList () faz criar uma string com os dados que voc deseja inserir para o arquivo. Ento ele cria um novo banco de dados chamado chess.db. Se chess.db j existe, ento ele abre-o com leitura / gravao. Para inserir os dados no banco de dados que voc precisa encontrar a primeira chave disponvel. Para fazer isso voc deve percorrer o banco de dados e encontrar os ltimos chave e adicionar um. Depois de feito isso voc pode inserir seu registro e fechar o banco de dados. Agora que voc est armazenando as jogadas em um banco de dados voc obviamente vai querer mostrar ao usurio a histria se mover. Para fazer isso voc vai querer usar o <IFRAME> </ IFRAME> tag e aponte o pgina de origem para uma pgina PHP nova chamada move.php. Aqui est o arquivo move.php todo: <? Php / / Mostra os movimentos na pgina $ Db = dba_open ("chess.db", "r", "db3"); / / Pega o primeiro registro $ Key = dba_firstkey ($ db); $ Move = 1; / / Percorre todo o banco de

while ($ chave! = false) { $ Valor = dba_fetch ($ key, $ db); $ Entrada = unserialize ($ value); printf ($ movimentar $ entrada "<BR>". ""...); $ Key = dba_nextkey ($ db); $ Move + +; Recebendo a entrada do usurio e modificar o banco de dados 155 } dba_close ($ db); ?> Agora que voc tem a pgina para mostrar os movimentos que voc ter de editar o seu DrawBoard () funo para escrever as <IFRAME> </ IFRAME> tag. Tudo que voc precisa fazer especificar a fonte pgina para o quadro de embutidos, a largura ea altura, assim: printf ("<IFRAME src = \" move.php \ "width = \" 200 \ " height = \ "300 \"> No possvel exibir histrico de movimentao </ IFRAME> ").; Esta linha deve ir para onde voc originalmente tinha o "STUFF DATABASE AQUI" linha. O resultados de todas as suas trabalho duro so mostrados na Figura 7.3. Nota Neste ponto, voc deve ir em seu arquivo php.ini e vire display_errors para fora. A razo para esta porque voc s quer mostrar os erros durante a depurao, caso contrrio voc ter de alerta avisos por todo o lugar que realmente no afetam o jogo. Figura 7.3 Resultados de usar o banco de dados. 156 Captulo 7 Jogando com Xadrez e bancos de dados Concluso Este jogo est longe de terminar. H tantos elementos mais voc poderia acrescentar, como o computador AI, mover, validao e rede de apoio, os quais seriam grandes recursos para o seu jogo. No entanto, voc cobriu uma grande quantidade de informaes contidas neste captulo. Voc aprendeu o que um banco de dados no-relacional , como criar um banco de dados norelacional, como modificar um banco de dados, algumas noes bsicas de programao de xadrez, e, por cima de tudo isso, voc criou um jogo de xadrez bsico com suporte a banco de dados para mostrar o histrico de movimentao. Embora existam vrias elementos que voc poderia acrescentar para melhorar o jogo de xadrez, voc completou uma fantstica trabalho de criar um jogo de xadrez muito legal bsico. Prximo passo: trabalhar com grficos dinmicos. captulo 8 GD Grficos Viso global

O que GD? Instalar GD Criando uma imagem Formas Com base na lona A manipulao da informao da cor Adicionando texto em imagens Redimensionar Imagens GD B outell da biblioteca uma tima ferramenta que lhe fornece formas de manipular grficos em tempo real. Neste captulo voc vai aprender exatamente isso. Voc vai comear por aprender a criar imagens e desenhar formas simples na tela. Ento voc vai aprender a manipular as informaes de cor de uma imagem, adicionar texto a uma imagem, e, finalmente, como redimensionar uma imagem. Este conhecimento permitir que voc adicionar grficos interessantes sobre o voar para o seu jogo on-line. O que GD? GD uma biblioteca C grfica que permite criar e manipular. Jpegs,. Pngs, e . Wbmps. O que voc diria? No h suporte para. Gifs? Isso est correto. Costumava haver um GD biblioteca l fora ao mesmo tempo que apoiaram o formato de arquivo. gif, mas desde Unisys (empresa que detm a patente sobre LWZ compresso que. utilizar gifs) mudou seu licenciamento acordos, GD parou de apoiar o formato de arquivo. gif. Isso pode mudar nos prximos 157 158 Captulo 8 GD Grfica Viso ano, porque Boutell (a empresa que faz a biblioteca GD) o planejamento para apoiar. gifs assim que a patente expira. Enquanto isso, no tenha medo porque. Pngs suporte todos os recursos de um gif. (como foi discutido no Captulo 3). Instalao de GD Apenas no caso de voc perdeu instalar a biblioteca GD quando voc era a criao de PHP, eu vou rapidamente passar por isso novamente. Alm disso, vou mostrar-lhe um pedao pequeno grande de cdigo que voc pode usar para carregar a biblioteca dinamicamente. Para instalar o GD em uma instalao Linux ou UNIX voc ter que recompilar o PHP com a opo - with-gd. Voc tambm pode compilar a biblioteca GD como um objeto compartilhado para que voc possa carregar a biblioteca GD dinamicamente sempre que voc precisar. Para fazer isso voc usaria a - With-gd = opo compartilhada. Ento, para carregar na biblioteca dinamicamente em tempo de execuo, voc use a seguinte linha de cdigo: dl ('gd.so');

Para instalar o GD na plataforma Windows, voc precisar copiar o php_gd2.dll que veio com o pacote de instalao para o diretrio de extenses especificado no arquivo php.ini. Ento voc precisar editar o arquivo php.ini e descomente a seguinte linha: extension = php_gd2.dll Isto ir permitir acesso biblioteca GD. Se voc gostaria de carregar a extenso dinamicamente com script poder faz-lo com a seguinte linha de cdigo: dl ('php_gd2.dll'); C Aution , A fim de carregar dinamicamente uma extenso, o arquivo de arquivo objeto compartilhado (UNIX) ou a dll (Windows) deve estar no diretrio de extenses especificado no arquivo php.ini. Se no for, ento o carregamento do extenso falhar e nenhuma das funes estaro disponveis para o seu jogo. Vamos dizer que voc no sabe se o servidor estiver hospedando seus arquivos em um UNIX ou Windows servidor. Voc pode criar um script de carga dinmica que vai funcionar em qualquer plataforma muito facilmente. Basta dar uma olhada no seguinte cdigo: <? Php if (! extension_loaded ('gd')) { if (strtoupper (substr (PHP_OS, 3)) == "WIN") { dl ('php_gd2.dll'); Instalando GD 159 } outro { dl ('gd.so'); } } ?> Este pedao de cdigo pouco til funcionar para qualquer exemplo de extenso isto s acontece a ser para a biblioteca GD. O primeiro passo ver se a extenso j est carregado. Se o extenso carregada ento por que voc quer fazer qualquer outra coisa? Se, no entanto, a extenso no carregada, ento voc vai precisar determinar qual plataforma voc est e carregar o arquivo apropriado. Para determinar o que o script PHP OS est vivendo em voc vai precisar usar o PHP_OS constante. Isso retorna as informaes sobre o sistema operacional atual. Se voc estiver em uma Plataforma Windows os trs primeiros caracteres da string ser "WIN". Se voc no encontrar

a string "WIN" no PHP_OS constante seguro assumir que voc est em uma plataforma UNIX. Depois de saber que plataforma voc est voc pode dinamicamente carregar a extenso que voc deseja usando a funo dl (). Agora que voc tem a extenso carregado corretamente hora de testar para ver se realmente ali. A maneira mais fcil de fazer isso usar a funo phpinfo (). Lembra quando voc costumava isso no Captulo 2? Voc ter que executar esse script mesmo teste novamente e olhar para uma seo na pgina que se parece com a Figura 8.1. Figura 8.1 Resultados da funo phpinfo (). 160 Captulo 8 GD Grfica Viso Criando e usando uma nova imagem Para criar novas imagens, GD oferece duas funes. Ambas estas funes possuem dois argumentos, largura e altura, e ambos retornam um recurso para a imagem. imagecreate (largura, altura) imagecreatetruecolor (largura, altura) GD tambm oferece funes para criar imagens a partir de arquivos existentes, mas voc vai aprender sobre estes mais adiante neste captulo. Primeiro dar uma olhada no imagecreate () funo. Nota Um recurso a uma imagem apenas o bloco de memria em que a imagem est sendo armazenada. Em PHP voc trabalho na memria para manipular imagens em vez de uma GUI, como o Paint Shop Pro. Imagecreate () cria uma nova imagem em branco com o nmero de largura de pixels de largura, e altura nmero de pixels de altura. A paleta de cores que imagecreate () usa ao criar uma imagem uma paleta de cor indexada, o que significa que o nmero de cores na paleta ser 256. Lembre-se no captulo 3, quando os tipos de imagem e compresses foram discutidos? O indexados paleta de cores utiliza uma tabela de pesquisa de cores para determinar a cor especfica. Estes tipos de imagens so realmente bons para as imagens que usam cores planas ou de texto e eles so especialmente bons com formas simples. Voc pode salvar estas imagens como. Png arquivos, e se j suporta o GD Formato de arquivo. Gif de novo, voc ser capaz de salv-los como arquivos. Gif. C Aution Se voc salvar uma imagem de 8 bits (tambm referida como uma imagem de paleta de cores indexadas) como um jpeg. Voc acabar com tamanhos de arquivo muito grande e imagens manchadas. D uma olhada em um exemplo para a criao de uma imagem em branco: <? Php

if (! extension_loaded ('gd')) { if (strtoupper (substr (PHP_OS, 3)) == "WIN") { dl ('php_gd2.dll'); } outro { dl ('gd.so'); Como utilizar as cores 161 } } $ ImageResource = imagecreate (100, 100); ?> Voc tem agora uma imagem na memria que de 100 pixels de largura e 100 pixels de altura. Agora voc pode operar nesta imagem utilizando vrias funes fornecidas pelo GD. Antes de entrar nesses funes, no entanto, dar uma olhada muito rpida no imagecreatetruecolor () funo. A funo imagecreatetruecolor () tambm tem uma largura e altura e tambm retorna um recurso a uma imagem na memria. No entanto, tem uma diferena fundamental: ele cria uma imagem com uma paleta de cores verdadeiras em vez de uma paleta de cor indexada. Isso faz com que esta funo ideal para a criao de grficos complexos com muitos elementos diferentes neles. Voc usaria esta funo para criar imagens. jpeg. Voc tambm pode salvar a imagem como png., Mas ser salva como um arquivo png true-color. invs de uma cor indexada. png. Agora que voc sabe como criar um recurso de imagem, voc vai querer saber como editar este recurso. Como utilizar as cores Antes que voc possa realmente comear a desenhar formas geomtricas em todo o lugar, necessrio o capacidade de selecionar e usar a cor. H oito funes bsicas para a cor, como se segue: imagecolorallocate (resource image, int vermelho, verde int, int blue) imagefill (resource image, int x, int y, int cor) imagecolortransparent (resource image, cor, int) imagetruecolortopalette (recurso de imagem, bool dither, cores int) imagecolorstotal (resource image) imagecolorat (resource image, int x, int y) imagecolorsforindex (resource image, int index) ImageColorSet (resource image, ndice de int, int vermelho, verde int, int blue) Cada uma destas funes tem um recurso de imagem como seu primeiro argumento. Agora dar uma mais aprofundada

olhar para cada uma destas funes para ver como voc vai ser capaz de uslas para manipular as cores em sua tela. Cores alocar a uma imagem Imagecolorallocate () recebe quatro argumentos: um recurso de imagem, um valor para a quantidade de vermelho que deveria ser na cor, um valor para a quantidade de verde que deve ser na cor, 162 Captulo 8 GD Grfica Viso e um valor para a quantidade de azul que deve ser na cor. Se voc nunca usou RGB (Vermelho, verde, azul) valores antes, cada elemento da cor tem uma faixa de 0 a 255; sendo 0 o nvel mais baixo e 255 sendo o nvel mais alto. Digamos que voc queria alocar uma cor que foi completamente preto. Voc poderia escrever uma linha de cdigo que semelhante ao seguinte: $ Preto = imagecolorallocate ($ someImageResource, 0, 0, 0); O que isso significa, essencialmente, que voc vai ser capaz de usar o preto $ varivel como uma cor em o recurso de imagem especificada. Se voc estava trabalhando com duas imagens simultaneamente, ento voc no seria capaz de usar a varivel $ preto em ambas as imagens. Voc pode usar apenas as cores que voc atribuir a uma imagem especfica. Se isso parece um pouco confuso, d uma olhada no seguinte exemplo de cdigo e espero que ela vai tornar as coisas um pouco mais claro: <? Php / / Cria duas imagens $ Imagem1 = imagecreate (100, 100); $ Image2 = imagecreate (100, 200); / / Alocar as cores a serem usadas $ Preto = imagecolorallocate ($ image1, 0, 0, 0); / / Isso legal para fazer ImageRectangle ($ image1, 6, 6, 66, 42, $ preto); / / Isso ilegal fazer porque o preto no atribuda imagem ImageRectangle ($ image2, 6, 6, 66, 42, $ preto); ?> Preenchimento da Imagem O imagefill () funo tambm tem quatro argumentos: um recurso de imagem, um ponto x de partida, imagefill um ponto de partida y, e as cores para preencher. () faz um preenchimento de toda a imagem comeando nas coordenadas especificadas. Uma vez que esta funo preenche toda a imagem no existe necessidade de especificar qualquer coordenar outros alm (0, 0). D uma olhada no seguinte exemplo: <? Php $ Imagem = imagecreate (100, 100);

$ Vermelho = imagecolorallocate ($ image, 255, 0, 0); Imagefill ($ imagem, 0, 0, $ vermelho); / / Mostra a nossa imagem header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> D uma olhada na Figura 8.2 para ver os resultados de usar o imagefill () funo. Como utilizar as cores 163 Figura 8.2 Resultados de usar o imagefill () funo. Voc poderia ter especificado qualquer (x, y) coordenar e voc teria recebido exatamente o mesmo resultados. No se preocupe muito com o cdigo de mostrar agora, que ser posteriormente coberto em neste captulo. Definio de sua cor transparente Se voc estiver usando um formato de imagem que suporta transparncias, como. Png, voc pode definir a cor que voc quer aparecer como transparente usando o imagecolortransparent () funo . (Figura 8.3) imagecolortransparent () recebe dois argumentos: o recurso de imagem, e a cor que voc deseja tornar transparente. Para alocar uma cor para ser transparente voc ainda usar o imagecolorallocate () funo. Para entender isso melhor, d uma olhada no cdigo abaixo. No exemplo a seguir um crculo vermelho desenhado sobre um fundo escuro e depois o cor vermelha transparente e feito a mesma imagem desenhada novamente. <? Php $ Imagem = imagecreate (128, 128); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); $ Vermelho = imagecolorallocate ($ image, 255, 0, 0); / / Faz o fundo preto Imagefill ($ imagem, 0, 0, $ preto); / / Desenha o crculo Imagefilledarc (imagem $, 64, 64, 110, 110, 0, 360, $ vermelho, IMG_ARC_PIE); / / Mostra a nossa Imagem Cheio Imagepng ($ imagem, "redcircle.png"); / / Faz o vermelho transparente Imagecolortransparent ($ imagem, $ vermelho); 164 Captulo 8 GD Grfica Viso / / Mostra a nossa Imagem Transparente Imagepng ($ imagem, "transparentcircle.png"); Imagedestroy ($ imagem); ?> <HTML> <HEAD>

<TITLE> Teste de Imagem </ TITLE> </ HEAD> <BODY> <img src="redcircle.png"> <img src="transparentcircle.png"> </ BODY> </ HTML> C Aution Voc vai precisar para mudar as permisses na pasta que contm redcircle.png, a fim de usar o exemplo. Basta adicionar leitura / gravao de permisses para o usurio IUS_ (MACHINENAME), sob a segurana guia para a pasta. Figura 8.3 Usando cores transparentes. Como utilizar as cores 165 Como isso legal? Voc est rapidamente se tornando um especialista em grficos em PHP. Novamente, no se preocupe sobre o cdigo de mostrar ainda, eu prometo que voc vai chegar a ele mais adiante neste captulo. Convertendo uma imagem true-color para uma imagem de paleta Converter uma imagem no to complicado quanto parece. Por uma questo de fato, isso muito fcil usando o imagetruecolortopalette () funo. imagetruecolortopalette () recebe trs argumentos, a primeira das quais o recurso de imagem. O segundo um valor Boolean se ele estiver definido para verdade, ento dithering ser usado, caso contrrio dithering no ser usado. O terceiro argumento o nmero de cores que deve aparecer na paleta de cores da nova imagem. Voc pode usar esta funo para converter um. Imagem jpeg em imagem de cor indexada, mas o declnio na qualidade da imagem seria muito perceptvel. A razo mais lgica para uso esta funo seria se voc tiver um. imagem png que usa apenas, digamos, 16 cores, mas foi salvos como uma imagem true-color, por algum motivo estranho. D uma olhada no seguinte exemplo: <? Php / / Pega a imagem que precisa ser convertido $ Imagem = imagecreatefromjpeg ('truecolorimage.png'); / / Agora converta a imagem, pois s usando 16 cores que voc s precisa especificar 16 cores Imagetruecolortopalette ($ imagem, verdade, 16); / / Salva a imagem Imagepng ($ imagem, 'convertedimage.png'); ?> Veja, voc converteu uma imagem existente de uma imagem true-color para uma imagem de cor indexada

e salva-lo como uma nova imagem tudo em trs linhas de cdigo. Eu disse que no era to complicado como parecia. Fazer algumas experincias com esta funo em vrias imagens diferentes ver os efeitos. Converter um arquivo. Foto jpeg usando dithering, e depois fazer a mesma coisa sem usando dithering para ver as diferenas dramticas. Cores contagem em uma imagem Para obter o nmero total de cores em uma imagem, voc pode usar imagecolorstotal (). Imagecolorstotal () recebe um argumento: o recurso de imagem para o qual voc deseja contar o nmero de cores. <? Php / / Obtm uma imagem $ Imagem = imagecreatefromjpeg ('somegraphic.png'); / / Agora contar as cores nesta imagem 166 Captulo 8 GD Grfica Viso $ TotalColors imagecolorstotal = ($ imagem); echo ("Existem" $ totalColors "cores nesta imagem"..); ?> C Aution O imagecolorstotal (funo) funciona apenas com imagens de cores indexadas. Recuperando uma cor em um Ponto O imagecolorat () funo recebe trs argumentos: o recurso de imagem, um ponto x, e um y ponto. imagecolorat () ir retornar o ndice da cor na especificada (x, y) pixel. Uma vez voc tem esse ndice voc pode usar o imagecolorsforindex () funo para recuperar o vermelho, componentes verde e azul da cor especfica. <? Php $ Imagem = imagecreatefromjpeg ('someimage.jpg'); $ ColorIndex = imagecolorat ($ image, 100, 20); $ ColorArray imagecolorsforindex = ($ imagem, $ ColorIndex); $ Vermelho = $ colorArray ['red']; $ $ ColorArray verde = ["verde"]; $ Azul = $ colorArray ['azul']; echo ("Vermelho:" $ vermelho "<br> Verde:" $ verde "<br> Azul:"..... $ azul); ?> C Aution O imagecolorat () funciona apenas com imagens de cores verdadeiras. O imagecolorsforindex () funo recebe dois argumentos: um recurso de imagem e uma cor ndice. Em seguida, retorna uma matriz com o vermelho individual, verde, azul e componentes em cada ndice. Depois de ter estes componentes voc poderia usar o imagecolorallocate () funo alocar uma cor para uma imagem, ou voc poderia usar o ImageColorSet () para

uma mudana de cor em uma imagem. O ImageColorSet () funo recebe cinco argumentos. O primeiro o recurso de imagem que voc quer operar, o segundo o ndice da cor que voc quiser mudar, o terceiro argumento o componente vermelho, o quarto o componente verde, ea quinta e ltima argumento o componente azul. Desenhando formas bsicas em sua tela Esvaziar 167 Desenhando formas bsicas em sua tela vazia Voc j sabe como criar uma tela de imagem que voc pode desenhar, e voc tambm sabe como alocar, manipular, e contar as cores em uma imagem. Agora voc vai aprender a desenhar formas geomtricas em sua tela vazia. T ip Se voc j trabalhou com DirectX que voc pode pensar o recurso de imagem como um tampo que voc desenha em. Quando voc exibir a imagem que voc pode pensar que, como blitting o buffer para a tela. A nica diferena que voc no faa isso quadro por. Para desenhar qualquer coisa em suas imagens voc precisa de um sistema de coordenadas. GD usa um cartesiano sistema de coordenadas onde o ponto (0, 0) est no canto superior esquerdo da imagem. Movendo para a direita ao longo do eixo x voc vai passar na direo x positiva. Em movimento para baixo ao longo do eixo y voc vai passar na direo y positivo. Voc nunca vai usar um negativo x ou y coordenar quando se trabalha com imagens. Cada uma das oito funes geomtricas disponveis no GD pega um ou mais conjuntos de coordenadas. Voc ir rever cada uma das oito funes em detalhes, de modo a poeira fora de todos os aulas de geometria antiga e prepare-se. Aqui esto as oito funes geomtricas, a fim de mais fcil para o mais difcil: ImageSetPixel (resource image, int x, int y, int cor) imageline (resource image, int x1, int y1, int x2, int y2, cor int) ImageRectangle (resource image, int x1, int y1, int x2, int y2, cor int) ImageFilledRectangle (resource image, int x1, int y1, int x2, int y2, cor int) imagepolygon (imagem de recursos, pontos de matriz, numberOfPoints int, int cor) ImageFilledPolygon (imagem de recursos, pontos de matriz, numberOfPoints int, int cor) imagearc (recurso de imagem, int centerXPoint, int centerYPoint, int width, int altura, int startDegree, int endDegree, cor int) imagefilledarc (recurso de imagem, int centerXPoint, int centerYPoint, int width, int altura, int startDegree, int endDegree, int cor, estilo, int)

Pixels e linhas ImageSetPixel () recebe quatro argumentos: o primeiro o recurso de imagem, o segundo o x ponto, o terceiro o ponto de y, eo quarto argumento a cor. O ImageSetPixel () funo desenha um nico pixel no ponto (x, y) na cor especificada. D uma olhada no seguinte exemplo: <? Php $ Imagem = imagecreate (320, 200); 168 Captulo 8 GD Grfica Viso $ Color = imagecolorallocate ($ image, 254, 254, 254); Imagefill ($ imagem, $ cor); for ($ iLoop = 0; $ iLoop <1000; $ iLoop + +) { $ Color = imagecolorallocate ($ imagem, rand ()% 256, rand ()% 256, rand ()% 256); ImageSetPixel ($ imagem, rand ()% 320, rand ()% 200, $ cor); } header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> Este exemplo gera uma imagem de 320 200, definio de 1000 pixels aleatrios em uma cor aleatria toda a tela. Voc usa a funo random para gerar um nmero aleatrio e em seguida, executar um mdulo em que o nmero de mant-lo entre os limites especificados da tela tamanho. D uma olhada na Figura 8.4 para ver os resultados do cdigo. Agora que voc pode desenhar pixels na tela, vamos lidar com uma funo que um pouco mais prtica. O imageline () funo desenha uma linha para a tela. Leva seis argumentos. O primeiro o recurso imagem qual voc est desenhando a linha. O segundo eo terceiro argumentos so as coordenadas iniciais da linha. O quarto e quinto argumentos so os terminando coordenadas da linha. O argumento final a cor que voc deseja que a linha ser elaborado dentro <? Php $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, $ branco); Imageline ($ imagem, 5, 5, 40, 100, $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?>

Neste exemplo, primeiro crie uma imagem que 320 200 pixels de largura. Ento voc alocar duas cores, branco e preto. Voc enche a tela com a cor branca para a sua tela agora todos brancos. Ento voc traar uma linha do ponto (5, 5) ao ponto (40, 100) em preto e sada a imagem para o navegador. Desenhando formas bsicas em sua tela Esvaziar 169 Figura 8.4 Gerao de 1000 pixels aleatrios. Figura 8.5 Desenho uma linha. De Linhas de retngulos ImageRectangle () pega os mesmos quatro parmetros como o imageline () funo, exceto em vez do ponto de partida de uma linha e um ponto final de uma linha, o canto superior esquerdo do retngulo e do canto inferior do lado direito do retngulo. <? Php $ Imagem = imagecreate (320, 200); 170 Captulo 8 GD Grfica Viso $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, $ branco); ImageRectangle ($ imagem, 5, 5, 100, 100, $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> Os resultados deste exemplo so mostrados na Figura 8.5. Mas no seria melhor dar o retngulo de partida (x, y) coordenar e uma largura e uma altura que voc gostaria que o retngulo a ser? Voc pode criar uma funo que faz exatamente isso. <? Php MyRectangle funo ($ imagem, $ x1, $ y1, $ largura, $ altura, $ cor) { / / Primeiro voc precisa calcular os valores de x2 e y2 $ X2 = $ x1 + $ largura; $ $ Y1 y2 = + $ altura; / / Agora, desenhe o retngulo ImageRectangle ($ imagem, $ x1, $ y1, x2 $, $ y2, $ cor); } $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, $ branco); MyRectangle ($ imagem, 5, 5, 95, 95, $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem);

?> Os resultados deste exemplo a aparncia da Figura 8.6, mas a funo muito mais intuitiva. Eu recomendo que quando voc ver uma maneira de fazer uma funo mais simples, criando o seu prprio, ento faz-lo. Qualquer momento que voc pode fazer um cdigo que faz mais sentido quando voc l -lo, voc deve faz-lo. Desenhando formas bsicas em sua tela Esvaziar 171 Figura 8.6 O ImageRectangle () funo. ImageFilledRectangle () funciona exatamente como ImageRectangle (), exceto que ela cria um retngulo preenchido. ImageFilledRectangle () pega os mesmos seis parmetros como ImageRectangle (). D uma olhar para o exemplo de cdigo seguinte para ver o MyFilledRectangle () funo: <? Php MyFilledRectangle funo ($ imagem, $ x1, $ y1, $ largura, $ altura, $ cor) { / / Primeiro voc precisa calcular os valores de x2 e y2 $ X2 = $ x1 + $ largura; $ $ Y1 y2 = + $ altura; / / Agora, desenhe o retngulo ImageFilledRectangle ($ imagem, $ x1, $ y1, x2 $, $ y2, $ cor); } $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, 0, 0, $ branco); MyFilledRectangle ($ imagem, 5, 5, 100, 100, $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> Os resultados do cdigo acima so mostrados na Figura 8.7. 172 Captulo 8 GD Grfica Viso Figura 8.7 O MyFilledRectangle () funo. De retngulos de Polgonos Como mencionado anteriormente, os conceitos de cada forma geomtrica vai ficar progressivamente mais difcil. No entanto, desenhando um polgono no to complicado. A principal diferena entre o desenho de um polgono e desenho de um retngulo o nmero de coordenadas do funo ir tomar. At agora voc tem lidado apenas com funes que recebem uma coordenada (X, y). O imagepolygon () funo recebe as coordenadas mltiplos. Ele tambm leva o nmero de

pontos que esto em seu polgono. Quando o imagepolygon () funo desenha o polgono que conecta cada ponto com uma linha. Imagepolygon () recebe quatro argumentos. O primeiro , naturalmente, o recurso imagem. O prximo argumento um array que contm todas as coordenadas para o ponto do polgono. O O terceiro argumento um inteiro dizendo imagepolygon () quantas vrtices esto em seu polgono. O quarto e ltimo argumento a cor em que voc deseja que o seu polgono a ser desenhado. Digamos que voc queria desenhar um tringulo na sua tela. Voc precisaria de trs conjuntos de coordenadas. Voc pode armazenar essas coordenadas em um array, por exemplo: $ Pontos = array (50, 10, 20, 40, 80, 40); Isto d-lhe cada canto do tringulo. Agora voc precisa calcular quantos pontos existem no polgono dado. Com um tringulo simples, no so, obviamente, trs pontos. Mas o que voc faria para uma forma mais complexa? Bem, j que h dois elementos no cada ponto, voc pode dividir o tamanho da matriz por 2 para obter o nmero de pontos na polgono. $ Vrtices = sizeof ($ pontos) / 2; Desenhando formas bsicas em sua tela Esvaziar 173 Lembre-se na ltima seo que eu disse quando voc ver uma maneira de tornar o cdigo um pouco mais simples, faz-lo. Bem, e se voc criou uma funo que levou trs argumentos em vez de quatro para criar um polgono? Isso seria timo, no ? Voc poderia economizar fazendo o nmero de clculo vrtices cada vez que voc queria desenhar um polgono. <? Php MyPolygon funo ($ imagem, $ pontos, $ cor) { / / Calcula o nmero de vrtices do polgono $ Vrtices = sizeof ($ pontos) / 2; / / Desenha o polgono para a tela Imagepolygon ($ imagem, $ pontos, vrtices $, $ cor); } ?> Eu sei que no parece muito agora, mas o que se voc estivesse constantemente desenhar polgonos e voc teve que refazer esse clculo diviso estpida a cada vez? D uma olhada no seguinte exemplo para ver como desenhar um polgono: <? Php MyPolygon funo ($ imagem, $ pontos, $ cor)

{ / / Calcula o nmero de vrtices do polgono $ Vrtices = sizeof ($ pontos) / 2; / / Desenha o polgono para a tela Imagepolygon ($ imagem, $ pontos, vrtices $, $ cor); } $ Pontos = array (50, 10, 20, 40, 80, 40); $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, 0, 0, $ branco); MyPolygon ($ imagem, $ pontos, $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> Os resultados deste exemplo pode ser visto na Figura 8.8. 174 Captulo 8 GD Grfica Viso Figura 8.8 Desenho de um polgono com a Imagepolygon () funo. O ImageFilledPolygon () funo recebe os mesmos parmetros que o imagepolygon () funo, mas em vez de desenhar um esboo do polgono ele desenha uma verso preenchido da polgono. Aqui uma funo modificada para o ImageFilledPolygon () funo: <? Php MyFilledPolygon funo ($ imagem, $ pontos, $ cor) { / / Calcula o nmero de vrtices do polgono $ Vrtices = sizeof ($ pontos) / 2; / / Desenha o polgono para a tela ImageFilledPolygon ($ imagem, $ pontos, vrtices $, $ cor); } ?> A partir de polgonos para Arcos e Elipses Wow, voc est rapidamente se tornando um mestre em criar on-the-fly imagens com GD. Depois que voc aprender a criar arcos e elipses, voc vai passar a colocar texto dinmico em seu grficos e, finalmente, voc vai dar uma olhada mais aprofundada em como exibir e salvar o seu on-the-fly imagens. GD oferece uma funo chamada imagearc () para criar, assim, arcos. Esta funo recebe uma gritante oito argumentos. O primeiro o recurso imagem. Os prximos dois argumentos so o ponto central x para o arco eo ponto central y para o arco. A quarta e

quinta argumentos so a largura desejada do arco, e depois a altura desejada do arco. O sexto argumento o grau de partida para o arco. O stimo argumento o fim grau para o arco. O oitavo e ltimo argumento a cor que voc gostaria que o arco a aparecer dentro Desenhando formas bsicas em sua tela Esvaziar 175 Nota O imagearc () funo desenha no sentido horrio. O imagearc () funo coloca 0 graus em trs horas, 90 graus s seis horas, 180 graus s nove horas, e 270 graus em doze horas. Apesar de documentao sobre www.php.net diz que o imagearc (funo) chama a anti-horrio, ele realmente chama no sentido horrio. D uma olhada em como voc usaria o imagearc () funo e os resultados. <? Php $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, 0, 0, $ branco); Imagearc ($ imagem, 50, 30, 90, 90, 0, 220, $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> O exemplo de cdigo acima desenha um arco que de 90 pixels de largura e 90 pixels de altura, com a sua ponto central em (50, 30). Ela comea na marca de grau 0 e termina na marca de 220 graus. D uma olhada na Figura 8.9 para ver os resultados do cdigo acima. Figura 8.9 O imagearc () funo. 176 Captulo 8 GD Grfica Viso O imagefilledarc (funo) se comporta da mesma maneira como a funo imagearc (). Ele tambm chama seu arco a partir de trs horas e indo no sentido horrio. Mas o Imagefilledarc (funo) recebe um argumento adicional. O argumento nono, depois de cor, o estilo em que o arco deve ser desenhado. Voc tambm pode usar um bit a bit OR para combinar estilos. D uma olhada no que os estilos so e como eles afetam o arco. IMG_ARC_PIE. Desenha um grfico de pizza arco de estilo com linhas contnuas ligando o centro apontam para as bordas do arco. IMG_ARC_CHORD. Desenha um tringulo que liga os pontos inicial e final do arco. IMG_ARC_NOFILL. Se esta opo for usada, ela se comporta como a funo imagearc (). IMG_ARC_EDGED. Conecta os pontos finais do arco ao seu centro.

Vamos usar cada um destes individualmente em um exemplo de cdigo e ter um olhar para os resultados assim que voc saber como cada estilo afeta o resultado do seu arco. <? Php $ Imagem1 = imagecreate (320, 200); $ Image2 = imagecreate (320, 200); $ Image3 = imagecreate (320, 200); $ Image4 = imagecreate (320, 200); $ Branco1 = imagecolorallocate ($ image1, 255, 255, 255); $ White2 = imagecolorallocate ($ image2, 255, 255, 255); $ White3 = imagecolorallocate ($ image3, 255, 255, 255); $ White4 = imagecolorallocate ($ image4, 255, 255, 255); $ Black1 = imagecolorallocate ($ image1, 0, 0, 0); $ Black2 = imagecolorallocate ($ image2, 0, 0, 0); $ Black3 = imagecolorallocate ($ image3, 0, 0, 0); $ Black4 = imagecolorallocate ($ image4, 0, 0, 0); Imagefill (image1 $, $ branco1); Imagefilledarc ($ image1, 50, 30, 90, 90, 0, 220, $ Black1, IMG_ARC_PIE); Imagepng ($ imagem1 ", pie.png"); Imagedestroy ($ imagem1); Imagefill ($ image2, white2 $); Imagefilledarc ($ image2, 50, 30, 90, 90, 0, 220, $ Black1, IMG_ARC_CHORD); Imagepng ($ imagem2 ", chord.png"); Imagedestroy ($ imagem2); Desenhando formas bsicas em sua tela Esvaziar 177 Imagefill ($ image3, $ white3); Imagefilledarc ($ image3, 50, 30, 90, 90, 0, 220, $ black3, IMG_ARC_NOFILL); Imagepng ($ image3 ", nofill.png"); Imagedestroy ($ image3); Imagefill (image4 $, $ white4); Imagefilledarc ($ image4, 50, 30, 90, 90, 0, 220, $ black4, IMG_ARC_EDGED); Imagepng ($ image4 ", edged.png"); Imagedestroy ($ image4); ?> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td align="left" valign="top"> <img src="pie.png"> </ td> <td align="left" valign="top"> <img src="chord.png"> </ td> </ Tr> <tr> <td align="left" valign="top"> IMG_ARC_PIE </ td> <td align="left" valign="top"> IMG_ARC_CHORD </ td> </ Tr> <tr> <td align="left" valign="top"> <img src="nofill.png"> </ td> <td align="left" valign="top"> <img src="edged.png"> </ td> </ Tr> <tr> <td align="left" valign="top"> IMG_ARC_NOFILL </ td> <td align="left" valign="top"> IMG_ARC_EDGED </ td>

</ Tr> </ Table> Isso produz a tela que voc v na figura 8.10. A uma forma bvia geomtricas faltando GD uma funo para criar uma elipse. Ou isso? Voc pode usar o imagearc () e imagefilledarc () para criar uma elipse. Tudo o que voc tem que fazer especificar um grau inicial de 0 e terminando um grau de 360. Isto ir criar uma elipse completa. Por exemplo: <? Php $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, $ branco); Imagearc (imagem $, 50, 40, 70, 40, 0, 360, $ preto); 178 Captulo 8 GD Grfica Viso header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> Isto gera uma elipse que se parece com a Figura 8.11. Figura 8.10 O imagefilledarc () funo. Figura 8.11 Criando uma elipse. Criando imagens com texto 179 Criando imagens com texto 179 Criando Imagens com Texto Voc viu como GD pode lidar com a geometria de desenho sobre a tela, mas o que se tem algum texto que deseja colocar dinamicamente em seu grfico? GD oferece trs funes principais para fazer isso. So eles: imagestring (resource image, fontNumber int, int x, int y seqncia de texto, cor int) imagettftext (resource image, int tamanho, ngulo de int, int x, int y, int cor string, fontfile, string texto) imagettfbbox (int tamanho ngulo, int, string fontfile, string texto); O imagestring () funo bastante simples. Leva seis parmetros. O primeiro o recurso imagem. O segundo um nmero de fontes, 1-5, que usa uma fonte built-in para escrever seu texto. O terceiro e quarto argumentos so o local que voc deseja que o texto para iniciar em. O quinto argumento o texto que voc deseja exibir. O argumento final a cor em que voc deseja que o texto a ser exibido. Este o mais simples de todas as trs fontes funes e d-lhe o mnimo de flexibilidade. <? Php $ Imagem = imagecreate (320, 200);

$ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, $ branco); Imagestring ($ imagem, 1, 10, 10, "Text Font Em 1", $ preto); Imagestring ($ imagem, 2, 10, 30, "Text Font Em 2", $ preto); Imagestring ($ imagem, 3, 10, 50, "Texto Em Fonte 3", $ preto); Imagestring ($ imagem, 4, 10, 70, "Text Font Em 4", $ preto); Imagestring ($ imagem, 5, 10, 90, "Text Font Em 5", $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> O exemplo de cdigo acima passa por cada tamanho da fonte que pode ser processado pelo Imagestring () funo. Figura 8.12 mostra os resultados do cdigo. Como voc pode ver, no um fonte muito bonita. Criando imagens com texto 179 Criando Imagens com Texto Voc viu como GD pode lidar com a geometria de desenho sobre a tela, mas o que se tem algum texto que deseja colocar dinamicamente em seu grfico? GD oferece trs funes principais para fazer isso. So eles: imagestring (resource image, fontNumber int, int x, int y seqncia de texto, cor int) imagettftext (resource image, int tamanho, ngulo de int, int x, int y, int cor string, fontfile, string texto) imagettfbbox (int tamanho ngulo, int, string fontfile, string texto); O imagestring () funo bastante simples. Leva seis parmetros. O primeiro o recurso imagem. O segundo um nmero de fontes, 1-5, que usa uma fonte built-in para escrever seu texto. O terceiro e quarto argumentos so o local que voc deseja que o texto para iniciar em. O quinto argumento o texto que voc deseja exibir. O argumento final a cor em que voc deseja que o texto a ser exibido. Este o mais simples de todas as trs fontes funes e d-lhe o mnimo de flexibilidade. <? Php $ Imagem = imagecreate (320, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, $ branco); Imagestring ($ imagem, 1, 10, 10, "Text Font Em 1", $ preto); Imagestring ($ imagem, 2, 10, 30, "Text Font Em 2", $ preto); Imagestring ($ imagem, 3, 10, 50, "Texto Em Fonte 3", $ preto); Imagestring ($ imagem, 4, 10, 70, "Text Font Em 4", $ preto);

Imagestring ($ imagem, 5, 10, 90, "Text Font Em 5", $ preto); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> O exemplo de cdigo acima passa por cada tamanho da fonte que pode ser processado pelo Imagestring () funo. Figura 8.12 mostra os resultados do cdigo. Como voc pode ver, no um fonte muito bonita. 180 Captulo 8 GD Grfica Viso Figura 8.12 Adicionando texto com o Imagestring () funo. A funo mais til para a renderizao de fontes para a sua tela imagettftext (). O Imagettftext (funo) leva oito argumentos. O primeiro o recurso imagem, o O segundo argumento o tamanho em que voc deseja processar o texto. O terceiro argumento o ngulo em que voc deseja processar o texto. Isso permitir que voc processar para os lados do texto, na diagonal, e mesmo de cabea para baixo, realmente um argumento divertido para brincar. O quarto e quinto argumentos so os (x, y) de coordenadas que deseja que o texto para iniciar em. O sexto argumento a cor que voc deseja processar a fonte polegadas O stimo argumento a fonte True Type que pretende utilizar, e o argumento final o texto que voc quer para processar. O imagettftext () retorna um array com oito elementos que representam os quatro pontos que fazem a bounding caixa do texto. D uma olhada na Tabela 8.1 para ver o ndice aponta para que no ponto. T ip Bounding Box Coordenadas ndice em Descrio da Matriz Posio 0 Lower x esquerda. Um baixo, esquerda posio y. 2 Lower direita x posio. 3 direita inferior posio y. 4 x posio superior direita. 5 posies y superior direita. 6 x posio superior esquerda. 7 posies y superior esquerdo. Tabela 8.1 * Voc comea no canto inferior esquerdo e trabalhar sua maneira sentido anti-horrio ao redor da caixa.

Por padro, imagettftext () processa anti-aliased texto. Se voc gostaria que a fonte a ser processado como aliased texto que voc precisa colocar um sinal "-" (menos) na frente da cor. Criando imagens com texto 181 Agora, tente tornar um texto em uma fonte legal tipo True. Estou usando o Matisse ITC para este exemplo. <? Php $ Imagem = imagecreate (500, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); Imagefill ($ imagem, 0, 0, $ branco); Imagettftext imagem ($, 36, 0, 0, 80, $ preto, "matisse_.ttf", "Texto Anti-alias fresco !!!"); Imagettftext (imagem $, 36, 0, 0, 150, - $ negro ", matisse_.ttf", "Texto Aliased fresco !!!"); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> C Aution Seja executado corretamente, o arquivo de fonte deve estar localizado no mesmo diretrio que seu arquivo PHP. Neste exemplo, eu prestados tanto o texto anti-aliased texto e alias para lhe mostrar a diferena. Os resultados so mostrados na Figura 8.13. Como voc pode ver, o texto alias muito irregulares em torno das bordas e no muito bonita. Imagino que haver muito poucos casos em que voc usar a fonte aliased. Figura 8.13 Rendering de texto com o imagettftext () funo. 182 Captulo 8 GD Grfica Viso C Aution H um bug na biblioteca GD no PHP 4.2. O bug far imagettftext () para lanar um erro. Isso no deve ser um problema desde o PHP 5 foi lanado. Se voc ainda est usando PHP 4.2, upgrade! Eu sei que voc est dizendo, "Cool, mas e se eu quero fazer alguns efeitos de fonte, como o relevo?" Voc pode fazer isso com imagettftext () tambm. Ele s requer alguma colocao cuidadosa de cores e texto. Tomemos o exemplo mesmo que voc acabou de fazer, mas acrescentar mais algumas linhas de cdigo para ele. <? Php $ Imagem = imagecreate (500, 200); $ White = imagecolorallocate ($ image, 255, 255, 255); $ Preto = imagecolorallocate ($ imagem, 0, 0, 0); $ Cinza = imagecolorallocate ($ image, 155, 155, 155); Imagefill ($ imagem, $ branco);

Imagettftext imagem ($, 36, 0, 2, 81, $ preto, "matisse_.ttf", "texto fresco Embossed !!!"); Imagettftext imagem ($, 36, 0, 0, 79, $ branco ", matisse_.ttf", "texto fresco Embossed !!!"); Imagettftext imagem ($, 36, 0, 0, 80, $ cinza ", matisse_.ttf", "texto fresco Embossed !!!"); header ("Content-type: image / png"); Imagepng ($ imagem); Imagedestroy ($ imagem); ?> O primeiro passo para criar o efeito que voc v na figura 8.14 tornar a borda preta em torno do texto. Para fazer isso que voc acabou de adicionar 1 ao (x, y) de coordenadas. Em seguida, voc quer tornar o texto mais uma vez com branco para criar uma separao entre o cinza eo preto. Para fazer isso, voc subtraia 1 do (x, y) de coordenadas. O passo final tornar o texto em cinza no especificado (x, y) de coordenadas. A funo de texto final de aprender o imagettfbbox () funo. Esta funo leva quatro argumentos. O primeiro o tamanho da fonte, ento o ngulo, seguido pelo True Type Font arquivo, e, por fim, o texto que voc deseja processar. imagettfbbox () retorna uma matriz com os caixa delimitadora do texto. Esta uma funo extremamente til quando voc precisa fazer certeza de que o texto que voc vai render dentro da imagem, a menos que voc no se importa de corte seu texto fora no meio da frase. A matriz retornada ordenado exatamente o mesmo que o imagettftext () matriz funo. Ele comea no canto inferior esquerdo da caixa e trabalha o seu caminho em torno de um sentido anti-horrio moda. Criando imagens com texto 183 Figura 8.14 Criando efeitos de texto legal com o Imagettftext () funo. Agora crie uma funo para colocar em nosso arquivo common.php que ir calcular a largura e altura da caixa delimitadora para o texto. Sua funo tambm precisa tomar quatro argumentos, mas voc vai querer voltar dois inteiros. Portanto, sua funo vai realmente precisa tomar seis argumentos. <? Php funo MyTTFBox ($ size, $ ngulo, fontfile $, $ texto, & $ largura, & $ altura) { / / Pega a caixa delimitadora $ ArrBox imagettfbbox = ($ tamanho, $ ngulo, fontfile $, $ texto);

/ / Agora calcular a largura ea altura da caixa $ Width = abs ($ arrBox [6] - $ arrBox [2]); $ Height = abs ($ arrBox [7] - $ arrBox [3]); } $ MyWidth = 0; $ MyHeight = 0; MyTTFBox (36, 0, "matisse_.ttf", "Texto em relevo fresco !!!", myWidth $, $ myHeight); echo ("A caixa delimitadora de R $ myWidth pixels por pixels $ myHeight."); ?> 184 Captulo 8 GD Grfica Viso O MyTTFBox () funo tem os mesmos quatro argumentos como o imagettfbbox () funo mais dois argumentos, o mais largura ea altura. A largura ea altura so passados por referncia, o que significa que qualquer coisa que muda essas variveis em funo tambm afetar os resultados das variveis que foram passados dentro D uma olhada na Figura 8.15 para ver o resultados de sua nova funo. Salvar suas imagens Todos os exemplos que voc j viu o uso de imagepng () e imagejpeg (). Estes dois funes so usadas para guardar as imagens em um arquivo e renderizar imagens para o navegador. H um terceira funo chamada imagewbmp () que processa e salva arquivos de WBMP. Todos os trs destes funes possuem dois argumentos. O primeiro necessrio: o recurso imagem. O segundo argumento opcional, voc pode especificar um nome de arquivo que voc gostaria de salvar a imagem os dados. Apenas certifique-se que se voc salvar um arquivo que voc use a extenso adequada. No tente salvar um arquivo. png ao usar o imagejpeg () e vice-versa. / / Isso salva um arquivo PNG Imagepng ($ imagem, "myimage.png"); / / Isso salva um arquivo JPEG Imagejpeg ($ imagem, "myimage.jpg"); / / Isso salva um arquivo WBMP Imagewbmp (imagem $ ", myimage.wbmp"); Figura 8.15 O MyTTFBox () funo. Usando imagens existentes 185 Se voc quiser tornar a imagem diretamente para o navegador que voc deve especificar um tipo de contedo. Voc pode fazer isso usando o construdo em PHP header () funo. Para renderizar uma png. Voc tem que especificar um tipo de contedo image / png. Para renderizar uma jpeg. Voc tem que especificar um tipo de contedo de image / jpg. Para renderizar uma WBMP voc tem que especificar um tipo de contedo de imagem / wbmp. / / Isso torna um PNG para o browser

header ("Content-type: image / png"); Imagepng ($ imagem); / / Isso torna um JPEG para o navegador header ("Content-type: image / jpg"); Imagejpeg ($ imagem); / / Isso torna um WBMP para o navegador header ("Content-type: image / wbmp"); Imagewbmp ($ imagem); Usando imagens existentes Ao longo deste captulo voc viu como criar imagens, cores usar, desenhe geomtricas formas para a tela, e processar texto s suas imagens. Agora voc vai aprender a usar imagens existentes para criar novas imagens. Existem seis funes bsicas que voc ir usar. O dois primeiros so a base do uso de imagens j existentes para fazer novas imagens. imagecreatefromjpeg (string filename) imagecreatefromjpeg (string filename) Cada uma dessas funes retorna um recurso a uma imagem. Voc no pode criar uma imagem de um WBMP, somente a partir. pngs e. jpegs. / / Pega um recurso a uma imagem existente $ Imagem = imagecreatefromjpeg ("someimage.png"); Depois de ter aberto um arquivo e recuperados um recurso que voc pode copiar, redimensionar resample, ou mesclar a imagem com outra imagem com as seguintes funes: imagecopy (recurso destinationImage, recursos sourceImage, int desinationX, destinationY int, int sourceX, int sourceY, int sourceWidth, int sourceHeight) imagecopyresized (recurso destinationImage, recursos sourceImage, int desinationX, int destinationY, int sourceX, int sourceY, int destinationWidth, int destinationHeight, int sourceWidth, int sourceHeight) imagecopyresampled (recurso destinationImage, recursos sourceImage, int desinationX, int destinationY, int sourceX, int sourceY, int destinationWidth, destinationHeight int, int sourceWidth, int sourceHeight) 186 Captulo 8 GD Grfica Viso imagecopymerge (recurso destinationImage, recursos sourceImage, int destinationX, destinationY int, int sourceX, int sourceY, int sourceWidth, int sourceHeight, int por cento) Eu inclu duas imagens no CD chamado dragon.jpg e frame.jpg. Voc vai usar estas imagens para criar uma nova imagem usando o imagecopy () funo. As imagens aparecem em Figura 8.16. Agora voc vai copiar dragon.jpg para frame.jpg usando o imagecopy () funo. <? Php / / Pega os nossos recursos de imagem $ Drago = imagecreatefromjpeg ("dragon.jpg");

$ Frame = imagecreatefromjpeg ("frame.jpg"); / Copiar / drago em quadro Imagecopy ($ frame, $ drago, 21, 31, 0, 0, 477, 462); / / Salva a imagem e mostr-la Imagejpeg (frame $, "frameDragon.jpg"); echo ("<img src=frameDragon.jpg>"); ?> Figura 8.16 Imagens para uso no imagecopy () funo. Usando imagens existentes 187 Eu vou quebrar cada elemento do imagecopy () funo neste exemplo. O primeiro argumento a imagem de destino, que neste caso de R $ frame. O segundo argumento o imagem de origem, que de R $ drago. O prximo argumento o pixel que deseja colocar o imagem de origem em na imagem de destino. Uma vez que o quadro termina na coordenada (21, 31), que onde voc quer colocar a imagem de origem. O prximo argumento o que voc quer pixels para pegar a imagem em. Desde que a imagem do drago se encaixa perfeitamente dentro da moldura, voc acabou de pegar que comeando na coordenada (0, 0). As alegaes finais so a largura ea altura da imagem de origem. Uma vez que o drago se encaixa perfeitamente dentro da moldura, voc pode especificar o largura e altura reais da imagem. Mas e se o drago foi o mesmo tamanho que o frame? Se ambas as imagens eram do mesmo tamanho, voc teria que fazer um pouco de matemtica para obter o mesmo resultados da Figura 8.17. Voc gostaria de primeiro pegar a imagem de origem do mesmo ponto voc estava colocando a imagem. No exemplo acima, seria (0, 0). Ento voc teria que quero subtrair esse valor da largura total e altura da imagem. No exemplo acima, seria (456, 431). Assim, o imagecopy new () linha ficaria assim: Imagecopy ($ frame, $ drago, 21, 31, 0, 0, 456, 431); Figura 8.17 Copiando uma imagem com o imagecopy () funo. 188 Captulo 8 GD Grfica Viso Ento agora voc sabe como copiar uma imagem que seja do mesmo tamanho ou menor que o imagem de destino. Mas e se voc quiser copiar uma imagem que maior do que o destino imagem? Voc usaria o imagecopyresized () ou imagecopyresampled () funes. A bom exemplo seria a de tomar a imagem framedDragon.jpg que voc acabou de criar e criar de 100 100 miniatura da imagem. <? Php

/ / Pega os nossos recursos de imagem $ Imagem = imagecreatefromjpeg ("frameDragon.jpg"); / / Cria uma imagem true color 100x100 $ Thumb = imagecreatetruecolor (100, 100); / Copiar / drago em quadro Imagecopyresized ($ thumb, $ imagem, 0, 0, 0, 0, 100, 100, imagesx ($ imagem), Imagesy ($ imagem)); / / Salva a imagem e mostr-la Imagejpeg ($ thumb ", thumbFrameDragon.jpg"); echo ("<img src=thumbFrameDragon.jpg>"); ?> Este comea da mesma forma que o ltimo exemplo, fazendo com que o recurso a uma imagem existente. Ento voc cria uma imagem true-color novo que de 100 100 pixels. Agora voc copiar a imagem Polegar $ imagem para a imagem de destino $. Os argumentos stimo e oitavo so o destino largura da imagem e da altura. Os argumentos so nono e dcimo a origem da imagem do largura e altura. Neste exemplo voc usa o imagesx () e imagesy () funes que retornam a largura ea altura do recurso de imagem. Uma lista completa de todas as funes de imagem pode ser encontrada no Apndice D. D uma olhada na Figura 8.18 para ver os resultados do exemplo acima. Figura 8.18 Usando o Imagecopyresized () funo. Usando imagens existentes 189 Mencionei anteriormente neste captulo que a funo imagecopyresized () ea Imagecopyresampled (funo) fazer a mesma coisa. Bem, tecnicamente eles fazem a mesma coisa, mas com uma diferena menor. Aps as cpias funo imagecopyresampled () e redimensiona a imagem, ele tambm resamples-lo. Os resultados so uma ntida imagem mais limpa,. No cdigo prximos exemplo, voc ir redimensionar a imagem usando imagecopyresized () e depois imagecopyresampled (). Depois que eles so redimensionados voc vai salv-los e comparar os resultados. <? Php / / Pega os nossos recursos de imagem $ Imagem = imagecreatefromjpeg ("frameDragon.jpg"); / / Cria uma imagem true color 100x100 $ Thumb = imagecreatetruecolor (250, 250); $ Thumb2 = imagecreatetruecolor (250, 250); / Copiar / drago em quadro Imagecopyresized ($ thumb, $ imagem, 0, 0, 0, 0, 250, 250, imagesx ($ imagem), Imagesy ($ imagem));

Imagecopyresampled ($ Thumb2, $ imagem, 0, 0, 0, 0, 250, 250, imagesx ($ imagem), Imagesy ($ imagem)); / / Salva a imagem e mostr-la Imagejpeg ($ thumb ", thumbFrameDragon1.jpg"); Imagejpeg ($ Thumb2 ", thumbFrameDragon2.jpg"); echo ("<img src=thumbFrameDragon1.jpg> <img src=thumbFrameDragon2.jpg>"); ?> Os resultados do exemplo de cdigo so mostrados na Figura 8.19. A diferena perceptvel. A imagem superior aquele feito com imagecopyresized (). Tem um pouco de artifacting e parece muito granulada em comparao com a imagem de fundo, que foi criado com imagecopyresampled (). Ento, por que voc nunca usa imagecopyresized ()? Bem, a nica razo que eu posso pensar velocidade. Mas desde que voc no est batching uma tonelada de imagens de uma s vez, assim como voc pode usar o Imagecopyresampled () funo sempre que a velocidade no uma preocupao. Afinal, voc quer ficar os melhores resultados voc pode possivelmente. A funo final olhar para o imagecopymerge () funo. Esta funo se comporta exatamente como o imagecopy (funo), com uma diferena muito importantes. O parmetro extra (int por cento) diz a imagem opaca como a imagem deve estar na imagem de destino. Este permite a criao de alguns fundos fresco ou imagens translcidas. 190 Captulo 8 GD Grfica Viso Figura 8.19 Resultados do Imagecopyresized () [top] e Imagecopyresampled () [baixo] funes. Vamos mesclar a nossa imagem para uma imagem de drago branco com opacidade 20%. Isto permitir que a maioria dos do branco para mostrar atravs durante a exibio de uma imagem fraca do drago. <? Php / / Pega os nossos recursos de imagem $ Drago = imagecreatefromjpeg ("dragon.jpg"); / / Cria uma imagem true color branco $ WhiteImage = imagecreatetruecolor (512, 512); $ White = imagecolorallocate ($ whiteImage, 255, 255, 255); $ Preto = imagecolorallocate ($ whiteImage, 0, 0, 0); $ Cinza = imagecolorallocate ($ whiteImage, 155, 155, 155); Imagefill ($ whiteImage, 0, 0, $ branco); Utilizando 191 imagens existentes / Copiar / drago em quadro

Imagecopymerge ($ whiteImage, $ drago, 0, 0, 0, 0, imagesx ($ drago), imagesy ($ drago), 20); Imagettftext ($ whiteImage, 36, 45, 201, 257, $ preto, "matisse_.ttf", "Dragon !!!"); Imagettftext ($ whiteImage, 36, 45, 199, 254, $ branco ", matisse_.ttf", "Dragon !!!"); Imagettftext ($ whiteImage, 36, 45, 200, 256, $ cinza ", matisse_.ttf", "Dragon !!!"); / / Mostra a nova imagem header ("Content-type: image / jpeg"); Imagejpeg ($ whiteImage); Imagedestroy ($ whiteImage); ?> Os resultados de todas as suas trabalho duro so mostrados na Figura 8.20. Figura 8.20 Os resultados do seu trabalho duro! 192 Captulo 8 GD Grfica Viso Concluso isso a! Voc est agora oficialmente um mestre imagem dinmica em PHP. Voc aprendeu a criar imagens indexadas e de cores verdadeiras. Voc tambm aprendeu como alocar as cores para uma imagem. Voc se tornou um deus em desenhar formas dinmicas para o seu telas vazias. Voc tambm aprendeu como gerar texto a partir de uma fonte True Type e us-lo em sua imagem. Finalmente, voc aprendeu como usar imagens existentes para a sua vantagem para criar alguns grficos muito bacana,. Prximo passo: criar um jogo chamado Battle Tank e criando terreno para a nova dinmica tanque jogo! Captulo 9 Captulo 9 Criando Battle Tank e Usando Terrain dinmico Battle Tank Planejamento Criando os grficos Criando a lgica do jogo Criando Terrain dinmico Y ou j se tornaram um mestre do uso de grficos. Voc tambm se tornaram muito bom no uso de HTML em conjunto com o PHP. Neste captulo, voc ir criar uma Batalha Tanque jogo. Lembre-se no incio dos anos 90 wh en um jogo incrvel chamado Scorched Terra foi lanado? Bem, Tank Batalha ser a sua verso do jogo. Voc est pronto? Planejamento Battle Tank

Antes que voc acabou de entrar e comear a codificao que voc precisa para planejar como voc deseja que o seu jogo para estudar e trabalhar. Desde que voc deseja criar um remake Scorched Earth, voc vai precisar de dois grficos tanque. Voc vai precisar de algum tipo de condies de concorrncia equitativas. Voc precisar ser capaz de entrada um ngulo e velocidade de modo que voc pode tentar matar o seu oponente. Tudo isso apenas o que o usurio ver. No tem nada a ver com a lgica do jogo. Ento o que voc precisa para a lgica do jogo? Bem, voc vai precisar de algum tipo de clculo para o seu balas. Voc vai precisar de detectar se o adversrio tiver sido atingido. Se o adversrio foi atingido voc precisa dizer ao usurio se ele ganhou ou perdeu. Voc tambm precisa ser capaz de controlar o computador. Se o computador no foi atingido, ento o computador comea a calcular uma mover e disparar contra o adversrio. 193 194 Captulo 9 Criando Battle Tank e usando Terrain dinmico Voc tambm vai precisar para determinar que jogo estados que voc ter. Um bom comeo assumir que voc vai precisar de trs estados do jogo. Os trs estados padro de jogo que voc deve ter so: A partir do jogo jogo a correr Game Over Se voc precisar de mais estados jogo voc pode adicion-los mais tarde, mas por agora vamos supor que esses so os trs que voc vai precisar. Este parece ser um bom comeo. Agora voc deve determinar o que os grficos voc vai precisar. Antes que voc comece a criar dinmicas terreno que voc deve criar o jogo com todas as imagens estticas. Voc vai querer definir uma imagem para seus tanques, uma imagem para o seu terreno, e uma imagem para a exploso que ir ocorrer quando um tiro detona. S para ter certeza isso claro, voc precisar definir o seguinte:  imagem de Tanque # 1  imagem de Tanque # 2  imagem para o terreno  imagem da exploso Quando voc cria a exploso voc vai querer criar uma animao. Gif. Dessa forma voc ter um efeito pseudo de animao em tempo real. Voc vai aprender como fazer isso na prxima seo deste captulo, "Criando o Graphics." Desde que voc estar fazendo clculos que lidar com ngulo e velocidade que voc vai precisar de algum

mais ou menos constante para puxar para baixo a bala. Isso mesmo, a poeira fora todos aqueles antiga fsica livros, voc ter de definir a gravidade. Se voc precisar de qualquer outras constantes voc pode adicion-los mais tarde, assim como com os estados do jogo. Ento, quais so os objectivos do jogo? Voc quer gerar um jogo baseado em turnos que leva ngulo e velocidade como a entrada do usurio. Depois de ter o ngulo ea velocidade de calcular onde a exploso ocorrer. Se voc acertar o oponente, voc ganha, se o adversrio acertar voc, ento voc perde. Depois de ter uma verso funcional do jogo que voc vai querer voltar e adicionar terreno dinmico com todos os seus conhecimentos grficos newfound. Com base nesta descrio que voc ir precisar de seis estados do jogo. Voc vai usar os trs que voc j determinou mais trs. A partir do jogo Menu de Jogo Jogo Init Jogo Jogo Win Game Over Criando a 195 Grficos O estado do jogo comear o jogo diz para iniciar a sesso, em seguida, ir para o menu. Enquanto voc esto no menu que est no estado menu do jogo. Uma vez que voc clica para comear um novo jogo, que leva voc para o estado do jogo init. Este no um grande negcio para a primeira verso do jogo, mas ele vai vir a calhar quando voc comear a gerar o terreno. Uma vez que voc sair do jogo de inicializao estado que voc entrar no estado de jogo. Este o lugar onde voc est fisicamente jogando esse jogo. Se voc acertar o oponente, ento voc entrar no estado ganha jogo, onde voc pode exibir uma fria "Voc ganha" grfico. Se voc for atingido pelo adversrio, ento voc entrar no jogo sobre o estado onde voc vai colocar um grfico dizendo que o jogador que perdeu. Muito simples, n? Tomar uma olhada na Figura 9.1 para ver uma imagem da tela do que o produto final deve ser semelhante ao vocs so todos completamente. Criando os grficos Para a maior parte eu criei todos os grficos para voc e coloc-los no CD. Voc tem dois grficos tanque: uma para a esquerda e um tanque para o tanque direito. Eles so chamados

tankLeft.gif e tankRight.gif no CD. Os grficos tanque so mesmo tanque, mas um dos eles um espelho de 180 graus do outro. Eles so ambos. Gif, porque eles tm uma forma transparente fundo, voc poderia usar pngs, se quiser.. Os dois grficos tanque ser colocado na tela usando algumas folhas de estilo em cascata e um </ div> camada. No se preocupe, eu vou explicar tudo isso quando voc comea a codificao. Figura 9.1 A captura de tela de Battle Tank. 196 Captulo 9 Criando Battle Tank e usando Terrain dinmico A parte seguinte do grfico que ser utilizado o fundo do cu. O fundo do cu chamado sky.jpg no CD. O grfico cu simplesmente um fundo azul com gradiente algumas nuvens fresco e um sol sobre ele. As nuvens so parcialmente opaco para lhes dar a transparncia olhar. Para esta primeira verso do jogo eu criei um grfico chamado terrain.jpg que tambm includo no CD. Terrain.jpg contm o fundo do cu com o solo pr-desenhadas sobre o fundo. Isso essencialmente todos os grficos que voc vai trabalhar com para este primeira verso do jogo. Criando a lgica do jogo Aqui onde voc comea para baixo e sujo. Isto onde voc levar o seu plano e todos os seus grficos e coloc-los a trabalhar, que onde voc realmente o cdigo do jogo. O primeiro passo para tomar decidir como voc deseja colocar para fora sua tela. Lembre-se, voc no tem que fazer esta exatamente como eu fao isso. Para esta verso terei a tela de jogo no topo da minha mesa e entrada do usurio na parte inferior da minha mesa. Este parece ser um layout lgico para mim, mas voc pode se sentir livre para jogar com ele da maneira que quiser. Vou dar um passo adiante e quebrar o meu funo de renderizao em trs funes: uma para a prestao do terreno, uma para a prestao dos tanques, e um para renderizao da interface de usurio real. Vou cham-los RenderTerrain (), RenderTanks (), e RenderInterface (). Vamos comear com o RenderTerrain () funo. RenderTerrain funo () { printf ("<borda da tabela = \" 0 \ "cellpadding = \" 0 \ "cellspacing = \" 0 \ "width = \" 700 \ " height = \ "450 \" bgcolor = \ "# 000000 \ ">"); printf ("<tr>"); printf ("<td align=\"left\" valign=\"top\">"); printf ("<img src=\"" TERRAIN_IMAGE "\" border=\"0\">..");

printf ("</ td>"); printf ("</ tr>"); printf ("</ table>"); } Tudo o que o RenderTerrain () funo faz criar uma tabela que de 700 pixels de largura e 450 pixels de altura e exibe o grfico de terreno no meio da tabela. Repare que eu tenho o grfico terreno definido como uma constante. Voc comear a isso em breve. D uma olhada no RenderTanks () funo. O propsito desta funo a posio os tanques sobre o fundo para faz-los parecer que eles esto na cena. Para fazer Criando a lgica do jogo 197 isso voc vai usar uma </ div> tag para cada tanque e especificar os pixels do topo e a partir da esquerda, onde o tanque deve aparecer. RenderTanks function () { gLeftTankLocation $ global; gRightTankLocation $ global; / / Get locais $ GLeftTankLocation _SESSION = $ ['gLeftTankLocation']; $ GRightTankLocation _SESSION = $ ['gRightTankLocation']; / / Esquerda tanque printf ("<div id = \" leftTank \ "style = \" position: absolute; esquerda: ". $ GLeftTankLocation ["x"]. "Px; top:". $ GLeftTankLocation ["y"]. "Px; \ ">"); printf ("<img src=\"" LEFT_TANK_IMAGE "\" border=\"0\">.."); printf ("</ div>"); / Tank / Direita printf ("<div id = \" rightTank \ "style = \" position: absolute; esquerda: ". $ GRightTankLocation ["x"]. "Px; top:". $ GRightTankLocation ["y"]. "Px; \ ">"); printf ("<img src=\"" RIGHT_TANK_IMAGE "\" border=\"0\">.."); printf ("</ div>"); } A primeira coisa a fazer nesta funo recuperar a matriz local da sesso para cada tanque. Em seguida, imprimir o tag HTML real a posio do tanque. Para posicionar o tanque absolutamente que voc use uma folha de estilo em cascata. A folha de estilo em cascata definido com o atributo de estilo. Voc quer posicionar os tanques absolutamente usando o elemento de posio. Em seguida, voc ter que especificar o nmero de pixels da esquerda do navegador e do parte superior do navegador. Voc pode fazer isso com o elemento esquerdo e superior. style = "position: absolute; left: 200px; top: 200px;" Agora voc pode renderizar o terreno e os tanques para a tela, mas voc ainda no tem nenhuma maneira de obter a entrada do usurio. a que a RenderInterface () funo vem dentro do RenderInterface ()

funo ir processar o formulrio para o navegador por baixo do jogo. RenderInterface function () { printf ("<borda da tabela = \" 0 \ "cellpadding = \" 0 \ "cellspacing = \" 0 \ "width = \" 700 \ " bgcolor = \ "# 000000 \ ">"); printf ("<tr>"); printf ("<td align=\"right\" valign=\"top\" colspan=\"2\">"); 198 Captulo 9 Criando Battle Tank e usando Terrain dinmico printf ("<b class=\"white\"> CONTROLE DE COMANDO </ b>"); printf ("</ td>"); printf ("</ tr>"); printf ("<tr>"); printf ("<td align=\"right\" valign=\"middle\">"); printf ("<b class=\"white\"> Angle: </ b>"); printf ("</ td>"); printf ("<td align=\"left\" valign=\"top\">"); printf ("<input type=\"text\" width=\"80\" name=\"angle\">"); printf ("</ td>"); printf ("</ tr>"); printf ("<tr>"); printf ("<td align=\"right\" valign=\"middle\">"); printf ("<b class=\"white\"> Velocidade: </ b>"); printf ("</ td>"); printf ("<td align=\"left\" valign=\"top\">"); printf ("<input type=\"text\" width=\"80\" name=\"velocity\">"); printf ("</ td>"); printf ("</ tr>"); printf ("<tr>"); printf ("<td align=\"left\" valign=\"top\">"); printf (""); printf ("</ td>"); printf ("<td align=\"left\" valign=\"middle\"> <br>"); printf ("<input type=\"submit\" name=\"btnFire\" value=\"FIRE!!!\">"); printf ("<br> </ td>"); printf ("</ tr>"); printf ("</ table>"); } Isso cria uma tabela que de 700 pixels de largura, com um fundo preto. Ela coloca trs elementos formam na tabela. O primeiro elemento de formulrio uma caixa de texto para recuperar o ngulo. O segundo elemento do formulrio uma caixa de texto para recuperar a velocidade. O elemento de formulrio terceiro e ltimo uma Boto Enviar para que voc possa dizer a seu tanque ao fogo. Que o faz para as funes de processamento para o jogo. Agora, d uma olhada no define e o globals que o jogo ir utilizar. <? Php / / Jogo Estados

Criando a lgica do jogo 199 define ("GAME_START", 0); define ("GAME_MENU", 1); define ("GAME_INIT", 2); define ("GAME_PLAY", 3); define ("GAME_WIN", 4); define ("game_over", 5); / / Constantes para o clculo define ("Gravity", -9,8); / / m / s / s define ("PI", 3,14159); / / Imagens define ("TERRAIN_IMAGE", "imagens / terrain.jpg"); define ("LEFT_TANK_IMAGE", "imagens / tankLeft.gif"); define ("RIGHT_TANK_IMAGE", "imagens / tankRight.gif"); define ("EXPLOSION_IMAGE", "imagens / explosion.gif"); / / Globals global $ gGameState; gDifficulty $ global; gLeftTankLocation $ global; gRightTankLocation $ global; ?> Primeiro voc define os estados jogo, ento a constante de gravidade. Isso ser usado na sua clculos para a bala. Ento voc define todas as imagens que voc ir usar. Para este primeiro iterao do jogo voc ter apenas um nvel de dificuldade, mas voc deve adicionar o globais de qualquer maneira para que, quando voc adicionar mais de um nvel de dificuldade, o quadro j est l. Agora que todos os globals e constantes so declaradas voc pode passar para a StartGame () e EndGame () funes. O StartGame () ir iniciar a sesso e inicializar todas as variveis para a sesso. O fim do jogo () funo unset todas as variveis e no final do sesso. StartGame funo () { global $ gGameState; gDifficulty $ global; if ($ gGameState == GAME_START) { $ GGameState = GAME_MENU; } 200 Captulo 9 Criando Battle Tank e usando Terrain dinmico / / Gerenciar a sesso session_start (); $ BSession _SESSION = $ ['bSession']; if (! isset ($ bSession)) {

$ BSession = 1; $ _SESSION ['BSession'] = $ bSession; $ _SESSION ['GDifficulty'] = $ gDifficulty; } outro { / / Pega o estado do jogo atual $ GGameState _SESSION = $ ['gGameState']; } } EndGame funo () { global $ gGameState; gDifficulty $ global; gLeftTankLocation $ global; gRightTankLocation $ global; unset ($ gGameState); unset ($ gDifficulty); unset ($ gLeftTankLocation); unset ($ gRightTankLocation); unset ($ turno); session_destroy (); } A primeira coisa que ocorre no StartGame () funo que o estado do jogo est ligado de GAME_START para GAME_MENU. Isso levar o usurio ao menu depois que a funo foi concluda. Em seguida, a sesso iniciada. Aps a sesso iniciada, o StartGame () funo verifica para ver se esta uma nova sesso ou uma sesso existente. Se a sesso nova, ele define algumas variveis. Se a sesso j existir, ele recupera o estado do jogo. O fim do jogo () funo unsets todas as variveis globais que foram usados durante todo o jogo e destri a sesso atual. Esta uma funo til, porque esta permite que o usurio iniciar um jogo completamente novo sem ter que fechar o navegador e abri-lo novamente. Uma vez que o jogador est descartado para o menu ele pode optar por comear um novo jogo. Quando um novo jogo iniciado ele liga o Estado a GAME_INIT, onde o GameInit () funo Criando a lgica do jogo 201 chamado. Esta funo usada principalmente para colocar os tanques nas suas posies de partida e de mudar o estado do jogo para GAME_PLAY. GameInit function () { global $ gGameState; gLeftTankLocation $ global;

gRightTankLocation $ global; / / Definir os locais de depsito de $ GLeftTankLocation = array ("x" => 42, "y" => 243); $ GRightTankLocation = array ("x" => 628, "y" => 172); $ _SESSION ['GLeftTankLocation'] = $ gLeftTankLocation; $ _SESSION ['GRightTankLocation'] = $ gRightTankLocation; $ GGameState = GAME_PLAY; } A localizao exata dos tanques deve ser determinado com base em como voc criou seu terreno. Para o terreno preset que eu estou usando nesta verso do jogo, deixou o tanque de 42 pixels da esquerda do navegador e 243 pixels da parte superior do browser. O direito tanque 628 pixels da esquerda do navegador e 172 pixels da parte superior do browser. Esses locais so importantes porque eles sero usados para determinar se um tanque foi atingida por uma bala ou no. Agora, d uma olhada no circuito principal do jogo. Essa funo chamada cada vez que a pgina carregado. Ele usa o estado do jogo atual para determinar o que o jogo deve fazer. Renderizao function () { global $ gGameState; gDifficulty $ global; gLeftTankLocation $ global; gRightTankLocation $ global; / / Get locais $ GLeftTankLocation _SESSION = $ ['gLeftTankLocation']; $ GRightTankLocation _SESSION = $ ['gRightTankLocation']; switch ($ gGameState) { GAME_MENU caso: 202 Captulo 9 Criando Battle Tank e usando Terrain dinmico { / / Mostra o menu RenderMenu (); break; } GAME_INIT caso: { / / Inicia o Jogo GameInit (); / Screen / Update Render (); break; } GAME_PLAY caso:

{ / / Pega a entrada e calcular o ponto de vida if ($ _POST ['btnFire']! = "") { $ ExplosionCoords CalculateFire = ($ _POST ['ngulo'], $ _POST ['velocidade']); / / Check para ver se houve um sucesso if ($ explosionCoords ["x"]> $ gRightTankLocation = ["x"] & & $ ExplosionCoords ["x"] <= gRightTankLocation $ ["x"] + 47 & & $ explosionCoords ["x"]> = $ GRightTankLocation ["y"] & & $ explosionCoords ["y"] <gRightTankLocation = $ ["x"] + 24) { / / Hit o outro tanque $ GGameState = GAME_WIN; Render (); retorno; } RenderExplosion ($ explosionCoords); } / / Faz o computador disparar $ ExplosionCoords CalculateFire = (-rand (30,50),-rand (70, 100)); if ($ explosionCoords ["x"]> $ gLeftTankLocation = ["x"] & & $ ExplosionCoords ["x"] <= gRightTankLocation $ ["x"] + 47 & & $ explosionCoords ["x"]> = $ GLeftTankLocation ["y"] & & $ explosionCoords ["y"] <gLeftTankLocation = $ ["x"] + 24) Criando a lgica do jogo 203 { / / Hit o outro tanque $ GGameState = game_over; Render (); retorno; } RenderExplosion ($ explosionCoords); / / Render o terreno RenderTerrain (); / / Render dos tanques RenderTanks (); / / Render da interface RenderInterface (); break; } GAME_WIN caso: { / / Deixe o leitor saber que ganhou printf ("WIN !!!"); break; } game_over caso: {

/ / Deixe o jogador conhece o jogo acabou printf ("game over"); break; } } / / Atualizar o nosso estado do jogo $ _SESSION ['GGameState'] = $ gGameState; } Esta funo fazer um pouco. A primeira coisa que faz recuperar os locais dos dois tanques. Aps a localizao dos tanques de ter sido recuperada, ela determina que o estado jogo atualmente est dentro Se o jogo no estado GAME_MENU, o menu processado para o navegador. Se o jogo for no estado GAME_INIT, o jogo inicializado chamando o GameInit () funo que voc viu anteriormente neste captulo. 204 Captulo 9 Criando Battle Tank e usando Terrain dinmico O estado GAME_PLAY onde todo o jogo acontece. Primeiro preciso a entrada do usurio. Ele sabe que o usurio clicou no boto de fogo no centro de comando e ele recupera o ngulo ea velocidade que o usurio inseriu. Depois disso, ele calcula que a exploso deve ocorrer. Se o usurio atingiu o tanque do outro lado do campo, o estado do jogo comutada para GAME_WIN, a tela atualizada, ea funo retorna sem processamento qualquer outra coisa. No entanto, se o usurio perde, o computador agora comea a atirar. O computador calcula aleatoriamente uma coordenada que est dentro do campo de jogo e calcula onde o seu tiro deve explodir. Se o tiro atinge o usurio, ento o estado do jogo definida como game_over, a tela atualizada, ea funo retorna. Se nenhum jogador foi morto, o jogo retorna o controle para o usurio e espera por outro ngulo e velocidade a ser inserido. Como isso legal? Para realmente calcular a distncia que a bala vai viajar voc precisa usar um projtil pouco fsica. Primeiro, a velocidade precisa ser quebrado em velocidade na direo x e velocidade na direo y. Para fazer isso voc multiplicar pelo co-seno e seno do ngulo. $ $ Vx = velocidade * cos ($ angle); $ $ Vy = velocidade * sin ($ angle); Em seguida, voc calcular o tempo de travamento do projtil. (Neste caso, o projtil o shell que disparado do canho.) Voc pode fazer isso multiplicando 0,204 pelo componente y de

a velocidade. $ Time = 0,204 * $ vy; Agora que voc sabe o tempo que a bala est no ar voc pode calcular a distncia mxima a bala pode ir. Para fazer isso voc multiplicar o componente x da velocidade pelo tempo total para obter o alcance mximo. XMax $ = $ vx * $ tempo; A final coordenada y pode ser calculado multiplicando-se o componente y da velocidade pelo tempo e pelo meia subtraindo da gravidade multiplicado por vezes ao quadrado. YMax $ = $ vy * Tempo - 0,5 * * GRAVITY ($ time * $ tempo); isso a. assim que voc calcular onde a exploso deve ocorrer. Agora que voc tem um xe coordenada y voc precisa apenas verificar se ele est no mesmo intervalo que o jogo de campo. Se no for, voc precisa coloc-lo l. Agora voc pode tornar a exploso usando um em cascata estilo pixels x folha da esquerda do navegador e pixels y a partir do topo do browser. Figura 9.2 mostra uma foto do jogo em ao (bem, a ao, tanto quanto pode ser retratada em um fotograma). Criar dinmicas Terrain 205 Figura 9.2 Battle Tank em ao. C Aution Voc vai querer editar o arquivo php.ini para desligar avisos. Voc pode fazer isso adicionando "& ~ E_NOTICE" para a linha error_reporting. Criando Terrain dinmico Criando o terreno dinmica realmente muito fcil. Eu inclu o fundo como sky.jpg no CD. Voc pode usar isso para criar sua imagem. Depois de ter criado o seu imagem que voc s precisa definir os dois primeiros pontos a 0 e 450. Isto ir colocar a primeira coordenada na parte inferior esquerda do grfico. Depois de ter colocado a coordenada primeiro na parte inferior esquerda do grfico que voc precisa para comear no prximo pixel que voc gostaria de colocar o seu prximo ponto e percorrer todo o largura da imagem. Enquanto voc estiver percorrendo toda a largura da imagem que voc estar gerando dois pontos. Um deles a parte x que deve ser apenas o seu contador de loop, e os outro um gerado aleatoriamente y coordenadas. 206 Captulo 9 Criando Battle Tank e usando Terrain dinmico Depois de ter atravessado toda a largura da imagem que voc vai querer definir os dois ltimos

pontos. Os ltimos dois pontos precisam ser no canto inferior direito da imagem. Neste caso, (700, 450). Agora est tudo pronto para gerar um polgono preenchido com todos os pontos que voc tem apenas gerado. Todos esses procedimentos devem ir para o GameInit () funo. D uma olhada no seguinte exemplo de cdigo para ver o GameInit nova funo (): GameInit function () { global $ gGameState; gLeftTankLocation $ global; gRightTankLocation $ global; Terreno $ = imagecreatefromjpeg ("images / sky.jpg"); $ Pontos [0] = 0; $ Pontos [1] = 450; $ I = 2; for ($ x = 10; $ x <710; $ x = $ x + 20) { $ Pontos [$ i] = $ x; $ Pontos [$ i +1] = rand (150, 350); $ I = $ i + 2; } $ Pontos [count ($ pontos) -1] = 700; $ Pontos [count ($ pontos)] = 450; $ Marrom = imagecolorallocate ($ terreno, 139, 164, 125); ImageFilledPolygon ($ terreno, $ pontos, sizeof ($ pontos) / 2, $ marrom); Imagejpeg ($ terreno, "images / temp.jpg"); Imagedestroy ($ terreno); $ Canhoto = (($ pontos [3] + $ pontos [5]) / 2) - (($ pontos [2] + $ pontos [4]) / 2) - 10; Righty $ = (($ pontos [count ($ pontos) -4] + $ pontos [count ($ pontos) -3]) / 2) $ Pontos [count ($ pontos) -4]; / / Definir os locais de depsito de $ GLeftTankLocation = array ("x" => 42, "y" => $ canhoto); Criar dinmicas Terrain 207 $ GRightTankLocation = array ("x" => 628, "y" => $ destro); $ _SESSION ['GLeftTankLocation'] = $ gLeftTankLocation; $ _SESSION ['GRightTankLocation'] = $ gRightTankLocation; $ GGameState = GAME_PLAY; } O primeiro evento que ocorre no GameInit () uma nova imagem gerada a partir do fundo do cu existente usando: Terreno $ = imagecreatefromjpeg ("images / sky.jpg"); Em seguida, voc definir o primeiro conjunto de coordenadas. $ Pontos [0] = 0; $ Pontos [1] = 450; Agora que voc est comeando no canto inferior esquerdo da imagem que voc precisa para comear a 10

pixels para a largura da imagem e atravessar toda a maneira atravs da imagem para 700. $ I = 2; for ($ x = 10; $ x <710; $ x = $ x + 20) { $ Pontos [$ i] = $ x; $ Pontos [$ i +1] = rand (150, 350); $ I = $ i + 2; } Este loop gera um nmero aleatrio a cada 20 pixels entre 150 pixels e 350 pixels. Isto o que lhe d a x e y para os pontos de coordenadas lgica seguinte. Agora que voc tem percorrido todo o caminho entre a imagem que voc precisa para definir o ponto final. Desde que voc quer o polgono para preencher todo o caminho at o fundo, voc precisa definir o ponto final para (700, 450). $ Pontos [count ($ pontos) -1] = 700; $ Pontos [count ($ pontos)] = 450; Agora voc simplesmente desenhar o polgono na tela usando o ImageFilledPolygon () funo. Depois de desenhar o polgono que voc precisa para salvar a imagem em disco. A razo voc salvar a imagem em disco porque voc s quer gerar um novo terreno quando voc iniciar um jogo. Voc no quer que o terreno estar a mudar cada vez que algum dispara sua canho. $ Marrom = imagecolorallocate ($ terreno, 139, 164, 125); ImageFilledPolygon ($ terreno, $ pontos, sizeof ($ pontos) / 2, $ marrom); Imagejpeg ($ terreno, "images / temp.jpg"); Imagedestroy ($ terreno); 208 Captulo 9 Criando Battle Tank e usando Terrain dinmico Agora tudo que resta a posio dos tanques. Neste exemplo, o tanque coordenada x sempre a mesma ea coordenada y calculado com a mdia de dois dos pontos y. Esta no uma maneira totalmente precisos para posicionar o tanque, mas ele no chegar perto do tanque de o suficiente. Se voc quer um mtodo mais preciso que voc precisa tomar trs ou quatro pontos e reposicionar o tanque com base na coordenada x tambm. $ Canhoto = (($ pontos [3] + $ pontos [5]) / 2) - (($ pontos [2] + $ pontos [4]) / 2) - 10; Righty $ = (($ pontos [count ($ pontos) -4] + $ pontos [count ($ pontos) -3]) / 2) $ Pontos [count ($ pontos) -4]; / / Definir os locais de depsito de $ GLeftTankLocation = array ("x" => 42, "y" => $ canhoto); $ GRightTankLocation = array ("x" => 628, "y" => $ destro);

Agora que voc j calculadas as coordenadas x e y para cargos de seu tanque voc precisa salvar as informaes para a sesso. $ _SESSION ['GLeftTankLocation'] = $ gLeftTankLocation; $ _SESSION ['GRightTankLocation'] = $ gRightTankLocation; Aps as coordenadas so guardadas para a sesso de tudo o que resta a fazer iniciar o jogo mudar o estado do jogo. $ GGameState = GAME_PLAY; Figura 9.3 mostra uma captura de tela do jogo com algum terreno dinmica que est sendo gerado. Figura terreno Gerando 9,3 dinmico. Concluso 209 Concluso Voc criou com sucesso um jogo totalmente dinmico PHP que um clone muito bom do clssico Scorched Earth. H, no entanto, vrias coisas que voc pode fazer para tornar este um jogo muito melhor. A primeira coisa que voc pode fazer obter o posicionamento dinmico do tanques mais precisos. A segunda coisa que voc pode fazer adicionar um pouco de deteco de coliso para ver se a bala atingiu o terreno. O terceiro passo que voc pode tomar para tornar o jogo melhor dinamicamente remover pedaos de terreno atingido pela bala. Voc provavelmente poderia descobrir algo com um arco de fazer isso. Est ficando muito bom neste tipo de coisas PHP, e voc deve estar orgulhoso de si mesmo. Dar um tapinha grande nas costas. Nos captulos seguintes voc vai realizar algumas chances e termina. Por exemplo, no captulo seguinte voc vai olhar para como usar sockets no PHP. Em Captulo 11 voc vai comear a aprender sobre jogos de MMORPG e comear a criar seus prprios mini-jogo. Parece divertido? Bom, ento vamos a ele. Esta pgina foi intencionalmente deixada em branco Extras e Projetos finais Captulo 10 PHP e Sockets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,213 Captulo 11 Kiddy Cartel-Criando seu prprio MMO. . . . . . . . . . . . . . . . . . . . . 0,229 Captulo 12 Construo de suas habilidades PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,257 PARTE IV Esta pgina foi intencionalmente deixada em branco captulo 10 PHP e Sockets

Soquete Basics Criando um servidor Criando um cliente Eu n Neste captulo voc vai explorar o mundo fascinante e por vezes confuso de soquetes. Sockets deve ser um dos componentes mais subutilizada em PHP. Hoje voc vai dar uma olhada em como criar um servidor para o qual um cliente pode conectar-se, como se conectar a um servidor de um cliente usando sockets, e como processar informaes no servidor e envi-lo para o cliente de destino. Acredite ou no, voc tem sido usando sockets todo o tempo que voc tem de programao em PHP. O servidor o servidor HTTP que voc se conecta, eo cliente a Web browser voc est usando para se conectar ao servidor. Esta uma relao de cliente / servidor nico. Noes bsicas de soquete PHP usa a Berkley sockets biblioteca para fazer suas ligaes. Voc pode pensar em uma tomada como nada mais do que uma estrutura de dados. Voc usa esta estrutura de dados socket para iniciar uma conversa entre um cliente e um servidor. O servidor est sempre ouvindo para abrir uma nova conversa. Quando um cliente quer falar com o servidor, ele abre uma conversa atravs de um especfico porta na qual o servidor est escutando. Quando o servidor recebe a solicitao do cliente que ela seja concluda a conexo, completando assim o ciclo. Agora o cliente pode enviar informaes para o servidor eo servidor pode enviar informaes para o cliente. 213 214 Captulo 10 PHP e Sockets Para criar um socket que voc vai precisar de trs variveis: um protocolo, um tipo de socket, e uma comum tipo de protocolo. Existem trs protocolos que voc pode escolher ao criar um socket. D uma olhada na Tabela 10.1 para os nomes dos protocolos e uma descrio do que cada protocolo faz. Quando voc criar seu prprio servidor ir utilizar o protocolo AF_INET. H cinco tipos de soquete para escolher na biblioteca de socket Berkley. Por favor, consulte a Tabela 10.2 para o constante e uma descrio do tipo de soquete. O elemento final para a criao de uma tomada definir o tipo de protocolo comum que o conexo deve usar. Tabela 10.3 lista o nome ea descrio do comum trs tipos de protocolo. Protocolos Nome / Descrio Constante

AF_INET AF_INET6 AF_UNIX Nome / Descrio Constante SOCK_STREAM SOCK_DGRAM datagramas SOCK_RAW SOCK_RDM Tabela 10.1 O mais comum dos protocolos que so usados na criao de sockets. AF_INET usa TCP ou UDP e um endereo IPv4. Semelhante ao AF_INET mas usa um endereo IPv6 em vez de um endereo IPv4. Um protocolo de comunicao local. Este especfico para UNIX e Linux, e usa o sistema de arquivos para definir suas conexes socket. Este protocolo raramente usado. Quando usado, o cliente eo servidor so geralmente na mesma mquina. Tipos de Tabela 10.2 Soquete Esse tipo de socket fornece sequencial, seguro, full-duplex conexes com base em streams de bytes. Este o tipo de soquete mais usado. Este tambm o Tomada do tipo que o protocolo TCP comum utiliza. Esse tipo de socket fornece conexo, de comprimento fixo transmisses chamado . Esse tipo de socket bastante confivel. UDP usa esse tipo de socket para o seu conexes. Tipo SOCK_SEQPACKET Esta tomada fornece uma de duas vias, conexo confivel para o envio de FixedLength transmisses. O receptor obrigado a ler todo o pacote para cada ler apelo feito quando se utiliza esse tipo de socket. Esse tipo de socket fornece acesso protocolo de rede. O ICMP comum protocolo (ping, traceroute, e assim por diante) usa esse tipo de socket. Esse tipo de socket raramente utilizado e no implementada na maioria dos operacionais sistemas. Isso proporciona uma camada de datagrama que no garante a ordenao de seus pacotes. Noes bsicas de socket 215 Protocolos comuns Nome / Descrio Constante ICMP para relatar erros na comunicao. UDP TCP Tabela 10.3 O Internet Control Message Protocol. Ele usado principalmente por gateways e hosts

O User Datagram Protocol. Como mencionado anteriormente, esta uma conexo, forma confivel para transmitir dados. O Transmission Control Protocol. Este o mais comum e mais confivel dos protocolos comuns. TCP garante que seus pacotes chegaro ao destinatrio. Se houve erros durante a transmisso, o TCP re-transmite o pacotes para se certificar de que eles aparecem livre de erros. Agora que voc sabe os trs elementos para criar um socket, d uma olhada no socket_create () funo que o PHP usa para criar um socket. O socket_create () funo recebe trs parmetros: um protocolo, um tipo de socket, e um protocolo comum. O socket_create () retorna a funo um recurso para o socket se ele foi criado com sucesso, ou retorna false se o socket no foi criado com sucesso. recurso socket_create (protocolo int, int SocketType, int commonProtocol); Agora que voc pode criar um socket, como voc pode us-lo? PHP fornece vrias funes para lidar com soquetes. Voc pode vincular sockets a um IP, ouvir para comunicao em um soquete, aceitar uma tomada, a lista s vai sobre e sobre. Comece dando uma olhada em um exemplo para ver que funes voc vai precisar para criar, aceitar e ouvir um socket. <? Php $ CommonProtocol = getprotobyname ("tcp"); $ Socket = socket_create (AF_INET, SOCK_STREAM, $ commonProtocol); socket_bind ($ socket, "localhost", 1337); socket_listen ($ socket); Funcionalidade / / Mais de soquete para vir ?> O exemplo acima um comeo para criar seu prprio servidor. A primeira linha do exemplo, $ CommonProtocol = getprotobyname ("tcp"); Obtm o tipo de protocolo que voc vai usar pelo nome. Neste caso, voc deseja usar o protocolo TCP comum. Se voc queria usar UDP ou ICMP voc deve passar "udp" 216 Captulo 10 PHP e Sockets ou "icmp" como o parmetro para o getprotobyname () funo. Uma alternativa ao uso do funo getprotobyname () especificando o SOL_TCP ou SOL_UDP como argumento final para a funo socket_create (). $ Socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP); A segunda linha do exemplo cria o socket e retorna a instncia do soquete recursos. Depois de ter a instncia do recurso socket, voc precisa vincular o soquete para uma determinada porta e endereo IP. socket_bind ($ socket, "localhost", 1337);

Neste caso voc est ligando a tomada para o seu computador local (127.0.0.1) e voc est ligao com o soquete para a porta 1337. Depois de tudo criado e vinculado voc deve ouvir uma conexo para vir para o socket. socket_listen ($ socket); Estes so apenas quatro das funes usadas no mundo maravilhoso de soquetes. D uma olhada Tabela 10.4 para ver todas as funes que usam sockets. Nome Descrio da funo socket_accept (resource socket) de recursos socket_bind (resource socket, endereo string, bool int endereo de porta) e porta especificada. socket_bind () socket_clear_error ([resource socket]) void socket_close void (resource socket) socket_connect (socket recurso de endereo string,, bool [Int port]) falhou. socket_create_listen (int porta, [int backlog]) de recursos comprimento da fila de pendentes Tabela 10.4 Funes para Socket Retorna Depois de ter criado um socket, envolveram, e comecei a ouvir sobre esse socket, esse funo ir aceitar conexes de entrada. Isso vincula o socket resource para o ir retornar TRUE se for bem sucedido e FALSE se ele falhar. Isto ir limpar os erros na especificado socket. Se um socket no for especificado, ento apaga o ltimo erro de socket global. Fecha o socket criado. Tenta conectar-se tomada de recursos. Retorna TRUE se a conexo sucedido e FALSE se a conexo Cria um socket AF_INET novo que escuta na porta especificada. Backlog define o conexes. Noes bsicas de socket 217 (Continuao) Nome Descrio da funo socket_create_pair (protocolo int, int SocketType, bool int commonProtocol, array & fd) armazenados na matriz fd socket_create (protocolo int, int SocketType, de recursos int commonProtocol) socket_get_option tomada de recursos (, nvel int, misturado int optname) socket_getpeername (resource socket, bool string & endereo, [int & port]) socket_getsockname (resource socket, bool

string & endereo, [int & port]) socket_iovec_add (recurso iovec, int iov_len) bool recurso socket_iovec_alloc (num_vectors int) socket_iovec_delete (recurso iovec, iov_pos int) bool Exclui o iovec alocado. socket_iovec_fetch string (recurso iovec, int iovec_pos) Retorna os dados contidos no iovec_pos em socket_iovec_free (recurso iovec) bool socket_iovec_set (recurso iovec, bool Define os dados em iovec_position para o novo iovec_position int, string new_val) socket_last_error ([resource socket]) int Recupera o ltimo cdigo de erro que ocorreu retorna o ltimo erro que ocorreu para que socket_listen (resource socket, [int backlog]) bool escuta para uma conexo com o especificado socket_read (socket recurso, comprimento int, string [Int type]) string normal com o escape normal, socket_readv (resource socket, recursos iovec) bool L da matriz fd usando o Tabela 10.4 Funes para Socket Retorna Isso cria um par de sockets que so . No h maneira de distinguir entre os dois sockets. Cria um novo socket. Esta funo recupera as opes para uma socket. Esta funo retorna o IP remoto endereo do computador de mesmo nvel de conexo. Esta funo retorna o endereo IP local da tomada. Essa funo adiciona um novo vetor para a disperso / coletar matriz. Esta funo cria uma estrutura para iovec uso com sendmsg, recvmsg, writev, e readv. o recurso especificado. Libera o recurso iovec. valor. em qualquer tomada. Se um soquete especificado, ele socket. socket. Backlog define o comprimento do fila para conexes pendentes. Este l bytes de comprimento a partir do especificado socket. Tipo pode ser PHP_BINARY_READ ou PHP_NORMAL_READ. Se PHP_BINARY_READ usada, a string uma seqncia binria, caso contrrio a string uma caracteres. disperso / coletar matriz.

218 Captulo 10 PHP e Sockets (Continuao) Nome Descrio da funo socket_recv (socket recurso de cadeia, e buffer, int Recebe dados no buffer em um conectado int length, flags int) socket_recvfrom (socket recurso de cadeia, e buffer, int int length, flags int, string & nome, [int & port]) socket_recvmsg (resource socket, recursos iovec, bool array & controle int, int & controlLength, e bandeiras, string & endereo. [Int & port]) socket_select array (e ler matriz, e escrever, int matriz & Exceto, tv_sec int, [int tv_usec]) a leitura escrever exceto socket_send (socket de recursos, buffer de string, int int length, flags int) socket_sendmsg (resource socket, recursos iovec, bool int flags, endereo de string, [int port]) socket_sendto (resource socket, buffer de string, int comprimento int, int flags, endereo de string, [Int port]) socket_set_block (resource socket) bool socket_set_nonblock (resource socket) bool socket_set_option (socket nvel de recursos, int, bool socket_shutdown (resource socket, [como int]) bool como socket_strerror string (ErrorNumber int) Retorna uma descrio do erro especificado socket_write (socket de recursos, buffer de string, int [Int length]) socket_writev (resource socket, recursos iovec) bool Escreve para a matriz fd usando o disperso / coletar Tabela 10.4 Funes para Socket Retorna socket. Recebe dados de um socket ou no o socket est conectado. Esta funo usada para receber mensagens em um soquete que usa iovectors. Esta funo aceita uma matriz de sockets para assistir. As tomadas que so passados em srie so observados para os caracteres que ficam disponveis para leitura. O array observado para os blocos que so escrita. As matrizes so vigiados para excees. Esta funo envia dados para um computador conectado

socket. Envia uma mensagem para o socket. Esta funo envia comprimento do buffer atravs do socket para o especificado endereo. Define o modo de bloqueio em um socket. Conjuntos de modo no-bloqueio em um socket. Define as opes de socket para o socket. int optname optval, mista) Esta funo permite que voc desligar leitura, escrita ou ambos para o especificado socket. pode ser 0, 1 ou 2. nmero. Escreve o buffer para o socket. array. * No momento da redao deste texto, www.php.net no ter definies para cada funo socket. Noes bsicas de socket 219 Essas so todas as funes que o PHP oferece para uso com soquetes. Voc j deve ter sockets habilitado, mas se voc no fizer isso, ento editar o arquivo php.ini e descomente a linha que diz: extension = php_sockets.dll Se voc no tire o comentrio desta linha que voc pode carregar a extenso dinamicamente usando o seguinte cdigo: <? Php if (! extension_loaded ('sockets')) { if (strtoupper (substr (PHP_OS, 3)) == "WIN") { dl ('php_sockets.dll'); } outro { dl ('sockets.so'); } } ?> Se voc no sabe se os soquetes esto habilitadas voc sempre pode usar a funo phpinfo () para determinar se as tomadas esto habilitados. Deve haver uma seo que se parece com a Figura 10.1. Figura 10.1 Visualizando o phpinfo () para sockets. 220 Captulo 10 PHP e Sockets Criando um servidor Agora volte para o exemplo anterior e conclu-lo. Para fazer isso basta para escutar

a uma tomada de particular e, em seguida, o processo de usurio (s) se conectar a ele. <? Php $ CommonProtocol = getprotobyname ("tcp"); $ Socket = socket_create (AF_INET, SOCK_STREAM, $ commonProtocol); socket_bind ($ socket, "localhost", 1337); socket_listen ($ socket); / / Aceitar conexes de entrada para o servidor $ Connection = socket_accept ($ socket); if ($ conexao) { socket_write ($ conexao, "Voc tem ligado tomada ... \ n \ r"); } ?> Voc vai querer executar este exemplo a partir de um prompt de comando. A razo para isto que voc est criando um servidor, e no uma pgina da Web. Se voc tentar executar este script em um navegador da Web, o script mais tempo provvel para fora aps 30 segundos. Voc pode definir um tempo infinito pela usando a seguinte linha de cdigo, mas melhor para executar o servidor a partir de um prompt de comando: set_time_limit (0); Para executar seus scripts a partir de uma linha de comando basta digitar: example01_server.php php.exe Se voc ainda no mapeado o caminho para o interpretador do PHP voc precisar especificar o caminho antes php.exe. Depois de ter iniciado o servidor que voc pode testar a conexo por telnet para a porta 1337. Voc deve ver os resultados que se assemelham a Figura 10.2 O problema com este servidor triplo: primeiro, ele no aceita mltiplas conexes. Dois, ele realiza apenas um comando que muito til. Finalmente, voc ainda no pode conectar-se a este servidor atravs de seu navegador web. O primeiro problema fcil de resolver se voc estivesse usando um aplicativo que no tem que reconectar ao servidor cada vez que voc clicou alguma coisa. Mas j que voc est usando um Web pgina para se conectar ao servidor, isso coloca um problema muito grande. Voc tem que fazer sua servidor aceita uma conexo, gravar dados para o cliente (se houver alguma de escrever), fechar a conexo, e esperar por outra conexo. Criando um servidor 221 Figura 10.2 O seu primeiro servidor. Vamos fazer exatamente isso. D uma olhada no seguinte exemplo de cdigo para ver o novo servidor: <? Php

/ / Set up nossa tomada de $ CommonProtocol = getprotobyname ("tcp"); $ Socket = socket_create (AF_INET, SOCK_STREAM, $ commonProtocol); socket_bind ($ socket, "localhost", 1337); socket_listen ($ socket); / / Inicializa o buffer $ Buffer = "NO DATA"; while (true) { / / Aceitar conexes entrando neste socket 222 Captulo 10 PHP e Sockets $ Connection = socket_accept ($ socket); printf ("Socket conectado \ r \ n"); / / Verifique se h algo no buffer if ($ buffer! = "") { printf ("Algo est no buffer ... o envio de dados ... \ r \ n"); socket_write ($ conexao, $ buffer "\ r \ n".); printf ("Escreveu para o socket \ r \ n"); } outro { printf ("Sem dados no buffer \ r \ n"); } / / Pega o input while ($ dados = socket_read ($ conexao, 1024, PHP_NORMAL_READ)) { $ Buffer = $ data; socket_write ($ conexao, "Informaes recebidas \ r \ n"); printf ("Buffer:".. $ buffer "\ r \ n"); } socket_close ($ conexao); printf ("Fechado o socket \ r \ n \ r \ n"); } ?> Isto o que o servidor faz. Ele inicializa o soquete e da reserva que voc usa para receber e enviar dados. Em seguida, ele espera por uma conexo. Uma vez que uma conexo criada ela imprime "Socket conectado" para a tela o servidor est sendo executado. O servidor ento verifica se no h nada no buffer, se houver, ele envia os dados para o computador conectado. Depois ele envia os dados que ele espera para receber informaes. Uma vez que recebe a informao que ele armazena que nos dados, permite que o computador conectado sabe que recebeu a informao, e em seguida, fecha a conexo. Aps a conexo fechada, o servidor comea a todo processo novamente.

D uma olhada na Figura 10.3 para ver os resultados do servidor. Criando o cliente 223 Figura 10.3 Resultados do novo servidor. Criando o cliente Para resolver o segundo problema muito fcil. Voc precisa criar uma pgina PHP que se conecta a um socket, receber todos os dados que est no buffer, e process-lo. Depois de ter processado o dados no buffer voc pode enviar seus dados para o servidor. Quando outro cliente se conecta, ele ir processar os dados que voc enviou e que o cliente ir enviar mais dados para o servidor. Nota Isto simplesmente um exemplo para demonstrar o uso de soquetes. Isto , no significa nvel de produo cdigo para ser usado em um jogo pblico. <? Php / / Cria o socket e conectar-se $ Socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP); $ Connection socket_connect = ($ socket, "localhost", 1337); enquanto (buffer $ = socket_read ($ socket, 1024, PHP_NORMAL_READ)) { if ($ tampo == "NO DATA") { echo ("<p> NO DATA </ p>"); break; } outro { 224 Captulo 10 PHP e Sockets / / Faz alguma coisa com os dados no buffer echo ("Dados <p> Buffer:".. $ buffer "</ p>"); } } echo ("Escrevendo para <p> soquete </ p>"); / / Escreve alguns dados de teste para a nossa tomada de if (! socket_write ($ socket, "alguns dados \ r \ n")) { echo ("Escreva <p> falhou </ p>"); } / / L qualquer resposta da tomada enquanto (buffer $ = socket_read ($ socket, 1024, PHP_NORMAL_READ)) { echo ("Dados enviados <p> foi: ALGUNS DADOS <br> Resposta foi:".. $ buffer "</ p>"); } echo ("Feito <p> Leitura de soquete </ p>"); ?> Este cliente exemplo se conecta ao servidor usando todo o cdigo que voc tenha visto antes.

O cliente l os dados. Se esta a primeira vez atravs do lao na primeira conexo, em seguida, o servidor ir enviar "NO DATA" volta para o cliente. Se isso ocorrer, o cliente continua em. O cliente envia seus dados para o servidor. Aps os dados terem sido enviados para o servidor do cliente aguarda uma resposta. Uma vez que recebe uma resposta que ele escreve a resposta na tela. C Aution Voc vai querer editar o arquivo php.ini para desligar avisos. Voc pode fazer isso adicionando "& ~ E_NOTICE" para a linha error_reporting. T ip Ao usar PHP_NORMAL_READ a linha de dados feito uma vez considerada a \ r \ n caracteres de escape foram enviadas. Integrao com Sockets Battle Tank Agora que voc tem todo este cdigo legal que lida com sockets, voc pode integr-lo na Jogo de tanque de guerra que criou no captulo anterior. Para fazer isso muito simples. Obviamente, a primeira coisa que voc vai querer fazer ligar na tomada toda vez que voc clica no Fogo Integrao com Sockets Battle Tank 225 boto ou iniciar um novo jogo. Se voc clicar no boto de fogo voc vai querer mandar seus dados para o servidor. Uma vez que os seus dados alcanou o servidor que voc vai querer consultar o servidor para as coordenadas prxima da bala, e depois processar o jogo com as novas coordenadas. Aqui est o novo Render () funo para Battle Tank: Renderizao function () { / / Cria o socket e conectar-se $ Socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP); $ Connection socket_connect = ($ socket, "localhost", 1337); global $ gGameState; gDifficulty $ global; gLeftTankLocation $ global; gRightTankLocation $ global; / / Get locais $ GLeftTankLocation _SESSION = $ ['gLeftTankLocation']; $ GRightTankLocation _SESSION = $ ['gRightTankLocation']; switch ($ gGameState) { GAME_MENU caso: { / / Mostra o menu RenderMenu (); break;

} GAME_INIT caso: { / / Inicia o Jogo GameInit (); / Screen / Update Render (); break; } GAME_PLAY caso: { 226 Captulo 10 PHP e Sockets / / Printf (session_id ()); / / Pega a entrada e calcular o ponto de vida if ($ _POST ['btnFire']! = "") { $ ExplosionCoords CalculateFire = ($ _POST ['ngulo'], $ _POST ['velocidade']); if (! socket_write ($ socket, $ explosionCoord [0]. ",". $ ExplosionCoords [1]. "\ R \ n")) { echo ("Escreva <p> falhou </ p>"); } / / Check para ver se houve um sucesso if ($ explosionCoords ["x"]> $ gRightTankLocation = ["x"] & & $ ExplosionCoords ["x"] <= gRightTankLocation $ ["x"] + 47 & & $ explosionCoords ["x"]> = $ GRightTankLocation ["y"] & & $ explosionCoords ["y"] <gRightTankLocation = $ ["x"] + 24) { / / Hit o outro tanque $ GGameState = GAME_WIN; Render (); retorno; } RenderExplosion ($ explosionCoords); } enquanto (buffer $ = socket_read ($ socket, 1024, PHP_NORMAL_READ)) { if ($ tampo == "NO DATA") { echo ("<p> NO DATA </ p>"); break; } outro { / / Faz alguma coisa com os dados no buffer ExplosionCoords $ split = ($ buffer, ","); } } Integrao com Sockets Batalha de Tanques 227

/ / Faz os outros jogadores tiro if ($ explosionCoords [0]> = $ gLeftTankLocation ["x"] & & $ explosionCoords [0] <= GRightTankLocation $ ["x"] + 47 & & $ explosionCoords [1]> = $ gLeftTankLocation ["y"] & & $ ExplosionCoords [1] <= $ gLeftTankLocation ["x"] + 24) { / / Hit o outro tanque $ GGameState = game_over; Render (); retorno; } RenderExplosion ($ explosionCoords); / / Render o terreno RenderTerrain (); / / Render dos tanques RenderTanks (); / / Render da interface RenderInterface (); break; } GAME_WIN caso: { / / Deixe o leitor saber que ele ganhou printf ("WIN !!!"); break; } game_over caso: { / / Deixe o jogador conhece o jogo acabou printf ("game over"); break; } } / / Atualiza o estado do jogo $ _SESSION ['GGameState'] = $ gGameState; } 228 Captulo 10 PHP e Sockets isso a! Como eu disse antes, esta no a melhor maneira de fazer isso, mas funciona para demonstrar PHP capacidades socket. Existem algumas coisas legais que voc poderia fazer atravs da criao de sockets que falam para o Flash peas atravs do seu servidor PHP prpria, que uma maneira mais comum usar soquetes. Concluso Se vai ou no realiz-lo, voc fez uma tremenda quantidade de aprendizagem neste captulo. Se voc gostaria de aprender mais sobre sockets sugiro pegar uma mais

em profundidade livro sobre soquetes. Voc tambm pode se referir a www.php.net, onde voc encontrar mais indepth explicaes de todas as funes que voc viu neste captulo. No prximo captulo voc estar criando o seu prprio jogo MMORPG. Parece divertido? Bem ento, virar a pgina e mexa-se! captulo 11 Cartel Kiddy Seu prprio MMO Criando Instalar mySQL Bancos de Dados Relacionais: um rpido resumo Cartel Kiddy: as normas e especificaes Criao de Aes Sua Base Criao de um comando com Sub-Comandos A criao de um Comando sem Sub-Comandos Olhe para todos os comandos ... e agora? Eu n Neste captulo voc vai aprender o que se passa em uma linha massivamente multiplayer (MMO) jogo. No final deste captulo voc ter criado um jogo MMO incrvel chamado Cartel Kiddy. O objectivo deste jogo tomar a personalidade de uma criana e construir uma imprio atravs da compra de barracas de limonada, cortar a grama, e atacar concorrentes bairros. Parece divertido? Vamos comear. Primeiro, algumas notas sobre Cartel Kiddy. Este jogo utiliza voltas. Isso significa que cada vez voc executa uma ao que leva o nmero n de voltas. tambm um jogo baseado em texto, ento se voc quer grficos voc precisar adicion-los. Cada conta que voc criar ir controlar apenas um bairro, por isso, se voc quiser controlar vrios bairros voc vai precisar para criar vrias contas. Alm disso, este jogo ter de usar um banco de dados relacional, ento o banco de dados relacional melhor que mySQL? Ele est disponvel gratuitamente no www.mysql.com e mySQL 4 Verso includo no CD que acompanha este livro. Voc tambm vai precisar de uma chamada de biblioteca PEAR. PEAR est para PHP Extension and Repository Aplicao. 229 230 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Se voc instalou o PHP a partir do CD, ento PEAR e suas bibliotecas padro e gerente so j instalado em sua mquina se voc estiver executando uma plataforma UNIX. Se voc estiver executando plataforma Windows, voc precisar instalar o gerenciador de PEAR. Para instalar o gerenciador de PEAR, basta executar o arquivo go-pear.bat no diretrio de instalao aps

voc instalou o PHP. Se voc no instalar o PHP a partir do CD includo neste livro, ento Eu sugiro que voc v para http://pear.php.net e ver a seco de instalao da documentao para instalar PEAR. Instalando o MySQL Instalando o MySQL no Windows uma tarefa muito simples. Tudo que voc precisa fazer executar o programa setup.exe que vem com a distribuio do Windows. Depois de ter instalado mySQL voc ter de executar o arquivo executvel WinMySQLAdmin para configurar o arquivo my.ini. Para instalar o MySQL no Linux, a maneira mais fcil usar um pacote RPM. A fim de Neste livro voc s precisa usar o servidor e os pacotes RPM cliente. Se voc gostaria de como instalar outros pacotes que voc pode baix-los em www.mysql.com. Para instalar o cliente eo servidor como uma instalao padro, voc deve usar a seguinte linha: %> Rpm-i MySQL-server-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm Uma vez que o pacote terminar a instalao voc deve encontrar um novo diretrio em / var / lib / chamado mysql. A instalao do mySQL tambm adiciona as linhas apropriadas no arquivo / etc / init.d / de modo que o mySQL servidor ir iniciar na inicializao. Nota Se voc estiver atualizando de uma verso anterior do mySQL voc ter de interromper a contagem atual servio, a fim de instalar o mySQL novo. Assim que o MySQL est instalado, voc precisa conceder permisso para um usurio e tabelas. Se voc pular Nesta etapa, voc s ser capaz de se conectar ao seu banco de dados como root. Voc pode adicionar um usurio depois mas eu recomendo que voc faa isso agora. No Windows voc precisa digitar o seguinte na prompt de comando: C: \> cd \ mysql \ scripts C: \> mysql_install_db C: \> cd \ mysql \ bin C: \> mysqld_safe-user = mysql & Onde - user = mysql voc pode colocar qualquer usurio que deseja. Por exemplo, - user = mmodb seria criar um usurio chamado mmodb. Bancos de dados relacional: um rpido resumo 231 Se voc estiver instalando mySQL em uma mquina Linux voc vai precisar digitar o seguinte em um prompt de comando: >%. / Scripts / mysql_install_db % Mysql_installation_directory cd> .>% / Bin / mysqld_safe - user = mysql &

Se voc tiver problemas para criar seu usurio e concesso de permisses de usurio ao banco de dados voc deve olhar a documentao em www.mysql.com para ver as sugestes para soluo de problemas. Agora v em frente e criar o banco de dados que Cartel Kiddy ir usar para armazenar seus dados. Ir a um prompt de comando e navegue at o diretrio onde voc instalou o mySQL. Depois de conseguir nesse diretrio, digite o seguinte: . / Bin / mysqladmin kiddycartel criar Isso ir criar um novo banco de dados chamado kiddycartel. Agora voc precisa adicionar uma tabela ao banco de dados. Para isso, primeiro dar uma olhada rpida na linguagem T-SQL. Bancos de dados relacional: um rpido resumo Bancos de dados relacionais so bancos de dados que sabe de outras tabelas. absolutamente necessrio usar um banco de dados relacional para fazer um jogo MMO. A razo para isto que os jogos MMO rapidamente ficar complicado e se voc est sempre tentando fazer um loop atravs de arquivos para localizar um registro, o seu jogo vai sofrer em desempenho e eu garanto que voc vai perder o controle de quais dados voc est tentando armazenar e recuperar. Com isso dito, bancos de dados relacionais use uma linguagem chamada T-SQL para operar em bases de dados. T-SQL permite criar tabelas em seus bancos de dados, e para inserir, atualizar e excluir registros, para mencionar apenas as funes mais comuns. Com estas quatro opes voc pode obter comeou na criao do jogo Cartel Kiddy, embora estes quatro operaes no far voc um especialista em bancos de dados relacionais. Nota Este no um tutorial completo de T-SQL. Se voc quiser saber mais sobre bancos de dados relacionais voc deve explorar alguns livros banco de dados relacional e tutoriais online. Para criar uma tabela usando T-SQL que voc precisa para usar a funo CREATE TABLE. CREATE TABLE funo recebe as definies da coluna como parmetros e um nome de tabela. A maneira mais fcil explicam como criar uma tabela para te mostrar. Abra um prompt de comando e navegar para o mysql \ bin. Quando voc estiver no diretrio, digite o seguinte: mysql 232 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Este deve iniciar o comando prompt mysql. Quando voc estiver no comando mySQL solicitar que voc precisa se conectar a um banco de dados, de modo digite o seguinte:

conectar kiddycartel Isto ir conect-lo ao banco de dados Cartel Kiddy. Agora que voc est no banco de dados voc pode adicionar as tabelas necessrias para o banco de dados. Voc ter que inserir as linhas seguintes em prompt de comando para criar a tabela de bairros: CRIAR TABELA bairros ( Playername CHAR (64) NOT NULL PRIMARY KEY, NeighborhoodName CHAR (64) NOT NULL, Senha CHAR (64) NOT NULL, Bullies 0 Default INT, Paperboys PADRO INT 0, Cortadores de grama PADRO INT 1, LemonadeStands PADRO INT 0, Padarias PADRO INT 0, PADRO dinheiro INT 300, Limonada PADRO INT 100, Os cookies PADRO INT 50, Bexigas d'gua PADRO INT 0, PlasticBats PADRO INT 0, Estilingues PADRO INT 0, DATETIME LastTurnCredited NOT NULL, Transforma PADRO INT 50 ); Isto ir criar uma tabela de 16 coluna chamada bairros. A primeira coluna no banco de dados armazena o nome do jogador e chamado playername. Voc especificar o tipo de dados da coluna depois de definir o nome da coluna. As palavras-chave PRIMARY KEY dizer que mySQL esta uma coluna exclusiva e isso que deve ser usado para identificar os registros nesta mesa. Nota O banco de dados Cartel Kiddy consiste em apenas uma tabela. Este jogo apenas para fins exemplo e no mostrar projeto de banco de dados relacional apropriada. Kiddy Cartel: As Regras e 233 Especificaes Agora que voc criou o banco de dados e uma tabela, voc pode inserir registros na tabela. Para inserir um registro na tabela que voc ir usar o INSERT INTO funo. INSERT INTO bairros (playername, NeighborhoodName, Senha, LastTurnCredited) VALUES ('myPlayer', 'Mytown', 'mmorocks', GETDATE ()) Isto ir inserir um registro que tem o myPlayer valores como o nome do jogador, como o Mytown nome do bairro, mmorocks como a senha ea data e hora para a ltimo turno creditado coluna. O restante das colunas ir conter os valores padro especificados

na definio da tabela. Digamos que voc deseja atualizar o registro myPlayer e mudar sua senha. Para fazer isso voc vai precisar usar a funo UPDATE. A funo de atualizao leva o nome da tabela e depois a coluna que voc deseja atualizar. Por exemplo: ATUALIZAO bairros Senha SET = 'newPassword' WHERE playername = 'myPlayer' Isto ir atualizar o registro associado myPlayer. Excluso de um registro to simples. Voc usa o DELETE FROM funo. O DELETE FROM funo recebe um nome de tabela como seu principal parmetro. DELETE FROM bairros onde playername = 'myPlayer' A linha acima ir excluir o registro myPlayer. Se voc no especificar uma clusula WHERE no DELETE FROM funo seria excluir todos os registros na tabela especificada. Ento, certifique-se de sempre especificar uma clusula WHERE a menos que voc no se importa de perder todos os seus dados. Que um resumo muito rpido de algumas bsica T-SQL funes. De maneira nenhuma isso uma completa how-to em bancos de dados relacionais. Mas agora que voc tem uma idia geral sobre o que TSQL , e agora que voc tem um banco de dados criado para Cartel Kiddy, vamos dar uma mais em profundidade olhar para as especificaes de Cartel Kiddy. Kiddy Cartel: as normas e especificaes Desde Kiddy Cartel um jogo multiplayer, cada jogador ser controlado por um humanos; no haver jogadores de computador. Depois de ter criado um bairro para controlar voc ser dado um estoque de limonada e um estoque de cookies. Voc tambm ser dado um cortador de grama para que voc possa gerar mais dinheiro. Voc vai comear com US $ 300 e 50 voltas. O objetivo do jogo obter tantos recursos e dinheiro, tanto quanto possvel. Para fazer isso voc vai precisar para criar est limonada, fazem biscoitos, cortar a grama, espio, e assumir outros bairros. H trs principais regras que se aplicam ao cdigo deste jogo. 1. Voltas - Um certo nmero de voltas ser gerada para um jogador de cada hora. Jogadores pode estocar voltas durante o tempo que eles querem. 234 Captulo 11 Kiddy Cartel-Criando seu prprio MMO 2. Geradores de recursos - Voc vai precisar para gerar recursos. Cada gerador de recursos capaz de gerar uma quantidade especfica de recursos. 3. Aes - Este o corao do jogo. Cada ao ter um nmero de voltas. Uma ao pode exigir um nmero de recursos ou um nmero de minions.

Para jogar este jogo voc vai precisar de algum tipo de interface. Voc estar usando formas de executar todas as aes no jogo. Voc pode ver a interface que ser usada para o jogo na Figura 11.1. D uma olhada as aes que o jogador pode executar durante o curso do jogo. Adquira uma banca de limonada Adquira um forno de assar Simples Adquira um cortador de grama gua Bales Compra Adquira Bats plstico Adquira uma Slingshot Criar um Bully Criar um menino de papel Mow gramados Mix Lemonade Figura 11.1 A interface do jogo Kiddy Cartel. Aes criando sua base de 235 Cookies Bake Destruir uma propriedade Scare um mido Steal Propriedade Spy em um Kid Sabotage uma propriedade Enviar Bribe Aes criando sua base Cada ao que voc pode tomar requer algum comando a ser executado. Uma vez que cada comando ter as variveis mesma base voc ir criar uma classe de comando a partir do qual cada comando subsequente pode herdar. Uma vez que cada comando tem um comando de pai, voc vai precisar de uma varivel para armazenar o pai. Voc tambm vai precisar de uma forma de executar os comandos. No faria sentido fazer cada comando executar suas prprias funes, em vez de ter o CCommand () executar a classe comando funes. Cada comando poderia ter sub-comandos, para que voc tambm precisa da capacidade de armazenar essas. Uma vez que voc ir armazenar sub-comandos que voc precisa para manter o controle dos quais de comando que voc est atualmente. Se alguma coisa der errado com o comando, voc necessidade de reverter tudo o que voc fez. Afinal, voc no quer dados parciais flutuante ao redor durante o jogo. Agora que voc sabe o que cada comando tem de fazer, voc pode comear a planejar como vai cdigo da classe. A forma como eu vejo, cada comando tem quatro estados possveis. O comando

poderia erro, ele poderia estar espera de entrada, ele poderia ter mais subcomandos para processo, ou poderia ser feito o processamento. Portanto, vamos definir algumas constantes. / / Definir alguns valores de retorno padro para os comandos. / / Comanda especficos pode retornar o que quiserem. / / Comandos que so executados por CGame deve retornar um desses quatro valores. define ("CMD_ERROR", 1); / / ocorreu um erro define ("CMD_CONTINUED", 2) / / o comando tem mais passos para executar antes de terminar define ("CMD_FINISHED", 3) / / o comando tiver terminado a execuo define ("CMD_NEEDS_INPUT", 4) / / o comando de entrada necessidades humanas antes que ele possa continuar Nos comentrios que voc v uma referncia a uma classe chamada CGame (). O CGame () da classe ir lidar com executar o jogo e ser coberto mais tarde neste captulo. 236 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Em seguida, vamos criar o CCommand () da classe. Voc sabe que voc tem que acompanhar o objeto pai, o comando atual, os comandos sub-do objeto pai, e se o comando precisa ser revertida. classe CCommand { / / Esta uma referncia a um objeto pai var $ m_pParent = null; / / O ndice do atual sub-comando que est sendo executado var $ m_nCurrentCommand; / / Se true, o comando precisa ser revertida. se falso, / / O comando no var $ m_bNeedRollBack; / / Um array para armazenar os comandos subvar $ m_arraySubCommands; funo CCommand (& $ matriz) { / / Definir a referncia ao nosso pai $ This-> m_pParent = & $ pai; / / Definir o comando atual para o primeiro $ This-> m_nCurrentCommand = 0; / / Inicialmente, os comandos no precisam ser revertidas $ This-> m_bNeedRollBack = false; } funo Execute ($ args) { / / Cada comando tem que lidar com a manipulao de sua prpria execuo retorno CMD_FINISHED; } /* Esta funo manipula o valor de retorno de um sub-comando. responsvel por incrementar o ndice comando atual

e para determinar se esse comando tem nada esquerda para a executar. Aes criando sua base de 237 */ funo HandleSubCommand ($ resultado) { / / Fiz isso terminar? if ($ resultado == CMD_FINISHED) { / / Sim, ento v para a prxima $ This-> m_nCurrentCommand + +; } / / Houve um erro? else if ($ resultado == CMD_ERROR) { / / Sim, ento se propagar para cima de erro retorno CMD_ERROR; } / / Faz a entrada necessidade de comando? else if ($ resultado == CMD_NEEDS_INPUT) { / / Sim, por isso a necessidade de se propagar para cima de entrada retorno CMD_NEEDS_INPUT; } / / Temos tudo j executados / / Precisamos para este comando? if ($ this-> m_nCurrentCommand> = count ($ this-> m_arraySubCommands)) { retorno CMD_FINISHED; } / / Ainda temos mais a fazer! outro { retorno CMD_CONTINUED; } } OnError funo ($ sError) { / / Se temos um pai, deix-lo lidar com ela if ($ this-> m_pParent! = null) 238 Captulo 11 Kiddy Cartel-Criando seu prprio MMO { $ This-> m_pParent-> OnError ($ sError); } / / Caso contrrio, ns * so * o pai, por isso temos de lidar com ela outro { / / Imprimir a mensagem de erro echo "Ocorreu um erro: $ <BR> sError";

/* Ns rolamos-nos de volta, que, assumindo todas as classes de nosso filho OnRollBack implementado corretamente, vai desfazer tudo. */ $ This-> OnRollBack (); } } / / Implementao do padro do comando OnRollBack / / Assume que o comando / / No realiza nenhum processamento que afeta o roll back. / / Se este no se sustenta, uma / / Comando deve substituir esse mtodo, a fim de / / Pegar o processamento em conta OnRollBack function () { / / Uma vez que este comando no executar qualquer processamento / / Fora do subcomando, / / Podemos simplesmente chamar rollback em cada um de seus / / Sub-comandos na ordem inversa for ($ i = $ this-> m_nCurrentCommand; $ i> = 0; $ i) { / / Desenrole o sub-comando se for definido. / / Isset o cheque / / Para ter certeza de que no tentar / / Rolo voltar comandos que / / No tem sub-comandos, mas no substituir OnRollBack. if (isset ($ this-> m_arraySubCommands [$ i])) { $ This-> m_arraySubCommands [$ i] -> OnRollBack (); } } Aes criando sua base de 239 / / Reset o ponteiro do comando atual $ This-> m_nCurrentCommand = 0; } } Quando um objeto de comando criado, ele chama o construtor CCommand (). Esse construtor inicializa todas as variveis membro da classe. Neste caso, o objeto pai definido, o nmero de sub-comandos definido como 0, ea varivel reverso necessria definida como false. Mencionei anteriormente que cada comando pai iria lidar com sua prpria execuo. Assim a nica coisa que o Execute () funo precisa fazer dizer que o jogo terminado execuo. Agora voc precisa encontrar uma maneira de lidar com os comandos sub-que necessitam de processamento. Que melhor

nome para uma funo que HandleSubCommand ()? O HandleSubCommand () classe leva um nico argumento de que o manipulador diz que estado est executando o comando dentro Primeiro voc v se o comando terminar. Se o comando terminar com sucesso, ento voc pode seguir em frente para o prximo sub-comando na rvore. Se o comando no terminou, ento ele deve estar em outro estado. Ento, voc verificar para ver se um erro na execuo ocorreu. Se um erro ocorreu, ento voc precisa dizer o jogo terminar a sua execuo. Se um erro no ocorreu, ento voc precisa verificar se o comando est aguardando a entrada. Se o comando est esperando para a entrada, ento voc precisa dizer ao jogo para segurar e esperar para o usurio. Se voc passar por tudo isso voc deve verificar em seguida, verificar para ver se existem mais comandos para executar. Se houver mais comandos para executar, ento voc precisa dizer o jogo que precisa de continuar para o prximo comando. Se voc tiver executado todas as possveis sub-comandos ento voc est terminado a execuo. O que acontece se ocorrer um erro durante a execuo? Se um erro ocorrer durante a execuo de um comando, voc precisa chamar o OnError () funo. Existem dois estados onde um erro pode ocorrer: 1) se o comando tem um pai, e 2) se o comando no tem um pai. Se o comando executar tem um comando pai, ento o comando dos pais deve lidar com o erro. Mas se o comando executar no tem pai, ento o CCommand () classe precisa limpar-se por chamar o OnRollBack () funo. Todos os OnRollBack a funo () faz limpar os sub-comandos que podem existir e, em seguida, redefine a contar. Voc pode estar pensando que se parece com uma enorme quantidade de cdigo para uma classe que realmente no faz qualquer coisa. Para dizer a verdade, esta classe ir permitir-lhe manter a consistncia entre todos seus comandos. Cada vez que voc criar um comando, esse comando vai herdar todos os funes nesta classe. 240 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Criao de um comando com Sub-Comandos Assim como voc criar um novo comando? Criar um novo comando to simples como a criao de uma nova classe que herda da classe CCommand () e executar a lgica do Execute ()

e OnRollBack () funes de membro. Alguns comandos, como o comando de login criar, no implementar a funo OnRollBack () porque ele usa sub-comandos. Isso significa que que a classe CCommand () ir lidar com a reverso de todos os comandos do sub-. D uma olhada o CCreateAccountCmd () da classe. <? require_once ("CCommand.php"); require_once ("CRenderCmd.php"); require_once ("CLockTableCmd.php"); require_once ("CUnlockTableCmd.php"); require_once ("CVerifyAccountInfoCmd.php"); require_once ("CCreateNeighborhoodCmd.php"); classe CCreateAccountCmd estende CCommand { funo CCreateAccountCmd (& $ pParent) { parent:: CCommand ($ pParent); $ This-> m_arraySubCommands [0] = new CRenderCmd ($ this); $ This-> m_arraySubCommands [1] = new CLockTableCmd ($ this); $ This-> m_arraySubCommands [2] = new CVerifyAccountInfoCmd ($ this); $ This-> m_arraySubCommands [3] = new CCreateNeighborhoodCmd ($ this); $ This-> m_arraySubCommands [4] = new CUnlockTableCmd ($ this); $ This-> m_arraySubCommands [5] = new CRenderCmd ($ this); } funo Execute ($ args) { $ Resultado = null; / / ok para ns continuar para realmente criar a conta? if ($ this-> m_nCurrentCommand == 0 & & isset ($ args ['avanar'])) { / / Temos o nosso contributo, por isso vamos passar para o prximo comando $ This-> m_nCurrentCommand + +; / / Queremos que o prximo "avanar" vemos ser um novo. Criao de um comando com Sub-Comandos 241 / / Assim se livrar do que temos hoje unset ($ args ['avanar']); } fazer { / / Salta para o comando atual e execut-lo switch ($ this-> m_nCurrentCommand) { case 0: / / Processar a pgina de criao da conta $ Result = $ this-> m_arraySubCommands [0] -> Execute ("CreateAccount.html", $ args); / / Se ele foi bem sucedido, ento sabemos / / Que preciso aguardar pela entrada

if ($ resultado == CMD_FINISHED) { $ Resultado = CMD_NEEDS_INPUT; } break; case 1: / / Bloquear a tabela do banco de dados $ Result = $ this-> m_arraySubCommands [1] -> Execute ($ GLOBALS ['g_DBTable']); break; case 2: / / Verificar as informaes da conta $ Result = $ this-> m_arraySubCommands [2] -> Execute ($ args ['sPlayerName'], $ Args ['sPassword'], $ Args ['sPasswordRetype'], $ Args ['sNeighborhoodName']); / / Houve um erro? if ($ result == CMD_ERROR) { / / Deixe o erro regulares / Negcio / manipulador com esses erros break; } / / Qualquer outro erro? else if ($ resultado! = CMD_FINISHED) { 242 Captulo 11 Kiddy Cartel-Criando seu prprio MMO / / Desfazer tudo o que fizemos at agora $ This-> OnRollBack (); / / Fazer uma nota do erro, / / Assim que a criao de / / Pgina conta pode render / / Para o usurio $ Args ['sError'] = $ resultado; / / Reiniciar a execuo deste comando $ This-> m_nCurrentCommand = 0; return $ this-> Execute ($ args); } break; case 3: / / Criar o bairro $ Result = $ this-> m_arraySubCommands [3] -> Execute ($ args ['sPlayerName'], $ Args ['sPassword'], $ Args ['sNeighborhoodName']); break; case 4: / / Desbloquear todas as tabelas do banco de dados bloqueado $ Result = $ this-> m_arraySubCommands [4]

-> Execute (); break; case 5: / / Render um "bem-sucedida criao" pgina $ Result = $ this-> m_arraySubCommands [5] -> Execute ("AccountCreationSuccess.html", $ args); break; } / / Manipular o resultado do nosso sub-comando $ Result = $ this-> HandleSubCommand ($ resultado); / / Enquanto ainda h comandos a serem / / Executado que no precisam de interveno humana } While ($ resultado == CMD_CONTINUED); Criao de um comando com Sub-Comandos 243 return $ resultado; } } ?> Voc notar que os primeiros seis linhas do cdigo requerem outros arquivos. Esses arquivos so outras simplesmente outras classes que o jogo usa. Uma vez que este um comando, voc precisa de exigir a Arquivo CCommand.php assim voc pode herdar dele. O CRenderCmd () permite que voc passe a executar a funo de um arquivo html para tornar o navegador. Este comando trata de tudo que o usurio v. O CLockTableCmd () ea CUnlockTableCmd () bloqueia e desbloqueia um determinado tabela no banco de dados Cartel Kiddy. Sem essas duas classes, haveria uma chance que um usurio pode estar atualizando o banco de dados ao mesmo tempo que outro usurio est atualizando banco de dados, e que no bom. O CVerifyAccountInfoCmd () procura no banco de dados certifique-se que o usurio no est tentando criar uma conta duplicada. Se forem, ento a execuo precisa parar e que o usurio precisa saber que a conta j existe. O ltimo arquivo necessrio o arquivo que realmente cria o bairro de padro para o usurio. No vou explicar cada uma dessas classes. H aulas apenas demais em este jogo para explicar cada em grande detalhe. Por favor, olhe o CD e d uma olhada cada classe. Voc notar que cada comando estruturado de forma muito semelhante. Vou explicar o CCreateAccountCmd () classe e outra classe que no tem sub-comandos para executar de modo voc pode ver a diferena na forma de cdigo-las. Todos os CCreateAccountCmd () classe implementa um construtor e do Execute () funo.

O construtor diz ao CCommand () classe que o CCreateAccountCmd () a classe pai. Em seguida, a classe passa a configurar um conjunto de sub-comandos. Cada uma dessas sub-comandos ter a sua prpria lgica no Execute () funo. O Execute () usa uma funo do ... while e uma instruo switch para determinar qual comando que deve ser executado. Cada caso em a instruo switch corresponde a um sub-comando. O sub-comando parecido com este: $ This-> m_arraySubCommands [0] = new CRenderCmd ($ this); $ This-> m_arraySubCommands [1] = new CLockTableCmd ($ this); $ This-> m_arraySubCommands [2] = new CVerifyAccountInfoCmd ($ this); $ This-> m_arraySubCommands [3] = new CCreateNeighborhoodCmd ($ this); $ This-> m_arraySubCommands [4] = new CUnlockTableCmd ($ this); $ This-> m_arraySubCommands [5] = new CRenderCmd ($ this); Ento isso significa que a declarao primeiro caso ir conter a lgica para o CRenderCmd (). O segundo declarao caso ir conter a lgica para o CLockTableCmd (), e assim por diante. Uma vez que um comando tiver terminado a execuo, o loop recomea e se move para o prximo comando incrementando a varivel $ m_nCurrentCommand. 244 Captulo 11 Kiddy Cartel-Criando seu prprio MMO A declarao primeiro caso usa o CRenderCmd () da classe. A funo Execute () do CRenderCmd (classe) tem uma pgina HTML para um argumento. Isto ir renderizar a pgina HTML para o navegador. Uma vez que a pgina processada para o navegador, o estado do jogo muda para esperar para a entrada. Uma vez que o usurio preenche o formulrio na pgina CreateAccount.html e depois clica em Enviar, o comando executado e bloqueia a tabela. Depois que a tabela est bloqueado o loop executa novamente, mas desta vez ele cai no terceiro caso. Isto onde voc verificar se esse usurio no existe. Se o usurio no existe, ento a classe precisa reverter o que voc tem feito at este ponto. Depois de ter verificado que a conta no existe no banco de dados voc cria o bairro e desbloquear a mesa. Uma vez que a tabela destravada voc renderizar uma mensagem para o navegador dizendo ao usurio que a conta foi criada com sucesso e que eles pode logar e comear a jogar, D uma olhada Figuras 11.2 e 11.3 para ver o Criar Conta pgina ea pgina de Sucesso. muito fcil criar um comando com sub-comandos. No se preocupe em como integrar o comando para o jogo ainda. Que sero abordados mais adiante neste captulo. Para

agora, dar uma olhada em como criar um comando sem sub-comandos. Figura 11.2 A pgina Criar Conta. Criao de um Comando sem Sub-Comandos 245 Figura 11.3 a criao de contas de sucesso. Criao de um Comando sem Sub-Comandos Para criar um comando sem sub-comandos muito mais simples do que criar comandos com sub-comandos. Em vez de implementar uma funo de construtor e os Execute (), implementar o Execute () funo eo OnRollBack () funo. Desde que voc no tem que executar a lgica para cada sub-comando, a nica lgica que precisa estar no Execute () funo a lgica para a tarefa que voc est tentando concluir. Vou usar o CAddWeaponsCmd () da classe para um exemplo. <? require_once ("db.php"); require_once ("CCommand.php"); require_once ("settings.php"); classe CAddWeaponsCmd estende CCommand { / / Informao necessria para reverter var $ m_sPlayerName; var $ m_nWaterBalloons; 246 Captulo 11 Kiddy Cartel-Criando seu prprio MMO var $ m_nPlasticBats; var $ m_nSlingshots; funo Execute ($ sPlayerName, $ nWaterBalloons, NPlasticBats $, $ nSlingshots) { / / Certifique-se que a entrada so valores inteiros $ NWaterBalloons = (int) $ nWaterBalloons; $ NPlasticBats = (int) $ nPlasticBats; $ NSlingshots = (int) $ nSlingshots; / / Conecta ao db $ Db = DB:: connect ($ GLOBALS ['g_PearDBDSN']); if (DB:: IsError ($ db)) { / / Que todos saibam que houve um problema $ This-> OnError ("Falha ao conectar-se banco de dados usando ". $ GLOBALS ['g_PearDBDSN']); / / Retorna falha retorno CMD_ERROR; } $ Query = "UPDATE". $ GLOBALS ['g_DBTable']. "Bexigas d'gua SET = + $ NWaterBalloons bexigas d'gua, PlasticBats = PlasticBats + $ NPlasticBats, estilingues Slingshots = + $ nSlingshots ONDE Playername = '$ sPlayerName' "; $ Result = $ db-> query ($ query); if (DB:: IsError ($ result))

{ / / Que todos saibam que h um problema $ This-> OnError ("Failed to update" $ GLOBALS ['g_DBTable'].); / / Retorna falha retorno CMD_ERROR; Else {} / / Configurar as variveis membro $ This-> m_sPlayerName = $ sPlayerName; $ This-> m_nWaterBalloons = $ nWaterBalloons; Criao de um Comando sem Sub-Comandos 247 $ This-> m_nPlasticBats = $ nPlasticBats; $ This-> m_nSlingshots = $ nSlingshots; retorno CMD_FINISHED; } } OnRollBack function () { / / J que no h comando para deduzir as armas, / / Esta reverso deve ser implementado aqui / / Conecta ao db $ Db = DB:: connect ($ GLOBALS ['g_PearDBDSN']); if (DB:: IsError ($ db)) { / / Que todos saibam que houve um problema $ This-> OnError ("Falha ao conectar ao banco de dados usando" . $ GLOBALS ['g_PearDBDSN']); / / Retorna falha retorno CMD_ERROR; } $ Result = $ db-> Consulta ("UPDATE". $ GLOBALS ['g_DBTable']. "SET". "Bexigas d'gua = bexigas d'gua + $ this-> m_nWaterBalloons". "PlasticBats PlasticBats = + $ this-> m_nPlasticBats". "Slingshots Slingshots = + $ this-> m_nSlingshots". "WHERE playername = '$ this-> m_sPlayerName'"); if (DB:: IsError ($ result)) { / / No h nada que podemos fazer se o / Rollback / falhou, por isso, deixe-o ir } retorno; } } ?> 248 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Este comando muito mais simples do que uma classe com sub-comandos. O Execute () funo recebe os argumentos que voc deseja atualizar. Neste caso, j que voc est acrescentando armas para o seu leitor, ele precisa tomar um nome de jogador, o nmero de bales de gua

para adicionar, o nmero de morcegos de plstico para adicionar, eo nmero de estilingues para adicionar. O Execute () funo comea, certificando-se que as variveis so nmeros inteiros. Em seguida, ele tenta se conectar ao banco de dados. Se a funo Execute () no consegue se conectar ao banco de dados em seguida, ocorreu um erro e voc precisa deixar o usurio saber o que aconteceu. Se o Execute () funo conectado ao banco de dados com sucesso, ento voc pode atualizar o registro. A varivel $ db est usando a API PEAR para se conectar ao banco de dados. A API PEAR contm uma funo membro chamado Query () que ir executar a consulta que voc especificou. Se um erro ocorre durante a execuo voc precisar chamar o OnRollBack () funo. Caso contrrio voc atualizar stats dos jogadores e devolver o controle de volta ao jogo para que ele possa voltar a tornar o pgina. O OnRollBack () funo tenta se conectar ao banco de dados. Aps a OnRollBack () funo, com sucesso, conectada ao banco de dados ele tenta atualizar o banco de dados de volta para os valores originais que o jogador tinha antes da consulta falhou. Se alguma coisa na Funo OnRollBack () falhar, no h muito que voc pode fazer. Olhe para todos os comandos ... e agora? Agora que voc sabe como criar seus prprios comandos, voc precisa encontrar uma maneira para acess-los atravs da estrutura do jogo. Voc vai precisar para criar algo chamado uma fbrica de comando. A classe de fbrica de comando contm uma nica funo chamada CreateCommand (). O comando classe de fbrica tambm tem um require_once () de referncia para cada classe de comando nico que que voc criou. A classe de fbrica de comando permitir que voc criar um comando com base em na seqncia de consulta. Quando voc clica em um link que aciona uma ao e voc precisa dizer o jogo que tipo de ao que voc vai comear, voc fazer isso atravs da seqncia de consulta. D uma olhada na classe CommandFactory (). <? /* Voc deve require_once () todos os arquivos de origem que contm comandos que deseja instanciado usando a fbrica. O CGame objeto usa a fbrica para lidar com a criao do objetos de comando a fim de esconder a necessidade de um pai do objeto CGame. */

Olhe para todos os comandos. . . Now What? 249 require_once ("CLockTableCmd.php"); require_once ("CUnlockTableCmd.php"); require_once ("CRenderCmd.php"); require_once ("CManageAccountCmd.php"); require_once ("CCreateAccountCmd.php"); require_once ("CEditAccountCmd.php"); require_once ("CMoveOutOfNeighborhoodCmd.php"); require_once ("CLogoutCmd.php"); require_once ("CLoginCmd.php"); require_once ("CGameMenuCmd.php"); require_once ("CAssetAcquisitionCmd.php"); require_once ("CBuyWeaponsCmd.php"); require_once ("CBuyEquipmentCmd.php"); require_once ("CRecruitCmd.php"); require_once ("CBuildResourceCmd.php"); require_once ("CMowLawnCmd.php"); require_once ("CMakeLemonadeCmd.php"); require_once ("CBakeCookiesCmd.php"); require_once ("CShowNeighborhoodStatsCmd.php"); require_once ("CViewTopNeighborhoodsCmd.php"); require_once ("COrderMinionsCmd.php"); require_once ("COrderPaperBoysCmd.php"); require_once ("COrderBulliesCmd.php"); require_once ("CRazeCmd.php"); require_once ("CScareCmd.php"); require_once ("CTakeOverCmd.php"); require_once ("CSpyCmd.php"); require_once ("CSabotageCmd.php"); require_once ("CBribeCmd.php"); 250 Captulo 11 Kiddy Cartel-Criando seu prprio MMO classe CCommandFactory { / / Isso existe para permitir que o pai / / Referncia nos comandos para ser definido como null. var $ m_NullVariable = null; funo CreateCommand (sCmdName $ = "") { / / Se uma classe conhecida, cri-lo if (class_exists ($ sCmdName)) { return new $ sCmdName ($ m_NullVariable); } / / Estamos tentando criar uma classe que no existe? else if ($ sCmdName! = "" & &! class_exists ($ sCmdName)) { / / Isto nunca deveria acontecer, por isso alertar o programador / / (Eles provavelmente se esqueceu de require_once o comando) echo "<BR> comando desconhecido"; / / Sada difcil, pois no h nada que possamos realmente

exit (1); } / / Ela indefinida, ento v com o padro outro { / / Render o comando principal do jogo por defeito return new CGameMenuCmd ($ this-> m_NullVariable); } } } ?> Se voc criar seus prprios comandos e esquecer de adicionar o require_once () de referncia para o arquivo ento o jogo permitir que voc saiba que ele est tentando executar um comando desconhecido. Assim lembre-se de adicionar o seu comando para a fbrica de comando. Como voc pode ver, tudo o que a fbrica de comando faz verificar se o comando que voc est tentando criar existe. Se o comando no existe, ento cria-lo, se o comando no existe, ento permite que voc saiba. Se no houver um comando a ser executado, em seguida, ele assume que voc est no menu do jogo e que deve tornar o menu para o browser. Olhe para todos os comandos. . . Now What? 251 Assim como no mundo voc coloca tudo isso junto? Bem, a que a classe CGame () entra em jogo. Tudo o que acontece no jogo ocorre atravs da pgina main.php. A pgina chama o main.php CGame () da classe. D uma olhada na pgina main.php. <? require_once ("CGame.php"); require_once ("CNeighborhood.php"); require_once ("CCommand.php"); require_once ("CRenderCmd.php"); funo main () { / Seed / gerador de nmeros aleatrios uma vez para todos os comandos srand (time ()); / / Obtm a sesso em funcionamento session_start (); / / Se no houver uma objeo jogo na sesso, fazer uma if (! isset ($ _SESSION ['jogo'])) { $ _SESSION ['Jogo'] = new CGame; } / / Executar o comando de jogo atual $ _SESSION ['Jogo'] -> ExecuteCommand ($ _REQUEST); } main ();

?> O primeiro evento que ocorre quando voc bater esta pgina que ele verifica para ver se voc atualmente ter uma sesso. Se voc tiver uma sesso, em seguida, ele executa as solicitaes que tm vindo atravs da pgina usando a varivel global $ _REQUEST. No entanto, se voc no tem uma sesso ele comea um novo jogo, chamando o CGame () da classe. Figura 11.4 mostra a tela de login do o jogo, que processado quando uma sesso iniciada. 252 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Figura 11.4 A tela de login aparece quando um novo jogo iniciado. Depois que o arquivo main.php constri a CGame () de classe, o CGame () constri uma nova classe fbrica de comando. CGame funo () { / / Cria a fbrica que iremos utilizar para obter os nossos comandos da $ This-> m_CmdFactory = new CCommandFactory; } Uma vez que a fbrica de comando carregado, o arquivo main.php chama a ExecuteCommand () funo para a classe CGame (). Esta funo verifica a string de consulta para ver se existem comandos enviada para ele. Se no houver comandos colocada nas _REQUEST $ object, em seguida, o comando tipo definido como uma string em branco. Esta seqncia em branco diz o jogo para tornar o jogo menu. Lembre-se que o objeto $ _REQUEST envia o tipo de comando para o comando fbrica e se no houver nenhum comando, ele assume que voc est no menu. Aps a CGame () da classe verifica se o objeto $ _REQUEST preenchida crditos que o jogador com as voltas que ele merece. Em seguida, ele verifica se um comando est em execuo. Se um comando no est executando, em seguida, ele tenta criar um novo comando. Se um comando est sendo executado em seguida, o CGame () da classe verifica se o comando executar o mesmo que o comando que foi solicitado. Se no for o mesmo, ento, algo estranho Olhe para todos os comandos. . . Now What? 253 que aconteceu e executar o comando precisa ser revertida e os novos solicitado comando precisa ser criado. Depois que o comando criado, ele executa o comando. Aps o comando executado, ele verifica os resultados que voc definiu anteriormente no Comando () da classe. Se o resultado for igual a CMD_FINISHED isso significa que o comando foi concludo com sucesso. Caso contrrio, ele verifica

para ver se ocorreu um erro. Se tiver ocorrido um erro no comando j rolou de volta o que ele tentou fazer, ento voc s precisa deixar o usurio saber o que aconteceu. A listagem de cdigo a seguir mostra a CGame () classe em toda a sua glria fantstico: <? require_once ("CCommandFactory.php"); require_once ("CNeighborhood.php"); require_once ("CCreditTurns.php"); classe CGame { / / Bairro do jogador m_Neighborhood $ var; / / O comando em execuo no momento var $ m_CurrentCmd; / / O comando da fbrica, que para obter todos os nossos comandos var $ m_CmdFactory; CGame funo () { / / Cria a fbrica que iremos utilizar para / / Obter o nosso comanda a partir de $ This-> m_CmdFactory = new CCommandFactory; } / / Executa o prximo passo no jogo funo ExecuteCommand ($ args) { / / Se um tipo no est definido, alter-lo para um espao em branco if (! isset ($ args ['type'])) { $ Args ['type'] = ""; 254 Captulo 11 Kiddy Cartel-Criando seu prprio MMO } / / Se o jogador estiver conectado, ele o crdito / / Voltas que ele merece if (isset ($ _SESSION ['bairro'])) { $ Turn_update CCreditTurns = new ($ null); $ Turn_update-> Execute (); } / / No h comando atualmente em execuo? if ($ this-> m_CurrentCmd == NULL) { / / Cria o novo comando $ This-> m_CurrentCmd = $ this-> m_CmdFactory-> CreateCommand ($ args ['type']); } / / Se o tipo de comando mudana em ns? else if (strtolower (get_class ($ this-> m_CurrentCmd))! = strtolower ($ args ['type'])) {

/ / Ns interrompeu um comando, assim que desfazer o que fizemos $ This-> m_CurrentCmd-> OnRollBack (); / / Cria o novo comando $ This-> m_CurrentCmd = $ this-> m_CmdFactory-> CreateCommand ($ args ['type']); } / / Se h algo para executar (e no deve haver!), Faz-lo if ($ this-> m_CurrentCmd! = NULL) { / / Executar o comando $ Result = $ this-> m_CurrentCmd-> Execute ($ args); / / terminado? if ($ resultado == CMD_FINISHED) { $ This-> m_CurrentCmd = NULL; } Olhe para todos os comandos. . . Now What? 255 else if ($ resultado == CMD_ERROR) { echo "Ocorreu um erro durante a execuo". get_class ($ this-> m_CurrentCmd). "<BR>!"; } } } } ?> Depois de ter tudo juntos na fbrica de comando e todas as configuraes tweaked no arquivo settings.php, voc pode rodar o jogo. Quando voc efetuar login no jogo voc vai ver o menu que parece com a Figura 11.5. Quando voc rolar sobre os links que voc vai ver um seqncia de consulta. Esta cadeia de consulta deixar o jogo sabe o comando para executar. O link na barra de status do seu navegador deve ficar assim: http://localhost/chapter11/main.php?type=CBuyEquipmentCmd Figura 11.5 O jogo em ao. 256 Captulo 11 Kiddy Cartel-Criando seu prprio MMO Concluso Voc criou com sucesso um dos jogos mais legais MMO atualmente l fora. Voc deve dar-se uma palmadinha nas costas, porque voc veio aos trancos e barrancos de o incio deste livro. No prximo captulo voc vai explorar como criar seu prprio dinmica peas Flash com PHP. Voc tambm vai aprender como adicionar ActionScript e animao a estas peas em Flash dinmico. Eu tenho que agradecer rapidamente Drago Game Design Fly (www.dragonflygamedesign.com/) para

criar esta idia incrvel para este MMO. V v-los, pois eles fazem algumas incrveis de trabalho. Com isso dito, vamos passar a criar algumas peas em Flash dinmico! captulo 12 Construindo sua Habilidades PHP PHP e Ming Como criar um filme do Flash Desenho para seu filme do Flash Enchimento com Ming Adicionando animao ao Pedao de Flash Adicionar ActionScript para a sua pea em Flash Ongratulations C, voc conseguiu chegar at o fim deste livro, e voc tem feito um pouco. Voc aprendeu tudo sobre o ambiente de servidor em que PHP executado. Voc instalou seu prprio servidor Web. Voc instalou o PHP intrprete. Voc aprendeu tudo sobre HTML, e ento voc conquistou o bsico de PHP. Voc aprenderam sobre matrizes e voc criou um jogo de tic-tac-toe. Voc, ento, dominado no relacionais bases de dados e criou um jogo de xadrez bsico. Depois disso, voc refaz uma Web-based verso do clssico Scorched Terra, chamado Battle Tank. Voc mesmo criou o seu prprio MMO jogo. Voc tem feito tudo isso com PHP sozinho. Imaginar o que mais voc pode fazer com PHP. Nesta captulo final, voc vai dar uma olhada em algumas das outras coisas legais que voc pode fazer com PHP. PHP e Ming O que Ming? Ming uma biblioteca que permite que voc crie seu prprio SWF dinmicos Filmes flash. Isso mesmo, voc pode criar on-the-fly de filmes Flash. Imaginar o infinito 257 258 Captulo 12 Construir suas habilidades PHP aplicativos que voc pode usar isto para. Tickers dinmica, uma aplicao de chat on-line usando um Motor de PHP, criao de jogos desafio aleatrio, a lista vai sobre e sobre. At este ponto, todos os seus jogos tm sido baseado em turnos com mnima interao do usurio com a pgina em si. Com PHP combinado com o Flash voc pode adicionar algumas interaes muito legal o seu jogo. Alm de adicionar interao que voc pode criar algumas animaes real. Voc pode at adicionar o Flash elementos em seu jogo. Agora provavelmente voc est mastigando o bocado para instalar Ming. Antes de eu chegar ao que eu s quero

dizer que esta no uma completa "tudo o que voc pode fazer com Ming" captulo. Isto simplesmente um olhar o que voc pode fazer para construir suas habilidades PHP. Agora, com o que disse, voc instala Ming como qualquer outra extenso. Abra o arquivo php.ini e descomente a seguinte linha: extension = php_ming.dll Se voc do tipo que prefere carregar a extenso dinamicamente, voc sempre pode usar o seguinte cdigo para fazer exatamente isso: <? Php if (! extension_loaded ('ming')) { if (strtoupper (substr (PHP_OS, 0, 3)) == 'WIN') { dl ('php_ming.dll'); } outro { dl ('php_ming.so'); } } ?> Agora que voc tem oficialmente habilitado Ming voc pode comear a criar peas em Flash dinmico. Ming vem com 13 classes que permitem realizar vrias tarefas em Flash. D uma olhada na Tabela 12.1 para uma descrio dessas 13 classes para criar e manipular o seu peas em Flash dinmico. Nota Ming no cria ActionScript para voc. No entanto, ele lhe d uma interface para adicionar seus prprios ActionScript para suas peas em Flash dinmico. Como criar um filme Flash 259 Ming Objects Descrio da classe SWFMovie SWFShape SWFFill SWFGradient SWFBitmap SWFFont SWFText SWFTextField SWFDisplayItem SWFSprite SWFMorph SWFButton SWFAction Tabela 12.1

Cria um filme do Flash. Cria formas geomtricas para o seu filme Flash. Fornece mtodos para preencher seus objetos. Cria um objeto de gradiente para que voc possa us-lo como um preenchimento de sua geometria. Permite que voc inclua. Jpg e. Png em seu filme Flash. Permite criar uma fonte para o seu pedao Flash. Possibilita a sada de texto para o seu pedao Flash. Permite que voc crie uma rea de entrada de texto em seu pedao Flash. Permite que voc acesse objetos Flash. Permite que voc crie um clipe de filme para o seu pedao Flash. Permite que voc crie tweens forma entre dois objetos. Permite que voc crie um boto no seu pedao Flash. Cria um objeto do ActionScript que voc pode adicionar o ActionScript para o seu pedao Flash. Como criar um filme do Flash Para criar um novo filme do Flash que voc precisa para invocar uma instncia da classe SWFMovie. D uma olhar para a seguinte linha de cdigo para ver como invocar a classe SWFMovie: $ MyMovie = new SWFMovie (); A varivel $ myMovie agora contm uma instncia da classe SWFMovie. Agora que voc tem um instncia de SWFMovie voc pode especificar os fundamentos de seu filme, como filme dimenses, taxa de quadros, ea cor de fundo. Depois de ter especificado esses fundamentos de seu filme voc poderia sada para o navegador. Para definir as dimenses de seu filme, a classe SWFMovie contm uma funo membro chamado setDimension (). O setDimension () funo recebe dois argumentos: a largura ea altura (Em pixels) que voc quer que seu filme seja. D uma olhada na seguinte linha de cdigo para ver como para definir a dimenso do seu filme Flash dinmico: $ MyMovie-> setDimension (400, 300); Isso define a pea Flash $ myMovie para uma largura de 400 pixels e uma altura de 300 pixels. Agora que definiu as dimenses de sua pea em Flash que voc precisa especificar a sua taxa de quadros. Sua taxa de quadros especifica o nmero de quadros por segundo que ser exibido. A Flash 260 Captulo 12 Construir suas habilidades PHP filme apenas uma srie de quadros, como uma espcie de cartoon. Ento, para mostrar uma animao voc iria percorrer diferentes quadros. Para definir a taxa de quadros voc usa o setRate () funo. Esta funo recebe um parmetro: um inteiro que especifica o nmero de quadros por segundo, que ser exibida. $ MyMovie-> setRate (30);

O trecho de cdigo acima define o filme para percorrer seus quadros a 30 frames por segundo. Agora que voc tenha especificado as dimenses de seu filme ea taxa em que seu filme ser reproduzido voc precisa definir uma cor de fundo. Para definir a cor de fundo do seu filme, a classe SWFMovie contm uma funo membro setBackground chamada (). O setBackground () funo recebe trs argumentos, todos os inteiros. O primeiro argumento o componente vermelho da cor que voc deseja usar. O segundo argumento o componente verde, eo argumento terceiro e ltimo o componente azul da a cor que voc deseja usar. D uma olhada no seguinte trecho de cdigo. Ele define o fundo cor da sua pea Flash para negros. $ MyMovie-> setBackground (0, 0, 0); Agora que voc j criou uma pea bsica do Flash, e eu quero dizer bsicos, voc vai querer de alguma forma para exibi-lo para a tela. uma coisa boa que a classe SWFMovie contm uma funo membro sada chamada () que escreve a sada para o navegador. Para us-lo, voc precisa especificar o tipo de contedo, tal como fez quando estava criando seus prprios grficos dinmicos. D uma olhar para as seguintes linhas de cdigo: header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); Vamos colocar tudo isso junto e dar uma olhada nele para ver os resultados de todo este cdigo. <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (0, 0, 0); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> Hmmm. . . Observe como o pedao do Flash inteira enche o navegador no importa quo grande mesmo que voc especificou as dimenses do filme do Flash? Ele faz isso porque um Flash pea pode escala-se dinamicamente, pois utiliza grficos vetoriais. Portanto, a fim de manter o Como criar um filme Flash 261 Flash pedao nas dimenses que voc especificou, voc precisa incorpor-lo em uma tag <object> e salvar o filme do Flash para o disco. D uma olhada no exemplo a seguir para ver como fazer isso: <html>

<body> <OBJECT classid = "clsid: D27CDB6E-AE6D-11cf-96B8-444553540000" codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/ swflash.cab # version = 6,0,0,0 " WIDTH = "400" height = id "300" = "flashTest"> <PARAM NAME=movie VALUE="example01.php"> <EMBED src = "WIDTH example01.php" = "400" height = "300" TYPE = "application / x-shockwave-flash" Pluginspage = "http://www.macromedia.com/go/getflashplayer"> </ embed> </ OBJECT> </ Body> </ Html> D uma olhada na Figura 12.1 para ver os resultados de incorporar o arquivo Flash em uma dinmica Pgina HTML. No muito ainda, mas agora eu vou lhe mostrar como desenhar em sua tela de filme do Flash. Figura 12.1 Um filme de Flash dinmico bsico incorporado em um Pgina HTML. 262 Captulo 12 Construir suas habilidades PHP Desenho para seu filme do Flash Para desenhar a sua pea em Flash que voc precisa criar uma instncia da classe SWFShape. Voc fazer isso da mesma forma que voc criou uma instncia da classe SWFMovie. Uma vez que uma instncia de SWFShape criado voc tem acesso a vrias funes para desenhar linhas e curvas. $ Forma = new SWFShape (); Agora que voc tem uma instncia da classe SWFShape, voc pode desenhar para o filme que voc criado anteriormente. Para desenhar uma linha, SWFShape oferece duas funes de membro para realmente chamar a a linha e uma funo de membro para definir o estilo da linha. Para definir o estilo da linha voc pode usar o setLine () funo. O setLine () funo recebe cinco argumentos. A primeira a largura da linha em pixels; os prximos trs argumentos so os Valores RGB para a cor da linha, o quinto e ltimo argumento o valor alfa para o linha. Digamos que voc queria desenhar uma linha de 5 pixels, largura amarela em sua tela. Voc teria definir o estilo parecido com isto: $ Forma-> setLine (5, 255, 255, 0 255.); As duas funes para desenhar uma linha para a tela so drawLine () e drawLineTo (). Cada um dos estas funes possuem dois argumentos: uma coordenada x e ay de coordenadas. O drawLine () funo desenha uma linha a partir da posio atual caneta para um ponto (x, y) pixels de distncia da

posio atual. O drawLineTo () funo desenha uma linha a partir da posio atual caneta para a (x, y) de coordenadas especificado. A posio caneta onde a ponta da caneta est atualmente na tela. Voc pode mover o posio da caneta chamando o movePenTo () funo de membro. O movePenTo () membro funo recebe dois argumentos: uma coordenada x e ay de coordenadas. D uma olhada no seguinte cdigo de exemplo para ver a diferena entre as duas funes de desenho de linha: <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (200, 200, 200); / / Desenha uma linha para a tela usando drawLine () $ Linha1 = new SWFShape (); $ Linha1-> setLine (5, 0, 0, 0, 255); $ Linha1-> movePenTo (40, 20); $ Linha1-> drawLine (100, 100); $ Linha2 = new SWFShape (); $ Line2-> setLine (5, 0, 0, 0, 255); Desenho para seu filme Flash 263 $ Line2-> movePenTo (80, 20); $ Line2-> drawLineTo (200, 100); / / Agora adicione as formas para o filme $ MyMovie-> add ($ linha1); $ MyMovie-> add ($ linha2); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> Primeiro voc cria um filme que de 400 300 pixels com um fundo cinza claro. Depois que voc tiver inicializado o filme que voc criar duas linhas, ambas de 5 pixels de largura, com uma cor de preto. Em seguida, voc move a caneta para um ponto especfico na tela e desenhar uma linha. Depois de ter traada uma linha para ambos os objetos SWFShape voc precisa adicion-los ao cinema. Para fazer isso, voc usar o add () funo membro da classe SWFMovie. O add () funo recebe uma argumento de um tipo misto. Os resultados do exemplo acima a aparncia da Figura 12.2. Agora que voc sabe como desenhar linhas com o estgio de seu pedao Flash, d uma olhada em como voc desenhar curvas para o palco. Ming fornece duas funes para desenhar curvas como ele fornece

-lo com duas funes para desenhar linhas. A primeira das duas funes DrawCurve (). O DrawCurve () funo desenha uma curva em relao posio atual caneta. O DrawCurve (funo) leva quatro argumentos. Os dois primeiros argumentos so os coordenadas X e Y do ponto de controle da curva. Os dois ltimos argumentos so as coordenadas XeY do que chamado o ponto de ancoragem. Figura 12.2 Desenho de linhas com SWFShape. 264 Captulo 12 Construir suas habilidades PHP Quando Ming desenha uma curva, ele comea na posio atual da caneta, que chamado de ponto de origem. Em seguida, desenha uma curva para o ponto de ancoragem, primeiro passando pelo controle ponto. D uma olhada na Figura 12.3 para ver uma representao visual deste. A segunda funo utilizada para desenhar uma curva chamado drawCurveTo (). Assim como o drawLineTo () funo, ela comea na posio atual caneta e desenha seu ponto para o ponto de ancoragem, usando o ponto de controle para definir a gravidade da curva. O DrawCurve () funo tambm leva quatro argumentos. Os dois primeiros argumentos so as coordenadas x e y do controle ponto. Os dois ltimos argumentos so as coordenadas x e y do ponto de ancoragem. Para desenhar uma curva, na verdade voc seguir a mesma lgica que voc faria para desenhar uma linha. Voc precisa criar um filme Flash, e inicializar as suas dimenses, taxa e cor de fundo. Ento voc necessidade de criar uma nova SWFShape () objeto e definir o estilo da linha que voc est indo para uso por usando o setLine () funo. D uma olhada na seguinte funo para ver como desenhar uma curva usando o drawCurveTo () funo: <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (200, 200, 200); / / Desenha uma curva Curva $ = new SWFShape (); $ Curva -> setLine (5, 0, 0, 0, 255); $ Curva -> movePenTo (40, 20); $ Curva -> drawCurveTo (100, 100, 100, 20); / / Agora adicione as formas para o filme $ MyMovie-> add ($ curva); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output ();

?> D uma olhada nos resultados na Figura 12.4 Objetos com enchimento Ming 265 Figura 12.3 O Ming mtodo de desenho de curva. Figura 12.4 Resultados da DrawCurveTo () funo. Objetos de enchimento com Ming Ming oferece trs maneiras de preencher um objeto. Voc pode preencher um objeto com uma cor, voc pode preencher um objeto usando um gradiente, e voc ainda pode preencher um objeto usando uma imagem. O Classe SWFShape () fornece duas funes para preencher uma imagem. O setLeftFill () funo da funo eo setRightFill () recebem um SWFFill () objeto como seu nico argumento. Voc pode recuperar um SWFFill () objeto usando o addFill () funo de membro que 266 Captulo 12 Construir suas habilidades PHP o SWFShape () classe fornece. O addFill () funo recebe trs argumentos. O primeiro argumento o componente vermelho da cor que voc deseja usar para preencher. O segundo argumento o componente verde da cor, eo terceiro argumento o componente azul da cor. Ento, qual a funo preencher voc usa? Bem, tudo depende de como voc est desenhando o seu objeto. Se voc est desenhando o seu objeto no sentido horrio, ento voc precisa usar o-Setright Fill (funo). Se voc est desenhando a sua forma no sentido anti-horrio, ento voc precisa usar o setLeftFill () funo. No exemplo a seguir voc vai desenhar um quadrado com uma borda de 5 pixel-preta que preenchido com o verde: <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (200, 200, 200); / / Cria uma nova forma e adicionar um objeto de preenchimento $ Square = new SWFShape (); $ Square-> setLine (5, 0, 0, 0, 255); Fill = $ $ square-> addFill (0, 255, 0); $ Square-> setRightFill ($ preenchimento); / / Desenha um quadrado $ Square-> movePenTo (40, 20); $ Square-> drawLineTo (140, 20); $ Square-> drawLineTo (140, 120); $ Square-> drawLineTo (40, 120); $ Square-> drawLineTo (40, 20); / / Agora adicione as formas para o filme

$ MyMovie-> add ($ quadrados); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> Desde que eu estou desenhando o quadrado em sentido horrio Eu uso o setRightFill () funo. Se eu fosse desenhar o quadrado em sentido anti-horrio eu teria usado setLeftFill (). D uma olhada na Figura 12.5 para ver os resultados do exemplo acima. Objetos com enchimento Ming 267 Figura 12.5 Preenchendo uma forma. A segunda maneira de preencher um objeto no Flash usar o SWFGradient () da classe. Esta classe permite voc para preencher uma rea com um preenchimento de gradiente. Depois de criar uma instncia da SWFGradient () classe que voc pode adicionar uma entrada de preenchimento para-lo usando o addEntry () funo. O addEntry () funo recebe cinco argumentos. O primeiro argumento um valor ndice que pode estar entre 0.0 e 1.0. Esta razo especifica onde no gradiente da cor deve ocorrer. Normalmente, quando voc est adicionando um preenchimento gradiente, voc ir adicionar duas entradas para o objeto. O primeiro cor ser a relao de 0,0 ea segunda cor ser o valor 1,0 para a razo. Voc consegue adivinhar o que os prximos trs argumentos so? Isso mesmo, eles so o vermelho, verde e componentes azuis da cor. O quinto argumento um argumento opcional, onde voc pode especificar o canal alfa para a cor. Agora pegue o exemplo anterior usada para preencher um quadrado e alterar o preenchimento regular a um gradiente preencher indo do vermelho ao branco e tem o incio do gradiente do outro lado da praa. <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (200, 200, 200); / / Cria uma nova forma e definir o estilo de linha $ Square = new SWFShape (); $ Square-> setLine (5, 0, 0, 0, 255); 268 Captulo 12 Construir suas habilidades PHP / / Criar um novo preenchimento de gradiente $ Gradiente = new SWFGradient (); $ Gradiente-> addEntry (0.0, 255, 0, 0); $ Gradiente-> addEntry (0,5, 255, 255, 255); / / Adicionar o preenchimento forma Fill = $ $ square-> addFill ($ gradiente, SWFFILL_RADIAL_GRADIENT); $ Square-> setRightFill ($ preenchimento);

/ / Desenha um quadrado $ Square-> movePenTo (40, 20); $ Square-> drawLineTo (340, 20); $ Square-> drawLineTo (340, 220); $ Square-> drawLineTo (40, 220); $ Square-> drawLineTo (40, 20); / / Agora adicione as formas para o filme $ MyMovie-> add ($ quadrados); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> Figura 12.6 mostra os resultados do exemplo acima. Muito legal, hein? Mas h uma coisa que eu preciso falar para no perd-lo. H duas maneiras de preencher um gradiente objeto: a maneira que voc fez isso com a bandeira SWFFILL_RADIAL_GRADIENT ou voc pode usar o SWFFILL_LINEAR_GRADIENT bandeira. Figura 12.6 Aplicando um preenchimento de gradiente a uma forma. Objetos de enchimento com Ming 269 Agora que voc sabe como inundaes preencher objetos e como gradiente de preenchimento objetos, voc pode aprender a preencher objetos com bitmaps. Esta uma maneira divertida para preencher objetos. Voc pode classificar de comparar para o mapeamento de textura em programao de jogos 3D, mas no to complexo. Para preencher um objeto com bitmaps voc precisa criar uma instncia da SWFBitmap () da classe. O Classe SWFBitmap () no expe todas as funes preencher mas permite que voc crie um bitmap. O addFill () funo de membro da SWFShape () da classe o que permite que voc preencher uma forma. A classe SWFBitmap () permite-lhe criar um bitmap de dois tipos de arquivos. O primeiro um . Dbl arquivo (Definir Bits Lossless), que podem ser criados a partir de um gif. Ou um arquivo. Png. Ming fornece uma ferramenta chamada gif2dbl que converte um gif. para um arquivo. dbl. O segundo tipo de grfico que voc pode criar um bitmap um. jpg no-progressivo. Voc pode usar a edio de avaliao do Paint Shop Pro includo no CD para criar no progressiva. jpg. Para criar um bitmap de outro arquivo, voc precisar ler os dados em um buffer usando o funes de arquivo que o PHP oferece. Para ler em um arquivo, voc precisar abrir o arquivo com a funo fopen () e ler o arquivo com o fread () funo. D uma olhada no seguinte trecho de cdigo para um exemplo rpido: $ Fp = fopen ("somefile.jpg", "rb");

$ Data = fread ($ fp, filesize ("somefile.jpg")); Nota Para aqueles de vocs acostumados a abertura e leitura de arquivos em C, PHP usa os mesmos parmetros como C. Depois de ler os dados em um buffer, voc passa o buffer para o SWFBitmap () construtor para criar uma imagem bitmap novo. $ Bitmap SWFBitmap = ($ data); Ento, depois voc tem uma imagem bitmap, voc pode pass-lo para a funo de membro addFill () do o SWFShape () da classe e especificar uma das seguintes bandeiras: SWFFILL_CLIPPED_BITMAP. Esta bandeira ser exibida apenas uma instncia do bitmap. SWFFILL_TILED_BITMAP. Esta bandeira ser a telha bitmap em toda a sua imagem. D uma olhada no exemplo a seguir para ver como telha um bitmap em uma SWFShape (): <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (200, 200, 200); / / Cria uma nova forma e definir o estilo de linha 270 Captulo 12 Construir suas habilidades PHP $ Square = new SWFShape (); $ Square-> setLine (5, 0, 0, 0, 255); / / Abrir um grfico e ler os dados em um buffer $ Fp = fopen ("tessalation.jpg", "rb"); $ Data = fread ($ fp, filesize ("tessalation.jpg")); / / Cria uma nova imagem bitmap $ Bitmap = new SWFBitmap ($ data); / / Adicionar o preenchimento forma Fill = $ $ square-> addFill ($ bitmap, SWFFILL_TILED_BITMAP); $ Square-> setRightFill ($ preenchimento); / / Desenha um quadrado $ Square-> movePenTo (40, 20); $ Square-> drawLineTo (340, 20); $ Square-> drawLineTo (340, 220); $ Square-> drawLineTo (40, 220); $ Square-> drawLineTo (40, 20); / / Agora adicione as formas para o filme $ MyMovie-> add ($ quadrados); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> Figura 12.7 mostra os resultados do exemplo acima. Figura 12.7 Preenchendo uma forma com uma imagem bitmap lado a lado.

Adicionando animao ao seu filme do Flash 271 Adicionando animao ao seu filme do Flash Adicionando animao para seu filme Flash realmente no to difcil. At este ponto, voc tem funo membro usou o add () do SWFMovie () da classe assumindo que ele no retorna qualquer coisa. Mas como uma questo de fato ele faz algo de retorno. Ele retorna um SWFDisplayItem () objeto. Voc pode usar esse objeto retornado para manipular a forma que voc adicionar ao seu Filme do Flash. / / Como voc tem usado o add () funo $ Filme-> add ($ forma); / / Do jeito que voc vai usar o add () funo $ = $ ShapeHandle filme-> add ($ forma); Com esta nova SWFDisplayItem () pega, poder mover o objeto usando uma das duas funes. O primeiro o move () funo. Possui dois argumentos. O primeiro argumento ox coordenar e segundo argumento a coordenada y. A segunda funo a moveTo () funo, e tambm leva uma coordenada x e ay de coordenadas. No apenas voc pode mover uma forma com o movimento () ou moveTo () funes, voc tambm pode girar uma forma usando o rotate () funo. O rotate () funo recebe um nico argumento especificando o nmero de graus que voc deseja girar o objeto. Vamos tomar o exemplo quadrado novamente e desenhar o quadrado no canto superior esquerdo da a pea Flash. Mov-lo para um ponto e girar o quadrado de 45 graus. <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); $ MyMovie-> setBackground (200, 200, 200); / / Cria uma nova forma e definir o estilo de linha $ Square = new SWFShape (); $ Square-> setLine (5, 0, 0, 0, 255); / / Desenha um quadrado $ Square-> movePenTo (1, 1); $ Square-> drawLineTo (61, 1); $ Square-> drawLineTo (61, 61); $ Square-> drawLineTo (1, 61); $ Square-> drawLineTo (1, 1); / / Agora adicione as formas para o filme SquareHandle $ = $ myMovie-> add ($ quadrados); 272 Captulo 12 Construir suas habilidades PHP / / Move a forma um pouco $ SquareHandle-> moveTo (30, 100); / / Girar a forma 45 graus $ SquareHandle-> girar (45);

/ / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> O exemplo acima, com resultados mostrados na Figura 12.8, o objeto simplesmente se move para baixo e um pouco para a direita, e ento ele gira o objeto 45 graus. Isso afeta apenas o primeiro quadro da pea Flash. Para que isto se torne uma animao voc precisa adicionar vrios quadros para a sua pea Flash. Para fazer isso voc pode usar o nextFrame () funo de membro da SWFMovie (classe). Figura 12.8 movendo e girando uma forma. Agora pegue o exemplo que voc acabou de fazer e torn-lo uma animao. O objetivo dessa animao ser simplesmente mover o nmero alguns quadrados de pixels e gir-lo cada quadro. Eu no vou ser capaz de mostrar-lhe um tiro de tela da animao, porque no faria qualquer sentido, mas o exemplo est no CD fornecido com este livro. <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (30); Adicionando animao ao seu filme do Flash 273 $ MyMovie-> setBackground (200, 200, 200); / / Cria uma nova forma e definir o estilo de linha $ Square = new SWFShape (); $ Square-> setLine (5, 0, 0, 0, 255); / / Desenha um quadrado $ Square-> movePenTo (1, 1); $ Square-> drawLineTo (61, 1); $ Square-> drawLineTo (61, 61); $ Square-> drawLineTo (1, 61); $ Square-> drawLineTo (1, 1); / / Agora adicione as formas para o filme SquareHandle $ = $ myMovie-> add ($ quadrados); $ SquareHandle-> moveTo (30, 100); $ MyMovie-> nextFrame (); $ SquareHandle-> girar (15); $ MyMovie-> nextFrame (); $ SquareHandle-> moveTo (80, 200); $ MyMovie-> nextFrame (); $ SquareHandle-> girar (15); $ MyMovie-> nextFrame (); $ SquareHandle-> moveTo (130, 280); $ MyMovie-> nextFrame (); $ SquareHandle-> girar (15); $ MyMovie-> nextFrame ();

$ SquareHandle-> moveTo (180, 180); $ MyMovie-> nextFrame (); $ SquareHandle-> girar (15); $ MyMovie-> nextFrame (); $ SquareHandle-> moveTo (130, 80); $ MyMovie-> nextFrame (); $ SquareHandle-> girar (15); $ MyMovie-> nextFrame (); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> 274 Captulo 12 Construir suas habilidades PHP Se voc tomar um olhar para o exemplo no CD voc vai perceber que o quadrado salta ao redor da tela. Se voc acha que est indo muito rpido, voc deve ajustar a taxa de quadros no seu flash pea ou adicionar mais quadros para a rotao. Este um exemplo simples da animao, mas deve dar-lhe a idia. Agora, d uma olhada no SWFMorph (), o que permitir que voc crie uma interpolao de forma entre duas formas. A classe SWFMorph () tem duas funes de membro: getShape1 () e getShape2 (). Estas duas funes no tm quaisquer argumentos em tudo. Eles permitem que voc defina uma forma comear a e forma um fim de morph entre eles. $ Morph = new SWFMorph (); Shape1 $ = $ morph-> getShape1 (); Shape2 $ = $ morph-> getShape2 (); Morph vamos a praa em um retngulo para ver como usar o SWFMorph () da classe. <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (5); $ MyMovie-> setBackground (200, 200, 200); / / Cria um objeto morph novo $ Morph = new SWFMorph (); / / Cria uma nova forma e definir o estilo de linha $ Square = new SWFShape (); $ Retngulo = new SWFShape (); $ Square = $ morph-> getShape1 (); $ Square-> setLine (5, 0, 0, 0, 255); Retngulo $ = $ morph-> getShape2 (); $ Retngulo> setLine (5, 0, 0, 0, 255); / / Desenha um quadrado $ Square-> movePenTo (1, 1); $ Square-> drawLineTo (61, 1); $ Square-> drawLineTo (61, 61);

$ Square-> drawLineTo (1, 61); $ Square-> drawLineTo (1, 1); Adicionando o ActionScript a sua parte do Flash 275 / / Desenha um retngulo $ Retngulo> movePenTo (1, 1); $ Retngulo> drawLineTo (161, 1); $ Retngulo> drawLineTo (161, 61); $ Retngulo> drawLineTo (1, 61); $ Retngulo> drawLineTo (1, 1); MorphHandle $ = $ myMovie-> add ($ morph); $ MorphHandle-> moveTo (100, 100); for ($ i = 0,0; $ i <1,0; $ i + = 0,1) { $ MorphHandle-> setRatio ($ i); $ MyMovie-> nextFrame (); } / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> Primeiro, defina os atributos de seu filme. (Voc notar neste exemplo que a taxa de quadros de apenas 5 frames por segundo. A razo para isso que voc pode ver o morph com mais clareza.) Ento voc cria um objeto de metamorfose. Depois de ter criado um objeto morph voc precisa criar dois objetos de forma e definir qual ser a forma inicial e qual delas ir ser a forma final. Depois de ter definido as formas de incio e fim, voc pode desenh-los. Ento voc precisa adicionar o morph objeto para o filme e comear a lidar com novo objeto. Assim que tiver o identificador de objeto voc pode realmente criar a interpolao. Neste caso, a interpolao ocorre mais de 11 frames. Ele comea em 0.0 e adiciona 0,1 a $ i. Cada vez que $ i incrementado de atualizar a relao em que o tween deve ocorrer e, em seguida, adicionar uma moldura para o filme. D uma olhada no exemplo includo no CD para ver os resultados do exemplo acima. Adicionando o ActionScript a sua parte em Flash ActionScript uma linguagem de programao orientada a objeto usado especificamente para criar interatividade e animaes em Flash. Com o ActionScript que voc pode fazer tudo, desde o carregamento em sprites dinmica dinamicamente em movimento e clipes de filme de redimensionamento. 276 Captulo 12 Construir suas habilidades PHP Nota Sintaxe do ActionScript muito parecido com JavaScript. Ele usa um DOM para acessar seus elementos-por exemplo,

_root.clientinfo.ip. ActionScript usa tipos de dados para definir suas variveis. Que costumava ser em Flash 4 que no necessidade de declarar o tipo de dados de sua varivel. Mas desde o lanamento do Flash 5 voc precisa especificar um tipo de dados. Existem cinco tipos de dados bsicos que o Flash usa: Boolean Cordas Nmero Clipe de filme Objeto Esses tipos de dados so usados em muitas lnguas e deve ser novidade para voc agora. Ento, como voc adicionar o ActionScript para suas peas em Flash dinmico? Voc usa o SWFAction () classe. O construtor para esta classe recebe um nico argumento. Esse argumento um ActionComando de script. Por exemplo: $ Action = SWFAction nova ("stop ();"); A maneira mais fcil de ver como tudo isso funciona ver um exemplo, ento d uma olhada no seguinte exemplo, em que uma caixa de texto exibir a posio de uma forma no palco: <? Php $ MyMovie = new SWFMovie (); $ MyMovie-> setDimension (400, 300); $ MyMovie-> setRate (5); $ MyMovie-> setBackground (200, 200, 200); / / Cria um objeto morph novo $ Morph = new SWFMorph (); / / Cria uma nova forma e definir o estilo de linha $ Square = new SWFShape (); $ Square-> setLine (5, 0, 0, 0, 255); / / Desenha o quadrado $ Square-> movePenTo (1, 1); $ Square-> drawLineTo (61, 1); $ Square-> drawLineTo (61, 61); Adicionando o ActionScript para seu 277 peas em Flash $ Square-> drawLineTo (1, 61); $ Square-> drawLineTo (1, 1); / / Adicionar a forma de um clipe de filme que voc pode acessar algumas propriedades mais tarde $ Forma = new SWFSprite (); $ Forma-> add ($ quadrados); $ Forma-> nextFrame (); / / Cria uma caixa de texto para mostrar algum texto $ Textbox = new SWFTextField (SWFTEXTFIELD_DRAWBOX); $ Textbox-> setBounds (100, 100); $ Textbox-> setFont (novo SWFFont ("_sans")); $ Textbox-> setColor (255, 0, 0);

/ / Agora dar a caixa de texto um nome para que voc possa fazer referncia a ela $ Textbox-> setName ("myTextBox"); / / Para mover a caixa de texto voc tem que adicion-la a um sprite Container $ = new SWFSprite (); $ Container-> add ($ textbox); / / Move para o prximo quadro na entidade grfica para que ele vai aparecer $ Container-> nextFrame (); / / Adicionar a praa para o clipe de filme ShapeHandle $ = $ myMovie-> add ($ forma); $ ShapeHandle-> moveTo (10, 10); $ ShapeHandle-> setName ("forma"); ContainerHandle $ = $ myMovie-> add ($ container); $ ContainerHandle-> moveTo (200, 100); $ ContainerHandle-> setName ("container"); $ MyMovie-> nextFrame (), $ MyMovie-> add SWFAction (novo ("_root.container.myTextBox = _root.shape._x + ',' + _root.shape._y ;")); / / Agora a sada do filme header ("Content-type: application / x-shockwave-flash"); $ MyMovie-> output (); ?> 278 Captulo 12 Construir suas habilidades PHP Vamos quebrar o exemplo acima. Primeiro voc cria seu filme Flash e definir seu mestre propriedades como voc tem feito. Ento voc cria uma nova forma, neste caso, um quadrados, e voc desenh-lo. Em seguida, voc fazer algo um pouco diferente. Voc adiciona a forma sua Sprite prprio filme ou clipe de filme. Isso permitir que vrias coisas mas o mais importante ser permitir o acesso a algumas propriedades predefinidas que contm um filme. O prximo passo muito importante, voc deve mover o sprite para o prximo quadro a fim de que qualquer coisa para aparecer em seu filme principal. Depois de ter criado o clipe de filme que contm a forma que voc deseja acessar, voc cria uma nova caixa de texto. Isto ir permitir que voc digite o texto, embora no exemplo que voc est usando -lo para exibir texto. Aps a caixa de texto criado, voc adicion-lo ao seu clipe de filme prprio. Lembrar para mover o clipe de filme para o prximo quadro. C Aution Certifique-se de mover sprites para o prximo quadro. Caso contrrio, voc nunca ver os resultados no flash pea que enviado para o navegador. Agora voc tem basicamente trs filmes: o filme mestre, um clipe de filme contendo o seu

forma, e um clipe de filme contendo sua caixa de texto. Para ter um filme do Flash completo voc necessidade de combin-las em uma s pea. Ento voc adiciona o clipe de filme forma ao seu mestre filme e, em seguida, voc definir um nome. Definir o nome do clipe de filme permite que voc acesse lo com o ActionScript. Agora voc adicionar o segundo clipe de filme para o filme mestre e tambm definir o nome do clipe de filme. Agora voc tem um filme com dois clipes de filme na mesma. Esses clipes de filme e seus elementos agora podem ser acessados e manipulados por meio do ActionScript, pois voc definir os nomes dos os clipes. Para acessar os clipes, voc comea na raiz do filme, que chamado _root. Ento voc descer mais um nvel para o clipe de filme. Uma vez l, voc pode manipular o filme clip, se as suas propriedades, ou elementos de acesso que so aninhados ainda no clipe. Remember that an ActionScript requires an action to trigger it, so you need to add a frame to the master movie and then add the script. Once the movie moves to the next frame it will execute the script on the frame. In this case, it will put the coordinates of the movie clip into the text box. Take a look at Figure 12.9 to see the results of the above example. Conclusion 279 Figure 12.9 An example of ActionScript. Concluso This was a quick overview of some of the more advanced uses of PHP. You can go much more in depth than I have here. I suggest that you use all the resources available to you to check out the extensive functionality that PHP offers you. PHP is a great language that has many uses. Take a look at the following list to give you just a few ideas: Create your own browsers. Create parsing and management backends for your games. Create extensible, fast, reliable applications and systems. Manage and manipulate graphics. Create your dynamic Flash pieces all with code. Create sockets to Flash pieces to create a multiplayer experience. Quickly create chat systems for your games or Web sites. 280 Chapter 12 Building Your PHP Skills These are just a few of the applications for which you can use PHP. Let your mind wander and I am sure you will come up with some great and fantastic ideas for applying all of

your newfound knowledge. With the Web your options are endless. Have fun with it. Now go create the next generation of online games! Appendixes Apndice A HTML Language Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Apndice B PHP Language Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Apndice C SupportDebugging Applications . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Apndice D GD SDK Language Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .341 PART V Esta pgina foi intencionalmente deixada em branco PARTE V Esta pgina foi intencionalmente deixada em branco apndice A HTML Linguagem Referncia T seu captulo simplesmente o seu guia para todas as funes de HTML disponveis para voc. Cada elemento listado seguido por uma descrio do que o elemento faz, e, se houver alguma, uma lista de todos os atributos do elemento pode usar. <-! E <-> Comentar Denota um comentrio em HTML. ! DOCTYPE Declara o tipo de contedo eo formato do documento. A Define um link de hipertexto. A HREF ou atributo NAME deve ser especificado. A Atributos Descrio atributo ACCESSKEY Define a chave de acessibilidade para este elemento CHARSET Define o conjunto de caracteres usado para codificar este elemento CLASSE Define a classe folha de estilo este elemento deve usar COORDS Define as coordenadas para este elemento Datafld Define o campo de uma dada fonte de dados para vincular a este elemento Datasrc Define a fonte dos dados para a ligao para este elemento DIR Define a direo de leitura para este elemento HREF Define o destino deste elemento Hreflang Define o cdigo de idioma do recurso apontado por HREF ID Define a identificao deste elemento LANG Define o idioma deste elemento 283 284 Apndice A HTML Referncia da Linguagem Descrio atributo LANGUAGE Ajusta a linguagem de script este elemento deve usar MTODOS Define os mtodos HTTP suportados por este elemento

O name define o nome desse elemento REL Define a relao entre este elemento eo elemento de destino SHAPE Define a forma do elemento ESTILO Define estilo folhas de informaes especficas para este elemento TABINDEX Define a ordem de tabulao para este elemento TARGET Define o destino para onde o contedo deve ir TITLE Define uma dica de ferramenta para este elemento TYPE Define o tipo de MIME desse elemento URN Define um Uniform Resource Name para este elemento ENDEREO Especifica as informaes como um endereo, uma assinatura, e de propriedade. Atributos ENDEREO Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar DIR Define a direo de leitura para este elemento ID Define o ID para este elemento LANG Define o idioma para este elemento LANGUAGE Ajusta a linguagem de script este elemento deve usar ESTILO Define estilo folhas de informaes especficas para este elemento TITLE Define uma dica de ferramenta para este elemento APPLET Coloca um Applet Java na pgina. Atributos APPLET Descrio atributo ALIGN Define o alinhamento do elemento ALT Define o texto alternativo para este elemento ARQUIVO Define uma cadeia de caracteres que podem ser usados para a funcionalidade do prprio arquivo BORDER Define a quantidade de fronteira este elemento deve ter CLASSE Define a classe folha de estilo este elemento deve usar CODE Define a URL que aponta para a classe Java compilados CODEBASE Define a URL do componente Datafld Define o campo de uma dada fonte de dados para vincular a este elemento Datasrc Define a fonte dos dados para a ligao ALTURA Define a altura do elemento HSPACE Define a margem horizontal para o elemento HTML Referncia da Linguagem 285 Descrio atributo ID Define o ID para este elemento Name define o nome para este elemento SRC Define um URL para ser carregado por este elemento ESTILO Define estilo folhas de informaes especficas para este elemento TITLE Define uma dica de ferramenta para este elemento VSPACE Define a margem vertical para este elemento WIDTH Define a largura do elemento REA Especifica a forma de um hot spot para um mapa de imagem do lado do cliente.

Atributos REA Descrio atributo ALT CLASS COORDS DIR HREF ID LANG LNGUA NOME Nohref SHAPE ESTILO TABINDEX TARGET TTULO Define o texto alternativo para este elemento Define a classe folha de estilo este elemento deve usar Define as coordenadas para o ponto quente Define a ordem de leitura deste elemento Define um URL de destino para este elemento Define a identificao do elemento Define o idioma deste elemento Define a linguagem de script do lado do cliente este elemento deve usar Define o nome desse elemento Define se um clique na regio deve causar uma ao Define a forma desse elemento Define o estilo folhas de informaes especficas para este elemento Define a ordem de tabulao para este item Define o destino do contedo Define uma dica de ferramenta para este elemento B Processa o texto especificado em negrito. Atributos B Descrio atributo CLASS DIR ID LANG LNGUA ESTILO TTULO Define a classe folha de estilo este elemento deve usar Define a ordem de leitura deste elemento Define a identificao do elemento Define o idioma do elemento Define a linguagem de script do lado do cliente este elemento deve usar Define o estilo folhas de informaes especficas para este elemento Define uma dica de ferramenta para este elemento

286 Apndice A HTML Referncia da Linguagem BASE Especifica o URL do documento base. Atributos BASE Descrio atributo HREF Define o URL de base sobre o qual todos os links na pgina ser baseado TARGET Define o destino do contedo BASEFONT Define a fonte base de que a pgina ir utilizar para o texto de renderizao. Atributos BASEFONT Descrio atributo CLASS COLOR ROSTO ID LANG LNGUA TAMANHO Define a classe folha de estilo este elemento deve usar Define a cor a fonte deve ser processado em Define a fonte do elemento deve usar Define a identificao do elemento Define o idioma do elemento Define a linguagem de script do lado do cliente este elemento deve usar Especifica o tamanho da fonte BDO Desliga-se o algoritmo de renderizao bidirecional para o fragmento de texto especificada. BDO Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar DIR Define a ordem de leitura deste elemento ID Define a identificao deste elemento LANG Define o idioma deste elemento ESTILO Define estilo folhas de informaes especficas para este elemento TITLE Define uma dica de ferramenta para este elemento BGSOUND Especifica um som de fundo para ser jogado enquanto a pgina carregada. Atributos BGSOUND Descrio atributo BALANO Define como o som de fundo deve ser distribudo entre a esquerda e os alto-falantes direito ID Define a identificao do elemento HTML Referncia da Linguagem 287 Descrio atributo LOOP Define o nmero de vezes que o som deve loop quando jogado SRC define a URL de um som a ser tocado VOLUME Define o volume do som BIG Exibe o texto em uma fonte maior do que a atual fonte especificada.

Atributos BIG Descrio atributo CLASS DIR ID LNGUA ESTILO TTULO Define a classe folha de estilo este elemento deve usar Define a ordem de leitura deste elemento Define a identificao do elemento Define a linguagem de script do lado do cliente este elemento deve usar Define o estilo folhas de informaes especficas para este elemento Define uma dica de ferramenta para este elemento BLINK Faz com que o texto especificado a piscar e desliga na pgina. Atributos BLINK Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento BLOCKQUOTE Tabs um conjunto especfico de texto, e denota uma citao no texto. Atributos BLOCKQUOTE Descrio atributo CITE CLASS DIR ID LANG LNGUA ESTILO TTULO Conjuntos de informaes de referncia sobre o texto Define a classe folha de estilo este elemento deve usar Define a ordem de leitura do elemento Define a identificao do elemento Define o idioma do elemento Define a linguagem de script do lado do cliente este elemento deve usar Define o estilo folhas de informaes especficas para este elemento Define uma dica de ferramenta para este elemento 288 Apndice A HTML Referncia da Linguagem CORPO Define o incio do corpo do documento HTML. Atributos CORPO Descrio atributo ALINK ANTECEDENTES BGCOLOR BottomMargin

CLASS DIR ID LANG LNGUA LEFTMARGIN Link RightMargin SCROLL ESTILO TEXTO TopMargin VLINK Define a cor do estado ativo de um link Define a imagem de fundo do corpo Define a cor de fundo do corpo da pgina Define a quantidade de margem na parte inferior da pgina Define a classe folha de estilo este elemento deve usar Define a ordem de leitura do elemento Define a identificao do elemento Define o idioma do elemento Define a linguagem de script do lado do cliente este elemento deve usar Define a quantidade de margem esquerda da pgina Define a cor dos links na pgina Define a quantidade de margem sobre o direito da pgina Define se as barras de rolagem so ligados ou desligados Define o estilo folhas de informaes especficas para este elemento Define a cor que o corpo do texto deve ser Define a quantidade de margem no topo do documento Define a cor dos links visitados BR Insere uma quebra de linha na pgina. BR Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar CLARO Define o lado onde a prxima linha de contedo ser exibido aps a quebra de linha, em relao a um objeto flutuante ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento BUTTON Torna um boto HTML com o texto especificado. Atributos BUTTON Descrio atributo ACCESSKEY Define a chave de acessibilidade para este elemento CLASSE Define a classe folha de estilo este elemento deve usar HTML Referncia da Linguagem 289 Descrio atributo Datafld Define o campo de uma dada fonte de dados para vincular a este elemento

Datasrc Define a fonte dos dados para a ligao DIR Define a ordem de leitura deste elemento DISABLED Define o estado do elemento ID Define a identificao do elemento LANG Define o idioma para este elemento LANGUAGE Ajusta a linguagem de script do lado do cliente que este elemento deve usar O name define o nome do elemento ESTILO Define estilo folhas de informaes especficas para este elemento TABINDEX Define a ordem de tabulao deste elemento TITLE Define uma dica de ferramenta para este elemento TYPE Especifica o tipo de boto este elemento VALOR Define o valor padro selecionado deste elemento CAPTION Especifica uma legenda para ser colocado ao lado de uma mesa. CAPTION Atributos Descrio atributo ALIGN Define a posio do elemento relativo tabela CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento CITE Exibe o texto em itlico. CITE Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento CODE Torna o texto como um exemplo de cdigo usando uma fonte de largura fixa. Atributos CODE Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento 290 Apndice A HTML Referncia da Linguagem COL Especifica coluna baseada em padres para uma tabela. Atributos COL Descrio atributo ALIGN Define o alinhamento horizontal do elemento CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento SPAN Define o nmero de colunas no grupo ESTILO Define estilo folhas de informaes especficas para este elemento VALIGN Define o alinhamento vertical do elemento WIDTH Define a largura do elemento COLGROUP Define um recipiente para um grupo de colunas. COLGROUP Atributos

Descrio atributo ALIGN Define o alinhamento horizontal do elemento CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento SPAN Define o nmero de colunas no grupo ESTILO Define estilo folhas de informaes especficas para este elemento VALIGN Define o alinhamento vertical do elemento WIDTH Define a largura padro para cada coluna do grupo DD Isso especifica a definio de um item em uma lista de definies. DD Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento HTML Referncia da Linguagem 291 DFN Define uma instncia de um termo. DFN Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento DIR Torna o texto para que ele aparea como uma listagem do diretrio. Atributos DIR Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar COMPACT Define um valor Boolean que especifica se a lista deve ser compactado, removendo espao em branco entre os itens ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento DIV Define uma seo recipiente ou uma nova camada dentro de uma pgina. Atributos DIV Descrio atributo ALIGN CLASS Datafld DataFormat Datasrc DIR ID LANG LNGUA Nowrap ESTILO TABINDEX TTULO

Define o alinhamento horizontal do elemento Define a classe folha de estilo este elemento deve usar Define o campo de uma dada fonte de dados para vincular a este elemento Define a forma de tornar a fonte de dados especificado, como HTML ou texto Define a fonte dos dados para a ligao para este elemento Define a direo de leitura para este elemento Define a identificao do elemento Define o idioma do elemento Define a linguagem de script do lado do cliente este elemento deve usar Define o navegador para no quebrar o texto automaticamente Define o estilo folhas de informaes especficas para este elemento Define a ordem de tabulao para este elemento Define uma dica de ferramenta para este elemento 292 Apndice A HTML Referncia da Linguagem DL Inicia uma lista de definies. DL Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar COMPACT Define um valor Boolean que especifica se a lista deve ser compactado, removendo espao em branco entre os itens ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento DT Inicia um termo de definio em uma lista de definio. DT Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento EM Torna o texto como enfatizado; basicamente negrito do texto. EM Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento EMBED Incorpora um documento de qualquer tipo na pgina. Atributos EMBED Descrio atributo ALIGN Define o alinhamento horizontal do elemento ALT Define o texto alternativo para o elemento BORDER Define a quantidade de borda do elemento ter CLASSE Define a classe folha de estilo este elemento deve usar ALTURA Define a altura do elemento HTML Referncia da Linguagem 293 Descrio atributo ID Define a identificao do elemento

O name define o nome do elemento PLUGINSPAGE Recupera uma URL do plug-in para ser usado para visualizar o documento incorporado SRC Define um URL para ser carregado ESTILO Define estilo folhas de informaes especficas para este elemento TITLE Define uma dica de ferramenta para este elemento WIDTH Define a largura do elemento FIELDSET Desenha uma caixa em torno dos elementos contidos. Atributos FIELDSET Descrio atributo ALIGN Define o alinhamento horizontal do elemento CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento FONT Permite que voc especifique um tipo de fonte, tamanho e cor de uma seo de texto. Atributos FONT Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar COLOR Define a cor do texto para este elemento ROSTO Define a fonte para este elemento ID Define o ID para o elemento TAMANHO Define o tamanho da fonte para este elemento ESTILO Define estilo folhas de informaes especficas para este elemento FORMULRIO Cria um formulrio que pode conter controles e elementos cujos valores so enviados para o servidor. Atributos FORM Descrio atributo ACTION Especifica o URL para o processamento CLASSE Define a classe folha de estilo este elemento deve usar ENCTYPE Define o tipo de codificao da forma ID Define o ID para o elemento 294 Apndice A HTML Referncia da Linguagem Descrio atributo Mtodo define como o formulrio ir transferir seus dados para o servidor O name define o nome do elemento ESTILO Define estilo folhas de informaes especficas para este elemento ARMAO Especifica um quadro individual dentro de um conjunto de quadros. Atributos ARMAO Descrio atributo ALIGN Define o alinhamento horizontal do elemento BorderColor Define a cor da borda do elemento CLASSE Define a classe folha de estilo este elemento deve usar Datafld Define o campo de uma dada fonte de dados para vincular a este elemento Datasrc Define a fonte dos dados para a ligao para este elemento

FRAMEBORDER Configura ou no o elemento ter uma borda ALTURA Define a altura do elemento ID Define a identificao do elemento Marginheight Define a altura da margem Marginwidth Define a largura da margem O name define o nome do elemento Noresize Define o quadro de uma largura fixa para que o usurio no pode redimensionar a moldura DESDOBRAMENTO Define se o quadro vai permitir a rolagem ou no SRC Define um URL para ser carregado pelo elemento ESTILO Define estilo folhas de informaes especficas para este elemento FRAMESET Especifica um conjunto de quadros que pode conter vrios quadros e outros conjuntos de quadros aninhados. Atributos FRAMESET Descrio atributo BORDER Define a quantidade de fronteira para o conjunto de quadros de ter BorderColor Define a cor da borda para este elemento CLASSE Define a classe folha de estilo este elemento deve usar COLS Define a largura das colunas no conjunto de quadros FRAMEBORDER Configura se deve ou no exibir uma borda FRAMESPACING Define a quantidade de espao entre os quadros ID Define a identificao do elemento ROWS Define a altura das linhas no conjunto de quadros ESTILO Define estilo folhas de informaes especficas para este elemento HTML Referncia da Linguagem 295 CABEA Comea o ttulo de um documento HTML, e contm as tags que contm informaes sobre o documento. Atributos CABEA Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento PERFIL Define um ou mais Uniform Resource Identificadores de meta-dados de perfis ESTILO Define estilo folhas de informaes especficas para este elemento HN Os seis cabealhos (H1 - H6) que podem tornar o texto em uma variedade de tamanhos. HN Atributos Descrio atributo ALIGN Define o alinhamento horizontal do elemento CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento HR Coloca uma linha horizontal na pgina. HR Atributos Descrio atributo

ALIGN CLASS COLOR ID Noshade TAMANHO ESTILO Define o alinhamento horizontal do elemento Define a classe folha de estilo este elemento deve usar Define a cor do elemento Define a identificao do elemento Define o elemento para tornar sem 3-D shading Define o tamanho do elemento Define o estilo folhas de informaes especficas para este elemento 296 Apndice A HTML Referncia da Linguagem HTML Inicia o prprio documento HTML. Eu Torna um intervalo de texto em itlico. Eu Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ESTILO Define estilo folhas de informaes especficas para este elemento IFRAME Cria um quadro na linha de flutuao na pgina. IFRAME Atributos Descrio atributo ALIGN FRONTEIRA BorderColor CLASS Datafld Datasrc FRAMEBORDER ALTURA HSPACE ID Marginheight Marginwidth NOME Noresize SCROLLING SRC ESTILO VSPACE WIDTH Define o alinhamento horizontal do elemento Define a quantidade de fronteira para o elemento Define a cor da borda para o elemento Define a classe folha de estilo este elemento deve usar

Define o campo de uma dada fonte de dados para vincular a este elemento Define a fonte dos dados para a ligao para este elemento Define se ou no o elemento ter uma borda Define a altura do elemento Define a margem horizontal para o elemento Define a identificao para este elemento Define a altura da margem Define a largura da margem Define o nome do elemento Define o quadro de uma largura fixa para que o usurio no pode redimensionar a moldura Define se o quadro vai permitir a rolagem ou no Define um URL para ser carregado pelo elemento Define o estilo folhas de informaes especficas para este elemento Define a margem vertical para o elemento Define a largura do elemento Referncia HTML 297 Idioma IMG Incorpora uma imagem na pgina. Atributos IMG Descrio atributo ACCESSKEY ALIGN ALT FRONTEIRA ID ALTURA NOME SRC USEMAP WIDTH Define ou recupera a chave de acessibilidade Define o alinhamento horizontal do elemento Define o texto alternativo para o elemento Define a quantidade de fronteira para o elemento Define a identificao do elemento Define a altura do elemento Define o nome do elemento Define a URL a ser carregado pelo elemento Define o mapa de imagem para uso Define a largura do elemento ENTRADA Especifica um controle de entrada de um formulrio. O controle de entrada pode ser um boto, caixa de seleo boto de rdio, caixa de texto ou caixa de senha. Atributos de entrada Descrio atributo ACCEPT ACCESSKEY ALIGN

ALT CHECKED CLASS Datafld DataFormat Datasrc HSPACE ID MaxLength NOME READONLY TAMANHO ESTILO TABINDEX TIPO VALOR Define um conjunto de tipos separados por vrgula contedo que ser aceito pelo elemento Define ou recupera a chave de acessibilidade Define o alinhamento horizontal do elemento Define o texto alternativo para este elemento Define se o campo est marcada Define a classe folha de estilo este elemento deve usar Define o campo de uma dada fonte de dados para vincular a este elemento Define a forma de tornar a fonte de dados especificado, como HTML ou texto Define a fonte dos dados para a ligao para este elemento Define a margem horizontal do elemento Define a identificao do elemento Define o nmero mximo de caracteres aceitos para este elemento Define o nome do elemento Especifica que o elemento somente leitura Define o tamanho do elemento Define o estilo folhas de informaes especficas para este elemento Define a ordem de tabulao para este elemento Define o tipo de entrada deste elemento ser Define o valor inicial para o elemento LI 298 Apndice A HTML Referncia da Linguagem KBD Exibe o texto em uma largura tipo fonte fixa, como de uma mquina de escrever. KBD Attrbiutes Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento LABEL Define um rtulo para um elemento de controle Atributos LABEL Descrio atributo

CLASS Datafld DataFormat Datasrc PARA ID STY LE Define a classe folha de estilo este elemento deve usar Define o campo de uma dada fonte de dados para vincular a este elemento Define a forma de tornar a fonte de dados especificado, como HTML ou texto Define a fonte dos dados para a ligao para este elemento Define o elemento para o qual o rtulo deve ser atribudo Define a identificao do elemento Define o estilo folhas de informaes especficas para este elemento Especifica um item em uma lista ordenada ou no ordenada. LI Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define o ID para o elemento ESTILO Define estilo folhas de informaes especficas para este elemento Link Especifica um hiperlink para outro documento. Isto usado no ttulo do documento HTML. Atributos-LINK Descrio atributo CLASSE Define a classe folha de estilo que este elemento deve usar HREF Especifica a URL base para ir para ID Define o ID para o elemento ESTILO Define estilo folhas de informaes especficas para este elemento HTML Referncia da Linguagem 299 MAP Define a coleo de hot spots para um mapa de imagem. MAP Atributos Descrio atributo CLASSE Define a classe folha de estilo que este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento O name define o nome do mapa de imagem definida pelo elemento do mapa MARQUEE Cria uma marquise de rolagem na pgina. Esta marquise pode rolar verticalmente ou horizontalmente. MARQUEE Atributos Descrio atributo ALIGN COMPORTAMENTO BGCOLOR CLASS Datafld DataFormat Datasrc

DIREO ALTURA ID LOOP ScrollAmount SCROLLDELAY ESTILO WIDTH Define o alinhamento horizontal deste elemento Define o comportamento de rolagem do elemento Define a cor de fundo do elemento Define a classe folha de estilo este elemento deve usar Define o campo de uma dada fonte de dados para vincular a este elemento Define a forma de tornar a fonte de dados especificado, como HTML ou texto Define a fonte dos dados para a ligao para este elemento Define a direo do texto deve rolar Define a altura do elemento Define a identificao do elemento Define o nmero de vezes que o elemento deve jogar Define a quantidade de caracteres do elemento deve rolar por Define a quantidade de atraso antes de rolagem comea Define o estilo folhas de informaes especficas para este elemento Define a largura do elemento META Fornece vrios tipos de informaes aos motores de busca e outros intrpretes. Este elemento vai no cabealho do documento HTML. Atributos META Descrio atributo CONTEDO Define o contedo meta HTTP-EQUIV Define informaes a serem usadas para vincular o contedo para os cabealhos HTTP Name define o nome do valor especificado no contedo 300 Apndice A HTML Referncia da Linguagem NOFRAMES Especifica a seo de texto para mostrar para browsers que no suportam quadros. Atributos NOFRAMES Descrio atributo CLASSE Define a classe folha de estilo que este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento OBJETO Insere um objeto, como um pedao Flash, no documento HTML. Atributos de objetos Descrio atributo ALIGN FRONTEIRA CLASS CLASSID

CODE CODEBASE CodeType ALTURA NOME ESTILO WIDTH Define o alinhamento horizontal do elemento Define a quantidade de borda do elemento deve ter Define a classe folha de estilo que este elemento deve usar Define o identificador de classe para o elemento Define um URL para a localizao da classe compilada Define a URL do componente para este elemento Define o tipo de mdia internet para este elemento Define a altura deste elemento Define o nome para este elemento Define o estilo folhas de informaes especficas para este elemento Define a largura deste elemento OL Cria uma lista ordenada na qual cada item numerado com a tag LI. Atributos OL Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento INCIO Define um nmero inicial para o elemento ESTILO Define estilo folhas de informaes especficas para este elemento TYPE Define o tipo de lista ordenada esta deve ser HTML Referncia da Linguagem 301 OPO Especifica um item da lista para um elemento de formulrio select. Atributos OPO Descrio atributo CLASS ID LABEL SELECIONADOS ESTILO VALOR Define a classe folha de estilo este elemento deve usar Define a identificao do elemento Define o rtulo para o elemento Define o elemento a ser o item selecionado na lista Define o estilo folhas de informaes especficas para este elemento Define o valor para este elemento P Especifica um pargrafo de texto. Mesmo que a marca final opcional, eu recomendo sempre para coloc-lo em plenitude. Atributos P Descrio atributo

ALIGN Define o alinhamento horizontal do elemento CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento PARAM Especifica um parmetro ou uma propriedade em um objeto ou uma APPLET. Atributos PARAM Descrio atributo ID Define a identificao do elemento O name define o nome do elemento TYPE Define o tipo do elemento VALOR Define o valor do elemento ValueType Define o tipo do valor especificado 302 Apndice A HTML Referncia da Linguagem PRE Exibe o texto em uma fonte de largura fixa. Atributos PRE Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento SAMP Exibe o texto em uma fonte menor para uso como uma listagem exemplo de cdigo. SAMP Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento SCRIPT Denota um bloco de script do lado do cliente para a pgina que ser interpretado pelo browser do mecanismo de script. Atributos SCRIPT Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento SRC Especifica uma URL apontando para um arquivo de scripting TYPE Define o idioma para o bloco de script SELECIONE Cria uma caixa de lista ou uma lista suspensa em um formulrio. Selecionar Atributos Descrio atributo ALIGN Define o alinhamento horizontal do elemento CLASSE Define a classe folha de estilo este elemento deve usar Datafld Define o campo de uma dada fonte de dados para vincular a este elemento Datasrc Define a fonte dos dados para a ligao para este elemento HTML Referncia da Linguagem 303 Descrio atributo

Define MLTIPLAS se voc pode selecionar vrios itens no elemento O name define o nome do elemento TAMANHO Define o nmero de itens a serem mostrados ao mesmo tempo no elemento ESTILO Define estilo folhas de informaes especficas para este elemento TABINDEX Define a ordem de tabulao deste elemento PEQUENO Especifica uma seo de texto que ser processado em uma fonte menor que a corrente especificada fonte. Atributos SMALL Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento SPAN Usado com uma folha de estilo para definir no-padro atributos para uma seo de elementos. Atributos SPAN Descrio atributo CLASS Datafld DataFormat Datasrc ID ESTILO Define a classe folha de estilo este elemento deve usar Define o campo de uma dada fonte de dados para vincular a este elemento Define a forma de tornar a fonte de dados especificado, como HTML ou texto Define a fonte dos dados para a ligao para este elemento Define a identificao do elemento Define o estilo folhas de informaes especficas para este elemento FORTE Torna uma seo de texto em uma fonte em negrito. Atributos FORTE Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento 304 Apndice A HTML Referncia da Linguagem SUB Exibe o texto em subscrito, com uma fonte menor do que a atual fonte especificada. Atributos SUB Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento SUP

Exibe o texto em sobrescrito, utilizando uma fonte menor do que a atual fonte especificada. Atributos SUP Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento TABELA Cria uma tabela na pgina que pode conter TR, TD, TH e tags. Atributos da tabela Descrio atributo ALIGN ANTECEDENTES BGCOLOR FRONTEIRA BorderColor BORDERCOLORDARK BORDERLIGHTCOLOR CellPadding CellSpacing CLASS ARMAO ALTURA ID ESTILO WIDTH Define o alinhamento horizontal do elemento Define uma imagem de fundo para o elemento Define a cor de fundo do elemento Define a quantidade de borda do elemento deve ter Define a cor da borda Define a cor da parte escura da fronteira Define a cor da parte clara da fronteira Define a quantidade de preenchimento entre o contedo ea borda da clula Define a quantidade de espaamento entre as clulas Define a classe folha de estilo este elemento deve usar Define a forma como o quadro de fronteira em torno da mesa deve exibir Define a altura do elemento Define a identificao do elemento Define o estilo folhas de informaes especficas para este elemento Define a largura do elemento HTML Referncia da Linguagem 305 TD Cria uma clula em uma tabela. TD Atributos Descrio atributo ALIGN ANTECEDENTES BGCOLOR BorderColor

BORDERCOLORDARK BORDERLIGHTCOLOR CLASS COLSPAN ALTURA ID Nowrap ROWSPAN ESTILO VALIGN WIDTH Define o alinhamento horizontal do elemento Define a imagem de fundo do elemento Define a cor de fundo do elemento Define a cor da borda Define a cor da parte escura da fronteira Define a cor da parte clara da fronteira Define a classe folha de estilo este elemento deve usar Define a quantidade de clulas dessa clula deve abranger Define a altura do elemento Define a identificao do elemento Define o navegador para no quebrar o texto automaticamente Define a quantidade de linhas que esta clula deve abranger Define o estilo folhas de informaes especficas para este elemento Define o alinhamento vertical deste elemento Define a largura deste elemento TEXTAREA Especifica um multi-linha de controle de entrada de texto de um formulrio. TEXTAREA Atributos Descrio atributo ALIGN CLASS COLS Datafld DataFormat Datasrc ID NOME READONLY ROWS ESTILO TABINDEX WRAP Define o alinhamento horizontal do elemento Define a classe folha de estilo este elemento deve usar Define o nmero de colunas em caracteres na rea de texto deve ter Define o campo de uma dada fonte de dados para vincular a este elemento Define a forma de tornar a fonte de dados especificado, como HTML ou texto Define a fonte dos dados para a ligao para este elemento Define a identificao do elemento

Define o nome do elemento Define a rea de texto para somente leitura Define o nmero de linhas em caracteres na rea de texto deve ter Define o estilo folhas de informaes especficas para este elemento Define a ordem de tabulao do elemento Define como o texto deve envolver 306 Apndice A HTML Referncia da Linguagem TH Especifica uma clula de cabealho em uma tabela, o contedo geralmente centrado e em negrito. Atributos TH Descrio atributo ALIGN ANTECEDENTES BGCOLOR BorderColor BORDERCOLORDARK BORDERLIGHTCOLOR CLASS COLSPAN ALTURA ID Nowrap ROWSPAN ESTILO VALIGN WIDTH Define o alinhamento horizontal do elemento Define a imagem de fundo do elemento Define a cor de fundo do elemento Define a cor da borda Define a cor da parte escura da fronteira Define a cor da parte clara da fronteira Define a classe folha de estilo este elemento deve usar Define a quantidade de clulas dessa clula deve abranger Define a altura do elemento Define a identificao do elemento Define o navegador para no quebrar o texto automaticamente Define a quantidade de linhas que esta clula deve abranger Define o estilo folhas de informaes especficas para este elemento Define o alinhamento vertical deste elemento Define a largura deste elemento TTULO Especifica o ttulo do documento, que est contido no ttulo do documento. TR Cria uma linha em uma tabela. TR Atributos Descrio atributo ALIGN ANTECEDENTES

BGCOLOR BorderColor BORDERCOLORDARK BORDERLIGHTCOLOR CLASS ALTURA ID ESTILO VALIGN WIDTH Define o alinhamento horizontal do elemento Define a imagem de fundo do elemento Define a cor de fundo do elemento Define a cor da borda Define a cor da parte escura da fronteira Define a cor da parte clara da fronteira Define a classe folha de estilo este elemento deve usar Define a altura do elemento Define a identificao do elemento Define o estilo folhas de informaes especficas para este elemento Define o alinhamento vertical deste elemento Define a largura deste elemento HTML Referncia da Linguagem 307 U Sublinha o texto especificado. U Atributos Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento UL Cria uma lista no-ordenada. Itens da lista so especificados com a tag LI. Atributos UL Descrio atributo CLASSE Define a classe folha de estilo este elemento deve usar ID Define a identificao do elemento ESTILO Define estilo folhas de informaes especficas para este elemento TYPE Sets the type of bullet that LI will create Esta pgina foi intencionalmente deixada em branco apndice B PHP Linguagem Referncia T seu apndice um guia completo para todas as funes PHP disponveis para voc. Cada funo dividido em sees que a funo deve ser abrangida. Em seguida, cada funo listado com os parmetros que recebe, o que a funo retorna, e um breve descrio do que a funo faz. Funes Apache Descrio Retorna a funo

apache_lookup_uri Class (string nomedoarquivo) Retorna uma classe com propriedades sobre o URI especificado. apache_note (String note_name cadeia Recupera o valor na tabela de notas pedido de uma nota especfica [, String note_value]) nome. Se o note_value for especificado, ele ir definir a note_name o valor de note_value. getallheaders () Retorna um array de cabealhos de solicitao HTTP da Apache. virtual (string filename) Integer Executa um Apache sub-pedido para incluir o arquivo especificado. Funes para Array Descrio Retorna a funo Array Matriz (...) Cria e retorna uma matriz com os valores fornecidos. array_keys Array (matriz) Retorna uma matriz que contm todas as chaves do array especificado. array_merge Array (arrays) Mescla as matrizes fornecidas em um array singular. array_pop (array) Mixed Pops o ltimo elemento do array e retorna. array_push (array, as variveis) Integer Empurra as variveis fornecidas para o fim da matriz especificada. array_shift (array) Mixed Remove o primeiro elemento da matriz eo retorna. 309 310 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo array_slice array (, offset [Length]) array_splice entrada (, offset [Comprimento] [substituio]) Matriz Matriz Retorna uma sub-matriz da matriz especificada no incio do ndice offset. Se o comprimento for especificado, ento ele ir retornar um array a partir de ndice compensado com um comprimento especificado. Ir remover um sub-array da entrada e substitu-lo com a matriz substituio. Adiciona as variveis para o incio da matriz. Retorna um array contendo todos os valores da matriz. Atravessa a matriz fornecida, aplicando a lgica de um determinado funo para os elementos do array. Classifica um array em ordem decrescente, mantendo os valores-chave. Classifica um array em ordem crescente, mantendo os valores-chave. Mescla as variveis especificadas em uma nica matriz. Retorna a contagem de elementos na matriz especificada. Retorna o elemento atual na matriz especificada. Retorna um elemento de quatro sub-array que contm a chave eo valor do elemento atual. A chave est contida nos ndices 0 e "key", eo valor est contido em ndices 1 e "value". Define o ltimo elemento da matriz para o ndice atual e retorna o valor do ltimo elemento.

Isto ir importar variveis na tabela de smbolos a partir do especificado array. Os parmetros extract_type diz extract () o que fazer se um coliso detectada, eo parmetro prefixo especifica um prefixo para os elementos a serem inseridos. Retorna true se o valor existe em qualquer lugar na matriz, caso contrrio ele retorna falso. Retorna a chave do elemento atual do array. Classifica a matriz por seus valores essenciais. Cria uma matriz das variveis fornecidas. Move o ponteiro do ndice atual para o prximo ndice na matriz. Isso ir retornar false se voc tiver atingido o ltimo ndice da matriz. Retorna o elemento atual da matriz. Move o ponteiro do ndice atual para o ndice anterior na matriz. Isso ir retornar false se voc alcanou o primeiro ndice da matriz. Retorna um array de inteiros entre baixa e alta. Retorna o primeiro elemento do array e define o ndice atual para o primeiro ndice disponveis na matriz. Classifica a matriz em ordem decrescente. Classifica o array em uma ordem aleatria Retorna o nmero de elementos na matriz fornecida. Classifica o array em ordem crescente. Classifica a matriz usando a lgica da funo especificada. Classifica o array pelos valores-chave usando a lgica do especificado funo. Classifica a matriz usando a lgica da funo especificada. array_unshift (array, as variveis) Integer array_values Array (matriz) array_walk (array funo, Bool [Parmetro]) arsort void (matriz) asort void (matriz) compacta Array (nome de variveis) count (array) Integer atual (matriz) Mixed cada Array (matriz) end (array) Mixed extract (array [, extract_type] int [, Prefixo]) in_array (array, valor) Boolean chave (matriz) Mixed ksort (array) Integer anular a lista (variveis) seguinte (matriz) Mixed pos (array) Mixed prev (array) Mixed Matriz intervalo (baixo, alto) reset (array) Mixed rsort void (matriz) vazio shuffle (array) sizeof (array) Integer

vazio sort (array) uasort void (funo de matriz) uksort void (funo de matriz) usort void (funo de matriz) Referncia da Linguagem PHP 311 Funes Aspell Descrio Retorna a funo aspell_check (dicionrio, a palavra) Retorna true se a grafia da palavra reconhecida na dicionrio especificado. aspell_check_raw (dicionrio, Boolean Verifica a ortografia da palavra com o dicionrio, sem palavra) mudando a string em tudo. aspell_new (master, pessoal) Carrega um novo dicionrio inteiro e retorna um identificador de conexo para o novo dicionrio. aspell_suggest Array (dicionrio, a palavra) Retorna uma matriz de sugestes de ortografia para a palavra especificada. Funes BCMath Descrio Retorna a funo bcadd (string1, string2, [escala]) String Retorna a soma de string1 e string2. O parmetro opcional escala especifica o nmero de casas decimais para sair. bccomp (string1, string2, Integer Compara string1 e string2. Se eles forem iguais ele ir retornar 0, [Escala]), se string1 for maior que string2 ele retornar 1, e se string2 maior que string1, ento ele ir retornar -1. O parmetro opcional escala especifica o nmero de casas decimais para sair. bcdiv (string1, string2, [escala]) String Divide string1 por string2. A escala parmetro opcional especifica o nmero de casas decimais para sair. bcmod String (string1, string2) Retorna o mdulo de string1 e string2. bcmul (string1, string2, [escala]) Multiplica A escala parmetro opcional especifica o nmero de decimal string1 por lugares para sair. string2. bcpow (strin1, string2, [escala]) String Toma string1 ao poder de string2. O parmetro opcional escala especifica o nmero de casas decimais para sair. bcscale String (escala) Define o padro valor do parmetro de escala. bcsqrt (string1, [escala]) String Retorna a raiz quadrada de string1. A escala parmetro opcional especifica o nmero de casas decimais para sair. bcsub (string1, string2, [escala]) String Subtrai string2 string1 partir. A escala parmetro opcional especifica o nmero de casas decimais para sair. Funes de calendrio Descrio Retorna a funo easter_date ([ano]) easter_days ([ano])

FrenchToJD (ms, dia, ano) GergorianToJD (ms, dia, ano) JDDayOfWeek (JULIANDAY, modo) JDMonthName (JULIANDAY, modo) JDToFrench (JULIANDAY) Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Misturado Corda Corda Retorna o timestamp para a meia-noite no dia de Pscoa do especificado ano. Se o ano no especificado, ento o ano corrente assumido. Retorna o nmero de dias aps 21 de maro em que a Pscoa Dia cai. Se o ano no especificado, ento o ano corrente assumido. Converte uma data no calendrio Republicano da Frana para um dia Julian. Converte a data gregoriana fornecida a um dia Julian. Retorna o dia da semana do Dia Julian especificado no modo especificado. Retorna o nome do ms do Dia Julian especificado no especificado modo. Converte um dia no calendrio Julian Repblica Francesa. 312 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo JDToGregorian String (JULIANDAY) JDToJewish String (JULIANDAY) JDToJulian String (JULIANDAY) JewishToJD String (judeu) JulianToJD String (ms, dia, ano) Converte um dia Julian em uma data gregoriana. Converte um dia Julian no calendrio judaico. Converte uma contagem Julian Day para uma string representando uma data do calendrio juliano. Converte uma data judaica para uma data do calendrio juliano. Converte uma string representando uma data para um dia Julian Julian. Funes de Data e Hora Descrio Retorna a funo checkdate (ms, dia, ano) Boolean Verifica se o ms especificado, dia e ano uma data vlida. Se for uma data vlida, ento retornado true, caso contrrio, false retornado. date (formato, [timestamp]) Formatos de String a data. Se timestamp no for fornecido ento a corrente timestamp utilizado. getdate Array (timestamp) Retorna uma matriz com data / hora para o timestamp. gettimeofday () Retorna um array com as configuraes para o tempo atual. gmdate format ([timestamp], String Retorna o timestamp para o GMT de data / hora que corresponde a

[Minutos], [segunda], [meses], o tempo local. Qualquer um dos parmetros opcionais que no so usados [Dia] de [ano], [is_dst]) esto a ser assumida a hora atual. gmstrftime (formato, [timestamp]) Formatos de String a hora GMT / CUT / data de acordo com o formato especificado. microtime (String) Retorna uma string contendo o microssegundos e segundos desde da poca. mktime ([horas], [minutos], [segunda], Integer Retorna o timestamp para a data especificada. Qualquer um dos opcionais [Ms], [dia] de [ano], [is_dst]) Parmetros no especificados so considerados o momento atual. strftime (formato, [timestamp]) Formatos de Cordas da data local / tempo de acordo com o formato especificado. time () Retorna um Integer timestamp atual. Funes DBA Descrio Retorna a funo dba_close void (dbhandle) Fecha o banco de dados que especificado. dba_delete (key, dbhandle) Exclui a entrada Boolean com a chave especificada no databse especificado. Se tiver xito, em seguida, ele retorna true, caso contrrio ele retorna falso. dba_exists (key, dbhandle) Retorna true se a chave especificada no banco de dados especificado existir, caso contrrio, retorna false. dba_fetch String (chave, dbhandle) Retorna uma seqncia serializada com a chave especificada no banco de dados. dba_firstkey String (dbhandle) Retorna a primeira chave no banco de dados especificado. dba_insert (key, value, dbhandle) Insere Boolean um par chave / valor no banco de dados especificado. Retorna true em caso de sucesso, False on falha. dba_nextkey String (dbhandle) Retorna a chave ao lado do banco de dados. dba_open (modo, caminho, dbType) Integer Retorna um identificador para o banco de dados com o caminho especificado. Modos possveis so "r", "w", "c", e "n". dba_optimize (dbhandle) Boolean Otimiza o banco de dados especificado. Se a otimizao conseguiu ento a funo retornar true, caso contrrio, retornar false. dba_popen (modo, caminho, dbType) Integer Abre o banco de dados em modo persistente. Retorna um identificador para o banco de dados com o caminho especificado. Modos possveis so "r", "w", "C", e "n". Referncia da Linguagem PHP 313 Descrio Retorna a funo dba_replace (key, value, dbhandle) Substitui Boolean ou insere um par chave / valor no banco de dados especificado. dba_sync (dbhandle) Boolean Sincroniza o banco de dados. Retorna true em caso de sucesso, e falso em caso de falha. Funes diretrio

Descrio Retorna a funo chdir (diretrio) Boolean Define o diretrio para o diretrio atual. closedir void (dirHandle) Fecha o fluxo de diretrio. dir Directory (diretrio) Retorna um objeto que representa o diretrio. Objeto opendir (diretrio) Integer Abre o diretrio especificado e retorna um manipulador para ela. readdir String (dirHandle) Retorna a prxima entrada no manipulador do diretrio especificado. rewinddir (dirHandle) void Redefine o fluxo para o primeiro objeto no diretrio. Carregando Extenso dinmica Descrio Retorna a funo dl (extenso) Integer Carrega uma extenso dinamicamente. Retorna 0 se o carregamento falhou e no-zero se o carregamento conseguiu. Funes de criptografia Descrio Retorna a funo mcrypt_cbc (cifra, chave, dados, String criptografa ou descriptografa os dados no modo CBC. modo, [iv]) mcrypt_cfb (cifra, chave, dados, String criptografa ou descriptografa os dados no modo CFB. modo, iv) mcrypt_create_iv String (fonte, tamanho) Cria um vetor de inicializao da fonte usando random nmeros. mcrypt_ecb (cifra, chave, dados, String criptografa ou descriptografa os dados no modo ECB. mode) mcrypt_get_block_size (cifra) Integer Retorna o tamanho do bloco da cifra, mcrypt_get_cipher_name String (cifra) Retorna o nome da cifra especificada. mcrypt_get_key_size (cifra) Integer Retorna o tamanho da chave para a cifra. mcrypt_ofb (cifra, chave, dados, String criptografa ou descriptografa os dados no modo OFB. modo, iv) Funes de execuo Descrio Retorna a funo escapeshellcmd String (comando) Escapes metacaracteres de shell no comando. exec (comando, matriz de [], String Executa o comando especificado. A matriz, se passada, vai receber [Return_var]) qualquer sada do comando. Se o return_var especificado neste ir conter o cdigo de resultado do comando. 314 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo passthru (comando, [return_var]) void Executa o comando especificado e exibe a sada crua. sistema (comando, [return_var]) String Executa o comando especificado e exibe a sada. Formas de Dados Funes Format

Descrio Retorna a funo fdf_close (fdfdoc) fdf_create () fdf_get_file (fdfdoc) fdf_get_status (fdfdoc) fdf_get_value (fdfdoc, nome do campo) fdf_next_field_name (fdfdoc, fieldname) fdf_open (filename) fdf_save (filename) fdf_set_ap (fdfdoc, nome do campo, filename rosto, nmeropgina) fdf_set_file (fdfdoc, filename) fdf_set_status (fdfdoc, status) fdf_set_value (fdfdoc, nome do campo, valor, is_name) Bbool Nmero inteiro corda corda corda corda Nmero inteiro Bool Bool Bool Bool Bool Fecha o documento FDF Cria um documento novo FDF. Retorna o valor da chave / F no documento FDF. Retorna o valor de chave / STATUS no documento FDF. Retorna o valor do campo especificado no documento FDF. Retorna o nome do campo que se segue o nome do campo especificado. Abre um documento FDF. Salva um documento FDF. Define a aparncia do campo com o nome no documento FDF. Define o valor da chave / F no documento FDF. Define o valor da chave / STATUS no documento FDF. Define o valor do nome do campo especificado no documento FDF. O argumento is_name especifica se ou no o valor ser um nome de PDF (1) ou uma string (0). Funes do sistema de arquivos Descrio Retorna a funo Cordas basename (path) Retorna o componente nome de arquivo de um caminho totalmente qualificado. chgrp (filename, grupo) Bool Altera o grupo do nome do arquivo. chmod (filename, mode) Bool Altera o modo de o nome do arquivo. chown (usurio filename) Bool Altera o proprietrio do nome do arquivo. clearstatcache () void Limpa o cache do Estado.

cpia (fonte, destino) Bool Cpias um arquivo da origem para o destino. dirname String (path) Retorna o componente diretrio de um caminho totalmente qualificado. diskfreespace float (dir) Retorna a quantidade de espao livre no diretrio especificado. fclose (fp) Bool Fecha um fluxo de arquivo. Verifica feof (fp) Boolean para ver se voc est no final do fluxo de arquivo especificado. Se voc est no final do corrente feof () ir retornar true, caso contrrio ele retornar falso. fgetc String (fp) L o prximo caractere do fluxo de arquivo. fgetcsv (fp, comprimento, [delimitador]) Retorna um array com a prxima linha separados por vrgulas ou um especificada delimitador. fgets String (p, comprimento) L uma linha de at length-1. fegetss String (fp, comprimento) L uma linha de at length-1, enquanto que eliminasse todas as tags HTML. Matriz de arquivo (filename) L todo o arquivo especificado em uma matriz. file_exists (filename) Retorna true se o arquivo existe, e false se o arquivo no existe. Referncia da Linguagem PHP 315 Descrio Retorna a funo fileatime (filename) Integer Retorna o tempo que o arquivo foi acessado pela ltima vez. filectime (filename) Integer Retorna o tempo que o arquivo foi modificado pela ltima vez. grupo de arquivos (filename) Integer Retorna o ID do grupo proprietrio. fileinode (filename) Integer Retorna o nmero inode para o arquivo. filemtime (filename) Integer Retorna o tempo que o arquivo foi modificada pela ltima vez. fileowner (filename) Integer Retorna o ID do dono do arquivo. fileperms (filename) Integer Retorna as permisses do arquivo especificado. filesize (filename) Integer Retorna o tamanho em bytes do arquivo. filetype String (nome) Retorna o tipo de arquivo. flock (fp, operao) Define Boolean ou libera um bloqueio no fluxo de arquivo especificado. fopen (filename, mode) Integer Abre um arquivo no modo especificado. Sadas fpassthru (fp) Integer dados a partir da posio atual no arquivo at o fim do arquivo. fputs (fp, string, [length]) Integer Grava a seqncia especificada para o fluxo de arquivos. fread String (fp, comprimento) L bytes de comprimento do fluxo de arquivo especificado. fseek (fp, offset) Integer Move o ponteiro de arquivo para compensar no fluxo de arquivo especificado. ftell (fp) Integer Retorna a posio atual do ponteiro de arquivo. fwrite (fp, string, [length]) Integer Escreve string para o stream de arquivo especificado.

Verifica is_dir (filename) Boolean para ver se o arquivo especificado um diretrio. is_executable (filename) Boolean Verifica para ver se o arquivo especificado um executvel. Verifica is_file (filename) Boolean para ver se o arquivo especificado um arquivo. Verifica is_link (filename) Boolean para ver se o arquivo especificado um link simblico. is_readable (filename) Boolean Verifica para ver se o arquivo especificado legvel. is_writable (filename) Boolean Verifica para ver se o arquivo especificado gravvel. ligao (link de destino) Boolean Cria um link. linkinfo (path) Integer Retorna informaes sobre o link especificado. lstat Array (filename) Retorna informaes sobre o arquivo especificado. mkdir (nome do caminho, o modo) Boolean Cria um diretrio com o modo especificado. pclose (fp) Integer Fecha um ponteiro de arquivo a um cano que foi aberto com a popen () funo. popen (comando, modo) Integer Abre uma pipe usando o comando especificado. readfile (filename) Integer L e sadas no arquivo especificado. readlink String (path) Retorna o destino do link simblico especificado. rename (de, para) Boolean Renomeia um arquivo de um nome de arquivo para um nome de arquivo. rewind (fp) Boolean Redefine o ponteiro do arquivo para o incio do fluxo de arquivo especificado. rmdir (path) Boolean Remove o diretrio especificado. set_file_buffer (fp, buffer) Integer Define o tamanho do buffer para o fluxo de arquivo. status Array (filename) Retorna informaes sobre o arquivo especificado. symlink (link de destino) Boolean Cria um link simblico. tempnam (dir, prefixo) String Cria um nome de arquivo exclusivo temporrio no diretrio especificado. touch (nome, tempo) Boolean Define o tempo de modificao do nome do arquivo especificado. umask ([mask]) Integer Define umask especficas do PHP e retorna o umask de idade. unlink (filename) Exclui o arquivo especificado Boolean. 316 Anexo B PHP Referncia da Linguagem Geral Funes matemticas Descrio Retorna a funo abs (nmero) Mixed Retorna o valor absoluto do nmero. Float acos (arg) Retorna o arco cosseno de arg. Float asin (arg) Retorna o pecado de arg. atan Float (arg) Retorna o arco de tan arg. atan2 (y, x) Float Retorna o arco de tan y e x. Cordas base_convert (nmero, base1, base2) Converte nmero de base1 a base2.

Bindec (binrio) Integer Converte uma string binria para uma string decimal. Float ceil (nmero) Retorna o teto de um nmero. cos Float (arg) Retorna o cosseno de arg. Decbin String (nmero) Converte um nmero decimal para um nmero binrio. Dechex String (nmero) Converte um nmero decimal para um nmero hexadecimal. Decoct String (nmero) Converte um nmero decimal para um nmero octal. Float exp (arg) Retorna e potncia de arg. Float cho (nmero) Retorna o piso de um nmero. Integer getrandmax () Mostrar o maior nmero aleatrio que pode ser devolvido de rand (). Hexdec (nmero) Integer Converte um nmero hexadecimal em um decimal. Float log (arg) Retorna o logaritmo natural de arg. Float log10 (arg) Retorna o log base 10 de arg. max (arg1, arg2, ...) Mixed Retorna o maior valor na lista de argumentos. min (arg1, arg2, ...) Mixed Retorna o menor valor na lista de argumentos. Integer mt_getrandmax () Retorna o maior valor do mt_rand () pode retornar. mt_rand ([min], [max]) Retorna um Integer valor de Mersenne Twister aleatria. mt_srand (semente) Sementes anular a Mersenne Twister gerador de nmeros aleatrios, number_format (nmero, [dex_place] Formatos, String o nmero especificado para um determinado nmero de [Dec_point], [milhares]) casas decimais. Octdec (nmero) Integer Converte um nmero octal de um nmero decimal. pi () retorna Float pi. pow Float (x, y) Retorna x elevado potncia de y. rand ([min], [max]) Integer Retorna um nmero aleatrio. round (nmero de preciso), Float Retorna o valor arredondado do nmero com a preciso especificada. Float sin (arg) Retorna o pecado de arg. srand (semente) Sementes anular o gerador de nmeros aleatrios. Float tan (arg) Retorna a tangente de arg. Funes para HTTP Descrio Retorna a funo header (string) nome setcookie ([valor], [expirar], [Caminho], [domnio], [seguro]) Nmero inteiro Boolean Envia o cabealho HTTP especificado. Cria um cookie no computador do cliente com o nome especificado e valor. Referncia da Linguagem PHP 317 Funes imagem Descrio Retorna a funo Getimagesize (filename Array, Retorna o tamanho da imagem. [Imageinfo])

Imagearc (img, x, y, largura, Integer Desenha um elipse parcial na imagem especificada, centrado em comear a altura, final, col) x, y, com uma largura especfica e altura. Imagechar (img, font, x, y, Integer Desenha o caractere especificado em x, y na imagem. cor do caractere) Imagecharup (img, font, x, y, Integer Desenha o caractere especificado para cima na imagem. cor do caractere) Imagecolorallocate (img, vermelho, Integer Atribui o valor de cor RGB especificado para a imagem. verde, azul) Imagecolorat (img, x, y) Integer Devolve o ndice da cor em x, y. Imagecolorclosest (img, vermelho, Integer Retorna o ndice da cor mais prxima da cor verde, azul paleta) para a imagem. Imagecolorexact (img, vermelho, Integer Retorna o ndice da cor especificada na cor verde, azul paleta) da imagem. Imagecolorresolve (img, vermelho, Integer Finds a cor especificada na paleta e, se ele no existe ento verde, azul) retorna o ndice da cor mais prxima na paleta. ImageColorSet (img, ndice, vermelho, Boolean Define o ndice especificado para o valor de cor RGB. verde, azul) Imagecolorsforindex Array (img, index) Retorna um array contendo os valores RGB para o ndice na paleta de cores. Imagecolorstotal (img) Integer Retorna o nmero de cores na paleta especificada imagens coloridas. Imagecolortransparent (img, [color]) Integer cor Define como a cor transparente na paleta. Imagecopyresized (dest_img, Integer Copia uma rea da imagem de origem para uma matriz de src_img, destX, destY, srcX, imagem de destino. Se as alturas so diferentes, ento o destino srcY, destWidth, destHeight, srcWidth, srcHeight) imagem redimensionada. Imagecreate (largura, altura) Integer Cria uma nova imagem. Imagecreatefromgif (filename) Integer Cria uma nova imagem a partir do arquivo especificado. ImageDashedLine (img, x1, y1, x2, y2, cor) Integer Desenha uma linha tracejada na imagem do ponto x1, y1 a ponto x2, y2. Imagedestroy (img) Integer Destri a imagem especificada. Imagefill (img, x, y, cor) Integer Preenche a imagem inicial no ponto x, y. ImageFilledPolygon (img, pontos, num_points, cor)

Integer Desenha um polgono preenchido a imagem entre os pontos. ImageFilledRectangle (img, x1, y1, x2, y2, cor) Integer Desenha um retngulo preenchido a imagem especificada. ImageFillToBorder (img, x, y, Integer Executa um preenchimento entre a cor da borda especificadas de partida cor da borda) no ponto x, y. Imagefontheight (fonte) Integer Retorna a altura da fonte especificada em pixels. Imagefontwidth (fonte) Integer Retorna a largura da fonte especificada em pixels. Imagegif (img, [nome]) Integer Envia a imagem para um arquivo ou para o navegador. Imageinterlace (img, [interlace]) Integer Ativa ou desativa o entrelaamento na imagem. Imageline (img, x1, y1, x2, y2, Integer Desenha uma linha na imagem do ponto x1, y1 ao ponto x2, y2. cor) 318 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo Imageloadfont (filename) Integer Carrega uma fonte bitmap do arquivo. Imagepolygon (img, pontos, Integer Desenha um polgono na imagem, bem como preencher polgono mas no num_points, cor) preencher a imagem. ImagePSBBox (texto, fonte, tamanho Array, Calcula as coordenadas para a caixa delimitadora da rea de texto usando largura, espao, ngulo) uma fonte PostScript. ImagePSEncodeFont (filename) Integer Carrega um vetor de codificao de caracteres especficos para um tipo de letra PostScript. Imagepsfreefont void (fontindex) Libera a fonte PostScript da memria. Imagepsloadfont Integer (filename) Carrega uma fonte PostScript na memria. Imagepstext (img, texto, fonte Array, Desenha o texto para a imagem usando uma fonte PostScript. tamanho, em primeiro plano, fundo, x, y, [espao], [tenso], [ngulo], [antialias_steps]) ImageRectangle (img, x1, y1, Integer Desenha um retngulo com a imagem. Atua como x2, y2 ImageRectangleFill, cor) () mas o retngulo no preenchida quando ele desenhado. ImageSetPixel (img, x, y, cor) Integer Define o pixel no ponto x, y para uma cor. Imagestring (img, font, x, y, Integer Desenha uma string a partir de x, y para a imagem. tamanho, cor) Imagestringup (img, font, x, y, Integer Desenha uma string que comea no ponto x, y para cima enfrentando. tamanho, cor) Imagesx (img) Integer Obtm a largura da imagem. Imagesy (img) Integer Obtm a altura da imagem.

Imagettfbbox (tamanho, ngulo Array, Retorna uma caixa delimitadora para uma fonte TrueType. texto, pia batismal) Imagettftext (img, texto, Array tamanho, Desenha o texto na imagem usando a fonte TrueType especificado. ngulo, x, y, cor) IMAP Funes Descrio Retorna a funo imap_8bit String (string) Converte uma string de 8 bits em uma seqncia de impresso. imap_alerts () Retorna um array de todas as mensagens de alerta IMAP que tenham ocorrido. imap_append (fluxo de caixa de correio, Anexa Boolean uma mensagem para a caixa de correio especificada. mensagem, flags) imap_base64 String (texto) decodifica o texto base 64 codificado especificado. imap_binary String (string) Converte uma string de 8 bits em uma seqncia de base 64. imap_body (stream, message_num, String Retorna o texto da mensagem nmero especificado. flags) imap_check Array (stream) Obtm informaes sobre a caixa de correio especificada. imap_clearflag_full (stream, Boolean Limpa uma bandeira especfica sobre o fluxo. sequncia, a bandeira, as opes) imap_close (stream, bandeiras) Boolean Fecha um aberto anteriormente stream IMAP. imap_create caixa de correio (stream, Boolean Cria uma caixa de correio. caixa de correio) imap_delete (stream, message_num) Boolean Marca uma mensagem para excluso. imap_delete caixa de correio (stream, Exclui Boolean uma caixa de correio. caixa de correio) Referncia da Linguagem PHP 319 Descrio Retorna a funo imap_errors () Retorna um array de todos os erros que ocorreram IMAP. imap_expunge (stream) Exclui Boolean todas as mensagens marcadas. imap_fetchbody (stream String, Obtm a seo especificada da mensagem. message_num, part_num, flags) imap_fetchheader (stream String, Obtm o cabealho para o nmero da mensagem especificada. message_num, flags) imap_fetchstructure stream (, Array Retorna a estrutura da mensagem. message_num) imap_getmailboxes (stream Array, Retorna uma matriz de caixas de correio. ref, pat) imap_getsubscribed (stream, Array Retorna um array de todas as caixas de correio na qual um usurio est ref, pat) subscrito.

imap_header (stream, message_num, Object Retorna um objeto que representa o cabealho do e-mail. fromlength, subjectlength, defaulthost) imap_headers Array (stream) Retorna uma matriz que contm todos os cabealhos para cada mensagem no fluxo. imap_last_error (String) Obtm o ltimo erro que ocorreu em IMAP. imap_listmailbox Array (stream, ref, pat) Retorna uma matriz que contm todos os nomes de caixa de correio. imap_listsubscribed (stream, Array Retorna um array que contm todas as caixas de correio subscritas em ref, pat) o fluxo. imap_mail_copy stream (, Boolean Copia um conjunto de mensagens para outra caixa postal. messagelist, caixa de correio, flags) imap_mail_move stream (, Boolean Move um conjunto de mensagens para outra caixa postal. caixa messagelist) imap_mailboxmsginfo Array (stream) Obtm informaes sobre a caixa de correio atual. imap_msgno (stream, UID) Integer Retorna o nmero de mensagens para o UID. imap_num_msg (stream) Integer Obtm o nmero total de mensagens na caixa postal. imap_num_recent (stream) Integer Obtm o nmero total de novas mensagens na caixa postal. imap_open (caixa de correio, nome de usurio, Integer Abre um fluxo IMAP para uma caixa de correio especfica. senha, flags) imap_ping (stream) Boolean Pings o fluxo IMAP. imap_qprint String (string) Converte uma string de impresso para uma string de 8 bits. imap_rename caixa de correio (stream, Renomeia Boolean uma caixa de correio a partir oldname para newname. oldname, newname) imap_reopen (fluxo de caixa de correio, Boolean Reabre o fluxo IMAP. [Flags]) imap_rfc822_parse_adrlist (endereo Array, Analisa uma string de endereo e retorna uma matriz que contm o default_host caixa de correio), de acolhimento, nome pessoal, e uma fonte de domnio. imap_rfc822_write_address (caixa de correio String, retorna um endereo de email. host, pessoal) imap_scanmailbox Array (stream, string) Retorna uma matriz de mensagens que correspondam seqncia de pesquisa. imap_setflag_full stream (, Boolean Define o sinalizador especificado. sequncia, a bandeira, as opes)

imap_sort (stream, critrios, Array Retorna um array de nmeros de mensagens que atendem aos critrios de pesquisa. reverso, opes) imap_status stream (, Object caixa de correio, Obtm informaes sobre a caixa de correio. opes) Referncia da Linguagem PHP 319 Descrio Retorna a funo imap_errors () Retorna um array de todos os erros que ocorreram IMAP. imap_expunge (stream) Exclui Boolean todas as mensagens marcadas. imap_fetchbody (stream String, Obtm a seo especificada da mensagem. message_num, part_num, flags) imap_fetchheader (stream String, Obtm o cabealho para o nmero da mensagem especificada. message_num, flags) imap_fetchstructure stream (, Array Retorna a estrutura da mensagem. message_num) imap_getmailboxes (stream Array, Retorna uma matriz de caixas de correio. ref, pat) imap_getsubscribed (stream, Array Retorna um array de todas as caixas de correio na qual um usurio est ref, pat) subscrito. imap_header (stream, message_num, Object Retorna um objeto que representa o cabealho do e-mail. fromlength, subjectlength, defaulthost) imap_headers Array (stream) Retorna uma matriz que contm todos os cabealhos para cada mensagem no fluxo. imap_last_error (String) Obtm o ltimo erro que ocorreu em IMAP. imap_listmailbox Array (stream, ref, pat) Retorna uma matriz que contm todos os nomes de caixa de correio. imap_listsubscribed (stream, Array Retorna um array que contm todas as caixas de correio subscritas em ref, pat) o fluxo. imap_mail_copy stream (, Boolean Copia um conjunto de mensagens para outra caixa postal. messagelist, caixa de correio, flags) imap_mail_move stream (, Boolean Move um conjunto de mensagens para outra caixa postal. caixa messagelist) imap_mailboxmsginfo Array (stream) Obtm informaes sobre a caixa de correio atual. imap_msgno (stream, UID) Integer Retorna o nmero de mensagens para o UID. imap_num_msg (stream) Integer Obtm o nmero total de mensagens na caixa postal. imap_num_recent (stream) Integer Obtm o nmero total de novas mensagens na caixa postal.

imap_open (caixa de correio, nome de usurio, Integer Abre um fluxo IMAP para uma caixa de correio especfica. senha, flags) imap_ping (stream) Boolean Pings o fluxo IMAP. imap_qprint String (string) Converte uma string de impresso para uma string de 8 bits. imap_rename caixa de correio (stream, Renomeia Boolean uma caixa de correio a partir oldname para newname. oldname, newname) imap_reopen (fluxo de caixa de correio, Boolean Reabre o fluxo IMAP. [Flags]) imap_rfc822_parse_adrlist (endereo Array, Analisa uma string de endereo e retorna uma matriz que contm o default_host caixa de correio), de acolhimento, nome pessoal, e uma fonte de domnio. imap_rfc822_write_address (caixa de correio String, retorna um endereo de email. host, pessoal) imap_scanmailbox Array (stream, string) Retorna uma matriz de mensagens que correspondam seqncia de pesquisa. imap_setflag_full stream (, Boolean Define o sinalizador especificado. sequncia, a bandeira, as opes) imap_sort (stream, critrios, Array Retorna um array de nmeros de mensagens que atendem aos critrios de pesquisa. reverso, opes) imap_status stream (, Object caixa de correio, Obtm informaes sobre a caixa de correio. opes) 320 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo Boolean imap_subscribe (caixa de correio do crrego,) Subscreve caixa de correio. imap_uid (stream, message_num) Integer Retorna o UID para a mensagem. imap_undelete (stream, desmarca Boolean uma mensagem para excluso. message_number) Boolean imap_unsubscribe (caixa de fluxo) unsubscribes da caixa de correio. Funes Informix Descrio Retorna a funo ifx_affected_rows (id) ifx_blobinfile_mode (modo) ifx_byteasvarchar (modo) ifx_close ([vinculada]) Nmero inteiro vazio vazio Nmero inteiro ifx_connect ([banco], [userid], Integer [Senha]) ifx_copy_blob (id) Integer ifx_create_blob (tipo, modo de param) Integer

Retorna o nmero de linhas que foram afetados pela consulta. Define o modo padro para o comando SELECT, Define o modo de byte padro para as declaraes SELECT. Fecha a conexo atualmente aberto. Abre uma conexo ao banco de dados Informix. Cpias de um objeto BLOB. Cria um BLOB. Cria um objeto char. Executa uma instruo SQL preparada. Retorna o ltimo erro que ocorreu em Informix. Retorna o ltimo erro que ocorreu ou a mensagem de erro para a cdigo especificado. Obtm uma linha do banco de dados. Retorna uma matriz de nomes de campos e suas propriedades. Retorna uma matriz de nomes de campos e seus tipos. Libera o objeto BLOB da memria. Libera o objeto Char especificado da memria. Libera o conjunto de resultados de memria. Libera o objeto SLOB da memria. Retorna o objeto BLOB especificado. Retorna o objeto especificado char. Retorna o contedo de sqlca.sqlerrd [0-5], aps uma consulta tenha sido executado. Sadas o recorde estabelecido como uma tabela HTML. Define o valor de retorno padro para NULL. Obtm o nmero de campos no conjunto de registros. Obtm o nmero de linhas no conjunto de registro. Abre uma conexo persistente com um banco de dados. Prepara uma consulta SQL para executar. Executa a consulta SQL especificada no banco de dados aberto. Define o modo de texto padro para as declaraes SELECT. Atualiza o contedo de um objeto BLOB. ifx_create_char (param) Integer ifx_do (id) Integer ifx_error (String) ifx_errormsg ([errorcode]) String ifx_fetch_row (id, [posio]) ifx_fieldproperties (id) ifx_fieldtypes (id) ifx_free_blob (id) ifx_free_char (id) ifx_free_result (id) ifx_free_slob (id) ifx_get_blob (id) ifx_get_char (id) ifx_getsqlca (id) ifx_htmltbl_result (id, [Html_table_options]) ifx_nullformat (modo) ifx_num_fields (id)

ifx_num_rows (id) ifx_pconnect ([banco], [Userid], [senha]) Matriz Matriz Matriz Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Matriz Nmero inteiro vazio Nmero inteiro Nmero inteiro Nmero inteiro ifx_prepare consulta ([ligada], Integer [Cursor_type], [blobidarray]) ifx_query consulta ([ligada], Integer [Cursor_type], [blobidarray]) ifx_textasvarchar void (modo) ifx_update_blob (id, contedo) Boolean Referncia da Linguagem PHP 321 Descrio Retorna a funo ifx_update_char (id, o contedo) ifxus_close_slob (id) ifxus_create_slob (modo) ifxus_open_slob (id, mode) ifxus_read_slob (id, bytes) ifxus_seek_slob (modo id, offset) ifxus_tell_slob (id) ifxus_write_slob (id, string) Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Atualiza o contedo do objeto char. Libera o objeto SLOB especificado da memria. Cria um objeto SLOB. Abre um objeto SLOB. L um nmero especificado de bytes de um objeto SLOB. Define a posio atual do ponteiro no objeto SLOB. Obtm a posio atual do ponteiro no objeto SLOB. Escreve uma string para o objeto SLOB.

Funes LDAP Descrio Retorna a funo ldap_add (parmetros link_id, dn, de entrada) ldap_bind (parmetros link_id, [bind_rdn], [Senha]) ldap_close (parmetros link_id) ldap_connect ([hostname], [porta]) ldap_count_entries Integer (parmetros link_id, resultado) Boolean Boolean Boolean Nmero inteiro Adiciona uma entrada para o dn especificado. Vincula o diretrio LDAP com um RDN especificado e uma senha. Fecha uma conexo aberta para o diretrio LDAP. Conecta a um servidor LDAP. Retorna o nmero de entradas na pesquisa. Exclui um dn partir de um diretrio no LDAP. Converte um dn especificado para um nome de user-friendly. Divide um dn em suas partes componentes. Recupera o primeiro atributo na entrada. Obtm o ID de resultado para a entrada especificada. Libera o resultado especificado da memria. Obtm os atributos para a entrada especificada. Obtm o dn da entrada. Retorna uma matriz de entradas. Obtm uma matriz de valores para os atributos especificados. Realiza uma pesquisa LDAP_SCOPE_ONELEVEL com o especificado filtros. Adiciona um atributo para o link especificado. Substitui um atributo no link especificado. Modifica a entrada especificada. Obtm o prximo atributo no conjunto de resultados. Obtm a prxima entrada para o conjunto de resultados especificado. Executa uma pesquisa usando LDAP_SCOPE_BASE os filtros especificados. Realiza uma pesquisa LDAP_SCOPE_SUBTREE com os filtros especificados. Desassocia o diretrio LDAP especificado. ldap_delete (lnk_id, dn) Boolean ldap_dn2ufn (dn) Integer ldap_explode_dn (dn, [atributos]) Array ldap_first_attrbitute (parmetros link_id, String ber_id, resultado) ldap_first_entry (parmetros link_id, resultado) Integer ldap_free_result (resultado) Boolean ldap_get_attributes (parmetros link_id, Array resultado) ldap_get_dn String (parmetros link_id, resultado) ldap_get_entries Array (parmetros link_id, resultado) ldap_get_values resultado (parmetros link_id, Array, atributos)

ldap_list (parmetros link_id, base_dn, Integer filtro, [atributos]) LDAP_MOD_ADD (parmetros link_id, dn, entrada) Boolean LDAP_MOD_REPLACE (parmetros link_id, dn, Boolean entrada) ldap_modify (parmetros link_id, dn, entrada) Boolean ldap_next_attribute (parmetros link_id, String ber_id, resultado) ldap_next_entry (parmetros link_id, resultado) Integer ldap_read (parmetros link_id, base_dn, Integer filtro, [atributos]) ldap_search (parmetros link_id, base_dn, Integer filtro, [atributos]) ldap_unbind (parmetros link_id) Boolean 322 Apndice B PHP Referncia da Linguagem Funo e-mail Descrio Retorna a funo mail (para, assunto, mensagem, Boolean Envia um e-mail do administrador do PHP para o especificado e-mail [Cabealhos]) conta. Opes de PHP Descrio Retorna a funo error_log (mensagem, message_type, [Dest], [cabealhos]) error_reporting ([nvel]) extension_loaded (extension_name) get_cfg_var (var) get_current_user () get_magic_quotes_gpc () get_magic_quotes_runtime () getenv (var) getlastmod () getmyinode () getmypid () getmyuid () getrusage ([que]) phpinfo () phpversion () putenv (valor) Integer Envia uma mensagem de erro. Integer Define ou retorna o nvel atual de relatrios de erro. Retornam true se a extenso especificada carregado, caso contrrio, retorna false. String Retorna o valor da configurao do PHP especificada. String Retorna o valor do usurio atual. Longo Retorna as configuraes atuais para magic quotes. Longo Retorna as configuraes atuais para magic quotes. String Retorna o valor de uma varivel de ambiente especfico. Retorna o tempo inteiro quando a pgina atual foi modificada pela ltima vez. Retorna o inteiro inode do script atual em execuo.

Integer Retorna o ID do processo que o PHP est sendo executado. Integer Retorna o ID de usurio para o dono do script PHP atual. Array Retorna o uso de recursos atual. Sadas inteiro todas as informaes de configurao sobre a configurao do PHP. String Retorna a verso atual do PHP que voc est executando. void Define o valor da varivel de ambiente. set_magic_quotes_runtime (ajuste) Boolean Ativa ou desativa magic quotes. set_time_limit void (seonds) Define o tempo limite para scripts PHP. Funes diversas Descrio Retorna a funo connection_aborted () Integer Indica que uma conexo foi abortada por um usurio. connection_status () Integer Obtm o status da conexo. Boolean connection_timeout () Indica que o script foi excedido. die (mensagem) void Sadas a mensagem e mata a execuo do script. eval (string) Mixed Avalia a string como cdigo PHP. vazio exit () Interrompe a execuo do script atual. function_exists (nome) Boolean Verifica para ver se ou no uma funo existe. ignore_user_abort ([definio]) Define Integer ou retorna se desconectar um cliente ir parar a execuo de um script. iptcparse Array (iptcblock) Analisa o iptcblock em um array. vazamento (bytes) void vazamentos a quantidade especificada de memria. pack (formato, [args]) String Packs o argumento em uma string binria. Referncia da Linguagem PHP 323 Descrio Retorna a funo vazio register_shutdown_ Especifica uma funo para executar quando o script atual termina. function (funo) serialize (dados) String vazio do sono (segundos) uniqid (prefixo) String unserialize (dados) Mixed usleep void (microssegundos) Serializa os dados em uma string. Pausa a execuo do script para a quantidade especificada de segundos. Gera um ID nico baseado no tempo atual. Deserializa a cadeia. Interrompe o script para o valor especificado de microssegundos. Funes de rede Descrio Retorna a funo checkdnsrr (host, [tipo]) CloseLog () debugger_off () debugger_on (servidor) fsockopen (porto, hostname, [Error_num], [error_str], [Tempo])

gethostbyaddr (ip_address) gethostbyname (host) gethostbynamel (hostname) getmxrr (mxhost, hostname, [Peso]) openlog (identidade, opo, instalao) pfsockopen (porto, hostname, [Error_num], [eror_str], [Tempo]) Pesquisas inteiro arquivos DNS para o host e tipo especfico de registro. Fecha o fluxo inteiro aberto para o registro atual. Integer Desativa o depurador remoto. Inteiro permite que o depurador remoto. Integer Abre uma conexo de soquete para o host e porta especificados. String Retorna o nome do host. String Retorna o endereo IP do host. Array Retorna uma matriz de endereos IP que o host especfico contm. Integer Retorna o registro MX para o nome de host especfico de DNS. Integer Abre um fluxo para o arquivo de log. Integer Abre uma conexo de soquete persistente para o host e porta especificados. stream_set_blocking (modo de fluxo) Bool Define o modo de bloqueio ou um soquete especfico. syslog (mensagem de prioridade), Integer Grava uma mensagem para o fluxo de abrir arquivo de log. Funes NIS Descrio Retorna a funo yp_err_string (errorcode) yp_errno () yp_first (domnio, mapa) yp_get_default_domain () yp_master (domnio, mapa) yp_match (domnio, mapa, key) yp_next (domnio, mapa, key) yp_order (domnio, mapa) String Obtm o ltimo erro que ocorreu. Integer Retorna o cdigo de erro para o ltimo erro que ocorreu. Array Obtm o par chave / valor a partir do primeiro mapa. Retorna o inteiro mquina padro do nome de domnio NIS. String Obtm o par chave / valor para o NIS mestre do domnio. String Obtm o valor da chave especificada. Cadeia Recupera o par chave / valor prximo do ponteiro. Integer Retorna o nmero de ordem do mapa. 324 Apndice B PHP Referncia da Linguagem Perl-Compatible Regular Expression Funes Descrio Retorna a funo preg_grep (entrada padro) preg_match (padro de entrada, [Jogos])

preg_match_all (padro de entrada, fsforos, [ordem]) preg_quote (string) preg_replace (padro, string de substituio) Matriz Nmero inteiro Nmero inteiro Corda Misturado Retorna uma matriz dos padres de correspondncia a partir da entrada. Executa uma expresso regular na entrada. Corresponde a todos os padres na entrada. Escapa os caracteres especiais de expresso. Substitui a string com substituio, se corresponde ao padro. Regulares funcitons Expresso Descrio Retorna a funo ereg (padro, string, [regs]) ereg_replace (padro, string de substituio) eregi (padro, string, [regs]) eregi_replace (padro, string de substituio) split (padro, string, [limite]) sql_regcase (string) Boolean Corda Boolean Corda Matriz Corda Pesquisas seqncia de caracteres especificada para cordas que correspondem a regularidade padro de expresso. Substitui a string com substituio, se corresponde ao padro. Realiza uma busca case-insensitive na corda para o regular padro de expresso. Substitui qualquer cadeia com substituio, se corresponde ao padro, insensvel a caso. Divide a string em uma matriz usando a expresso regular especificada padro. Retorna uma expresso regular a partir de uma combinao case-insensitive do seqncia de caracteres especificada. Semforo e Funes de Memria Compartilhada Descrio Retorna a funo sem_acquire (sem_id) Boolean adquire um semforo. sem_get (key, [max_acquire], [perm]) Retorna um Integer ID semforo.

sem_release (sem_id) Boolean Releases um semforo especfico da memria. shm_attach (key, [memsize], [perm]) Integer Cria um segmento de memria compartilhada. shm_detach (shm_id) Boolean Desconecta o segmento de memria compartilhada. shm_get_var (shm_id, variable_key) Retorna Mixed uma varivel a partir da memria compartilhada. shm_put_var (shm_id, key, value) Integer Coloca uma varivel no segmento de memria compartilhada. shm_remove (shm_id) Exclui Integer um segmento de memria compartilhada. shm_remove_var (shm_id, key) Integer Remove uma varivel do segmento de memria compartilhada. Funes para Sesso Descrio Retorna a funo session_decode (string) Boolean Decodifica dados da sesso. session_destroy () Boolean Encerra a sesso atual. session_encode () String Codifica os dados da sesso. Referncia da Linguagem PHP 325 Descrio Retorna a funo session_id ([sid]) Define String ou recebe o id da sesso atual. Verifica session_is_registered (var) Boolean se a varivel especificada est registrado na sesso atual. session_module_name ([mdulo]) os conjuntos de cordas ou obtm o nome do mdulo da sesso atual. session_name ([nome]) os conjuntos de cordas ou obtm o nome da sesso atual. session_register (var) registra a varivel Boolean especificado na sesso atual. session_save_path ([caminho]) String Define ou obtm o caminho atual onde as sesses esto sendo salvos. session_start () Boolean Inicia uma sesso. session_unregister (var) Boolean Cancela o registro de uma varivel com a sesso atual. Funes SNMP Descrio Retorna a funo snmp_get_quick_print () snmp_set_quick_print (Boolean) snmpget (comunidade, hostname, object_id, [tempo], [tentativas]) snmpset (comunidade, hostname, object_id, valor, tipo, [Tempo], [tentativas]) snmpwalk (comunidade, hostname, object_id, [tempo], [tentativas]) snmpwalkoid (comunidade, hostname, object_id [tempo], [tentativas]) Boolean vazio Corda Boolean Matriz

Matriz Retorna o valor da configurao quick_print. Define o valor da configurao quick_print. Obtm um objeto SNMP. Define o objeto SNMP. Obtm uma matriz de todos os objetos SNMP. Obtm uma matriz de IDs de objetos e seus correspondentes valores. Funes para String Descrio Retorna a funo addslashes (string) bin2hex (string) chop (string) chr (ascii) chunk_split string ([chunk_len], [End]) convert_cyr_string (string, de, para) crypt (string, [sal]) echo (string) explode (string separador,) flush () get_meta_tags (filename, [Include_path]) htmlentities (string) htmlspecialchars (string) implode (delimitador, array) Corda Corda Corda Corda Corda Corda Corda vazio Matriz vazio Matriz Corda Corda Corda Adiciona barras de escape para a cadeia. Converte a seqncia binria em uma string hexadecimal. Remove espaos em branco. Retorna o caractere para o cdigo ASCII. Divide a string em pequenos pedaos, inserindo o final em cada personagem chunk_len especificado. Converte a seqncia de um conjunto cirlico para outro. DES-criptografa a string usando o valor sal. Sadas de uma string para a tela.

Divide a string em um array. Libera o buffer de sada. Obtm uma matriz de todas as tags META do arquivo especificado. Converte a string em uma entidade HTML. Converte todos os caracteres HTML especiais na string em um HTML entitity. Faz exatamente o oposto da funo de explodir. Ele se junta ao matriz em uma nica string usando o delimitador especificado. 326 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo join (delimitador, array) ltrim (string) md5 (string) nl2br (string) ord (string) parse_str (string) print (string) printf (string, [arg]) Corda Corda Corda Corda int vazio Nmero inteiro vazio Junta-se a matriz em uma nica string usando o delimitador especificado. Retira o espao em branco do incio da string. Calcula o hash MD5 da seqncia especificada. Insere a tag <BR> antes de toda a linha de quebra na seqncia. Retorna o valor ASCII especificado da primeira letra do string. Analisa a string em variveis como se fosse uma seqncia de consulta. Imprime a seqncia especificada. Sadas de uma string formatada. Converte uma string quoted printable para uma string de 8 bits. Escapa os caracteres meta na cadeia. URL-encoded Decodifica uma string. Codifica uma string para uma string URL-codificado. Define as informaes de localizao de funes na categoria especificada. Calcula a similaridade entre string1 e string2. Calcula a chave soundex para a cadeia. Retorna uma string formatada. Substitui todas as ocorrncias do padro com a substituio na string. Encontra a primeira ocorrncia de string2 em string1. Compara string1 string2 contra. Retorna o nmero de caracteres no incio de string1that no coincidir com o incio das personagens em string2. Tiras todas as tags HTML e PHP a partir da seqncia de caracteres especificada. Remove todas as barras de escape caracter da cadeia.

Retorna o comprimento em caracteres do string. Encontra a primeira ocorrncia de string2 em string1. Retorna a seqncia especificada na ordem inversa. Localiza a ltima ocorrncia de string2 em string1. Encontra a primeira ocorrncia de string2 em string1. Tokeniza string1 em segmentos separados por string2. Converte todos os caracteres na string para minsculas. Converte todos os caracteres na string para maiscula. Substitui todas as ocorrncias de partir em cadeia com a. Retorna os caracteres na string a partir do ponto inicial especificado. Converte o primeiro caractere da string para maisculas. Converte o primeiro caractere de cada palavra em maisculas. quoted_printable_decode (string) Quotemeta (string) rawurldecode (string) rawurlencode (string) setlocale (categoria, local) similar_text (string1, string2, [Por cento]) soundex (string) sprintf (formato, [args]) str_replace (padro de substituio, Corda Corda Corda Corda Corda int Corda Corda Corda string) strchr (string1, string2) strcmp (string1, string2) strcpsn (string1, string2) strip_tags (string) stripslashes (string) strlen (string) strpos (stirng1, string2) strrev (string) strrpos (string1, string2) strstr (string1, string2) strtok (sring1, string2) strtolower (string) strtoupper (string) strtr (string, de, para) Corda int int Corda

Corda int int Corda int Corda Corda Corda Corda Corda substring (incio string, [length]) String ucfirst String (string) ucwords String (string) Funes URL Descrio Retorna a funo base64_decode String (string) base64_encode (string) String parse_url Array (URL) Decodifica o base64 seqncia de caracteres especificada. Retorna uma string base64 codificado. Quebra a URL especificada em um array. Referncia da Linguagem PHP 327 Descrio Retorna a funo urldecode String (string) da corda Decodifica uma URL codificada. urlencode (string) String URL codifica uma string. Funes varivel Descrio Retorna a funo doubleval (var) Converte a varivel Integer para um casal. Verifica vazia (var) Boolean para ver se a varivel tem um valor diferente de zero. gettype String (var) Obtm o tipo de dados da varivel. intval (var, [base]) Integer Obtm o valor da varivel usando a base especificada. Verifica is_array (var) Boolean para ver se a varivel um array. is_double Cheques (var) Boolean para ver se a varivel um duplo. Verifica is_float (var) Boolean para ver se a varivel um float. Verifica is_int (var) Boolean para ver se a varivel um int. Verifica is_long (var) Boolean para ver se a varivel um longa. Verifica is_object (var) Boolean para ver se a varivel um objeto. is_real (var) Boolean Verifica se a varivel um nmero real. Verifica is_string (var) Boolean para ver se a varivel uma string. isset (var) Boolean Verifica se a varivel foi definida ainda. settype (var, tipo) Boolean Define a varivel para o tipo especificado. strval String (var) Retorna o valor string da varivel. unset void (var) unsets uma varivel definida. Funes da WDDX Descrio Retorna a funo wddx_add_vars (packet_id, vars) Boolean Serializa as variveis em seguida, adiciona-los ao packet_id especificado. wddx_deserialize (pacote) Mixed Desserializa o pacote especificado.

wddx_packet_end String (packet_id) Termina o pacote especificado. wddx_packet_start ([comentrio]) Integer Inicia um novo pacote. wddx_serialize_value (var, String Serializa um nico valor para o pacote. [Comentrio]) wddx_serialize_vars String (vars) Serializa uma matriz de variveis para o pacote. Funes de compresso Descrio Retorna a funo gzclose (gz) Integer Fecha um fluxo de arquivo gz. gzeof Integer (gz) Verifica se voc est no final do fluxo de arquivo gz. Array (filename) gzfile L todo o contedo de um arquivo gz para uma matriz. gzgetc String (gz) Obtm um caractere do fluxo de arquivo gz. gzgets String (comprimento gz) Obtm uma linha do fluxo de arquivo gz. gzgetss String (comprimento gz) Obtm uma linha do fluxo de arquivo gz stripping de HTML. 328 Apndice B PHP Referncia da Linguagem Descrio Retorna a funo gzopen (filename, mode) gzpassthru (gz) gzputs (gz string, [length]) gzread (comprimento gz) gzrewind (gz) gzseek (gz, offset) gztell (gz) readgzfile (filename) gzwrite (gz string, [length]) Nmero inteiro Nmero inteiro Nmero inteiro Corda Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Abre o arquivo gz especificado. Sadas do arquivo gz do ponteiro de arquivo atual. Escreve a string para o stream de arquivo gz. L a quantidade especificada de bytes do fluxo de arquivo gz. Redefine o ponteiro do arquivo para o incio do fluxo do arquivo gz. Define o ponteiro do arquivo para o deslocamento no fluxo de arquivo gz. Obtm a posio atual do ponteiro de arquivo no fluxo do arquivo gz. L o arquivo e gera o contedo. Escreve a string para o stream de arquivo gz. Funes para analisar XML Descrio Retorna a funo utf8_decode String (string) utf8_encode (string) String xml_error_string (cdigo) String xml_get_current_byte_index (parser) Integer

xml_get_current_column_ Integer nmero (analisador) xml_get_current_line_number (parser) Integer xml_get_error_code (analisador) Integer xml_parse parser (, dados Boolean [Is_final]) xml_parser_create ([codificao]) Integer xml_parser_free (parser) Boolean xml_parser_get_option analisador (Mixed, opo) xml_parser_set_option parser (, Boolean valor da opo) xml_set_character_data_handler Boolean (Manipulador parser) xml_set_default_handler parser (, Boolean manipulador) xml_set_element_handler parser (, Boolean start_element_handler, end_element_handler) xml_set_external_entity_ref_ Boolean handler (manipulador parser) xml_set_notation_decl_ Boolean handler (manipulador parser) xml_set_processing_instruction_ Boolean handler (manipulador parser) xml_set_unparsed_entity_decl_ Boolean handler (manipulador parser) Converte a string UTF-8 para um string ISO-8859-1. Converte um string ISO-8859-1 para uma string UTF-8. Retorna o erro para o cdigo especificado. Retorna o ndice do byte atual. Retorna o nmero da coluna atual o analisador est ligado. Retorna o nmero da linha atual o analisador est ligado. Retorna o ltimo cdigo de erro que ocorreu. Analisa os dados. Cria um parser XML. Destri o parser XML. Obtm o valor da opo especificada. Define o valor da opo especificada Registra um carter manipulador de dados. Define o manipulador padro. Define o manipulador elemento. Define o manipulador de referncia externa. Define o manipulador de declarao de notao. Define o manipulador de instruo de processamento. Define o manipulador de declarao no analisada entidade. apndice C Suporte de depuraoAplicaes

Eu n deste apndice, voc vai aprender como depurar suas aplicaes PHP para descobrir erros, o que muito importante. Eu s chamar esta seo de suporte, porque voc pode ter dificuldade em obter alguns exemplos de trabalhar se a sua verso PHP diferente ou se voc usa uma configurao especial. Este anexo vai lhe dar as habilidades necessrias para corrigir os erros medida que surgir. Com a prtica, de depurao vai se tornar uma segunda natureza para voc. Voc pode quebrar erros em trs grandes categorias. Sintaxe / compilao erros Semntica / runtime erros Os erros lgicos Erros de sintaxe Erros de sintaxe so levantadas pelo analisador quando h cdigo incorreto. Estes so os mais fceis erros para rastrear porque o analisador informa qual linha o erro ocorreu. Tomar a seguinte linha de cdigo, por exemplo: $ X = $ ponto ["x"; Isso ir produzir um erro de interpretao que se parece com a Figura C.1. 329 330 Apndice C Suporte Debugging ApplicationsFigura C.1 Um erro de interpretao. O erro diz que o analisador encontrou um personagem inesperado, e diz-lhe o carter que o analisador estava esperando. Ele ainda diz que linha o erro ocorreu. O correo para esse erro bastante simples: $ X = $ ponto ["x"]; Isso simples, mas que se voc fez algo parecido com isto: <? Php for ($ i = 0; $ i <$ count; $ i + +) ?> <b> item de menu </ b> <? Php echo ($ i); } ?> Isto produz o erro mostrado na Figura C.2. Figura C.2 Outro erro de interpretao. Apoio Debugging Applications-331 O erro est apontando para a faixa no final do cdigo. Mas esta braadeira deve estar l, certo? Portanto, deve haver um erro em algum lugar antes da linha 7. Com certeza, o incio cinta foi perdida aps o incio do loop for. Uma maneira de corrigir este erro adicionar o cinta. Outra forma perfeitamente legtima para corrigir este erro remover a chave final totalmente.

Lembre-se, um loop for no tem que ter chaves se houver apenas uma linha de cdigo para executar. Erros de semntica Erros semnticos so um pouco mais difcil de rastrear do que erros de sintaxe. Os erros podem ser um pouco vaga mesmo que eles do nmeros de linha. D uma olhada no seguinte exemplo: <? Php socket_create ($ socket, 'localhost', 'tcp'); ?> Isso gera o erro mostrado na figura C.3. Esse erro diz que o segundo parmetro suposto ser um longo, mas uma seqncia foi dada. Mas o segundo parmetro perfeitamente legtimo. o terceiro parmetro que incorreto. Deve ler-se: socket_create ($ socket, "localhost", SOL_TCP); Veja o que quero dizer quando digo que os erros so um pouco vagos? Esses erros so ainda bastante fcil de rastrear. Normalmente, quando voc olha para a linha de cdigo especificado por um momento, a corrigir amanhece em voc. Se a correo no vem para voc, ento v para www.php.net e digite o nome da funo na caixa de pesquisa. Isso far com que a documentao para o particular funo que voc possa determinar onde voc errou. Figura C.3 Um erro de semntica. 332 Apndice C Suporte Debugging ApplicationsErros de lgica Das trs categorias gerais de erros, erros de lgica so os mais difceis de rastrear. O razo para isso porque o cdigo est sintaticamente correta e executado. O cdigo s no executados conforme o esperado. A parte mais frustrante de erros de lgica que o cdigo que voc escreveu pode olha como ele est trabalhando, mas ento algo inesperado ocorre mais tarde para baixo da linha. D uma rpido olhar para o exemplo de cdigo a seguir e veja se voc consegue identificar o erro de lgica. <? Php $ SomeArray = array ("Faca", "Gun", "Sade", "The Shield"); for ($ loop = 0; $ lao <count ($ someArray); $ lao + +) { if ($ someArray [$ loop] == "Sade") { unset ($ someArray [$ loop]); } echo ("$ loop = $ someArray [$ loop] <br>"); } ?>

Voc achou o erro? D uma olhada na Figura C.4 para ver o resultado deste exemplo e ver se voc pode descobrir o que est acontecendo. Note como a sada pra no terceiro elemento na matriz. No deve dizer a ltima linha 3 = Shield? O erro de lgica aqui que voc est iterando o nmero de elementos na matriz. Uma vez que voc acertar o "Sade" elemento que voc remover o ndice na matriz. Isto resulta na contagem da matriz que est sendo diminuda por um. Assim, quando o lao comea a prximo conjunto deve imprimir 3 = Shield. O ndice agora maior do que a contagem da matriz. Figura C.4 Um erro de lgica. Apoio Debugging Applications-333 Note que no h erros nesta pgina. Como eu mencionei, erros de lgica pode ser difcil rastrear quando algo no funcionar como esperado. H realmente uma quarta categoria, os erros ambientais, mas voc no tem absolutamente nenhum controle sobre estes. Um erro ambiental quando h um bug inerentes ao programa voc est usando. Se voc tiver um erro untraceable, as chances so bastante altas que um erro ambiental. No entanto, voc no pode apenas giz at difcil de encontrar erros de lgica como ambientais erros. Se voc acredita ter executado em um erro ambiental ir para a Web site e d uma olhada nos fruns e listas de bug conhecido. Se voc encontrar algo relacionado para o seu problema, ento no mais provvel um reparo fcil para ele. Normalmente, a correo vem na forma de uma atualizao ou uma configurao. PHP e Relatrio de erros PHP capaz de quatro nveis de relatrios de erros. PHP relatrios erros fatais, erros de interpretao, advertncias e avisos. Voc pode definir o seu nvel desejado de relatrios de erros no arquivo php.ini sob o cabealho erros. Ou voc pode definir o nvel de relatrios de erros em tempo real para o seu aplicao. Para definir o nvel de relatrio de erros em tempo real voc pode usar a seguinte funo: int error_reporting (int level); A funo error_reporting () tem um nmero inteiro de o nvel de informao que voc gostaria. Cada um dos quatro nveis de erros tem um valor inteiro. 1 - Erros fatais 2 - Advertncias 4 - Erros Parser 8 - Avisos Ento, para descobrir o nvel de relatrio de erros que voc gostaria, voc simplesmente adicionar os valores

juntos. Este muito parecido com as permisses em uma mquina UNIX. Por exemplo, se voc gostaria de relatar somente erros fatais e avisos que voc faria o seguinte: error_reporting (3); Veja como isso funciona? D uma olhada em mais um. Digamos que voc queria relatrio avisos apenas, avisos e erros fatais. Voc usaria a seguinte linha: error_reporting (11); Da mesma forma, se voc forneceu 0 como o valor para o nvel de erros, ento no seria relatados. Esta uma funo til para usar. Enquanto voc estiver desenvolvendo um aplicativo que voc pode ligar seus erros para que voc possa depurar problemas. Mas quando voc colocar algo em produo voc poderia simplesmente definir o nvel de relatrio de erros a 0 e no tenho medo que um usurio ver um grande erro desagradvel no meio de uma pgina. 334 Apndice C Suporte Debugging ApplicationsTratamento de erros Tratamento de erros em PHP bastante simples. Na maioria das vezes uma funo retornar 0 se falhar por uma razo ou outra, de modo a travar este voc sempre pode usar uma instruo if. <? Php if (! someFunction ($ valor)) { echo ("Ocorreu um erro"); retorno; } ?> Isto permite-lhe fazer o que quiser quando ocorre um erro. Voc pode apenas permitir que os usurios sabe alguma coisa deu errado, ou voc poderia at mesmo ir to longe a ponto de lev-los a uma detalhada pgina de erro que lhes permite e-mail do administrador com uma notificao do erro. No entanto, existem algumas funes que ir gerar um erro se ele falhar. Se este for o caso voc pode suprimir o erro usando o smbolo (@). <? Php if (! @ mysql_connect ($ db, $ username, $ password)) { echo ("Ocorreu um erro ao tentar abrir o banco de dados"); retorno; } ?> Isso ir suprimir a mensagem de erro do PHP, mas a funo ainda retornar 0, permitindo que voc sabe que ele falhou. Estar ciente que se voc suprimir um erro fatal nenhuma mensagem ser exibida

mas o processamento do script ser interrompido mortos em suas faixas. Ento, eu recomendo execuo seu cdigo sem a supresso quando o teste para ver onde ocorrem erros e adicionando o supresso em quando terminar a depurao do seu cdigo. Se voc suprimir as mensagens de erro que voc sempre pode recuperar a mensagem de erro completa atravs do $ Php_errormsg varivel. Esta varivel sempre conter o ltimo erro que ocorreu no Interpretador PHP. Ao escrever este livro eu tive um erro que ocorreu ao tentar escrever para um arquivo db que eu criei e eu tinha erros desligado. Ento, toda vez que eu executou o script seria nada aparecem na tela eo arquivo no foi jamais criado. Levei alguns minutos para perceber o que estava acontecendo. Quando finalmente consegui, eu tenho uma mensagem de erro que parecia Figura C.5. Primeiro pensei comigo mesmo: "Que diabos isso, no faz sentido em tudo." Mesmo que esta erro foi bastante enigmtico, ele me deu uma direo. Uma vez que estava tendo um problema com o linha dba_open (), eu pensei que no deve ter includo as extenses db. Quando eu chequei a Apoio Debugging Applications-335 Figura C.5 mensagem de erro. arquivo php.ini eu descobri que eu tinha includo as extenses db. Ento, depois de vrias horas de Pesquisando nos Fruns, corri a funo phpinfo (). Quando eu fiz isso eu descobri que o verso do PHP que eu estava correndo no suportam o formato db2, mas apoiou a db3 formato. Uma vez eu fiz isso tudo simples mudana funcionou perfeitamente. Ele s vai para mostram que usando esses erros no podem levar voc a uma correo imediata, mas vai pelo menos um ponto voc na direo certa. Problemas de aplicao e instalao Ao instalar o PHP ou um dos outros aplicativos includos no CD voc pode executar em alguma configurao ou problemas de configurao. Eu no posso cobrir todas as questes neste livro, mas posso recomendo apenas ir ao site do fabricante na Web e olhando para sua documentao. Estas empresas tm feito um grande trabalho de detalhamento muito comum que problemas ocorrer durante a instalao e configurao. Se o problema no est na documentao disponvel, h sempre suporte ao cliente.

A nica coisa que eu vou incluir neste livro o conjunto de perguntas frequentes listados no www.php.net. Eu imagino que estes sero os problemas mais comuns que voc vai correr em e quero poupar o tempo de tentar encontrar essas respostas em todos os seus prprios. 1. Eu peguei a ltima verso do PHP usando o servio de CVS annimo, mas no h configure script! Voc deve ter o pacote autoconf GNU instalado para que voc possa gerar o configurar script de configure.in. Basta executar. Buildconf / no diretrio de nvel superior depois de obter os fontes do servidor CVS. (Alm disso, a menos que voc execute configure com o - enable-mantenedor modo de opo, o script configure no ir receber automaticamente 336 Apndice C Suporte Debugging Applicationsreconstruda quando o arquivo configure.in atualizado, ento voc deve certificar-se de fazer isso manualmente quando voc percebe configure.in mudou. Um sintoma disso encontrar coisas como a varivel @ @ em seu Makefile aps configurar ou config.status executado.) 2. Estou tendo problemas para configurar PHP para trabalhar com Apache. Ele diz que no pode encontrar httpd.h, mas exatamente onde eu disse que ! Voc precisa dizer ao script configure / setup a localizao do nvel superior do seu Apache rvore de cdigo fonte. Isto significa que voc quiser especificar - withapache = / caminho / para / apache e no - with-apache = / caminho / para / apache / src. 3. Ao configurar PHP, voc se deparar com um erro semelhante ao seguinte: 3. Ao configurar PHP, voc se deparar com um erro semelhante ao seguinte: verificao de arquivos raiz lex sada ... . / Configure: lex: comando no encontrado configure: error: no consegue encontrar a sada de lex; desistir No deixe de ler as instrues de instalao cuidadosamente e note que voc precisa ambos Flex e Bison instalado para compilar o PHP. Dependendo da configurao, voc ir instalar Bison e Flex a partir de qualquer fonte ou um pacote, como um RPM. 4. Quando eu tento iniciar o Apache, recebo a mensagem o seguinte: fatal: erro de realocao: arquivo / path/to/libphp4.so: ap_block_alarms smbolo: o smbolo de referncia no encontrada Este erro normalmente aparece quando voc compilar o programa principal Apache como um DSO biblioteca para uso compartilhado. Tente reconfigurar o Apache, certificando-se de utilizar pelo menos o sinalizadores a seguir:

-Enable-shared = max-enable-regra = SHARED_CORE Para mais informaes, leia o top-level arquivo de instalao do Apache. 5. Quando eu executo o configure, ele diz que no consegue encontrar os arquivos de incluso ou biblioteca de GD, gdbm, ou algum outro pacote! Voc pode fazer o olhar script configure para arquivos de cabealho e bibliotecas em no-padro locais, especificando flags adicionais para passar para o pr-processador C e linker, tais como: CPPFLAGS =- I / caminho / para / include LDFLAGS =- L / caminho / para / biblioteca. / Configure Se voc estiver usando uma variante csh para o seu login shell (por qu?), Seria: env CPPFLAGS =- I / caminho / para / include LDFLAGS =- L / caminho / para / biblioteca. / configure 6. Quando se est compilando o arquivo de idioma parser.tab.c, d-me erros que dizem yytname no declarado. Voc precisa atualizar sua verso do Bison. Voc pode encontrar a verso mais recente em www.gnu.org / software / bison / bison.html. Apoio Debugging Applications-337 7. Quando eu executo o make, que parece estar a correr bem, mas depois falha ao tentar vincular a aplicao final, reclamando que no consegue encontrar alguns arquivos. Algumas verses antigas de fazer no colocar corretamente as verses compiladas dos arquivos em as funes de diretrio em que o mesmo diretrio. Tente executar funes cp *. o e ento re-executar o make para ver se isso ajuda. Se isso acontecer, voc realmente deve atualizar para uma verso recente do GNU make. 8. Quando liga PHP, ele reclama de uma srie de referncias indefinidas. D uma olhada na linha de ligao e certifique-se que todas as bibliotecas apropriadas so sendo includo no final. Mais comuns que voc pde ter faltado so "-ldl" e todas as bibliotecas necessrias para qualquer suporte de banco de dados que voc incluiu. Se voc est ligando com o Apache 1.2.x, voc no se esquea de adicionar o apropriado informaes para a linha EXTRA_LIBS do arquivo de configurao e re-executar novamente Roteiro do apache configurar? Veja o arquivo de instalao que vem com a distribuio de mais informaes. Algumas pessoas tambm relataram que eles tinham que acrescentar "-ldl" imediatamente a seguir libphp4.a quando a vinculao com Apache. 9. Eu no consigo descobrir como compilar o PHP com Apache 1.3. Isso realmente muito fcil. Siga estes passos cuidadosamente:

1. Pegar as ltimas Apache 1.3 distribuio de www.apache.org/dist/httpd/. 2. Ungzip e descompacte-o em algum lugar, por exemplo / usr/local/src/apache1.3. 3. Compile PHP rodando primeiro. / Configure - with-apache = / <caminho> / apache-1.3 (Substituto <caminho> com o caminho real para o seu diretrio Apache-1.3). 4. Digite make seguido por make install para compilar o PHP e copiar os arquivos necessrios para a rvore de distribuio Apache. 5. Altere os diretrios para a sua / <path> / apache-1.3/src diretrio e editar o arquivo de configurao. Adicione ao arquivo: modules/php4/libphp4.a AddModule. 6. Tipo:. / Configure seguido por fazer. Agora voc deve ter um httpd PHP binrio! Nota Voc tambm pode usar o Apache novo script. / Configure. Veja as instrues no README.configure arquivo, que parte da sua distribuio Apache. Tambm ter um olhar para o arquivo de instalao na distribuio PHP. 10. Eu segui todos os passos para instalar a verso mdulo do Apache em UNIX e meus scripts PHP aparece no meu browser ou eu estou sendo solicitado para salvar o arquivo. Isto significa que o mdulo PHP no est recebendo invocado por algum motivo. Trs coisas para verificar antes de pedir mais ajuda: 338 Apndice C Suporte Debugging ApplicationsCertifique-se que o binrio httpd voc est executando o binrio httpd reais nova voc acabou de construir. Para fazer isso, tente executar: / caminho / para / binary / httpd-l. Se voc no v mod_php4.c listado, ento voc no est executando o binrio do direito. Encontrar e instalar o binrio correto. 1. Certifique-se de ter adicionado o tipo MIME correto para um de seus Apache. Conf arquivos. Ele deve ser:. Application/x-httpd-php3 AddType php3 (para PHP 3) ou AddType application / x-httpd-php. php (para PHP 4) 2. Tambm certifique-se que esta linha AddType no est escondido dentro de um ou <Virtualhost> Bloco <Directory> que a impediria de aplicar para o local de sua script de teste. 3. Finalmente, a localizao padro dos arquivos de configurao do Apache mudou entre Apache 1.2 e Apache 1.3. Voc deve verificar para se certificar de que a configurao arquivo que voc est adicionando a linha AddType para que realmente est sendo lido. Voc pode colocar um

erro de sintaxe bvio em seu arquivo httpd.conf ou alguma outra mudana bvio que vai dizer se o arquivo est sendo lido corretamente. 11. Ele diz para usar - activate-module = src/modules/php4/libphp4.a, mas esse arquivo no existir, ento eu mudei para - activate-module = src/modules/php4/libmodphp4.a e ele no funciona? O que est acontecendo? Note que o arquivo libphp4.a no suposto existir. O processo do Apache ir cri-lo! 12. Quando tento compilar o Apache com o PHP como um mdulo esttico usando - activatemodule = src/modules/php4/libphp4.a ele me diz que meu compilador no ANSIcompliant. Esta uma mensagem de erro do Apache enganosa que foi corrigido no mais recente verses. 13. Quando tento compilar o PHP com - with-apxs Recebo mensagens de erro estranho. H trs coisas para verificar aqui. Primeiro, por alguma razo quando Apache constri o apxs script Perl, que s vezes acaba sendo construdo sem o compilador adequado e bandeiras variveis. Encontre seu script apxs (tente o comando que apxs). s vezes, encontrado em / usr / local / apache / bin / apxs ou / usr / sbin / apxs. Abri-lo e verificar se h linhas semelhantes a estas: my $ CFG_CFLAGS_SHLIB = ""; my $ CFG_LD_SHLIB = ""; my $ CFG_LDFLAGS_SHLIB = ""; # Substitudo via Makefile.tmpl # Substitudo via Makefile.tmpl # Substitudo via Makefile.tmpl Se isso que voc v, voc encontrou o seu problema. Podem conter apenas espaos ou outros valores incorretos, como o 'q ()'. Alterar essas linhas para dizer: Apoio Debugging Applications-339 my $ CFG_CFLAGS_SHLIB = '-fpic DSHARED_MODULE "; # substitudo via Makefile.tmpl my $ CFG_LD_SHLIB = 'gcc'; # substitudo via Makefile.tmpl my $ CFG_LDFLAGS_SHLIB = q (compartilhado); # substitudo via Makefile.tmpl O segundo problema possvel s deve ser um problema no Red Hat 6.1 e 6.2. O apxs roteiro navios Red Hat est quebrado. Procure esta linha: my $ CFG_LIBEXECDIR = "mdulos"; # substitudo via APACI instalar Se voc ver a linha acima, mude para isto: my $ CFG_LIBEXECDIR = '/ usr / lib / apache'; # substitudo via APACI instalar ltima, se voc reconfigurar / reinstalar o Apache, adicionar um make clean para o processo depois . / Configure e antes de fazer.

14. Durante o make, eu recebo erros no microtime, e um monte de coisas RUSAGE_. Durante a parte da instalao fazer se voc encontrar problemas que se parecem semelhante a esta: microtime.c: Em funo php_if_getrusage `': microtime.c: 94: tamanho de armazenamento de `usg 'no conhecido microtime.c: 97: (use primeiro esta funo) `RUSAGE_SELF 'no declarado microtime.c: 97: (Cada identificador no declarado relatado somente uma vez microtime.c: 97: para cada funo parece pol) microtime.c: 103: `RUSAGE_CHILDREN 'no declarado (use primeiro esta funo) make [3]: *** [microtime.lo] Error 1 make [3]: Saindo do diretrio `/ home/master/php-4.0.1/ext/standard ' make [2]: *** [all-recursive] Erro 1 make [2]: Saindo do diretrio `/ home/master/php-4.0.1/ext/standard ' make [1]: *** [all-recursive] Erro 1 make [1]: Saindo do diretrio `/ home/master/php-4.0.1/ext ' make: *** [all-recursive] Erro 1 em seguida, o sistema est falido. Voc precisa corrigir o seu / usr / include arquivos pela instalao de um glibc-devel pacote que corresponda ao seu glibc. Isto no tem absolutamente nada a ver com PHP. Para provar isso a si mesmo, tente este teste simples: $ Cat test.c> <<X # Include <sys/resource.h> $ Gcc-E test.c> / dev / null Se que cospe erros, voc sabe seus arquivos incluem esto bagunados. X 340 Apndice C Suporte Debugging Applications15. Ao compilar o PHP com MySQL, configurar corre bem, mas durante o make recebo uma de erro semelhante seguinte: ext / mysql / libmysql / my_tempnam.o (texto 0 x46.) Em funo my_tempnam ': / php4/ext/mysql/libmysql/my_tempnam.c: 103: O uso de tempnam ' perigoso, a melhor utilizao mkstemp', o que est errado? Primeiro, importante perceber que este um aviso e no um erro fatal. Porque esta muitas vezes a sada visto pela ltima vez durante a faz-lo pode parecer um erro fatal, mas no. Claro, se voc definir o seu compilador para morrer na Avisos, ele ir. Tambm tenha em mente que suportam o MySQL ativado por padro. Nota A partir do PHP 4.3.2, voc tambm ver o seguinte texto aps a construir (fazer) completa: Compilao completa ( seguro ignorar advertncias sobre tempnam e tmpnam).

16. Eu quero atualizar meu PHP. Onde posso encontrar a linha. / Configure que foi usado para edificarei a minha instalao atual do PHP? Ou voc olhar para arquivo config.nice, na rvore de origem de sua instalao atual do PHP, ou, se este no estiver disponvel, basta executar o php_info () funo. Em cima da sada da linha. / configure que foi usado para construir esta instalao do PHP mostrado. 17. Quando compilar o PHP com a biblioteca GD-lo ou d erros de compilao estranho ou segfaults na execuo. Verifique se o seu GD biblioteca e PHP esto ligadas contra a mesma, dependendo bibliotecas (por exemplo, libpng). Essa a completa seco de Perguntas Frequentes do www.php.net. Agora voc no tm de fumble em torno da Internet. Voc pode apenas ir direto para este apndice para encontrar a maior parte de sua configurao e respostas de instalao. apndice D GD SDK Lngua Referncia Este apndice a referncia de idioma para GD Boutell de biblioteca de grficos. Cada funo listado com os parmetros que recebe, o que a funo retorna, e um breve descrio do que a funo faz. Funes da GD Descrio Retorna a funo Getimagesize (filename, [image_info) Array Image2wbmp (imagem, [nome], [limite]) Integer Imagealphablending (imagem, blendmode) Integer Imagearc (imagem, cx, cy, largura, altura, Integer incio, fim, col) Imagechar (imagem, a pia batismal, x, y, c, col) Integer Imagecharup (imagem, a pia batismal, x, y, c, col) Integer Imagecolorallocate (img, vermelho, verde, azul) Integer Imagecolorat (img, x, y) Integer Imagecolorclosest (img, vermelho, verde, azul) Integer Imagecolorclosestalpha (imagem, vermelho, Integer verde, azul, alfa) ImageColorClosestHwb (imagem, vermelho, verde, azul) Integer Obtm o tamanho da imagem. Salva a imagem como um WBMP. Switches alpha blending ligado ou desligado atravs da criao blendmode de verdadeiro ou falso, respectivamente. Desenha um elipse parcial na imagem especificada. O ponto central do arco em cx, cy. Desenha um caractere horizontalmente sobre o especificado

imagem. Desenha um personagem verticalmente sobre a imagem especificada. Atribui o valor de cor RGB especificado para o imagem. Retorna o ndice da cor em x, y. Retorna o ndice da cor mais prxima da cor paleta para a imagem. Retorna o ndice da cor mais prxima da cor especificada alm da paleta de alfa para o imagem especificada. Retorna o ndice da cor com o matiz, branco, e escurido mais prximo do valor RGB especificado. 341 342 Apndice D GD SDK Referncia da Linguagem Descrio Retorna a funo Imagecolordeallocate (imagem, ndice) Imagecolorexact (img, vermelho, verde, azul) Imagecolorexactalpha (imagem, vermelho, verde, blue, alfa) Imagecolorresolve (img, vermelho, verde, azul) ImageColorResolveAlpha (img, vermelho, verde, blue, alfa) ImageColorSet (img, ndice, vermelho, verde, azul) Imagecolorsforindex (img, ndice) Imagecolorstotal (img) Imagetruecolortopalette (imagem, dither, cores) Imagecolortransparent (img, [color]) Imagecopy (dest_image, src_image, dest_x, dest_y, src_x, src_y, src_w, src_h) Imagecopymerge (dest_image, src_image, dest_x, dest_y, src_x, src_y, src_w, src_h, pct) ImageCopyMergeGray (dest_image, src_image, dest_x, dest_y, src_x, src_y, src_w, src_h, pct) Imagecopyresampled (dest_image, src_image, dest_x, dest_y, src_x, src_y, dest_w, dest_h, src_w, src_h) Imagecopyresized (dest_img, src_img, destX, destY, srcX, srcY, destWidth, destHeight, srcWidth, srcHeight) Imagecreate (largura, altura) Imagecreatefromgif (filename) Imagecreatefromjpeg (filename) Imagecreatefromjpeg (filename) Imagecreatefromstring (string) Imagecreatefromwbmp (filename) Imagecreatefromxbm (filename) ImageCreateFromXpm (filename) Imagecreatetruecolor (largura, altura) ImageDashedLine (img, x1, y1, x2, y2, cor)

Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Boolean Matriz Nmero inteiro vazio Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Desaloca uma cor na imagem especificada. Retorna o ndice da cor especificada na cor paleta da imagem. Retorna o ndice da cor especificada na cor paleta mais o canal alfa para a imagem. Encontra a cor especificada na paleta. Se ele no existir, ele retorna o ndice da cor mais prxima na paleta. Encontra a cor especificada na paleta. Se ele no existir, ele retorna o ndice da cor mais prxima na paleta mais o canal alfa imagens. Define o ndice especificado para o valor de cor RGB. Retorna um array contendo os valores RGB para o ndice especificado na paleta de cores. Retorna o nmero de cores nas imagens especificado paleta de cores. Converte uma imagem true-color em uma imagem paletizadas. Define a cor transparente na paleta. Cpias uma rea da imagem de origem para o imagem de destino. Cpias uma rea da imagem de origem para o imagem de destino. O montante da mesclagem especificado pelo pct valor (0-100). Funciona exatamente como imagecopymerge (), mas o rea que est sendo copiado primeiro convertido para tons de cinza.

Cpias e resamples a rea da fonte imagem. Cpias uma rea da imagem de origem para um array da imagem de destino. Se as alturas so diferentes ento a imagem de destino redimensionada. Cria uma nova imagem. Cria uma nova imagem a partir do arquivo especificado. Cria uma nova imagem a partir do arquivo especificado. Cria uma nova imagem a partir do arquivo especificado. Cria uma nova imagem a partir dos dados da string. Cria uma nova imagem a partir do arquivo. Cria uma nova imagem a partir do arquivo. Cria uma nova imagem a partir do arquivo. Cria uma imagem nova cor verdadeira da largura pela altura. Desenha uma linha tracejada na imagem do ponto x1, y1 ao ponto x2, y2. GD SDK Referncia da Linguagem 343 Descrio Retorna a funo Imagedestroy (img) Imageellipse (imagem, x, y, largura, altura, cor) Imagefill (img, x, y, cor) Imagefilledarc (imagem, x, y, largura, altura, incio, fim, estilo, cor) Imagefilledellipse (imagem, x, y, largura, altura, cor) ImageFilledPolygon (img, pontos, num_points, cor) ImageFilledRectangle (img, x1, y1, x2, y2, cor) ImageFillToBorder (img, x, y, borda, cor) Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Destri a imagem especificada. Desenha uma elipse com o ponto de centro em x, y. Preenche a imagem inicial no ponto x, y. Desenha um arco preenchido centrada no ponto x, y. Desenha uma elipse preenchida na imagem com o seu centro ponto em x, y. Desenha um polgono preenchido na imagem entre o pontos. Desenha um retngulo preenchido a imagem especificada. Executa um preenchimento entre a borda especificada cor inicial no ponto x, y.

Retorna a altura da fonte especificada em pixels. Retorna a largura da fonte especificada em pixels. Corrige a gama para a imagem especificada. Envia a imagem para um arquivo ou para o navegador. Transforma interlacing ligado ou desligado na imagem. Envia a imagem para um arquivo ou para o navegador. Desenha uma linha na imagem a partir de ponto x1, y1 para ponto x2, y2. Envia a imagem para um arquivo ou para o navegador. Desenha um pixel no ponto x, y na cor especificada. Desenha um polgono na imagem, bem como polgono preencher a no ser que no preenche a imagem. Desenha um retngulo com a imagem. Atua como ImageRectangleFill (), mas o retngulo no preenchido quando ela desenhada. Desenha uma string a partir de x, y para a imagem. Desenha o texto de partida no ponto x, y no especificado Fonte TrueType. Desenha o texto de partida no ponto x, y no especificado Fonte TrueType. Cria um arquivo WBMP da imagem especificada. Imagefontheight (fonte) Imagefontwidth (fonte) ImageGammaCorrect (imagem, inputgamma, outputgamma) Imagegif (img, [nome]) Imageinterlace (img, [interlace]) Imagejpeg (imagem, [nome], [qualidade]) Imageline (img, x1, y1, x2, y2, cor) Imagepng (imagem, [nome]) ImageSetPixel (imagem, x, y, cor) Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Nmero inteiro Imagepolygon (img, pontos, num_points, cor) Integer ImageRectangle (img, x1, y1, x2, y2, cor) Integer Imagestring (img, font, x, y, string, cor) Integer ImageTTFString (imagem, tamanho, ngulo, Array x, y, cor, fontfile, texto) Imagettftext (imagem, tamanho, ngulo, Array x, y, cor, fontfile, texto) Imagewbmp (imagem, [nome], [frente]) Integer INDEX AB

ActionScript fundo Filmes Flash, 275-278 Battle Tank, 196, 205-208 Ming, 258 filmes em Flash, 260 add () funo, 263 Battle Tank addEntry () funo, 267-268 fundo, 196, 205-208 addFill () funo, 265-270 balas, 198-199, 204 algoritmos, TCP / IP, 14 coordenadas, 205-208 animando filmes Flash, CSS 271-275, 196-197 Servidores Apache, a instalao, 18-21 globals, 198-199 arcos, desenho, 174-178 gravidade, 198-199, 204 argumentos, estofamento, 64-65 imagens, 195-198, 201, 205-208 operadores aritmticos, 78 soquetes integrao, 224-228 array () funo, 105 interface, 197-198 arrays loops, 201-205 Tabuleiro de xadrez jogo, 140-141 menu, 199-200 declarando, 104-105 viso geral, 193-195 para instrues, 106-108 estados, 194-195, 198-199 ndices, tabelas 104-106, 197-198 inicializar, 104-105 tanques, 196-197 looping, 106-110 variveis, 199-200, 204 multi-dimensional, 110-112 operadores binrios, 79-80 viso geral, 103-104 soquetes de ligao, 215-216 classificao, 112-117 bitmaps, filmes Flash, 269-270 strings, 105-106 bits. Veja operadores tic-tac-toe, 117-132 operadores bit a bit, 82-85 declaraes enquanto, 108-110 blocos, cdigo 56 arsort () funo, 115 placas asort () funo, 115 Chess, 140-141 atribuio de cor, imagens, impresso 161-162, 111-112 atalhos atribuio, variveis, 85-86 tag HTML <BODY>, 33-36 Boolean tipo de dados, 57 <BR> Tag HTML, 36 C ndice 345 browsers. Ver clientes balas, Tank Battle, 198-199, 204 CAddWeaponsCmd () da classe, 245-248 Sistema cartesiano. Veja coordenadas maisculas e minsculas, variveis, 57 CCommand () da classe, 235-240 CCreateAccountCmd () da classe, 240-245 CGame () da classe, 235, 251-255 CheckFull () funo, 126-128 CheckWin () funo, 126-128 Jogo de xadrez banco de dados, 140-155 globals definio, 141-142 DrawBoard () funo, 147-155 ObterCasa () funo, 153 histrico de movimentao, 154-155

MovePiece () funo, 147 peas, 143-151 ProcessInput () funo, 151-155 PutPiece () funo, 147 render () funo, 143-151 StartBoard () funo, 147 estados, 141-142 TakePiece () funo, 147 UpdateMoveList () funo, 153-154 entrada do usurio, 151-155 classes. Veja tambm as funes CAddWeaponsCmd (), 245-248 CCommand (), 235-240 CCreateAccountCmd (), 240-245 CGame (), 235, 251-255 CLockTableCmd (), 243 CommandFactory (), 248-255 CRenderCmd (), 243-244 CUnlockTableCmd (), 243 CVerifyAccountInfoCmd (), 243 Ming, 258-259 SWFAction (), 276-278 SWFBitmap (), 269-270 SWFDisplayItem (), 271-275 SWFFill (), 265-270 SWFGradient (), 267-268 SWFMorph (), 273-275 SWFMovie (), 259-261 SWFShape (), 262, 269-270 clientes criao, 223-224 pginas, interpretando, 4 relao de servidores, 3-5 sockets, 213 CLockTableCmd () da classe, 243 blocos de cdigo, 56 cor Filmes em Flash, 260 imagens, 166 atribuindo, 161-162 convertendo, 165 enchimento, 162-163 nmero, 165-166 viso geral, 161 transparncia. Ver a transparncia fbrica de comando, criando, 248-255 linha de comando, a execuo de scripts, 220 CommandFactory () da classe, 248-255 comandos linha de comando, a execuo de scripts, 220

a criao de fbrica de comando, 248-255 Kiddy Cartel, 234-255 sub-comandos, 240-245 su, 26 tabelas, 243 operadores de comparao, 78-79 ComputerMove () funo, 128-131 ComputerRandomMove () funo, 128-131 operadores concatenao, 81 lgica condicional. Ver declaraes conectando Kiddy Cartel de banco de dados, 232 servidores, 220-223 constantes definio de, 118 viso geral, 58-59 convertendo cor, 165 cookies, passando, 6 coordenadas Battle Tank, 205-208 imagens, desenho, 167 copiar imagens, 185-191 funo count (), 107 Criar funo TABLE, 231-232 346 Index a criao de clientes, 223-224 comandos fbrica de comando, 248-255 Kiddy Cartel, 234-255 sub-comandos, 240-245 bases de dados, 134-136 diretrios, 117 mensagens de erro, 95-98 Filmes Flash, 259-261 imagens, 160-161 pginas, 56 servidores, 220-223 sockets, 215 tabelas, 231-232 CRenderCmd () da classe, 243-244 CSS, Tank Battle, 196-197 CUnlockTableCmd () da classe, 243 atual (funo), 109-110 CVerifyAccountInfoCmd () da classe, 243 D tipos de dados arrays Tabuleiro de xadrez jogo, 140-141

declarando, 104-105 para instrues, 106-108 ndices, 104-106 inicializar, 104-105 looping, 106-110 multi-dimensional, 110-112 viso geral, 103-104 classificao, 112-117 strings, 105-106 tic-tac-toe, 117-132 enquanto declaraes, 108-110 Boolean, 57 declarando, de 57 anos Filmes Flash, 275-278 strings ndices de array, 105-106 formatar nmeros, 65 funes, 61-65 operadores. Veja operadores argumentos padding, 64-65 correspondncia de padro, 66-71 Tipo de fundio, 58 tipo de malabarismo, 57-58 variveis Batalha de Tanques, 199-200, 204 maisculas e minsculas, 57 constantes, 58-59 declarando, de 57 anos valores dinmicos, 58 funes, 60-61 nomeao, 59-60 operadores. Veja operadores variveis de sesso, 5-13 operadores de atalho, 85-86 Tipo de fundio, 58 tipo de malabarismo, 57-58 varivel, 58 abstrao de dados (DBA), 134 bases de dados Jogo de xadrez, 140-155 ligao, 232 criao, 134-136 DBA, 134 entradas excluso, 140 insero, 137-139 atualizao, 139-140 Kiddy Cartel, 231-232 looping, 136-137 MySQL

instalao, 230-231 PEAR, 229 no-relacionais, 134 orientada a objeto, 133 abertura, 134-136 viso geral, 133-134 relacional, 133, 231-233 DBA (abstrao de banco de dados), 134 dba_close (funo), 140 dba_delete (funo), 140 dba_fetch () funo, 136-137 dba_firstkey () funo, 136-137 dba_insert () funo, 137-139 dba_open () funo, 134-136 dba_replace () funo, 139 dba_sync () funo, 139-140 depurao jogos, 155 instalao, 29-30 ponto e vrgula, 56 ndice 347 servidor estados, 5 declarando arrays, 104-105 tipos de dados, 57 funes, 95 variveis, 57 funo define (), 59 defined () funo, 59 definio constantes, 118 globals Battle Tank, 198-199 Jogo de xadrez, 141-142 tic-tac-toe, 118 DELETE FROM funo, 233 excluso entradas do banco de dados, 140 registros, 233 delimitadores, selecionando, 56 diretrios, criando, 117 <DIV> Tag HTML, 197 dl (funo), 159 fazer declaraes, 93-94 documentos. Ver arquivos DrawBoard (funo) Jogo de xadrez, 147-155 tic-tac-toe, 125-126 DrawCurve () funo, 263, 264 drawCurveTo () funo, 264-265

desenho. Veja tambm imagens Filmes Flash, 262-265 imagens, 167 arcos, 174-178 coordenadas, 167 elipses, 174-178 linhas, 167-169 pixels, 167-169 polgonos, 172-174 retngulos, 169-172 drawLine () funo, 262-263 drawLineTo () funo, 262-263 valores dinmicos, variveis, 58 E funo each (), 108-110 elipses, desenho, 174-178 else, 88-90 empty () funo, 61 sockets permitindo, 219 Endgame () funo, 124-125, 199-200 entradas, bases de dados excluso, 140 insero, 137-139 atualizao, 139-140 ereg () funo, 69-70 ereg_replace (funo), 70 eregi (funo), 70 eregi_replace (funo), 70 mensagens de erro, criando, 95-98 Execute () funo, 239, 243-248 expresses funes, 69-71 correspondncia de padro, 66-69 F arquivos HTML formatos, 37-38 viso geral, 32-33 inclusive, 99 fazer, 24 enchimento cores, imagens, 162-163 objetos, filmes Flash, 265-270 Flash Ming ActionScript, 258 classes, 258-259 instalao, 258 viso geral, 257-259 filmes

ActionScript, 275-278 animao, 271-275 cor de fundo, 260 bitmaps, 269-270 criao, 259-261 tipos de dados, 275-278 desenho, 262-265 objetos de enchimento, 265-270 imagens, 262-265 morphing, 273-275 impresso, 260 tamanho, 259-261 velocidade, 260 ndice 348 fopen () funo, 269-270 para as demonstraes. Ver loops <FORM> Tag HTML, 48-51 formatao nmeros, strings, 65 texto, tags HTML, 35 formas HTML, 48-51 processamento, 71-75 fread () funo, 269-270 funes. Veja tambm as classes add (), 263 addEntry (), 267-268 addFill (), 265-270 array (), 105 arrays, classificao, 112-117 arsort (), 115 asort (), 115 CheckFull (), 126-128 CheckWin (), 126-128 ComputerMove (), 128-131 ComputerRandomMove (), 128-131 count (), 107 CREATE TABLE, 231-232 current (), 109-110 dba_close (), 140 dba_delete (), 140 dba_fetch (), 136-137 dba_firstkey (), 136-137 dba_insert (), 137-139 dba_open (), 134-136 dba_replace (), 139 dba_sync (), 139-140 declarando, 95 define (), 59 defined (), 59

DELETE FROM, 233 dl (), 159 DrawBoard () Jogo de xadrez, 147-155 tic-tac-toe, 125-126 DrawCurve (), 263-264 drawCurveTo (), 264-265 drawLine (), 262-263 drawLineTo (), 262-263 each (), 108-110 empty (), 61 Endgame (), 124-125, 199-200 ereg (), 69-70 ereg_replace (), 70 eregi (), 70 eregi_replace (), 70 Execute (), 239, 243-248 fopen (), 269-270 fread (), 269-270 GameInit (), 200-201, 206-207 getShape1 (), 273-275 getShape2 (), 273-275 ObterCasa (), 153 gettype (), 60 HandleSubCommand (), 239 Imagearc (), 174-178 Imagecolorallocate (), 161-162 Imagecolorat (), 166 ImageColorSet (), 166 Imagecolorstotal (), 165-166 Imagecolortransparent (), 163-165 Imagecopy (), 186-187 Imagecopymerge (), 189-191 Imagecopyresampled (), 188-189 Imagecopyresized (), 188-189 Imagecreate (), 160-161 Imagecreatefromjpeg (), 185 Imagecreatefromjpeg (), 185 Imagecreatetruecolor (), 160-161 Imagefill (), 162-163 Imagefilledarc (), 176-178 ImageFilledPolygon (), 174, 207-208 ImageFilledRectangle (), 171-172 Imageline (), 168-169 Imagepolygon (), 172-174 ImageRectangle (), 169-172 ImageSetPixel (), 167-169 Imagestring (), 179-180 Imagetruecolortopalette (), 165 ImageTTFBox (), 182-184

Imagettftext (), 180-183 Imagewbmp (), 184-185 include (), 99 ini_set (), 7-13 INSERT INTO, 233 is_datatype (), 61 isset (), 60 key (), 109-110 krsort (), 116 ksort (), 115 ndice 349 list (), 108-110 move (), 271-275 movePenTo (), 262-263 MovePiece (), 147 moveTo (), 271-275 MyFilledPolygon (), 174 MyFilledRectangle (), 171-172 MyPolygon (), 173-174 MyRectangle (), 170 MyTTFBox (), 183-184 next (), 109-110 nextFrame (), 272-273 number_format (), 65 OnError (), 239 OnRollBack (), 239-248 output (), 260 viso geral, 94-95 parmetros, 95-98 phpinfo (), 159, 219 prev (), 109-110 printf (), 64-65 ProcessInput (), 151-155 PutPiece (), 147 Query (), 248 recurso, 98-99 expresses regulares, 69-71 render () Jogo de xadrez, 143-151 tic-tac-toe, 119-123 Render (), 201-205, 225-228 RenderInterface (), 197-198 RenderTanks (), 196-197 RenderTerrain (), 196 reset (), 108-110 rotate (), 271-275 rsort (), 115 serialize (), 137-139 sesses, 10-13 setBackground (), 260

setDimension (), 259-261 setLeftFill (), 265-270 setLine (), 262-265 setRate (), 260 setRightFill (), 265-270 settype (), 60 socket_bind (), 215-216 socket_create (), 215 socket_listen (), 215-216 sockets, 216-219 sort (), 113-114 split (), 71 sprintf (), 64-65 StartBoard (), 147 StartGame (), 124-125, 199-200 strings, 61-65 TakePiece (), 147 tic-tac-toe, 123-131 unset (), 61 UPDATE, 233 UpdateMoveList (), 153-154 usort (), 116-117 variveis, 60-61 G GameInit () funo, 200-201, 206-207 jogos Tanque de combate de fundo, 196, 205-208 balas, 198-199, 204 coordenadas, 205-208 CSS, 196-197 globals, 198-199 gravidade, 198-199, 204 imagens, 195-198, 201, 205-208 sockets integrao, 224-228 interface, 197-198 loops, 201-205 menu, 199-200 viso geral, 193-195 estados, 194-199 tabelas, 197-198 tanques, 196-197 variveis, 199-200, 204 placas Xadrez, 140-141 impresso, 111-112 Xadrez placas, 140-141 banco de dados, 140-155 globals definio, 141-142

DrawBoard () funo, 147-155 ObterCasa () funo, 153 histrico de movimentao, 154-155 MovePiece () funo, 147 peas, 143-151 ProcessInput () funo, 151-155 350 Index jogos (continuao) PutPiece () funo, 147 render () funo, 143-151 StartBoard () funo, 147 estados, 141-142 TakePiece () funo, 147 UpdateMoveList () funo, 153-154 entrada do usurio, 151-155 depurao, 155 Cartel Kiddy fbrica de comando, 248-255 comandos, 234-255 banco de dados, 231-232 viso geral, 229-230 regras, 233-235 especificaes, 233-235 sub-comandos, 240-245 tabelas, 233 MMO. Ver Cartel Kiddy tic-tac-toe arrays, 117-132 CheckFull () funo, 126-128 CheckWin () funo, 126-128 ComputerMove () funo, 128-131 ComputerRandomMove () funo, 128-131 constantes definir, 118 globals definio de, 118 diretrio, 117 DrawBoard () funo, 125-126 Endgame () funo, 124-125 funes, 123-131 HTML, 118-119 render () funo, 119-123 StartGame () funo, 124-125 estados, 119 instruo switch, 123 GD, 157-159 Web site da GemStone, 133 Mtodo GET, 48, 71-75 getShape1 () funo, 273-275 getShape2 () funo, 273-275 ObterCasa () funo, 153 gettype (funo), 60

gifs HTML, 37-38 suporte, 157 globals Battle Tank, 198-199 Jogo de xadrez, 141-142 tic-tac-toe, 118 grficos. Veja as imagens gravidade, 198-199, 204 H HandleSubCommand () funo, 239 <HEAD> Tag HTML, de 35 anos movimento, histria, 154-155 HTML documentos, 32-33 formas, 48-51, 71-75 Mtodo GET, 48, 71-75 imagens, 36-41, 44-48 formatos de arquivo, 37-38 tamanho, de 38 anos transparncia, de 37 anos layouts, 44-48 PHP blocos de cdigo, 56 comparao, 55 Mtodo POST, 48, 71-75 tabelas, 41-48 Tag <BODY>, 33-36 <BR>, 36 <DIV>, 197 <FORM>, 48-51 <HEAD>, 35 <IFRAME>, 154-155 <IMG>, 39-41 <INPUT>, 48-51 <SELECT>, 49-51 <TABLE>, 41-48 <TD>, 42-48 <TEXTAREA>, 49-51 <TITLE>, 35 <TR>, 42-48 viso geral, 31-32 de impresso, 56 formatao de texto, 35 tic-tac-toe, 118-119 Eu if, 88-90 <IFRAME> Tag HTML, 154-155 ndice 351

IIS (Internet Information Server), 14 instalao, 14-18 PWS comparao, 14-15 Imagearc () funo, 174-178 Imagecolorallocate () funo, 161-162 Imagecolorat (funo), 166 ImageColorSet (funo), 166 Imagecolorstotal () funo, 165-166 Imagecolortransparent () funo, 163-165 Imagecopy () funo, 186-187 Imagecopymerge () funo, 189-191 Imagecopyresampled () funo, 188-189 Imagecopyresized () funo, 188-189 Imagecreate () funo, 160-161 Imagecreatefromjpeg () funo, 185 Imagecreatefromjpeg () funo, 185 Imagecreatetruecolor () funo, 160-161 Imagefill () funo, 162-163 Imagefilledarc (funo), 176-178 ImageFilledPolygon () funo, 174, 207-208 ImageFilledRectangle () funo, 171-172 Imageline () funo, 168-169 Imagepolygon () funo, 172-174 ImageRectangle () funo, 169-172 imagens. Veja tambm desenho Batalha de Tanques, 195-198, 201, 205-208 balas, 198-199, 204 cor, 166 atribuindo, 161-162 convertendo, 165 enchimento, 162-163 nmero, 165-166 viso geral, 161 cpia, 185-191 criao, 160-161 desenho, 167 arcos, 174-178 coordenadas, 167 elipses, 174-178 linhas, 167-169 pixels, 167-169 polgonos, 172-174 retngulos, 169-172 Filmes Flash, 262-265 animao, 271-275 bitmaps, 269-270 objetos de enchimento, 265-270 morphing, 273-275 GD, 157-158 gifs

HTML, 37-38 suporte, 157 HTML, 36-48 formatos de arquivo, 37-38 tamanho, de 38 anos transparncia, de 37 anos opacidade, 189-191 poupana, 184-185 tamanho, 187-189 texto, 179-184 translucidez, 189-191 transparncia, 163-165 ImageSetPixel () funo, 167-169 Imagestring () funo, 179-180 Imagetruecolortopalette (funo), 165 ImageTTFBox () funo, 182-184 Imagettftext () funo, 180-183 Imagewbmp () funo, 184-185 <IMG> Tag HTML, 39-41 funo include (), 99 arquivos, incluindo, 99 ndices, arrays, 104-106 ini_set () funo, 13/07 inicializar matrizes, 104-105 de entrada, os usurios, 151-155 <INPUT> Tag HTML, 48-51 INSERT INTO funo, 233 inserindo entradas de banco de dados, 137-139 registros, 233 instalao GD, 158-159 IIS, 14-18 Ming, 258 MySQL, 230-231 PWS, 14-18 servidores Apache, 18-21 IIS, 14-18 PWS, 14-18 UNIX, 19-21 testes, 29-30 UNIX, 24-26 Windows, 26-29 interfaces, Battle Tank, 197-198 Internet Information Server. Consulte IIS 352 Index pginas interpretao, navegadores, 4 is_datatype (funo), 61 isset (funo), 60

J jpg, HTML, 37-38 K key () funo, 109-110 KEY, PRIMARY palavra-chave, 232 Cartel Kiddy comandos fbrica de comando, 248-255 criao, 234-255 sub-comandos, 240-245 banco de dados, 231-232 viso geral, 229-230 regras, 233-235 especificaes, 233-235 tabelas, 233 krsort () funo, 116 ksort () funo, 115 L camadas, TCP / IP, 13-14 layouts, HTML, 44-48 bibliotecas GD, 157-159 Ming ActionScript, 258 classes, 258-259 instalao, 258 viso geral, 257-259 PEAR, 229 linhas, desenho, 167-169 list () funo, 108-110 sockets de escuta, 215-216 tabelas de travamento, 243 lgica. Ver declaraes operadores lgicos, 79-80 looping arrays, 106-110 Battle Tank, 201-205 bases de dados, 136-137 impresso de placas de jogo, 111-112 M fazer arquivos, 24 massivamente multiplayer online game (MMOG). Ver Cartel Kiddy padres de correspondncia funes, 69-71 expresses regulares, 66-69 operadores matemticos. Veja operadores menu, Battle Tank, 199-200 mtodos, 48-75 Ming

ActionScript, 258 classes, 258-259 instalao, 258 viso geral, 257-259 MMO. Ver Cartel Kiddy morphing filmes Flash, 273-275 move () funo, 271-275 histrico de movimentao, 154-155 movePenTo () funo, 262-263 MovePiece () funo, 147 moveTo () funo, 271-275 filmes, Flash ActionScript, 275-278 animao, 271-275 cor de fundo, 260 bitmaps, 269-270 criao, 259-261 tipos de dados, 275-278 desenho, 262-265 objetos de enchimento, 265-270 imagens, 262-265 morphing, 273-275 impresso, 260 tamanho, 259-261 velocidade, 260 em movimento. Veja coordenadas multi-dimensional arrays, 110-112 MyFilledPolygon () funo, 174 MyFilledRectangle () funo, 171-172 MyPolygon () funo, 173-174 MyRectangle () funo, 170 MySQL instalao, 230-231 PEAR, 229 MyTTFBox () funo, 183-184 ndice 353 N variveis de nomeao, 59-60 seguinte (funo), 109-110 nextFrame () funo, 272-273 no-bancos de dados relacionais, 134 number_format () funo, 65 nmeros strings de formatao, de 65 anos as cores da imagem, 165-166 O objeto bancos de dados orientados, 133 objetos, filmes Flash, 265-270 ObjectStore site, 133 OnError () funo, 239

OnRollBack () funo, 239-248 opacidade, imagens, 189-191 bases de dados de abertura, 134-136 operadores aritmtica, 78 binrio, 79-80 bit a bit, 82-85 comparao, 78-79 concatenao, 81 lgico, 79-80 viso geral, 77 precedncia, 86-87 ternrio, 80-81 varivel atalhos atribuio, 85-86 output () funo, 260 P argumentos padding, cordas, 64-65 pginas navegadores, interpretando, 4 criao, 56 parmetros, passando, 95-98 passagem parmetros, 95-98 sesses, 6-7 correspondncia de padro, as expresses regulares, 66-69 PEAR (PHP Extension e Aplicao Repositrio), 229 Personal Web Server (PWS) IIS comparao, 14-15 instalao, 14-18 PHP blocos de cdigo, 56 HTML comparao, 55 pginas navegadores, interpretando, 4 criao, 56 PHP Extension Repositrio de Aplicaes e (PEAR), 229 funo phpinfo (), 159, 219 fsica, velocidade, 204 peas, jogo de xadrez, 143-151 pixels, desenho, 167-169 colocao. Veja coordenadas plataformas viso geral, 23-24 png arquivos, 37-38 polgonos, desenho, 172-174 portas, servidores, 5 Mtodo POST, 48, 71-75 precedncia, operadores, 86-87 prefixos, variveis, 59-60

prev () funo, 109-110 Palavra-chave PRIMARY KEY, 232 printf () funo, 64-65 impresso Filmes em Flash, 260 tabuleiros, 111-112 Tags HTML, 56 texto, 56 formas de processamento, 71-75 ProcessInput () funo, 151-155 protocolos, sockets, 214-215 PutPiece () funo, 147 PWS (Personal Web Server) IIS comparao, 14-15 instalao, 14-18 Q Query () funo, 248 R registros, 233 retngulos, desenho, 169-172 recurso, funes, 98-99 expresses regulares funes, 69-71 correspondncia de padro, 66-69 354 Index bancos de dados relacionais, 133 MySQL instalao, 230-231 PEAR, 229 viso geral, 231-233 render () funo Jogo de xadrez, 143-151 tic-tac-toe, 119-123 Render () funo, 201-205, 225-228 RenderInterface () funo, 197-198 RenderTanks () funo, 196-197 RenderTerrain () funo, 196 reset () funo, 108-110 rotate () funo, 271-275 rsort () funo, 115 regras, Cartel Kiddy, 233-235 a execuo de scripts, linha de comando, 220 S imagens de poupana, 184-185 scripts, linha de comando, 220 segurana sesses, passando, 6 tabelas, comandos, 243 <SELECT> Tag HTML, 49-51 delimitadores selecionando, 56

ponto e vrgula, soluo de problemas, 56 serialize () funo, 137-139 servidores relacionamento com o cliente, 3-5 criao, 220-223 depurao estados, 5 instalao Apache, 18-21 IIS, 14-18 PWS, 14-18 UNIX, 19-21 mltiplas conexes, 220-223 portas, 5 sockets, 213 variveis de sesso, os estados, 5-13 sesses funes, 10-13 passagem cookies, 6 de segurana, 6 URLs, 6-7 estados, as variveis de sesso, 5-13 setBackground () funo, 260 setDimension () funo, 259-261 setLeftFill () funo, 265-270 setLine () funo, 262-265 setRate () funo, 260 setRightFill () funo, 265-270 settype (funo), 60 atalhos, operadores de atribuio, 85-86 tamanho Filmes Flash, 259-261 HTML, de 38 anos imagens, 187-189 socket_bind () funo, 215-216 socket_create () funo, 215 socket_listen () funo, 215-216 sockets Battle Tank, integrando, 224-228 vinculativo, 215-216 clientes, 213, 223-224 criando, 215 permitindo, 219 funes, 216-219 escuta, 215-216 protocolos, 214-215 servidores, 213, 220-223 tipos, 214 sort () funo, 113-114 classificar matrizes, 112-117

especificaes, Cartel Kiddy, 233-235 velocidade, filmes em Flash, 260 split () funo, 71 sprintf () funo, 64-65 SQL MySQL instalao, 230-231 PEAR, 229 T-SQL, 231-233 StartBoard () funo, 147 StartGame () funo, 124-125, 199-200 declaraes fazer, 93-94 outra coisa, 88-90 para, 94, 106-108 se, 88-90 viso geral, 86 switch, 90-93, 123 enquanto, 93-94, 108-110 estados Batalha de Tanques, 194-195, 198-199 Jogo de xadrez, 141-142 servidores, depurao, 5 variveis de sesso, 5-13 tic-tac-toe, 119 strings. Ver texto tambm ndices de array, 105-106 formatar nmeros, 65 funes, 61-65 operadores. Veja operadores argumentos padding, 64-65 correspondncia de padro funes, 69-71 expresses regulares, 66-69 comando su, 26 sub-comandos, 240-245 apoio, gifs, 157 SWFAction () da classe, 276-278 SWFBitmap () da classe, 269-270 SWFDisplayItem () da classe, 271-275 SWFFill () da classe, 265-270 SWFGradient () da classe, 267-268 SWFMorph () da classe, 273-275 SWFMovie () da classe, 259-261 SWFShape () da classe, 262, 269-270 declaraes switch, 90-93, 123 T <TABLE> Tag HTML, 41-48 tabelas Battle Tank, 197-198

criao, 231-232 HTML, 41-48 comandos de bloqueio, 243 registros, 233 de segurana, 243 comandos de desbloqueio, 243 tags, HTML <BODY>, 33-36 <BR>, 36 <DIV>, 197 <FORM>, 48-51 <HEAD>, 35 <IFRAME>, 154-155 <IMG>, 39-41 <INPUT>, 48-51 ndice 355 <SELECT>, 49-51 <TABLE>, 41-48 <TD>, 42-48 <TEXTAREA>, 49-51 <TITLE>, 35 <TR>, 42-48 viso geral, 31-32 de impresso, 56 formatao de texto, 35 TakePiece () funo, 147 tanques, 196-197 TCP / IP (Transmission Control Protocol / Internet Protocol), 13-14 <TD> Tag HTML, 42-48 operadores ternrios, 80-81 terreno. Ver fundo testes. Veja debugging texto. Veja tambm strings formatao, 35 imagens, 179-184 de impresso, 56 <TEXTAREA> Tag HTML, 49-51 tic-tac-toe arrays, 117-132 CheckFull () funo, 126-128 CheckWin () funo, 126-128 ComputerMove () funo, 128-131 ComputerRandomMove () funo, 128-131 constantes definir, 118 globals definio de, 118 diretrio, 117 DrawBoard () funo, 125-126 Endgame () funo, 124-125 funes, 123-131

HTML, 118-119 render () funo, 119-123 StartGame () funo, 124-125 estados, 119 instruo switch, 123 <TITLE> Tag HTML, de 35 anos <TR> Tag HTML, 42-48 translucidez, 189-191 Transmission Control Protocol / Internet Protocol (TCP / IP), 13-14 transparncia HTML, de 37 anos imagens, 163-165 356 Index soluo de problemas. Veja debugging T-SQL viso geral, 231-233 Tipo de fundio, 58 tipo de malabarismo, 57-58 tipos, sockets, 214 U UNIX, 23 instalao, 24-26 servidores, 19-21 tabelas de desbloqueio, 243 unset (funo), 61 ATUALIZAO funo, 233 UpdateMoveList () funo, 153-154 actualizao das bases entradas, 139-140 registros, 233 Passando URLs, 6-7 entrada do usurio, jogo de xadrez, 151-155 usort () funo, 116-117 V valores dinmicas, 58 operadores aritmtica, 78 binrio, 79-80 bit a bit, 82-85 comparao, 78-79 concatenao, 81 lgico, 79-80 viso geral, 77 precedncia, 86-87 ternrio, 80-81 varivel atalhos atribuio, 85-86 variveis variveis, 58 variveis Batalha de Tanques, 199-200, 204

maisculas e minsculas, 57 constantes, 58-59 declarando, de 57 anos valores dinmicos, 58 funes, 60-61 nomeao, 59-60 operadores aritmtica, 78 binrio, 79-80 bit a bit, 82-85 comparao, 78-79 concatenao, 81 lgico, 79-80 viso geral, 77 precedncia, 86-87 ternrio, 80-81 varivel atalhos atribuio, 85-86 variveis de sesso, 5-13 operadores de atalho, 85-86 Tipo de fundio, 58 tipo de malabarismo, 57-58 varivel, 58 velocidade, 204 Web site da Versant, 133 WZ Teia pginas navegadores, interpretando, 4 criao, 56 servidores. Ver servidores sites, 133 enquanto declaraes, 93-94, 108-110 Janelas, instalao, 26-29 profissionais Comrcio Referncia Got Game? VINDA DA PRIMAVERA 2004! Jogo 3D OpenGL Programming Beginning All in One Programao Jogo 1-59200-136-X $ 49,99 1-59200-369-9 $ 29,99 The Dark Side J2ME 3D Game Engine Programao de Jogos Jogo Texturing Programao 1-59200-350-8 $ 39,99 1-59200-351-6 $ 59,99 1-59200-118-1 $ 59,99 Chamada 1.800.354.9706 ordem Ordem em linha na www.courseptr.com diviso A do Curso de Tecnologia Take Your Jogo para o XTREME!

Xtreme Games LLC foi fundada para ajudar os desenvolvedores de jogos pequenos ao redor do mundo a criar e publicar os seus jogos no comercial de mercado. Xtreme Games ajuda os desenvolvedores a mais jovem entrar no campo de programao de jogos, isolando-os de jurdicos complexos e questes de negcios. Xtreme Games tem centenas de desenvolvedores ao redor o mundo. Se voc estiver interessado em se tornar um deles, ento visite-nos em www.xgames3d.com. www.xgames3d.com Contrato de Licena / Aviso de Garantia Limitada Ao abrir o recipiente disco selado neste livro, voc concorda com os seguintes termos e condies. Se, aps a leitura do seguinte acordo de licena e aviso de garantia limitada, voc no pode concordar com os termos e condies estabelecidos, devolver o livro fechado no utilizados com disco para o lugar onde voc o comprou para um reembolso. Licena: O software includo protegido pelo detentor dos direitos autorais (s) indicado no software disco. Voc est licenciado para copiar o software em um nico computador para uso por um nico usurio e um disco de backup. Voc no pode reproduzir, fazer cpias ou distribuir cpias, alugados ou arrendar o software, no todo ou em parte, exceto com permisso por escrito do detentor dos direitos autorais ( s). Voc pode transferir o disco fechado apenas em conjunto com esta licena, e somente se voc destruir todas as outras cpias do software e da transferncia concorde com os termos do licena. Voc no pode descompilar, desmontar ou fazer engenharia reversa do software. Aviso de Garantia Limitada: O disco includo garantido pela PTR Curso de estar livre de defeitos fsicos em materiais e de fabricao por um perodo de 60 (sessenta) dias desde a compra do usurio final do livro / disco combinao. Durante o prazo de sessenta dias da garantia limitada, Curso PTR ir fornecer um disco de substituio sobre o retorno de um disco com defeito. Responsabilidade limitada: O nico recurso por violao desta garantia limitada ser composto inteiramente de substituio de o disco com defeito. EM HIPTESE ALGUMA A CURSO PTR OU O AUTOR SE RESPONSABILIZA Por quaisquer outros danos, incluindo perda ou corrupo de dados, as mudanas no funcionais

caractersticas do hardware ou sistema operacional, a interao com outros softwares nocivos, ou quaisquer outros danos especiais, incidentais ou conseqentes que possam surgir, mesmo que CURSO PTR e / ou o autor tenha sido previamente notificado de que a possibilidade de tal danos existe. Renncia de Garantias: CURSO PTR e autor especificamente rejeitam todas e quaisquer outras garantias, seja explcitas ou implcitas, inclusive garantias de comerciabilidade adequao, para uma determinada tarefa ou finalidade, ou ausncia de erros. Alguns estados no permitem a EXCLUSO de garantias implcitas ou limitao de danos incidentais ou conseqenciais, por isso estas limitaes podero no aplicar a voc. Outros: Este Contrato regido pelas leis do Estado de Massachusetts sem levar em conta escolha de princpios legais. A Conveno das Naes de Contratos para a Venda Internacional de Bens especificamente negada. Este acordo constitui o acordo integral entre voc e PTR Curso de utilizao do software.

S-ar putea să vă placă și