end of file – ebook php - eofclub.in file3.2 – operação bit a bit 3.3 – operadores de...

107
END OF FILE – EBOOK PHP Autor: kodo no kami ( https://www.facebook.com/hacker.fts315 ) discord: kodo#0010 Forum: http://eofclub.com/forum Face eof: http://www.facebook.com/forumeof Discord eof: https://discordapp.com/invite/cmzeMPv (convite) Greetz: s1m0n, mmxm, sir.rafiki, neofito, gjuniioor, refell, facist, melots, jhonydk, 0racle, hannibal, lend4pop, nass Data: 19/03/2016 ~ 21/12/2016 (sem revisão) E ae galera eu sou kõdo no kami e esse é meu quarto ebook de programação nele vou ensinar a programar na linguagem php, sendo essa linguagem largamente utilizada para programação web no lado do servidor (server side), essa linguagem é uma linguagem de script, ou seja, ela é interpretada isso a torna multiplataforma com isso você não vai ficar limitado a uma plataforma especifica já que o codigo PHP não é compilado para um determinado sistema e sim é necessário apenas um interpretador dessa linguagem para aquele sistema especifico, ela tambem tem a sintaxe muito parecida com outras linguagens com isso aprender php automaticamente vai saber o básico dessas outras linguagens também, embora PHP seja mais utilizada para programação web ela pode ser utilizada para programação de uso geral como criação de script para automatizar tarefas no próprio sistema ou ate mesmo programas graficos, como nos ebooks anteriores (c/c++, pascal e perl) esse ebook não pode ser vendido sendo a sua distribuição livre sem fins lucrativos Indice 1.0 – Introdução a linguagem PHP 1.1 – Interpretadores e IDE 1.2 – Executando um script PHP 1.3 – Sintaxe PHP 1.4 – Biblioteca da linguagem PHP 1.5 – Instalando extensão em PHP 1.6 – Comentários 2.0 – Saida de dados 2.1 – Variaveis 2.2 – Arrays (Vetores e Matrizes) 2.3 – Ponteiros 2.4 – Entrada de dados 2.5 – Cookie e Sessão 2.6 – Manipulação de string 2.7 – Expressão regular (regex) 3.0 – Logica Aritimética 3.1 – Logica Booleana 3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição 4.0 – Funções e Modulos 4.1 – Manipulando o tempo 4.2 – Manipulando arquivos 4.3 – Manipulando diretorios 4.4 – Manipulando o terminal 4.5 – Manipulando socket

Upload: vungoc

Post on 27-Apr-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

END OF FILE – EBOOK PHPAutor: kodo no kami ( https://www.facebook.com/hacker.fts315 ) discord: kodo#0010

Forum: http://eofclub.com/forum Face eof: http://www.facebook.com/forumeof

Discord eof: https://discordapp.com/invite/cmzeMPv (convite)Greetz: s1m0n, mmxm, sir.rafiki, neofito, gjuniioor, refell, facist, melots, jhonydk,

0racle, hannibal, lend4pop, nassData: 19/03/2016 ~ 21/12/2016 (sem revisão)

E ae galera eu sou kõdo no kami e esse é meu quarto ebook de programação nele vou ensinar a programar na linguagem php, sendo essa linguagem largamente utilizada para programação web no lado do servidor (server side), essa linguagem é uma linguagem de script, ou seja, ela é interpretada isso a torna multiplataforma com isso você não vai ficar limitado a uma plataforma especifica já queo codigo PHP não é compilado para um determinado sistema e sim é necessário apenas um interpretador dessa linguagem para aquele sistema especifico, ela tambem tem a sintaxe muito parecida com outras linguagens com isso aprender php automaticamente vai saber o básico dessas outras linguagens também, embora PHP seja mais utilizada para programação web ela pode ser utilizada para programação de uso geral como criação de script para automatizar tarefas no próprio sistema ou ate mesmo programas graficos, como nos ebooks anteriores (c/c++, pascal e perl) esse ebook não pode ser vendido sendo a sua distribuição livre sem fins lucrativos

Indice

1.0 – Introdução a linguagem PHP1.1 – Interpretadores e IDE1.2 – Executando um script PHP1.3 – Sintaxe PHP1.4 – Biblioteca da linguagem PHP1.5 – Instalando extensão em PHP1.6 – Comentários2.0 – Saida de dados2.1 – Variaveis2.2 – Arrays (Vetores e Matrizes)2.3 – Ponteiros2.4 – Entrada de dados2.5 – Cookie e Sessão2.6 – Manipulação de string2.7 – Expressão regular (regex)3.0 – Logica Aritimética3.1 – Logica Booleana3.2 – Operação bit a bit3.3 – Operadores de comparação e logicos3.4 – Estruturas condicionais3.5 – Estruturas de repetição4.0 – Funções e Modulos4.1 – Manipulando o tempo4.2 – Manipulando arquivos4.3 – Manipulando diretorios4.4 – Manipulando o terminal4.5 – Manipulando socket

Page 2: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

4.6 – Manipulando banco mysql5.0 – Orientação a objeto5.1 – Orientação a objeto: class5.2 – Orientação a objeto: construtores5.3 – Orientação a objeto: encapsulamento5.4 – Orientação a objeto: herança5.5 – Orientação a objeto: polimorfismo6.0 – EOF

1.0 – Introdução a linguagem PHP

a linguagem php foi criada por Rasmus lerdorf em 1995 e o seu significado é Php Hypertext Processor (PHP) sendo originalmente chamada de Personal Home Page Tools (PHP Tools), ela foi criada para substituir o uso da linguagem Perl como CGI e hoje é uma das linguagens mais usadas para programação web, existem muitos CMS que foram desenvolvidos em PHP como wordpress, joomla, phpbb, vbulletin, entre muitos outros, a versão atual do PHP é a versão 7 embora nesse ebook vou abordar mais o PHP versão 5, a linguagem PHP é uma linguagem interpretada, ou seja, énecessário o interpretador da linguagem para executar os scripts, quando ela é utilizada para uso web o servidor web recebe as requisições e repassa para o interpretador PHP para executar, a saída dele é repassado para o cliente como HTML puro, ou seja, o cliente não tem acesso à execução do PHP apenas o retorno dele, o PHP como foi dito também é uma linguagem que pode ser usada para uso geral porém originalmente foi desenvolvida para programação web sendo que ate alguns programadores dela desconhece essa possibilidade, a entrada de dados para linguagem quando se trata de programação web é por formulários HTML pelo metodo GET ou POST, já na programação Desktop como não existe uma função de entrada deve utilizar o handle STDIN em conjunto com uma função de leitura ou por argumentos passado diretamente pelo terminal, a linguagem PHP permite orientação a objeto porém não é uma regra para programar nela ela tambem vem com diversas funções como padrão da própria linguagem sem a necessidade de declarar bibliotecas externas para ser utilizada porém essas funções são extensões que foram declaradas no arquivo de configuração do próprio interpretador PHP

1.1 – Interpretadores e IDE

como dito antes para programar em PHP é necessário o interpretador da linguagem e ele pode ser baixado no site oficial da linguagem PHP, apenas com o interpretador é possível programa para desktop porem para programar para uso web precisamos de um servidor web como apache ou iis configurado para o usar ele, para não precisar configurar o php junto ao servidor web existem servidores já configurados como xampp e wamp que além de vir com o servidor web também vem um servidor de banco de dados e o PHP sendo eles os mais recomendados

http://php.net/downloads.php (site oficial)https://sourceforge.net/projects/xampp (xampp ~ recomendo esse)http://www.wampserver.com (wamp)http://winlamp.sourceforge.net (winlamp)https://www.mamp.info (mamp)http://www.easyphp.org (easyphp)http://www.tutorialspoint.com/php_terminal_online.php (tutorialpoint ~ online)http://phptester.net (phptester ~ online)

se você usa linux você pode baixar diretamente pelo repositório da sua distro (as vezes necessário baixar outros pacotes como o servidor web ou dependendo da distro o pacote pode estar com outro

Page 3: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

nome), algumas distros tem a opção de instalar quando instala o próprio sistema operacional como olinux CentOS que é largamente usado para servidores

distro baseada em debian (ubuntu, kali, metamorphose)# apt-get install php

distro baseada em redhat (centos, fedora)# yum install php

distro baseada em arch# pacman -S php

para facilitar na hora de programar podemos utilizar uma IDE que é um ambiente de programação que contem um editor de texto que destaca as sintaxes da linguagem e seus erros, boa parte das IDEs voltada ao PHP tambem permite outras linguagens web com o próprio HTML e javascript

http://www.adobe.com/br/products/dreamweaver.html (adobe dreamweaver)https://notepad-plus-plus.org (notepad++)http://www.geany.org (geany)http://www.mpsoftware.dk (phpdesign)http://www.nano-editor.org/ (nano)http://www.vim.org/ (vim)

usar uma IDE apenas facilita na hora de programar embora seu uso seja opcional sendo possível programar com qualquer editor de texto puro de sua preferência

1.2 – Executando o script PHP

os scripts em php pode ser executado tanto pelo terminal (prompt) assim sendo usado para uso desktop quanto para uso web por um servidor web configurado para isso, quando optamos em programar PHP para desktop é necessário que o diretório do interpretador esteja na variavel de ambiente do sistema para que o mesmo posso executar sem a necessidade de localizar ele ou então agente vai precisar definir o diretório completo onde está o interpretador, nesse exemplo eu vou usar o xampp instalado no diretório padrão que é C:\xampp\php, ou seja nesse caso a variavel de ambiente deve esta apontado para esse diretório já que o interpretador está dentro dele, o intepretador está com o nome php.exe ou seja para executar basta eu executar esse programa pelo terminal com a sintaxe -v (a sintaxe -v mostra a versao do php)

php.exe -v

caso esse diretório não esteja definido na variavel de ambiente é necessário especificar o diretório completo do executavel

c:\xampp\php\php.exe -v

não é necessário o uso da extensão .exe no final já que por padrão o sistema reconhece o arquivo executavel sem ele

c:\xampp\php\php -v

Page 4: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

no linux quando instala o PHP costuma o executável do interpretador ir para o diretório /usr/bin sendo esse diretório uma variável de ambiente com isso não é necessario especificar o diretorio

/usr/bin/php -v

para a gente executar um script PHP usamos a sintaxe -e seguido do nome do script php porém se faz necessário estar no mesmo diretório que o script (você pode usar o comando cd seguido do diretório para mudar de diretório no terminal), os scripts php também contem a extensão .php

php -e kodo.php

ou então podemos especificar o endereço completo onde está o script e assim executar ele do diretório atual

php -e c:\users\kodo\desktop\kodo.php

quando exitem espaços no nome do script ou do diretório temos que colocar ele entre aspas

php -e "kodo no kami.php"

como na linguagem perl e muitas outras podemos passar argumentos para ser manipulado pelo script diretamente pelo terminal bastando separar cada argumento por espaço (se tiver espaço no argumento colocamos ele entre aspas)

php -e kodo.php 127.0.0.1 "flood attack"

para programar em php para web precisamos de um servidor web configurado com o php por isso recomendo o xampp que disponibiliza o apache como servidor web já configurado com php e mysql(além de alguns outros servidores como e-mail e ftp), o servidor web especifica um diretorio para ser o diretorio raiz do seu site no caso do xampp esse diretório fica em c:\xampp\htdocs (no linux o diretorio raiz do servidor web fica na maioria das vezes em /var/www), o diretorio raiz do site é onde temos que adicionar nossos scripts para que o servidor web leia e interprete ele sendo que qualquer script adicionado ali vai ser lido pelo servidor e executado por ele (caso o servidor web não reconheça o tipo de arquivo o mesmo será baixado para o cliente ao invés de interpretado pelo servidor), diferente da programação desktop que temos que executar o interpretador já na programação web temos que ter o servidor web rodando para isso basta você apertar no botao start no menu do xampp para ativar o apache, já no linux em algumas distro basta rodar o serviço com o comando service nome do serviço seguido do start

service apache2 start com o servidor rodando basta abrir qualquer navegador e digitar o IP da maquina do servidor web, caso esteja rodando na mesma maquina você pode usar o IP de loopback 127.0.0.1 que indica a própria maquina (caso você queira deixar seu servidor online dependendo deve abrir a porta no seu roteador e o IP usado é o IP publico e não o privado da sua rede)

http://127.0.0.1/

Page 5: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

a pagina principal em um site quando não especificamos a pagina na url costuma ser a index.html ou index.php, o xampp tem uma pagina index já customizada você pode apagar ela e fazer a sua própria pagina index, no caso de não existir nenhuma pagina index o servidor lista todos os arquivos naquele diretorio, se a gente colocar um script PHP no diretorio raiz do servidor web exemplo o script kodo.php para acessar ele basta especificar ele na url

http://127.0.0.1/kodo.php

podemos criar diretorios dentro do diretorio raiz e eles tambem serão acessivel pelo servidor web (porem diretorio anteriores ao diretorio raiz não é acessível pelo servidor web por medidas de segurança), você pode criar sub-diretórios no diretorio raiz para separar seus sites ou arquivos, ou seja, ter mais de um site no mesmo servidor web

http://127.0.0.1/meusite/kodo.php

diferente da programação desktop onde passamos argumentos pelo próprio terminal na programação web passamos argumentos pelos metodos Get e Post (cookie, session, etc), vamos ver isso mais para frente

http://127.0.0.1/kodo.php?nome=flavio

você tambem pode ter um servidor de DNS ou contratar um para apontar um nome de domínio direto para aquele IP, porem para isso seu IP deve ser o IP publico e deve ser estatico ou usar algum serviço de DDNS como o no-ip (não vou abordar isso nesse ebook talvez em um futuro ebook sobreservidores e rede)

http://www.kodo.fts/kodo.php

o próprio interpretador PHP pode ser usado como servidor web porem ele é bem limitado comparado aos outros já que apenas ler um único script, para usar ele basta chamar o interpretador php com o argumento -S seguido do próprio IP e a porta seguido do nome do script PHP

php -S 127.0.0.1:80 kodo.php

manter um servidor sai caro já que além de luz você precisa gastar com internet sendo que precisa de IP estatico do provedor que é mais caro do que os planos para usuários normais, uma internet com maior velocidade de upload que é mais caro tambem, manutenção e as vezes sistemas de redundaria tanto para backup quanto para estabilidade e disponibilidade do servidor, uma forma para contornar isso sem precisar se preocupar seria contratar um webhost ou um dedicado (vps) que seria um servidor de terceiro onde não precisamos nos preocupar com boa parte do que eu citei apenas pagando mensalmente ou anualmente, existem também webhost free que permite você hospedar seu site de graça disponibilizando ate subdomínio gratis, banco de dados, alguns ate com servidores de e-mail onde é possível criar e-mails customizado, porem são mais limitados com pouco espaço em disco, limite de banda, limite de e-mail, limite de banco de dados e alguns com propaganda (ADS), vou citar alguns desse webhost free afinal não vale a pena contratar um apenas para aprender programar ou para projetos pequenos

https://www.000webhost.com/http://www.hostinger.com.br/ (hospedei um site ano passado tá la ate hoje)http://www.freehostingeu.com/

Page 6: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

https://www.5gbfree.com/http://www.biz.nf/

1.3 – Sintaxe PHP

a sintaxe da linguagem PHP é muita parecida com a linguagem C, Java e Perl, então se souber qualquer uma delas já vai automaticamente saber o basico do PHP, como tambem vale o oposto se souber o PHP vai saber o basico dessas outras também, o PHP funciona como muitas outras linguagens webs que o codigo precisa ficar entre uma tag espefica que no caso do PHP essa tag de abertura é menor que seguido de interrogação e a para tag de fechamento usamos interrogação seguido de maior que e o codigo PHP ficaria entre essa duas

<? ?>

as vezes a tag anterior não é reconhecida então é recomendado usar a palavra php em conjunto com a tag de abertura

<?php?>

no nosso codigo podemos usar dirversas tags

<?php?>

<?php?>

se a gente escrever qualquer coisa fora da tag não será interpretado pelo PHP sendo que o interpretador vai enviar esse texto como se fosse um codigo puro mesmo, por esse motivo podemos usar várias tags no nosso código, ou seja, podemos escrever fora da tag para não ser interpretado pelo PHP

visitem <?php?>o fórum eof

como o texto fora da tag é um texto puro entao podemos colocar um codigo HTML

<html><body><?php?></body></html>

como tambem é possível usar a saida do PHP para gerar o proprio HTML de forma mais dinâmica

Page 7: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php echo("<html><body></body></html>");?>

na linguagem PHP é usado o ponto e vírgula depois de cada função indicando o final dela e não a quebra de linha

<?php echo("<html>"); echo("<body>"); echo("</body>)"; echo("</html>");?>

como é usado o ponto e vírgula podemos colocar tudo na mesma linha ou dar quantos espaços a gente quiser, porém não é legal fazer isso já que deixa o código inlegível e isso é coisa de programador retardado '-'

<?php echo("<html>"); echo ("<body>"); echo("</body>"); echo("</html>"); ?>

1.4 – Biblioteca da linguagem PHP

não precisamos criar nosso codigo em um único arquivo podemos criar em vários arquivos separados e depois importar ele no nosso codigo principal que seria equivalente a colocar ele no próprio codigo (programação modular), para importar um arquivo usamos a função include seguido do nome dele entre parênteses (os parênteses nas funções são opcionais embora recomendo sua utilização)

<?php include("kami.php");?>

como o codigo é linear lido de cima para baixo da esquerda para direita ate o momento que ele não foi importado ele não existe no codigo, e só sera interpretado no momento que foi importado e nunca antes disso

<?php include("primeiro.php"); include("segundo.php");?>

podemos importar várias vezes o mesmo arquivo no codigo, que seria o mesmo que ter aquele código várias vezes no codigo

<?php include("kami.php"); include("kami.php"); include("kami.php");?>

Page 8: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

nunca inclua o próprio arquivo isso gera uma loop infinito já que dentro do mesmo arquivo tem ele sendo importado por ele mesmo que acaba sendo importado novamente e assim infinitamente preso nesse paradoxo recursivo '-'

<?php echo("loop infinito no script kodo.php"); include("kodo.php");?>

uma forma de evitar do arquivo ser incluido várias vezes no mesmo script é usar a função include_once no lugar do include que inclui apenas uma vez no arquivo mesmo usando ele várias vezes (com o include_once não é possível incluir o próprio arquivo)

<?php include_once("kami.php"); include_once("kami.php");?>

alem do include podemos usar o require que tem o funcionamento parecido com include, a diferença que o include vai continuar executando o script mesmo se o arquivo incluído der algum erro já o require se houver algum erro do arquivo includo a execução do script é parada

<?php require("kami.php");?>

tambem existe o require_once que permite incluir apenas o arquivo uma única vez

<?php require_once("kami.php"); require_once("kami.php");?>

a utilidade da linguagem modular é permitir criar funções para ser usado futuramente em novos projetos sem precisar reescrever o código apenas incluído aquele já existente, as funções padrões dalinguagem já são includa nelas e tem o nome de extensão podendo ser habilitada ou desabilitada no arquivo de configuração do PHP e essas são compiladas, por outro lado existem centenas modulos não incluídos que precisa ser importado para ser usado, esses módulos fica dentro de uma pasta especifica que é uma variável de ambiente para o PHP, no caso do xampp a pasta fica em C:\xampp\php\pear sendo ela uma variável de ambiente para o PHP então não é necessario incluir o diretório completo podendo incluir a partir daquele diretorio

<?php include("HTTP\Request.php"); include("Archive\Tar.php");?>

você pode colocar seus scripts mais usados ali dentro para facilitar na hora de importar eles

<?php

Page 9: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

include("kodo/kami.php");?>

uma coisa que devo alertar é sempre tomar cuidado se for incluir arquivos dinamicos que venha do usuario já que poderia gera vulnerabilidades como o LFI e RFI

1.5 – Instalando extensão em PHP

a forma mais simples de instalar uma extensão em php é usando programas que automatiza isso como pear e pecl, a diferença do pear para pecl que o pear são extensões escritas diretamente em PHP já o pecl foram escritas em C e precisa de permissão para compilar, o uso das duas ferramentassão parecidas bastando abrir o terminal e digitar os comandos necessários, para mostrar os comandos da ferramenta pear basta digitar terminal pear sem nenhum argumento

pear

o mesmo vale para a ferramenta pecl

pecl

com o argumento list-all ele lista todos as extensões que podem ser baixada, no caso do pear ele vai puxar do canal http://pear.php.net já o pecl vai ser puxado do http://pecl.php.net, na primeira vez eleé um pouco lento já que precisa baixar a lista completa

pear list-all

É possível atualizar a lista do repositório usando o argumento update-channels sendo recomendo fazer isso antes mesmo de usar o list-all

pear update-channels

você pode listar os channels usados com argumento list-channel

pear list-channel

para a gente instalar uma extensão usamos install seguido do nome dele

pear install pear/Crypt_RC4

para desinstalar usamos o argumento uninstall seguido do nome dele

pear uninstall pear/Crypt_RC4

é possível usar o ugrade para atualizar aquele modulo caso ele seja versao antiga sera baixado a versão mais recente

pear upgrade pear/Crypt_RC4

ou upgrade-all para atualizar todas as extensões instaladas

Page 10: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

pear upgrade-all

se a gente uso argumento list seguido do nome ele mostra o local onde foi instalado

pear list pear/Crypt_RC4

com o argumento info mostra informações sobre aquela extensão como nome, author, licença, versão, última modificação etc

pear info pear/Crypt_RC4

é possível apenas baixar a extensão sem instalar com o argumento download, e sera baixado para onde o terminal esta apontando

pear download pear/Crypt_Blowfish

para instalar uma extensão baixada usamos o install tambem

pear install Crypt_Blowfish-1.0.1.tgz

embora a gente esteja utilizando o pear nos exemplos o uso do pecl é igual, porém o pecl são compilações e boa parte dele é voltado para plataforma linux embora possa ser contornando usando programas como cygwin

pecl download pecl/opengl

1.6 – Comentários

podemos comentar o código para facilitar futuras modificações ou para destacar determinada parte do código ou para remover temporariamente determinada parte, quando comentamos uma parte essaparte é ignorada pelo interpretador, existem 3 formas de comentar na linguagem PHP a primeira é usado o sharps que comentar tudo depois dele, ou seja tudo que estiver depois dele naquela linha é comentário

<?php#isso é um comentário?>

outra forma parecida com a anterior é usando duas vezes a barra

<?php//isso é um comentário?>

podemos usar um comentário para remover um trecho de codigo

<?php //include("kodo.php");

Page 11: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

ou usar para dizer o que determinado trecho de codigo faz exatamente

<?php include("kodo.php"); //inclui o arquivo kodo.php?>

é muito utilizado o comentário no começo do código para dar informações sobre ele como o autor, data e etc

<?php//coder: kodo no kami//forum: eofcommunity.com/forum//data: 27/03/2016?>

além do comentário da linha toda também temos o comentário de várias linhas, para esse comentário usamos a barra e o asterisco para inciar e para finalizar asterisco barra e tudo que estiverentre os dois será o comentário

<?php/*coder: kodo no kamiforum: eofclub.com/forumdata: 27/03/2016*/?>

podemos usar esse comentário de várias linha para comentar ate mesmo dentro de trecho de código sem interferir nele

<?php include("kodo.php" /* muuuuu */);?>

2.0 – Saida de dados

quando precisamos mostrar algo na tela ou mostrar algum texto na pagina usamos uma função de saida de dados, essas funções de saida de dados no php quando usado para programação destkop é exibido no terminal já quando se trata da programação web é enviado como texto puro para o navegador cliente sendo equivalente a escrever sem a tag do PHP, uma das funções de saida de dados do PHP é o echo que mostra alguma coisa na tela como uma string, um numero, ou algum outro tipo de dado

<?php echo("kodo no kami");?>

o php também aceita as chamadas de funções sem parênteses, porém para facilitar o aprendizado em

Page 12: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

futuras linguagens nesse ebook vou sempre colocar com parênteses já que em muitas linguagens isso é obrigatório

<?php echo "kodo no kami";?> é possível usar as funções quantas vezes a gente quiser

<?php echo("kodo no kami"); echo("forum eof");?>

o código anterior sera exibido na mesma linha sendo equivalente a usar apenas um único echo

<?php echo("kodo no kamiforum eof ");?>

para a gente dar uma quebra de linha quando se trata da programação desktop usamos um caractere de escape \n para cada nova quebra de linha

<?php echo("kodo no kami\nforum eof ");?>

na programação web temos que usar codigos HTML para dar a quebra de linha, no caso a quebra delinha é a tag <br> (brasil fazendo sucesso nas linguagens webs kkkk )

<?php echo("kodo no kami<br>forum eof ");?>

existem outros caracteres de escape como tabulação \t

<?php echo("kodo\tkami");?>

não existe tabulação em HTML, porem é possível criar efeito semelhante usando um div com tamanho fixo e alinhado

<?php echo("kodo<div style='width: 100px; float: left'>kami</div>");?>

podemos usar quantos espaço a gente quiser na programação desktop

Page 13: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php echo("kodo no kami");?>

porem o mesmo não é aceito quando tratamos de programação web, um forma de permitir isso seriasubstituir o espaço pelo escape &nbsp

<?php echo("kodo &nbsp &nbsp &nbsp &nbsp no &nbsp &nbsp &nbsp &nbsp kami");?>

para exibir o próprio aspas usamos barra seguido do aspas \”

<?php echo("ebook escrito por \"kodo no kami\"");?>

para ser exibido a barra usamos duas vezes a barra \\

<?php echo("o meu interpretador php fica em c:\\xampp\\php");?>

tambem é possível utilizar aspas simples nas strings, a diferença que aspas simples não interpreta alguns caracteres de escape como a quebra de linha \n

<?php echo('kodo \n kami');?>

podemos juntar (concatenar) duas ou mais strings usando o ponto

<?php echo("kodo" . " no " . "kami");?>

outra função de saída de dados que tem o mesmo uso que echo é a função print

<?php print("echo e print tem o mesmo uso”);?>

tanto o echo quanto o print permite a saída de números também, a diferença que os numeros não fica entre aspas

<?php print(315);?>

Page 14: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

como também podemos utilizar o print ou echo para mostrar uma variavel,

<?php $kodo = "kodo no kami"; echo($kodo);?>

outra função de saida é o printf onde permite formatar uma saida, sendo sua forma mais simples de uso como as anteriores

<?php printf("essa funcao permite formatar uma saida");?>

o primeiro argumento do printf é a string de saida onde podemos especificar o tipo de entrada de dados, os demais argumentos são os dados que serão inseridos na string, para dados do tipo numérico usamos o carácter de escape %d que indica onde ele sera adicionado e o seu tipo de formato tambem

<?php printf("o numero %d vem do meu antigo nick", 315);?>

outro tipo de dado é float que são numeros com pontos, para esses usamos o caracter de escape %f

<?php printf("o valor de PI e %f ", 3.14);?>

se a gente exibir um numero com ponto usando o caractere %d ele vai mostra apenas o numero inteiro e não a parte quebrada dele

<?php printf("o valor de PI e %d ", 3.14);?>

para mostrar numeros no formato hexadecimal usamos %x

<?php printf("hex %x", 315);?>

para números no formato octal usamos %o

<?php printf("octal %o", 315);?>

os numero em formato binário usamos %b

Page 15: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php printf("bin %b", 315);?>

podemos usar o caracter %e para exibir o numero por notação científica ou seja numeros muito grande como 31500000 de uma forma mais compacta 3.15e+7 ou 3.15 x (10 ^ 7)

<?php printf("exp %e", 31500000);?>

para mostrar uma string usamos o carácter de escape %s (porem não faz muito sentido já que é possível colocar tudo na string de formatação sendo mais útil para inserir variaveis)

<?php printf("%s esse e meu nick ", "kodo no kami");?>

não é possível exibir uma string usando o carácter de escape numérico

<?php printf("%d ", "kodo no kami");?>

a função printf permite passar quantos argumentos a gente quiser porem deve ter um caracter de escape para cada argumento novo inserido e deve seguir a ordem correta

<?php printf("decimal %d hexadecimal %x octal %o binario %b", 315,315,315,315);?>

2.1 – Variaveis

as variaveis são alocação de memória onde permite armazenar valores para ser recuperado ou modificado ao decorrer do programa, em boa parte das linguagens as variaveis permite armazenar tipos especifico e apenas esse tipo porem a linguagem PHP é uma linguagem fracamente e dinamicamente tipada ou seja você pode armazenar um tipo de dado na variavel e ao decorrer do programa depois pode armazenar outro tipo de dado na mesma varaivel, as variaveis podem ter qualquer nome porem não podem começar com numeros ou caracteres especias como tambem não podem conter espaços no nome, as variaveis em PHP podem ser diferenciada das funções por iniciar com cifrão seguido do nome (igual a linguagem Perl), tambem usamos o sinal de igual para atribuir um valor para uma variavel

<?php $kodo = 315;?>

pode ser usado qualquer tipo de dado como string, numeros, numeros quebrados (float), etc

Page 16: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $kodo = "kodo no kami";?>

podemos ler o conteúdo de uma variável apenas usando ela, isso seria equivalente a ler o dado armazenado nela

<?php $kodo = "kodo no kami"; echo($kodo);?>

as variaveis podem mudar de valor ao decorrer do programa

<?php $kodo = 315; echo($kodo);

$kodo = 5000; echo($kodo); ?>

como a linguagem PHP é fracamente tipada então a variavel pode mudar para tipos diferentes

<?php $kodo = 315; echo($kodo);

$kodo = "kodo no kami"; echo($kodo); ?>

uma variavel também pode receber o valor de outra variavel

<?php $kodo = 315; $kami = $kodo; echo($kami);?>

também é possível armazenar o valor da variável nela mesmo

<?php $kodo = 315; $kodo = $kodo; echo($kodo);?>

muitas funções retornar um valor que pode ser armazenada em uma variável como por exemplo a função sprintf que tem o mesmo uso da função printf porém ao invés de mostrar na tela ela retorna

Page 17: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

como uma string formatada

<?php $kodo = sprintf("esse e o %d ebook", 4); echo($kodo);?>

podemos especificar o tipo da variavel usando a função settype, para isso passamos como argumento a variavel seguido da string indicando o tipo, para os tipos decimais ou inteiros usamos “int”, para os tipos numéricos quebrados usamos tipo “float” ou “double”, para os tipos string usamos “string”, para os tipos booleanos usamos “boolean”, quando especificamos um desses tipos a variavel vai sempre ler como esse tipo de dado independente se for outro tipo armazenado nela

<?php $kodo = "isso e uma string"; settype($kodo,"string"); echo($kodo);?>

também é possível ver o tipo atual usando a função gettype, nela passamos como argumento a variável e por fim basta ler o retorno da função

<?php $kodo = 3.15; $tipo = gettype($kodo); echo($tipo);?>

é possível ver se uma variavel foi criada usando a função isset e passar a variavel como argumento eela retorna 1 (veradeiro) caso a varivel foi criada ou 0 (falso) caso não tenha sido criada

<?php $kodo = 315; $retorno = isset($kodo); printf("%d",$retorno);?>

com a função empty retorna 1 se a variável estiver vazia ou caso não exista e retorna 0 caso não esteja vazia

<?php $kodo = ""; $retorno = empty($kodo); printf("%d",$retorno);?>

tambem é possível destruir uma variavel com a função unset

<?php $kodo = "kodo no kami";

Page 18: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

unset($kodo); $retorno = isset($kodo); printf("%d",$retorno);?>

com a função var_dump é possível ver informações sobre a variavel

<?php $kodo = "kodo no kami"; $retorno = var_dump($kodo); echo($retorno);?>

podemos definir uma constante com a função define diferente da variavel a constante não pode ser mudada

<?php define("kodo", "kodo no kami"); echo(kodo);?>

outra forma de definir uma constante é usar a palavra const seguido do nome da constante e seu valor atribuido a ele

<?php const kodo = "kodo no kami"; echo(kodo)?>

2.2 – Arrays (Vetores e Matrizes)

as variaveis permite armazenar apenas um valor por vez já as arrays permite armazenar vários valores ao mesmo tempo como uma lista, para acessar cada valor em uma array usamos um indice de posição e cada posição corresponde ao valor armazenado nela, para criar uma array é a mesma coisa que uma variavel porém especificamos uma posição numerica para cada valor armazenado usando um colchete (a posições da array começa no numero 0)

<?php $linguagem[0] = "c/c++"; $linguagem[1] = "pascal"; $linguagem[2] = "perl"; $linguagem[3] = "php";?>

para acessar o valor basta acessar da mesma forma que uma variavel porém usando a posição equivalente dela é claro

<?php $linguagem[0] = "c/c++";

Page 19: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$linguagem[1] = "pascal"; $linguagem[2] = "perl"; $linguagem[3] = "php";

echo($linguagem[3]);?>

podemos armazenar a posição em uma variavel e mudando o valor ao decorrer do programa

<?php $linguagem[0] = "c/c++"; $linguagem[1] = "pascal"; $linguagem[2] = "perl"; $linguagem[3] = "php";

$pos = 0; printf("%s \n",$linguagem[$pos]);

$pos = 1; printf("%s \n", $linguagem[$pos]);?>

como tambem é possível mudar o valor dentro da array ao decorrer do programa

<?php $linguagem[0] = "c/c++"; $linguagem[1] = "pascal"; echo($linguagem[0] . "\n"); echo($linguagem[1] . "\n");

$linguagem[0] = "perl"; $linguagem[1] = "php"; echo($linguagem[0] . "\n"); echo($linguagem[1] . "\n");?>

você tambem pode usar na posição uma strings em vez de numeros, porem para correr cada posição dessa forma é um pouco mais complicado já que não basta incrementar a posição

<?php $eu["nome"] = "flavio"; $eu["nick"] = "kodo no kami"; $eu["idade"] = 23;

echo($eu["nome"] . "\n" ); echo($eu["nick"] . "\n" ); echo($eu["idade"] . "\n" );?>

como uma variavel podemos iniciar uma array com todos os valores já definidos bastando atribuir todos eles entre colchete e separado por virgula, nesse caso cada valor sera atribuído a uma posição

Page 20: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

numérica

<?php $eu = ["flavio", "kodo no kami", 23];

echo($eu[0] . "\n" ); echo($eu[1] . "\n" ); echo($eu[2] . "\n" );?>

tambem é possível fazer o mesmo usando posições com strings porem temos que atribuir em conjunto com o valor a string que sera a posição depois simbolo igual e maior que seguido do valor

<?php $eu = ["nome" => "flavio", "nick" => "kodo no kami", "idade" => 23];

echo($eu["nome"] . "\n" ); echo($eu["nick"] . "\n" ); echo($eu["idade"] . "\n" );?>

outra forma de atribuir os valores diretamente é usar a função array e substituir o colchete

<?php $programacao = array("desktop","web","mobile","low-level");

echo($programacao[0] . "\n" ); echo($programacao[1] . "\n" ); echo($programacao[2] . "\n" ); echo($programacao[3] . "\n" );?>

podemos usar a função var_dump para ver toda estrutura da array

<?php $programacao = array("desktop","web","mobile","low-level"); echo(var_dump($programacao));?>

tambem podemos ler a estrutura de uma array usando a função print_r

<?php $programacao = array("desktop","web","mobile","low-level"); print_r($programacao);?>

com a função sizeof retornamos o tamanho da array

<?php $programacao = array("desktop","web","mobile","low-level");

Page 21: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$tamanho = sizeof($programacao); echo($tamanho);?>

se a gente atribuir uma array para uma variavel, essa variavel se torna uma array

<?php $kami = "kodo no kami"; $programacao = array("desktop","web","mobile","low-level"); $kami = $programacao; echo($kami[0]);?>

o mesmo vale para oposto atribuindo uma variavel para uma array, a array se torna uma variavel

<?php $kami = "kodo no kami"; $programacao = array("desktop","web","mobile","low-level"); $programacao = $kami; echo($programacao);?>

é possível adicionar um valor na ultima posição da array usando a função array_push, nela passamos como argumento a array onde sera adicionado e o valor

<?php $nick= ["fts315"]; array_push($nick,"kodo no kami");

echo($nick[0] . "\n"); echo($nick[1] . "\n");?>

como tambem é possível retornar e remover o ultimo valor da array com a função array_pop

<?php $nick= ["fts315","kodo no kami"]; $ultimo = array_pop($nick);

echo($ultimo);?>

para retornar e remover o primeiro valor da array usamos array_shift

<?php $nick= ["fts315","kodo no kami"]; $primeiro = array_pop($nick);

echo($primeiro);?>

Page 22: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

com a função implode podemos concatenar todos os valores da array para uma variavel

<?php $estado = ["rj", "sp", "mg"]; $junto = implode($estado);

echo($junto . "\n");?>

a gente tambem pode passar um segundo argumento para a função implode que seria um separador entre cada valor concatenado

<?php $estado = ["rj", "sp", "mg"]; $junto = implode($estado, " - "); echo($junto . "\n");?>

com a função explode fazemos o oposto pegamos uma string e separamos em partes para se armazenada em uma array

<?php $estado = explode("-","rj - sp - mg"); echo($estado[0] . "\n");?>

existe a função array_keys que retorna as strings usadas nas posições daquela array, o retorno seria outra array com apenas as strings de posições

<?php $info["nome"] = "kodo"; $info["idade"] = 23; $nomes = array_keys($info); echo($nomes[0] . " " . $nomes[1]);?>

o mesmo pode ser feito para as arrays que usa numeros embora não faça muito sentido

<?php $info[0] = "kodo"; $info[1] = 23; $nomes = array_keys($info); echo($nomes[0] . " , " . $nomes[1]);?>

para retornar apenas os valores da array usamos a função array_values

<?php $info[0] = "kodo";

Page 23: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$info[1] = 23; $nomes = array_values($info); echo($nomes[0] . " , " . $nomes[1]);?>

podemos buscar uma posição de uma array que contenha um valor especifico com a função array_search, na função passamos como argumento o valor que vamos buscar seguido da array e elaretorna a posição

<?php $info[0] = "kodo"; $info[1] = "kami"; $info[2] = "fts315"; $pos = array_search("kami",$info); echo($pos);?>

ate agora vimos apenas arrays com apenas um conjunto de posição que são chamadas de vetores, alem dos vetores existem as matrizes que são arrays que armazena outras arrays ou seja cada posição da array aponta para outra array com mais posições, para criar uma matriz usamos mais um colchete com uma nova posição

<?php $matriz[0][0] = "kodo no kami"; echo($matriz[0][0]);?>

os valores são armazenados da direita para esquerda ou seja os valores estao sempre na ultima posição da matriz, e a aquela posição esta dentro da posição anterior, no caso as anteriores serve como indice para a próxima posição

<?php $matriz[0][0] = "kodo no kami"; $matriz[0][1] = "fts315";?>

a vantagem de uma matriz que permite armazenar grandes quantidade de valores de forma facil paraser acessada, para armazenar 50 valores diferente em variaveis a gente precisa criar 50 variaveis ou um vetor com 50 posição, ou então uma matriz com 5 posição e cada uma dessas posições com outras 10 posições (5*10=50)

<?php $matriz[0][0] = "c/c++"; $matriz[0][1] = "pascal"; $matriz[1][0] = "perl"; $matriz[1][1] = "php";?>

outra vantagem da matriz é a organização já que podemos usar a primeira posição para definir o indice as próximas os valores armazenados nele, um exemplo seria para armazenar o nome e idade

Page 24: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

de varias pessoas depois permutar apenas o indice para mudar o valor

<?php $info[0][0] = "kodo"; $info[0][1] = 23; $info[1][0] = "fts315"; $info[1][1] = 15;

$id = 0; echo("nome " . $info[$id][0] . " idade " . $info[$id][1]); ?>

tambem é possível usar strings na posições igual as variaveis

<?php $info[0]["nome"] = "kodo"; $info[0]["idade"] = 23; $info[1]["nome"] = "fts315"; $info[1]["idade"] = 15;

echo("nome " . $info[0]["nome"] . " idade " . $info[0]["idade"] . "\n"); echo("nome " . $info[1]["nome"] . " idade " . $info[1]["idade"]); ?>

podemos iniciar os valores junto com a matriz usando um colchete dentro do outro separando eles por virgula para cada posição

<?php $info = [["kodo",23], ["fts315",15]];

echo("nome " . $info[0][0] . " idade " . $info[0][1] . "<br>"); echo("nome " . $info[1][0] . " idade " . $info[0][1]); ?>

como tambem é possível iniciar com as posições usando strings da mesma forma que as arrays

<?php $info = [["nome" => "kodo", "idade" => 23], ["nome" => "fts315", "idade" => 15]];

echo("nome " . $info[0]["nome"] . " idade " . $info[0]["idade"] . "<br>"); echo("nome " . $info[1]["nome"] . " idade " . $info[0]["idade"]); ?>

tambem podemos usar string para a primeira posição dessa forma

<?php $info = ["um" => ["nome" => "kodo", "idade" => 23]];

echo("nome " . $info["um"]["nome"] . " idade " . $info["um"]["idade"]);?>

Page 25: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

as matrizes não se limita apenas a duas posições e sim a quantas a gente quiser

<?php $info[0][0][0] = "kodo"; $info[0][0][1] = "fts315";

echo("nome " . $info[0][0][0] . "\n"); echo("nome " . $info[0][0][1]); ?>

porem não vamos exagerar na quantidade

<?php $info[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0] = "kodo";

echo("nome " . $info[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]); ?>

lembrando que para cada nova posição para ser iniciado deve conter um colchete dentro do outro

<?php $info = [[[[["kodo"]]]]];

echo("nome " . $info[0][0][0][0][0]); ?>

2.3 – Ponteiros

os ponteiros são tipos de dados especiais ele não é um tipo especifico e sim um apontador para um endereço de memoria de uma variavel, com isso o ponteiro pode acessar aquela variavel indiretamente, ou seja, tudo que for atribuido aquela variavel vai esta atribuido automaticamente ao ponteiro e tudo que for atribuido ao ponteiro sera armazenado dentro daquela variavel sendo o ponteiro é apenas uma variavel intermediaria para acessar a outra, para a gente criar um ponteiro basta atribuir para uma variavel o endereço de memoria da outra variavel que vamos apontar, para fazer isso a gente coloca o simbolo de e comercial “&” indicando que estamos atribuindo o endereço dela e não o valor dentro dela

<?php $kodo = "flavio"; $kami = &$kodo;?>

depois que o ponteiro estiver criado podemos acessar o ponteiro assim acessamos aquela variavel deforma indireta

<?php $kodo = "flavio"; $kami = &$kodo; echo($kami);

Page 26: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

se a gente atribuir um valor para um ponteiro ele não sera armazenado na variavel do ponteiro e simna variavel que ele está apontando

<?php $kodo = "flavio"; $kami = &$kodo; $kami = "fts315"; echo($kodo);?>

podemos atribuir o endereço de um ponteiro para outro ponteiro assim ambos apontaria para o mesmo lugar, ou seja, aquela variavel inicial

<?php $kodo = "flavio"; $kami = &$kodo; $eof = &$kami; $eof = 315; echo($kodo);?>

você pode criar um ponteiro para uma array tambem

<?php $kodo = array("endoffile","eofcommunity","eofclub"); $kami = &$kodo; echo($kami[0]);?>

2.4 – Entrada de dados

entrada de dados é qualquer ação do usuario para o programa no caso do PHP voltado a desktop podemos ter uma entrada de dados por argumento do terminal, outra forma de entrada de dados é durante o processamento do script para isso a gente usa uma função de leitura lendo o handle STDIN, para o PHP voltado web a entrada de dados é por formulários HTML que são passados normalmente via metodos GET/POST, para a gente passar um argumento via terminal basta digitar eles depois do nome do script

php kodo.php "primeiro argumento" "segundo argumento"

para a gente ler esses argumentos passados pelo terminal usamos uma array especial chamada $argvsendo cada posição dela um dos argumentos (a posição começa no 0 sendo ela o nome do script)

<?php echo($argv[0]); echo("\n"); echo($argv[1]); echo("\n");

Page 27: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

echo($argv[2]);?>

podemos acessar o argv tambem pela array $_SERVER que retorna informação do servidor

<?php echo($_SERVER["argv"][0]); echo("\n"); echo($_SERVER["argv"][1]); echo("\n"); echo($_SERVER["argv"][2]);?>

existe a variavel $argc que mostra a quantidade de argumento passados pelo terminal

<?php echo($argc);?>

como tambem é possível acessar o argc é pela array $_SERVER

<?php echo($_SERVER["argc"]);?>

outra forma seria por variaveis de ambiente, no linux podemos atribuir uma variavel de ambiente com o comando env seguido do nome dela seguido de um igual e o valor da variavel e por fim o programa que vai usar aquela variavel

env variavel=315 php kodo.php

para a gente ler uma variavel de ambiente no php usamos a array $_ENV

<?php echo( $_ENV["variavel"]);?>

outra forma de ler uma variavel de ambiente do sistema é por uma função chamada getenv

<?php $valor = getenv("variavel"); echo( $valor);?>

é possível escrever uma variavel de ambiente com a função putenv

<?php putenv("EOF=kodo no kami"); $variavel = getenv("EOF");

Page 28: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

echo( $variavel);?>

para a gente receber uma entrada de dados quando o script estiver sendo processado temos que atribuir direto do handle STDIN com uma função de leitura como a fgets, nessa função passamos como argumento o handle STDIN e o tamanho maximo e tambem atribuimos ela para uma variavel,depois de usar o fgets o script vai ficar pausado esperando o usuario digitar algo e só vai continuar quando precionar enter

<?php $entrada = fgets(STDIN, 100); echo($entrada);?>

é recomendado usar um texto indicando a entrada de dados

<?php echo("digite seu nome: "); $nome = fgets(STDIN, 100); echo("seu nome é " . $nome);?>

para programação web a entrada de dados normalmente é por formularios html que é enviada para oscript php pelo metodo get ou pelo metodo post, veja um formulario html simples que envia para o script kodo.php pelo metodo post um texto que o usuario digitar

<html><body><form action="kodo.php" method="POST"><input type="text" name="nomeusuario"><input type="submit" value="enviar"></form></body></html>

no script php para ler os dados recebido desse formulario POST basta usar a array $_POST sendo a posição dela o name que foi especificado naquele input

<?php echo( $_POST["nomeusuario"] );?>

para o metodo GET usamos a array $_GET

<?php echo( $_GET["nomeusuario"] );?>

para qualquer uma das duas usamos a array $_REQUEST que pode ser tanto GET quanto POST embora seu uso não seja recomendado pode gera ambiguidade no codigo

Page 29: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php echo( $_REQUEST["nomeusuario"] );?>

a diferença entre o metodo GET e o metodo POST que o GET é passado todos esses argumento na própria url dessa forma

http://127.0.0.1/kodo.php?nomeusuario=kodo&idade=24

já o metodo POST é passado no final do pacote HTTP como dado e não na url, em termos de segurança o metodo POST é mais seguro já que para interceptar teria que ler o conteudo do pacote já no metodo GET basta apenas ler a url ou copiar ela já teria acesso aos dados passado (ps: dica do kodo, informações sensiveis como senhas sempre passe pelo metodo post ^^ )

POST /index.php http/Host: ...Cookie: …User-Agent: ...

nomeusuario=kodo&idade=24

outra forma de pegar o metodo GET é usando a array $_SERVER com QUERY_STRING

<?php $get = $_SERVER["QUERY_STRING"]; echo($get);?>

tambem é possível usar a array $_SERVER para pegar o IP do usuario que acessa aquela pagina com REMOTE_ADDR

<?php $ip = $_SERVER["REMOTE_ADDR"]; echo($ip);?>

o User-Agent que o programa dele esta usando que pode ser usado para identificar o navegador e ate o sistema operacional dele

<?php $agente = $_SERVER["HTTP_USER_AGENT"]; echo($agente);?>

como sabemos o metodo GET os dados são enviados via url então você poderia repassar dados via GET apenas redirecionando para uma determinada pagina com a função header com o parametro location

Page 30: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php header("location: pagina2.php?nome=kodo&id=1");?>

2.5 – Cookie e Sessão

o uso de cookies é usado apenas para programação web sendo os cookies uma forma de armazenar dados no navegador do usuario quando ele acessa uma determinada pagina e seu funcionamento sãocomo as variaveis porem entre o servidor e o navegador do usuario, esses cookies são armazenados por tempo ilimitado ou por tempo limitado dependendo se foi especificado um tempo para ele, para criar um cookie em php usamos a função setcookie e nela passamos como argumento o nome do cookie e o valor

<?php setcookie("nick","kodo no kami");?>

podemos criar quantos cookies a gente quiser

<?php setcookie("nick","kodo no kami"); setcookie("nome","flavio");?>

se a gente colocar o mesmo nome de cookie o valor sera substituido como acontece com as variaveis

<?php setcookie("nick","kodo no kami"); setcookie("nick","fts315");?>

para a gente ler um cookie usamos a array $_COOKIE sendo a sua posição o nome do cookie que deve ser lido

<?php $valor = $_COOKIE["nick"]; echo($valor);?>

porem se a gente criar um cookie e tentar ler ele no mesmo momento que foi criado não sera possível, isso por que o cookie que está armazenado na array $_COOKIE vem direto da requisição recebida e para a gente ler teria que atualizar a pagina

<?php setcookie("forum","eofclub"); $valor = $_COOKIE["forum"]; echo($valor);?>

Page 31: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

uma forma de contornar o problema anterior seria se a gente atribuir o valor do cookie para a array tambem

<?php setcookie("forum","eofclub"); $_COOKIE["forum"] = "eofclub"; $valor = $_COOKIE["forum"]; echo($valor);?>

podemos especificar um tempo para expirar o cookie, para a gente especificar esse tempo basta usarum terceiro argumento da função setcookie seguido do tempo maximo que cookie sera valido sendoesse tempo em segundos sendo esse arguento opcional

<?php setcookie("musica","sim", 1476616784);?>

como a conversão de data e hora em segundos é complicado e tedioso podemos usar a função time que vai retornar a data e hora já convertida em segundos depois basta somar com a quantidade de segundos que queremos que seja valido o cookie

<?php $tempo = time() + 3600; setcookie("musica","sim", $tempo);?>

se a gente colocar o valor 0 é equivalente não colocar tempo para expirar

<?php setcookie("musica","sim", 0);?>

as vezes precisamos que esse cookie seja valido em apenas um diretorio e os subdiretorios naquele servidor então podemos especificar o quarto argumento do setcookie sendo esse diretorio naquele servidor (por padrao seria o diretorio raiz “/” )

<?php setcookie("musica","sim", 0, "/radio");?>

o quinto argumento é o dominio daquele servidor pode ser usado para especificar um dominio virtual ou um subdominio

<?php setcookie("musica","sim", 0, "/", "eofclub.com");?>

o sexto argumento do setcookie permite que o cookie seja transmitido apenas se estiver usando

Page 32: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

protocolo seguro ou seja https e ele deve ser setado como true ou false sendo ele o padrao

<?php setcookie("musica","sim", 0, "/", "", true);?>

o ultimo argumento da função setcookie é chamado httponly permitindo apenas cookie vindo direto do protocolo http que não seja criado dinamicamente por linguagens client-side como javascript sendo sua opção true ou false como o anterior

<?php setcookie("musica","sim", 0, "/", "", false, true);?>

para a gente remover um cookie usamos a função unset

<?php setcookie("musica","sim"); uset($_COOKIE["musica"]);?>

como já sabemos os cookies ficam armazenado no navegador sendo o uso não é recomendado para armazenar informações sensiveis já que podem ser facilmente manipulados e modificados pelo ladocliente, alem dos cookies existem as sessões que não são armazenados nos navegadores e sim no próprio servidor e o acesso a eles é restrito ao próprio servidor porém ligada a determinado cliente, quando você cria uma sessão é criado um cookie de token no cliente, ou seja, um cookie que indica que determinada sessão pertence aquele cliente esse cookie tem o nome PHPSESSID, você pode usar uma sessão para várias coisas diferentes como por exemplo dizer se esta logado ou não no sistema ou ate passar informação sensível de uma pagina para outro por sessão sem precisar enviar para cliente para ele fazer a requisição, para criar uma sessão basta usar a função session_start com isso automaticamente a sessão vai ser criada ou instanciada caso ela já exista, tambem é necessario usar essa função em todas as paginas que você for utilizar aquela sessão

<?php session_start();?>

depois da sessão ser criada ou instanciada na pagina você utiliza a array $_SESSION sendo a posição dela um nome que você deseja para aquela variavel de sessão, tambem deve atribuir determinado valor para aquela variavel de sessão

<?php session_start(); $_SESSION["logado"] = "sim";?>

para ler o valor dentro da variavel de sessão basta ler aquela determinada array

<?php

Page 33: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

session_start(); $_SESSION["logado"] = "sim"; echo ($_SESSION["logado"]);?>

podemos usar quantas variaveis de sessão a gente quiser

<?php session_start(); $_SESSION["logado"] = "sim"; $_SESSION["acesso"] = "admin";?>

para destruir uma variavel de sessão usamos o unset como nas variaveis

<?php session_start(); $_SESSION["logado"] = "sim"; unset($_SESSION["logado"]);?>

ou a função session_unset para remover todas

<?php session_start(); $_SESSION["logado"] = "sim"; session_unset();?>

para destruir uma sessão usamos a função session_destroy que pode ser usado quando a pessoa apertar no botão deslogar do site

<?php session_start(); session_destroy();?>

por padrão o nome da sessão no cookie é PHPSESSID, porem podemos mudar isso com a função session_name para especificar outro nome e ele deve ser usado antes do session_start

<?php session_name("KODOSESSID"); session_start();?>

podemos usar a função session_encode para juntar todas as variaveis de sessão em uma única string formatada, o exemplo abaixo ficaria a string “usuario|s:4:"kodo";ultimoip|s:9:"127.0.0.1";”

Page 34: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php session_start(); $_SESSION["usuario"] = "kodo"; $_SESSION["ultimoip"] = "127.0.0.1"; $salvo = session_encode(); echo($salvo);?>

2.6 – Manipulação de string

como já sabemos uma string é conjunto de carecteres sendo ela uma array do tipo char ou seja um conjunto de caracteres, e toda string tem um caractere no final indicando o fim da string que na maior parte das linguagens é o caractere null sendo ele o codigo hexadecimal 0x0, podemos atribuiruma string para uma variavel bastando colocar ela entre aspas

<?php $texto = "minha string"; echo( $texto);?>

ou pode ser usado aspas simples, a diferença entre aspas duplas e simples que aspas duplas permite alguns caracteres de escape como \n

<?php $texto = 'minha string'; echo( $texto);?>

como tambem podemos concatenar duas ou mais strings usando o ponto

<?php $texto = "kodo" . " no " . "kami"; echo( $texto);?>

é possível ler cada posição em uma string apenas lendo ela como uma array

<?php $texto = "kodo no kami"; echo( $texto[0] . $texto[5] . $texto[0]);?>

a função sprintf tem o uso parecido com o printf ou seja permite formata varias entrada, porem ao inves de exibir como printf faz ele retornar para uma nova string

<?php $texto = "kodo no kami"; $numero = 315; $novo = sprintf("meu nick %s, meu numero da sorte %d",$texto,$numero); echo($novo);

Page 35: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

para a gente pegar o tamanho de uma string podemos usar a função strlen passamos como argumento a string ou a variavel dela

<?php $texto = "kodo no kami"; $tam = strlen($texto); echo( $tam);?>

podemos comparar duas string com a função strcmp, se as strings for igual o retorno é 0

<?php $texto1 = "kodo no kami"; $texto2 = "kodo no kami"; $comp = strcmp($texto1, $texto2); echo( $comp);?>

se na função strcmp as duas strings forem diferente o retorno é diferente de 0, se a primeira string for menor que a segunda e tiver o inicio igual a segunda o retorno sera um numero negativo com a quantidade de caracteres de diferença, se for o oposto sendo a primeira string maior que a segunda ea segunda com a mesma sequencia de caracteres inicias que a primeira o retorno sera positivo com essa diferença

<?php $comp = strcmp("kodo", "kodo no kami"); echo( $comp);?>

com a função strstr podemos recortar a string apartir de trecho em uma string. Sendo o primeiro argumento a string da onde vamos recortar e o segundo argumento seria uma string a partir da onde sera recortado, com isso sera gerado uma nova string como retorno apartir daquele trecho

<?php $texto = "era uma vez um programador que fazia programas"; $novo = strstr($texto,"programador"); echo( $novo);?>

se a gente usar um true no terceiro argumento do strstr ele vai recortar a string anterior ate aquele trecho e não apartir dele

<?php $texto = "era uma vez um programador que fazia programas"; $novo = strstr($texto,"programador", true); echo( $novo);?>

Page 36: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

outra função parecida é o stristr que não diferencia maiúsculas ou minúsculas e seu uso é igual a função anterior

<?php $texto = "Era uma vez um Programador que fazia programas"; $novo = stristr($texto,"programador"); echo( $novo);?>

podemos pegar a posição de um determinado trecho com a função strpos ou stripos

<?php $texto = "era uma vez um programador que fazia programas"; $pos = strpos($texto,"programador"); echo( $pos);?>

com a função substr podemos recortar um determinado trecho com base na posição dele, seus argumentos sendo a string e a posição e seu retorno a nova string

<?php $texto = "era uma vez um programador que fazia programas"; $novo = substr($texto, 10); echo( $novo);?>

existe um terceiro argumento do substr que seria o tamanho maximo

<?php $texto = “era uma vez um programador que fazia programas”; $novo = substr($texto, 10, 5); echo( $novo);?>

a função str_repeat vai criar um string repetida, sendo o primeiro argumento a string que vai se repetir e o segundo a quantidade de repetição

<?php $texto = str_repeat("kodo ", 10); echo( $texto);?>

podemos substituir determinados trechos de palavras em uma string por outra usando a função str_replace, os argumentos dessa função é o primeiro sendo a string que estamos buscando dentro da string, o segundo a string que vai substituir ela e a ultima sendo a sting onde estamos buscando

<?php $texto = "programando php para uso web, muito legal programar em php para web"; $novo = str_replace("web", "desktop", $texto); echo($novo);

Page 37: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

a função strrev pode ser usado para reverter uma string

<?php $texto = "kodo no kami"; $novo = strrev($texto); echo($novo);?>

podemos transformar toda string em maiúscula com a função strtoupper

<?php $texto = "kodo no kami"; $novo = strtoupper($texto); echo($novo);?>

ou o inverso toda em minuscula com a função strlouwer

<?php $texto = "KODO NO KAMI"; $novo = strtolower($texto); echo($novo);?>

a função htmlentities é usado para converter alguns caracteres especificos em codigos de escape em html para não ser interpretada como codigo html como acontece com o simbolo menor que é interpretado como tags no html evitando vulnerabilidade como o XSS

<?php $texto = "<script>alert('lasco');</script>"; $novo = htmlentities($texto); echo($novo);?>

no exemplo anterior se a gente não tivesse usado o htmlentities teria executado como um codigo javascript e se essa entrada vem direto do usuario é uma baita vulnerabilidade de XSS

<?php $texto = "<script>alert('lasco');</script>"; echo($texto);?>

podemos codificar uma string para base64 com a função base64_encode

<?php $texto = "kodo no kami"; $codificado = base64_encode($texto);

Page 38: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

echo($codificado);?>

como tambem podemos decodificar uma string que esteja em base64 com a função base64_decode

<?php $codificado = "a29kbyBubyBrYW1p"; $texto = base64_decode($codificado); echo($texto);?>

para criptografar uma string em rot13 com a função str_rot13

<?php $texto = "kodo no kami"; $codificado = str_rot13($texto); echo($codificado);?>

para retornar a hash md5 de uma string usamos a função md5

<?php $texto = "kodo no kami"; $hash = md5($texto); echo($hash);?>

já para a hash sha1 usamos a função sha1

<?php $texto = "kodo no kami"; $hash = sha1($texto); echo($hash);?>

com a função parse_str é possível converter uma string em variaveis, será usado o & como separador dessas variaveis

<?php $texto = "nick=kodo&idade=24"; parse_str($texto); echo($nick);?>

outra função parecida com a anterior é o eval que executa uma string como se fosse um codigo php, porem deve tomar cuidado com o seu uso já que poderia gerar vulnerabilidade como a RCE

<?php $texto = "\$t = 'kodo no kami'; echo(\$t);";

Page 39: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

eval($texto);?>

2.7 – Expressão regular (regex)

expressão regular ou simplesmente regex são meios de manipular uma string de forma muito simples e rapida, com poucos comandos você pode buscar recortar ou substituir determinados trechos de uma string com base em filtros específicos, na linguagem php é usada as funções que começa com preg para definir essas funções de regex, sendo uma dessas funçoes o preg_match que compara uma regex com uma string para ver se existe aquela sequencia nela, quando existe essa determinada sequencia exata da regex na string então casaram essa regex, ou seja, bateu a regex com o texto, para a gente usar o preg_match basta a gente passar no primeiro argumento a regex queé uma string porem dentro dessa string a regex fica entre duas barras indicando uma regex, o segundo argumento é a string que a gente vai comparar (sendo essa string em algumas linguagens chamada de subject), caso a string e a regex case o retorno é 1 indicando que casou ou 0 indicando que não casou, a regex mais simples que existe é apenas uma palavra que tenha na string ou seja se essa palavra da regex existir então casou

<?php $subject = "meu facebook https://www.facebook.com/hacker.fts315 me add"; $retorno = preg_match("/facebook/",$subject); echo($retorno);?>

se não tiver a palavra ou aquela sequencia da regex no texto o retorno é 0

<?php $subject = "meu facebook https://www.facebook.com/hacker.fts315 me add"; $retorno = preg_match("/canal/",$subject); echo($retorno);?>

tambem é possível colocar a regex em uma variavel e chamar ela na função, ou seja, podemos criar regex mais dinamicas

<?php $subject = "meu facebook https://www.facebook.com/hacker.fts315 me add"; $regex = "/meu/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

as regex são case sensitive ou seja faz diferença de letras maiusculas e minusculas

<?php $subject = "meu facebook https://www.facebook.com/hacker.fts315 me add"; $regex = "/Meu/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

Page 40: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

para fazer que a regex não diferencie letras maiusculas e minusculas basta colocar a flag i depois dobarra

<?php $subject = "meu facebook https://www.facebook.com/hacker.fts315 me add"; $regex = "/MeU/i"; $retorno = preg_match($regex,$subject); echo($retorno);?>

o caracter ponto em uma regex indica qualquer outro caracter que contenha naquele texto, ou seja, ele é usado para indicar um caracter que a gente não conheça naquela string

<?php $subject = "meu facebook https://www.facebook.com/hacker.fts315 me add"; $regex = "/face.ook/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

o simbolo de adição em uma regex indica uma sequencia de reptição do caracter anterior

<?php $subject = "ooooooooook entendido"; $regex = "/o+k entendido/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

podemos especificar uma quantidade especifica de um caracter que esta se repetindo colocando o numero entre chaves depois do caracter

<?php $subject = "kkkkk"; $regex = "/k{5}/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

quando precisamos especificar entre uma quantidade de caracteres que se repete colocamos entre chaves a menor quantidade de repetição seguido do virgula seguido do numero que seria a maior quantidade aceita

<?php $subject = "kkkkk"; $regex = "/k{3,6}/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

Page 41: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

para a gente especificar uma quantidade minima de repetição sem uma quantidade maxima apenas colocamos o numero seguido do virgula

<?php $subject = "kkkkk"; $regex = "/k{3,}/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

para a gente definir uma sequencia de caracteres qualquer usamos o ponto e asterisco, sera aceita qualquer sequencia ate próxima sequencia especificada

<?php $subject = "hoje esta muito calor aqui na minha cidade"; $regex = "/esta.*minha/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

no exemplo anterior podemos reparar que existe a palavra “esta” seguido de qualquer outra sequencia e depois a sequencia “minha” então casou com aquela regex, podemos usar varias dessas para casar textos que a gente conhece apenas pequenos trechos dele

<?php $subject = "hoje esta muito calor aqui na minha cidade"; $regex = "/.*esta.*calor.*minha cidade/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

quando usamos regex com .* o texto antes dele vai ser a primeira ocorrencia na string já o texto depois dele é sempre ultima ocorrencia, para a gente fazer ele pegar a ocorrencia depois da primeirae não a ultima usamos interrogação depois do asterisco

<?php $subject = "hoje esta muito calor aqui na minha cidade, tá muito calor"; $regex = "/muito.*?calor/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

como o ponto é usado na regex para indicar qualquer caracter para a gente especificar o potno temos que usar o contra barra e o ponto

<?php $subject = "http://eofclub.com"; $regex = "/eofclub\.com/"; $retorno = preg_match($regex,$subject);

Page 42: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

echo($retorno);?>

para a gente especificar o barra temos que usar contra barra seguido do barra, o mesmo vale para o contra barra que deve ser especificado com contra barra duas vezes

<?php $subject = "http://eofclub.com"; $regex = "/http:\/\//"; $retorno = preg_match($regex,$subject); echo($retorno);?>

para especificar o caracter + usamos contra barra seguido do sinal de adição

<?php $subject = "1+1=2"; $regex = "/1\+1=2/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

podemos agrupar os caracteres usando parênteses, esse agrupamento serve para manipular aqueles caracteres como um todo

<?php $subject = "essa pagina só pode ser acessada pelo ip do brasil"; $regex = "/(acessada)/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

podemos usar o agrupamento em uma repetição que indica que a repetição não é apenas no caracter e sim naquela sequencia toda

<?php $subject = "kamehameha"; $regex = "/ka(meha){2}/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

para especificar em um determinado caracter apenas os caracteres aceito usamos o colchete e dentroos caracteres que aquele determinado caracter pode conter

<?php $subject = "brasil"; $regex = "/bra[sz]il/"; $retorno= preg_match($regex,$subject); echo($retorno);

Page 43: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

as vezes uma regex pode conter duas ou mais sequencias diferente assim sendo qualquer uma delas valida, para a gente fazer isso na regex usamos o pipe para separa

<?php $subject = "bem vindo ao brasil"; $regex = "/ao brasil|ao japão/"; $retorno= preg_match($regex,$subject); echo($retorno);?>

existem determinados carecteres que indica alguns tipos caracteres como o \d que indica que aquele caracter é um numeros

<?php $subject = "123"; $regex = "/\d{3}/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

tambem existe o \D que é o oposto indicando que não é um numero

<?php $subject = "abc"; $regex = "/\D\D\D/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

outro é o \w que indica que é um caractere alpha numerico

<?php $subject = "kodo antigo fts315"; $regex = "/\w+ \w+ \w+/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

ou \W que é o oposto ou seja não é alpha numerico

<?php $subject = "!@#$"; $regex = "/\W+/"; $retorno = preg_match($regex,$subject); echo($retorno);?>

o terceiro argumento do preg_match é uma array que sera armazeanada caso a regex bata com a

Page 44: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

string ou seja se a regex casar com a string ela sera armazenada nessa array

<?php $subject = "nick: kodo no kami"; $regex = "/nick: .*/"; preg_match($regex,$subject, $texto); echo($texto[0]);?>

podemos usar o argrupamento para armazenar apenas um terminado trecho na array

<?php $subject = "nick: kodo no kami"; $regex = "/nick: (.*)/"; preg_match($regex,$subject, $texto); echo($texto[1]);?>

se usar mais de um agrupamento sera armazenado em outras posições da array

<?php $subject = "nick: kodo no kami"; $regex = "/nick: (\w+) no (\w+)/"; preg_match($regex,$subject, $texto); echo($texto[1] . "<br>" . $texto[2]);?>

tambem é possível usar agrupamento dentro de outro agrupamento

<?php $subject = "nick: kodo no kami"; $regex = "/nick: ((\w+) no (\w+))/"; preg_match($regex,$subject, $texto); echo($texto[1] . "<br>" . $texto[2] . "<br>" . $texto[3]);?>

com a função preg_match_all podemos armazenar todos os trechos semelhantes em cada posição diferente da array sendo ela uma matriz diferente do preg_match que vai armazenar apenas um determinado trecho em um vetor

<?php $subject = "nick: kodo no kami, nick: mmxm, nick: s1m0n, nick: sir.rafiki,"; $regex = "/nick: (.*?),/"; preg_match_all($regex,$subject, $texto); echo($texto[1][0] . "<br>"); echo($texto[1][1] . "<br>"); echo($texto[1][2] . "<br>"); echo($texto[1][3] . "<br>");?>

Page 45: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

outra função usada para regex é o preg_grep sua entrada seria uma array ao inves de uma string, se as strings nessa array bater com a regex sera retornada em uma nova array

<?php $subject = array("azul","vermelho","verde","branco"); $regex = "/ver/"; $nova = preg_grep($regex,$subject); print_r($nova);?>

com a função preg_replace podemos substituir uma determinada palavra na string, seus argumento são a regex que sera buscada, a string que vai substituir, e a string da onde vai substituir, por fim seuretorno que é nova string

<?php $subject = "kodo no kami"; $regex = "/kodo/"; $sub = "linux"; $texto = preg_replace($regex,$sub, $subject); echo($texto);?>

3.0 – Logica Aritimética

como boa parte das linguagens PHP permite fazer calculos aritimeticos como adição, subtração, mutiplicação e divisão alem de existir funções voltadas a calculos e operações mais complexas, paraa gente fazer uma simples operação de somar usamos o simbolo de adição e atribuimos o resultado a uma variavel

<?php $resultado = 300 + 15; echo($resultado);?>

podemos somar duas ou mais variaveis

<?php $x = 300; $y = 15; $resultado = $x + $y; echo($resultado);?>

tambem é possível exibir o resultado direto para ser exibida sem precisar atribuir em uma variavel

<?php echo(300 + 15);?>

para as operações de subtração usamos o sinal de menos

Page 46: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $resultado = 300 - 15; echo($resultado);?>

as operações de multiplicação usamos o asterisco

<?php $resultado = 300 * 15; echo($resultado);?>

para divisão usamos a barra

<?php $resultado = 300 / 15; echo($resultado);?>

alem da divisão podemos conseguir o resto da divisão ou modulo dela com o porcentagem

<?php $resultado = 300 % 15; echo($resultado);?>

é possível fazer varias operações ao mesmo tempo

<?php $resultado = 100 + 15 - 20 + 6 - 2; echo($resultado);?>

quando é feito varias operações ao mesmo tempo é seguido aquela regra matematica que a multiplicação e divisão são feita antes da adição e subtração

<?php $resultado = 30 + 2 * 5 - 3; echo($resultado);?>

para a gente fazer as operações de adição e subtração antes da mutiplicação e divisão basta colocar entre parênteses a adição e subtração

<?php $resultado = (30 + 2) * 5 - 3; echo($resultado);?>

Page 47: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

podemos colocar parênteses dentro de outro e sera feito sempre as operações de dentro para fora

<?php $resultado = (((5 + 2) * 3) + 8 / 2) + 4; echo($resultado);?>

é possível fazer uma operação em uma variavel e atribuir a ela mesmo

<?php $resultado = 300; $resultado = $resultado + 15; echo($resultado);?>

quando precisamos atribuir a variavel a ela mesmo e somar com outro numero ou variavel como no exemplo anterior podemos usar o sinal de adição e o sinal de igual que indica que vai atribuir a mesma variavel e somar com o próximo numero

<?php $resultado = 300; $resultado += 15; echo($resultado);?>

para a gente subtrair uma variavel com um numero usamos o sinal de subtração e o igual seguido donumero

<?php $resultado = 300; $resultado -= 15; echo($resultado);?>

a multiplicação é o asterisco mais o sinal de igual e o numero

<?php $resultado = 300; $resultado *= 15; echo($resultado);?>

para dividir uma variavel com um numero usamos o barra e o sinal de igual seguido do numero

<?php $resultado = 300; $resultado /= 15; echo($resultado);?>

Page 48: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

podemos incrementar uma variavel em mais um usando duas vezes o sinal de adição depois do nome dela

<?php $resultado = 10; $resultado++; echo($resultado);?>

como tambem é possível decrementar colocando duas vezes o sinal de subtração

<?php $resultado = 10; $resultado--; echo($resultado);?>

é possível mexer com numeros negativos

<?php $num = -100; echo($num);?>

ou numeros com casas decimais ou numeros quebrados que são os tipo float

<?php $num = 3.56; echo($num);?>

numeros como notação cientifica, exemplo o numero 100000000 que seria 1e+8 (1x10^8)

<?php $num = 1e+8; echo($num);?>

podemos mexer com outras bases tambem como a base16 ou hexadecimal apenas colocando 0x antes do numero (por padrao é exibido sempre a base 10 decimal)

<?php $num = 0x4a; echo($num);?>

para a base8 colocamos apenas o 0 antes do numero

Page 49: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $num = 054; echo($num);?>

é possível fazer as operações entre bases diferentes

<?php $num = 10 + 0x10 - 010; echo($num);?>

para base2 ou binario é possível converter de decimal(base10) para binario com a função decbin

<?php $num = decbin(315); echo($num);?>

ou inversamente de binario para decimal com a função bindec

<?php $num = bindec(110001); echo($num);?>

é possível converter de decimal para hex com a função dechex

<?php $num = dechex(315); echo($num);?>

o inverso tambem pode ser feito de hexadecimal para decimal com a função hexdec

<?php $num = hexdec("5a60"); echo($num);?>

para converter de decimal para octal usamos a função decoct

<?php $num = decoct(85); echo($num);?>

como tambem existe o oposto converter de octal para decimal com a função octdec

Page 50: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $num = octdec(10); echo($num);?>

é possível converter de decimal para ascii com a função chr

<?php $num = chr(97); echo($num);?>

ou ate mesmo outra base

<?php $num = chr(0x61); echo($num);?>

como tambem podemos converter de um caracter ascii para um tipo numerico com a função ord

<?php $num = ord("k"); echo($num);?>

podemos converter para qualquer base usando a função base_convert, os seus argumentos são o numero que vai ser covertido, a base que esse esse numero esta, e a base para qual vai ser convertida, seu retorno é o numero convertido

<?php $num = base_convert("1100101",2, 5); echo($num);?>

com a função abs retorna o numero absoluto

<?php $num = abs(-500); echo($num);?>

para arrendondar um numero quebrado usamos a função ceil com essa função floor o numero é arredondado para o próximo

<?php $num = ceil(5.3); echo($num);?>

Page 51: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

para arrendondar um numero para baixo usamos a função floor

<?php $num = floor(5.3); echo($num);?>

a função pow permite elevar o primeiro argumento pelo segundo argumento

<?php $num = pow(2, 5); echo($num);?>

podemos conseguir a raiz quadrada de um numero com a função sqrt

<?php $num = sqrt(81); echo($num);?>

com a função rand retornamos um numero randomico

<?php $num = rand(); echo($num);?>

podemos especificar um valor minimo e maximo para função rand como argumento

<?php $num = rand(300, 1000); echo($num);?>

3.1 – Logica Booleana

com base na logica booleana qualquer ação ou evento que tenha dois estados opostos ao outro podemos dizer que esses estados são verdeiros ou falsos, uma lampada acesa pode ser dita como estado verdadeiro e uma lampada apagada pode ser dita como estado falso, uma corrente passando por um fio condutor pode ser dito como logica verdadeira enquanto em um fio conduto não passando corrente nenhuma sendo o estado falso, como tambem pode acontecer o oposto quando analisando por outro ponto de vista ou seguindo outro tipo de estado uma lampada apagada pode serverdadeira e uma lampada acesa pode ser falsa depende do nosso ponto de vista sobre aquela ação ou evento, a gente representa o estado verdadeiro em programação sendo o numero 1 e o estado falso sendo 0 false

<?php $verdadeiro = 1;

Page 52: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$falso = 0;?>

porem na linguagem php a representação do estado verdadeiro é true enquanto o estado falso é false

<?php $verdadeiro = true; $falso = false;?>

algumas funções retorna verdeiro ou falso como por exemplo a função preg_match que se a regex bater com a string o retorno é 1 ou seja verdadeiro se não é 0 ou seja falso

<?php $estado = preg_match("/k.d./","kodo no kami"); echo($estado);?>

3.2 – Operação bit a bit

com a operação bit a bit podemos manipular cada bit em um determinado byte, essas operações na maior parte das vezes usa dois numeros como base e gera um novo numero com base neles, operação bit a bit é muito usada em diversas areas da informatica, a forma simples de manipular os bits em um byte seria transformar o numero em binario (base2) cada numero binario é composto pelo seu respectivo bit, a base2 é equivalente ao numero em outro base com isso não faz diferença agente modificar um numero em base10 para modificar os bits porem é mais complicado saber o numero é equivalente naquela sequencia de bit, as operações bit a bit toma como base cada bit em um numero e faz a operação com o bit do outro numero na sua posição equivalente e não como um todo, a primeira operação bit a bit que vamos ver vai ser o OR (ou) que compara os bits no dois numero em sua respectiva posição e se um dos dois bit for 1 o retorno é 1 porem se os dois bits for igual a 0 o retorno é 0

A = 1B = 0 or-------------R = 1

se o numero A fosse 1011 e o numero B 1001 o retorno seria esse 1101

A = 1101B = 1001 or-------------R = 1101

como eu disse antes não importa é mais simples fazer operação bit a bit em base2 já que permite a gente ver os bits porem o mesmo resultado pode ser conseguido em outras bases como a decimal

A = 13B = 9 or-------------

Page 53: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

R = 13

no php para gente fazer essa operação usamos o operador pipe

<?php $a = 13; $b = 9; $r = $a | $b; echo($r);?>

outra operação bit a bit é o AND (e) nessa operação o retorno é 1 se os dois bits equivalente for o numero 1, se um dos dois bits for 0 o retorno é 0

A = 1101B = 1001 and-------------R = 1001

no php a operação bit a bit AND é usado o operador E comercial (&)

<?php $a = 13; $b = 9; $r = $a & $b; echo($r);?>

tambem existe o operador bit a bit XOR (ou exclusivo) nele retorna 1 apenas se os dois bits for diferente um do outro ou seja um for 1 e outro 0

A = 1101B = 1001 xor-------------R = 0100

o XOR no php é representado por ^

<?php $a = 13; $b = 9; $r = $a ^ $b; echo($r);?>

existe o operador NOT diferente dos outros operadores bit a bit esse é em apenas um numero, a sua logica é inverte os bits se era o numero 1 vira 0 e se era o numero 0 vira o numero 1

A = 1101 not

Page 54: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

-------------R = 0010

o operador NOT no php é o sinal de ~ sendo ele antes do numero

<?php $a = 13; $r = ~ $a; echo($r);?>

o operador NOT quando usado em um numero positivo o retorno é negativo e quando usado em um numero negativo o retorno é positivo isso acontece devido o primeiro bit é o que define se o numeroé positivo ou negativo

<?php $a = -13; $r = ~ $a; echo($r);?>

para ficar mais facil podemos manipular o numeros em binario com a função bindec

<?php $a = bindec("1101"); $b = bindec("1001"); $r = $a | $b; echo(decbin($r));?>

3.3 – Operadores de comparação e logicos

os operadores de comparação são bem parecidos com os operadores bit a bit a diferença que eles compara dois numeros como um todo e retorna verdadeiro ou falso com base neles, ele pode ser usado para comparar dois numeros ou duas string e retorna verdadeiro ou falso com base em uma logica, o primeiro operador que vamos ver sera o igual que retorna verdadeiro se os dois numeros forem verdadeiros e nesse operador de comparação é usado duas vezes o sinal de igual para representar ele

<?php $a = 315; $b = 315; $r = $a == $b; echo($r);?>

o mesmo pode ser feito em uma string

<?php $a = "kodo no kami";

Page 55: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$b = "kodo no kami"; $r = $a == $b; echo($r);?>

não necessariamente precisa ser usado com variaveis podemos colocar o numero direto ou uma função que retorna algum valor

<?php $r = 3 == sqrt(9); echo($r);?>

tem o operador diferente que retorna verdadeiro se os dois numeros forem diferente um do outro e sua representação é exclamação e igual

<?php $a = 315; $b = 100; $r = $a != $b; echo($r);?>

o mesmo pode ser usado em strings tambem

<?php $a = "kodo no kami"; $b = "god of code"; $r = $a != $b; echo($r);?>

outro operadorador de comparação é o maior que sendo que ele retorna verdadeiro se o primeiro numero for maior que o segundo

<?php $a = 315; $b = 100; $r = $a > $b; echo($r);?>

tambem existe o menor que retorna verdadeiro se o primeiro numero for menor que o segundo

<?php $a = 100; $b = 315; $r = $a < $b; echo($r);

Page 56: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

podemos comparar se o primeiro numero é maior ou igual ao segundos se for retorna verdadeiro

<?php $a = 315; $b = 315; $r = $a >= $b; echo($r);?>

como tambem podemos comparar se é menor ou igual ao segundo numero

<?php $a = 300; $b = 315; $r = $a <= $b; echo($r);?>

podemos comparar dois ou mais retornos ao mesmo tempo com o operador logico OR se um dois retorno do operador for verdeiro o retorno final é verdadeiro sendo o operador logico OR representado por dois pipes

<?php $r = 100 > 200 || 50 < 150; echo($r);?>

pode ser usado quantas operações a gente quiser

<?php $r = 100 > 200 || 50 < 150 || 60 > 100 || 80 < 10; echo($r);?>

alem da operação logica OR tambem existe a operação logica AND que apenas retorna verdadeira se todas as demais operações retornar verdadeiro e sua representação é duas vezes o E comercial

<?php $r = 100 > 5 && 50 < 150; echo($r);?>

outra operação logica é NOT que inverte a logica se é verdadeiro o retorno é falso e se é falso o retorno é verdadeiro e sua representação é o exclamação antes da operação

<?php $r = ! 100 < 5;

Page 57: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

echo($r);?>

podemos agrupar uma operação para ficar mais legivel

<?php $r = (100 > 200) || (50 < 150) || (60 > 100) || (80 < 10); echo($r);?>

esse agrupamento tambem serve para processar as operações de dentro para fora assim permitindo que determinada operação seja processada primeiro

<?php $r = (100 > 200 || ! (50 > 150 && 60 > 100)) || (80 < 10); echo($r);?>

3.4 – Estruturas condicionais

as estruturas condicionais são extremamente importante para programação já que podemos controlar o fluxo de execução do nosso programa por ela, podendo executar um determinado trecho de codigo com determinada condição ou não executar esse determinado trecho dependendo da condição definida, você pode usar a estrutura condicional para executar um determinado trecho combase em eventos especificos como por exemplo a entrada de dados que vem do usuario ou eventos do sistema ou qualquer outra coisa, a primeira estrutura condicional que vamos aprender sera o if que é checa a condição passada se o retorno dela for verdadeiro ela executa o trecho do codigo dentro do escopo, para a gente usar o if basta declarar ele depois entre parênteses colocamos a condição e entre chaves o trecho de codigo que sera executado caso a condição seja verdadeira

<?php if(true){ echo("houhouhou papai noel chegou"); }?>

veja que se a condição passada for falsa ele não executa o que esta dentro do if

<?php if(false){ echo("houhouhou papai noel chegou"); }?>

é possível usar os operadores de comparação na condição

<?php $nome = "kodo";

if($nome == "kodo"){

Page 58: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

echo("houhouhou papai noel chegou"); }?>

podemos usar quantos if a gente quiser sera testado a condição a cada novo if

<?php $numero = 315;

if($numero == 315){ echo("numero é 315 <br>"); } if($numero > 100){ echo("numero é maior que 100 <br>"); } if($numero < 100){ echo("numero é menor que 100 <br>"); }?>

podemos usar if dentro de outro if que sera executado apenas se o anterior dele for executado

<?php $login = "kodo"; $senha = "123";

if($login == "kodo"){ if($senha == "123"){ echo("acesso permitido"); } }?>

embora faça mais sentido usar operador logico como OR e AND ao inves de colocar vários if um dentro do outro

<?php $login = "kodo"; $senha = "123";

if(($login == "kodo") && ($senha == "123")){ echo("acesso permitido"); }

alem do if tambem podemos usar o else que é executado caso o if não seja executado, o else deve ficar sempre depois do if

<?php if(false){ echo("isso e verdade");

Page 59: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

} else{ echo("isso e falso"); }?>

o mesmo vale para o if que fica dentro de outro if

<?php $login = "kodo"; $senha = "315";

if($login == "kodo"){ if($senha == "123"){ echo("acesso permitido"); } else{ echo("acesso negado"); } } else{ echo("acesso negado"); }?>

tambem existe o else if que é usado depois do if e checa se uma outra condição caso a anterior não seja executada, caso o if seja executado o else if não sera executado mesmo que a condição dele seja verdadeiro

<?php $idade = 24;

if($idade < 18){ echo("voce é menor de idade"); } else if($idade >= 18){ echo("voce é maior de idade"); }?>

tambem podemos juntar o else e o if formando elseif que daria o mesmo resultado anterior

<?php $idade = 24;

if($idade < 18){ echo("voce é menor de idade"); } elseif($idade >= 18){ echo("voce é maior de idade"); }

Page 60: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

podemos usar quantos else if (elseif) que a gente quiser porem na primeira condição que for verdadeira não serão executada as outras diferente do que acontece com vários if

<?php $idade = 24;

if($idade < 10){ echo("voce é criança"); } elseif($idade < 18){ echo("voce é adolecente"); } elseif(($idade >=18) && ($idade < 60)){ echo("voce é adulto"); } elseif($idade >=70){ echo("voce é idoso"); }?>

tambem podemos usar o else no final do elseif que sera executado caso nenhum if ou elseif seja executado

<?php $idade = 999;

if(($idade >= 0) && ($idade < 18)){ echo("voce é menor de idade"); } elseif(($idade >= 18) && ($idade <= 120)){ echo("voce é maior de idade"); } else{ echo("eita porra"); }?>

outra estrutura condicional alem do if é o switch que funciona parecido com if e elseif, na estrutura switch passamos como condição o numero e com base nele é checado usado o case caso numero do case corresponda ao da condição é executado o codigo apartir daquele case

<?php $numero = 315;

switch($numero){ case 315: echo("numero foi 315"); }?>

Page 61: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

é possível colocar quantos codigos a gente quiser no case

<?php $numero = 315;

switch($numero){ case 315: echo("numero foi 315 <br>"); echo("programando em php <br>"); echo("by kodo <br>"); }?>

como tambem podemos colocar quantos cases a gente quiser porem o codigo vai começar sendo executado apartir do numero que foi especificado no swtich

<?php $numero = 315;

switch($numero){ case 0: echo("numero foi 0 <br>"); case 100: echo("numero foi 100 <br>"); case 315: echo("numero foi 315 <br>"); }?>

se houver outro case abaixo tambem sera executado

<?php $numero = 315;

switch($numero){ case 100: echo("numero foi 100 <br>"); case 315: echo("numero foi 315 <br>"); case 500: echo("numero foi 500 <br>"); }?>

para evitar dele executar outro case podemos usar o break no final do codigo dentro de cada case

<?php $numero = 315;

Page 62: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

switch($numero){ case 100: echo("numero foi 100 <br>"); break; case 315: echo("numero foi 315 <br>"); break; case 500: echo("numero foi 500 <br>"); break; }?>

tambem existe um case especial chamado default que é parecido com else ou seja se nenhum outro case for executado serao default

<?php $numero = 8;

switch($numero){ case 100: echo("numero foi 100 <br>"); break; case 315: echo("numero foi 315 <br>"); break; default: echo("nenhum deles <br>"); break; }?>

uma condição que não é bem uma estrutura é a ternaria que podemos definir um retorno dependendo da condição, para usar ela basta coloca a condição entre parêntese depois interrogação e o retorno caso seja verdadeiro seguido de dois pontos e o retorno caso seja falso

<?php $numero = 315;

$retorno = ($numero > 100)? "maior" : "menor"; echo($retorno);?>

podemos usar a condição ternaria dentro do retorno de outra assim gerando outra condição isso seria equivalente a ter um if dentro de outro

<?php $idade= 60;

$retorno = ($idade > 18)? ($idade > 50)? "tem mais de 50": "maior" : "menor"; echo($retorno);

Page 63: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

3.5 – Estruturas de repetição

outro tipo de estrutura é a de repetição que permite repetir determinado trecho de codigo dependendo de uma determinada condição, essas estruturas de repetição facilita não ter que refazer o mesmo codigo varias vezes bastando repetir ele uma quantidade de vezes dependendo da logica, aprimeira estrutura de repetição que vamos ver sera o while que repete enquanto uma condição for verdadeira e a cada loop essa condição é checada novamente ate que seja falsa para sessar o loop, para usar o while basta declarar ele e passar a condição entre parênteses depois entre chaves colocamos o trecho do codigo que sera repetido (temos que tomar cuidado com loop infinito pode causar grandes problemas já que podem consumir grande quantidade de memoria inclusive causando travamento do próprio sistema ou programa)

<?php //isso é um loop infinito pode ser perigoso while(true){ }?>

se a condição for falsa não sera repetido nenhuma vez

<?php while(false){ }?>

para evitar um loop infinito usamos uma variavel como contador na condição e quando essa condição for satisfeita o loop vai sessar, por exemplo uma variavel que começa com o valor 0 e cada loop vai incrementando +1 sendo que vai repetir enquanto ela for menor que 10 quando o contador chegar ao valor 10 o loop para

<?php $cont = 0; while($cont <= 10){ $cont++; }?>

se a gente exibir o contador sera exibida a posição atual

<?php $cont = 0; while($cont <= 10){ echo($cont . "<br>"); $cont++; }?>

o mesmo exemplo anterior só que multiplicando por 7 ou seja a tabuada de 7

Page 64: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $cont = 0; while($cont <= 10){ $temp = $cont * 7; echo($temp . "<br>"); $cont++; }?>

podemos inverter a logica fazendo uma contagem regressiva

<?php $cont = 10; while($cont >= 0){ echo($cont . "<br>"); $cont--; }?>

podemos usar um while dentro do outro while, ira repetir de fora para dentro e temos que ter um contador para cada while

<?php $cont = 0; while($cont <= 10){ $cont2 = 0; while($cont2 <= 10){ $cont2++; } $cont++; }?>

veja um exemplo de uma tabuada de 0 a 10 usando dois loops while para exibir todos os numeros

<?php $cont = 0; while($cont <= 10){ echo("tabuada de " . $cont . "<br>"); $cont2 = 0; while($cont2 <= 10){ $resu = $cont * $cont2; echo($cont2 . "x" . $cont . "=" . $resu . "<br>"); $cont2++; } $cont++; }?>

podemos parar o loop while usando o break

Page 65: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $cont = 0; while($cont <= 10){ if($cont == 5){ break; } echo($cont . "<br>"); $cont++; }?>

outra estrutura de repetição é o do-while sendo ela parecida com while o diferencial que ela repete pelo menos uma vez diferente do while que se a condição for falsa de começo não é executado o trecho do codigo, para gente usar o do-while declaramos o do abrimos e fechamos chaves dentro dele fica o trecho de codigo que sera repetido depois temos a condiçao do while que vai fazer o do repetir ou não

<?php do{ echo("repete <br>"); } while(false);?>

o esquema é o mesmo while vai continuar repetindo se a condição for verdadeira

<?php $c = 0; do{ echo("repete <br>"); $c++; } while($c < 10);?>

tambem pode ser usado um do-while dentro de outro

<?php $c = 0; do{ $c2 = 0; do{ echo("repete <br>"); $c2++; } while($c2 < 10); $c++; } while($c < 10);?>

Page 66: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

outra estrutura de repetição é o for que permite repetir enquanto a condição for verdadeira, a diferença entre o for e o while é a precisão já que podemos definir na estrutura for o valor inicial do contador e o incremento diferente do while que o valor incial era definido antes da estrutura while e o incremento dentro da estrutura while, para usar o for declaramos ele e dentro de parênteses colocamos a variavel com o valor incial depois ponto e virgula seguido da condição e por fim pontoe virgula seguido do incremento

<?php for($cont = 0; $cont < 10; $cont++){ echo($cont . "<br>"); }?>

podemos coloca mais de uma variavel contador separado por virgula o mesmo vale para o incremento

<?php for($cont = 0, $cont2 = 10; $cont < 10; $cont++, $cont2--){ echo($cont . "<br>"); echo($cont2 . "<br><br>"); }?>

o contador ou incremento é opcional podemos fazer da mesma forma que o while

<?php $cont = 0; for( ; $cont < 10 ; ){ echo($cont . "<br>"); $cont++; }?>

outra estrutura de repetição é o foreach que é usada para ler uma array e suas posições, a cada loop o foreach ler uma posição da array e armazena em uma variavel, para usar o foreach basta passar como argumento a array seguido da palavras reservada “as” seguido de uma variavel que vai receber o valor da posição da array a cada novo loop

<?php $kodo = [100, 300, 500 , 1000];

foreach($kodo as $valor){ echo($valor . "<br>"); }?>

o mesmo pode ser feito usando outro tipo de estrutura de repetição como por exemplo o while porem é bem mais simples de fazer pelo foreach

Page 67: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $kodo = [100, 300, 500 , 1000];

$tam = sizeof($kodo); $cont = 0; while($cont < $tam){ echo($kodo[$cont] . "<br>"); $cont++; }?>

é possível usar o foreach para ler uma matriz bastando usar o foreach dentro de outro lendo a variavel do outro foreach

<?php $kodo = [[100, 300], [500 , 1000, 5000]];

foreach($kodo as $valor){ foreach($valor as $va){ echo($va . " "); } echo("<br>"); }?>

como tambem pode ser feito por outras estruturas de repetição como o for ou while

<?php $kodo = [[100, 300], [500 , 1000, 5000]];

$tam = sizeof($kodo); for($cont = 0; $cont < $tam; $cont++){ $tam2 = sizeof($kodo[$cont]); for($cont2 = 0; $cont2 < $tam2; $cont2++){ echo($kodo[$cont][$cont2] . " "); } echo("<br>"); }?>

podemos usar o loop para ler uma string caracter por caracter por exemplo ler o texto invertido

<?php $texto = "esse ebook era para terminar no começo do ano"; $tam = strlen($texto) - 1; while($tam >= 0){ echo($texto[$tam]); $tam--; }?>

Page 68: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

4.0 – Funções e Modulos

as funções são pequenos trechos de codigos que permite fazer o mesmo procedimento varias vezes sem precisar recriar o mesmo trecho de codigo varias vezes bastando apenas chamar aquela determinada função que contem aquele determinado trecho de codigo quantas vezes a gente precisar, as funções permite passar valores para ela esse valores podem ser manipulados dentro da função e isso deixa ela muito mais dinamica um exemplo seria a função echo que permite exibir alguma coisa sendo o seu argumento a string que vai ser exibida outro exemplo é uma função que soma dois numeros podemos passar esses dois numeros para ela nesse caso ela não seria limitada a somar dois numeros especificos e sim dois numeros qualquer que sera passados como argumento, as funções tambem tem um retorno que permite retornar um determinado valor que podem ser manipulados fora delas, para a gente criar uma função usamos a palavra function seguido do nome da função depois colocamos abre e fecha parênteses para os argumentos de entrada e por fim abre e fecha chaves que ficaria o codigo da função

<?php

function kodo(){ echo("minha funcao <br>");}

?>

agora que a gente criou a função basta chamar ela digitando o nome e parênteses

<?php

function kodo(){ echo("minha funcao <br>");}

kodo();?>

podemos chamar aquela função quantas vezes a gente precisar

<?php

function kodo(){ echo("minha funcao <br>");}

kodo();kodo();kodo();?>

podemos criar variaveis para passar valores para dentro da função, na chamada dessa função deve ser passado o valor como argumento

<?php

Page 69: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

function kodo($nome){ echo("seu nome e " . $nome);}

kodo("flavio");

?>

pode ser usado mais de uma variavel como argumento porem seperadas por virgula

<?php

function kodo($x, $y){ $r = $x + $y; echo($r);}

kodo(300,15);

?>

para retornar o valor usamos o return passamos para ele o valor que sera retornado

<?php

function kodo($x, $y){ $r = $x + $y; return $r;}

$valor = kodo(300,15);echo($valor);?>

quando o return é executado a função é finalizada mesmo que exista codigo depois dele

<?php

function kodo(){ echo("antes <br>"); return 315; echo("depois <br>");}

$valor = kodo();echo($valor);?>

as variaveis que são criadas dentro de uma função são variaveis locais ou seja quando a função for finalizada elas serão destruidas com a função e toda vez que você chamar uma função as variaveis

Page 70: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

locais não afeta as outras variaveis locais de outras chamada da mesma função apenas reside naquela determinada chamada de função

<?php

function kodo(){ $x = $x + 1; return $x;}

echo(kodo() . "<br>");echo(kodo() . "<br>");echo(kodo() . "<br>");?>

podemos acessar variaveis global que são as de fora da função para fazer isso temos que declarar ela como global dentro da função com a palavra global

<?php

function kodo(){ global $valor; echo($valor . "<br>"); $valor += 50;}

$valor = 315;kodo();echo($valor);?>

podemos criar quantas funções a gente ou usar elas como base para criar outras

<?php

function kodo_soma($x,$y){ return $x + $y;}

function kodo_exibir($a, $b){ $r = kodo_soma($a,$b); echo($r);}

kodo_exibir(500,250);?>

podemos criar bibliotecas ou modulos para reutilizar o codigo em outros projetos para isso basta colocar todo o codigo em um arquivo php

<?php

Page 71: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

/** kodo.php **/

function somar($x,$y){ return $x + $y;}?>

depois podemos incluir aquele arquivo php com a função include como já aprendemos no começo desse ebook

<?php include("kodo.php"); $valor = somar(300,500); echo($valor);?>

4.1 – Manipulando o tempo

é possível manipular o tempo com a linguagem php sendo esse tempo a data e a hora do relogio do servidor, para a gente pegar o tempo atual usamos a função time que retorna o tempo atual em segundos deis da 0:00 de 1970 ate agora

<?php $atual = time(); echo($atual);?>

podemos usar esse tempo atual para saber quanto tempo em segundos seria daqui a alguns segundosa frente bastando somar esse segundo a frente ao tempo atual por exemplo 2 minutos que seria 120 segundos (ou podemos subtrair para o processo inverso)

<?php $atual = time(); $futuro = $atual + 120; echo($futuro);?>

com a função sleep damos uma a pausa de alguns segundos na execução do script, bastando usar a função sleep e passar como argumento quantos segundos vai pausar (função sleep da uma pausar direto no processamento não é tão recomendado o seu uso)

<?php sleep(2); echo("uma pausa de 2 segundos");?>

podemos pegar o tempo atual depois esperar alguns segundos e pegar o tempo atual novamente e subtrair os dois para saber quantos segundos se passaram entre um tempo e outro o famoso diff time

<?php

Page 72: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$atual = time(); sleep(5); $atual2 = time(); $diff = $atual2 - $atual; echo($diff);?>

outra função parecida com time é o microtime que retorna o tempo em milessimos de segundos

<?php $atual = microtime(); echo($atual);?>

com a função localtime atribuimos o tempo para uma array de forma separada sendo a posição da array os segundos, minutos, horas, o dia, mês, ano, dia da semana (valor começa no 0) e por fim a quantidade de dias no ano

<?php $tempo = localtime(); echo("segundos " . $tempo[0] . "<br>"); echo("minutos " . $tempo[1] . "<br>"); echo("horas " . $tempo[2] . "<br>"); echo("dias " . $tempo[3] . "<br>"); echo("mes " . $tempo[4] . "<br>"); echo("ano " . $tempo[5] . "<br>"); echo("dia da semana " . $tempo[6] . "<br>"); echo("qnt dias no ano " . $tempo[7] . "<br>");?>

podemos passar um tempo em segundos igual a função time para a função localtime como argumento para ela converte para segundos, minutos, horas e dias

<?php $atual = localtime(1591315037); echo("$atual[2]:$atual[1]:$atual[0] $atual[3]/$atual[4]/$atual[5]");?>

com a função date podemos converter o tempo atual em segundos com base em uma string como para a formatação, sendo ela “h” para hora com contagem de 12horas ou “H” para hora com contagem de 24horas, “i” para minutos, “s” para segundos, “d” para dia ou “D” para dia dia da semana, “m” para o mês ou “M” para o mês no formato de texto, “y” para os dois digitos do ano ou “Y” para o ano completo, tambem existem outros caracteres de formatação alem desses como “a” indica se é am ou pm entre outros

<?php $tempo = date("h:i:s d:m:y a"); echo("$tempo <br>");

Page 73: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$tempo2 = date("H:i:s d:M:Y D"); echo("$tempo2 <br>");?>

podemos passar tambem como argumento da função date o segundos

<?php $futuro = time() + 3600; $tempo = date("h:ia",$futuro); echo("$tempo <br>");?>

para a gente criar o tempo em segundos podemos usar a função strtotime que converte uma string no formato data e hora para o tempo em segundos

<?php $tempo = strtotime("14:30:10 12/25/16"); echo($tempo);?>

outra função que tambem permite criar o tempo em segundos é o mktime, nela passamos como argumeto o segundo, minuto, hora, mês, dia e ano

<?php $tempo = mktime(10,30,14,25,12,16); echo($tempo);?>

4.2 – Manipulando arquivos

como em qualquer outra linguagem o php tambem permite ler escrever ou criar arquivos, a manipulação de arquivo em php funciona de forma parecida da linguagem C e pode ser usada tanto para desktop quanto para web, temos que ter em mente quando usamos o PHP para web quem vai esta lendo o arquivo sera o servidor e não usuario que acessa aquela pagina, tambem temos que ficar ciente que a leitura ou escrita de arquivo de forma dinamica que seja especificado pelo própriousuario pode trazer brechas de segurança como falhas do tipo LFI e RFI (esse ebook não tem como foco programaçao segura então não vamos nos aprofundar nesse tema deixamos isso para um futuroebook ou algum tutorial), uma das formas de ler um arquivo é usando a função file onde passamos como argumento o local do arquivo e atribuimos o retorno da função para uma variavel sendo ela uma array onde cada posição da array corresponde a uma linha do arquivo

<?php $arquivo = file("kodo.txt"); foreach($arquivo as $linha){ echo($linha . "<br>"); }?>

podemos abrir qualquer arquivo do sistema deis de que o usuario ou grupo que esta execuntado o

Page 74: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

apache tenha permissao de leitura para o arquivo

<?php $arquivo = file("/etc/passwd"); foreach($arquivo as $linha){ echo($linha . "<br>"); }?>

é possível usar a função file para ler um arquivo externo em outro servidor ou site embora não seja recomendado já que é possível usar isso para explorar o mesmo

<?php $arquivo = file("http://eofclub.com/eof.txt"); foreach($arquivo as $linha){ echo($linha . "<br>"); }?>

não é recomendado abrir arquivos grandes ou arquivos binarios usando o file já que sera armazenado em arrays isso pode travar a aba do navegador do cliente ou ter um grande consumo de processamento e memoria no servidor e no cliente ou seja vai dar caquinha

<?php //alerta: não é legal fazer isso, vai da caquinha $arquivo = file("EOFbookPerl.pdf");?>

outra função semelhante ao file é o file_get_contents onde passamos como argumento o arquivo e seu retorno é uma string diferente do file que retornava uma array

<?php $arquivo = file_get_contents("kodo.txt"); echo($arquivo);?>

podemos escrever em um arquivo usando a função file_put_contents nela passamos como argumento o arquivo onde vamos escrever e o string que vamos escrever nele (lembrando que o usuario do apache deve ter permissão de escrita para o arquivo)

<?php $arquivo = file_put_contents("kami.txt","railgun minha waifu");?>

toda vez que for digitado a função file_put_contents sera apagado o arquivo para evitar isso e adicionar a nova string no final do arquivo usamos o terceiro argumento que seria a flag sendo ela FILE_APPEND

Page 75: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $arquivo = file_put_contents("kami.txt","railgun minha waifu",FILE_APPEND);?>

a função readfile tambem é parecida com a função file permitindo ler um arquivo porem ao inves decolocar em uma array como retorno o readfile vai exibir o arquivo da forma que ele é

<?php readfile("kodo.txt");?>

o readfile tambem pode ser usado para ler arquivos externamente como a função file

<?php readfile("http://eofclub.com/eof.txt");?>

você pode usar o readfile para ler arquivos de formatos especificos localmente ou externamente como se tivesse abrindo o arquivo diretamente sendo que alguns formatos especificos de arquivos alguns navegadores interpreta

<?php readfile("http://192.168.1.2/anime/shana01.mp4");?>

alguns navegadores pode não interpretar o arquivo para aquele formato especifico nesse caso podemos forçar o navegador interpretar aquele formato com a função header passamos como argumento a string “content-type: ” seguido do formato mime dele

<?php header("content-type: application/pdf"); readfile("http://eofclub.com/download/EOFbookPerl.pdf");?>

como tambem é possível forçar o download de qualquer arquivo usando o mime application/octet-stream e o content-dispostion para especificar o nome que sera salvo

<?php header("content-disposition: filename=ebookpascal.pdf"); header("content-type: application/octet-stream"); readfile("http://eofclub.com/download/EOFbookPascal.pdf");?>

podemos abrir um arquivo para ler ou escrever nele igual a linguagem C usando a função fopen, sendo que os argumentos dessa função é o arquivo que vai ser lido ou escrito e a permissão de leitura ou escrita sendo essa permissão “r” para leitura “w” para escrita e “a” para concatenação, o seu retorno é um handle que podemos manipular funções

<?php

Page 76: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$arquivo = fopen("kodo.txt","r");?>

uma função que podemos usar para leitura do arquivo é fread nela passamos como argumento o handle do arquivo e a quantidade de caracteres que sera lido no arquivo

<?php $arquivo = fopen("kodo.txt","r"); $texto = fread($arquivo,100); echo($texto);?>

podemos usar a função filesize para saber o tamanho exato do arquivo assim usamos em conjunto com o fread

<?php $arquivo = fopen("kodo.txt","r"); $tamanho = filesize("kodo.txt"); $texto = fread($arquivo,$tamanho); echo($texto);?>

outra função para ler o arquivo é fgets que vai ler uma única linha do arquivo e pula para próximo linha com isso na próxima vez que usar o fgets vai ler a próxima linha e assim por diante

<?php $arquivo = fopen("kodo.txt","r"); $linha = fgets($arquivo); echo($linha . "<br>"); $linha = fgets($arquivo); echo($linha);?>

a gente não é medium para saber quantas linhas o arquivo tem então usamos um loop e o fgets como condição quando o arquivo chegar no final a função fgets vai retornar falso e para o loop

<?php $arquivo = fopen("kodo.txt","r"); while($linha = fgets($arquivo)){ echo($linha . "<br>"); }?>

outra função semelhante é o fgetc que retorna caracter por caracter diferente do fgets que retorna linha por linha do arquivo

<?php $arquivo = fopen("kodo.txt","r");

Page 77: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

while($letra = fgetc($arquivo)){ echo($letra . " "); }?>

para a gente escrever no arquivo temos que usar a permissão de escrita no fopen no caso o “w”, caso o arquivo não exista sera criado

<?php $arquivo = fopen("kodo.txt","w");?>

podemos escrever no arquivo usando a função fprintf nela passamos como arquivo o handle do arquivo seguido do que vamos escrever nele

<?php $arquivo = fopen("kodo.txt","w"); fprintf($arquivo,"salvar no arquivo");?>

podemos fazer aquela formatação igual a função printf como já aprendemos

<?php $numero = 315; $quebrado = 5.8; $arquivo = fopen("kodo.txt","w"); fprintf($arquivo,"salvar no arquivo %d %f",$numero,$quebrado);?>

outra função que pode ser usada para escrever no arquivo é o fwrite sendo seu argumento é parecidocom o fprintf

<?php $arquivo = fopen("kodo.txt","w"); fwrite($arquivo,"salvar no arquivo");?>

o terceiro argumento fwrite é quantidade de caracteres que vão ser salvo no arquivo diferente do fprintf que é usado para formatação

<?php $texto = "salvar no arquivo"; $arquivo = fopen("kodo.txt","w"); fwrite($arquivo,$texto, 10);?>

com a permissão de concatenar “a” não sera apagado sera escrito no final do texto já existente naquele arquivo

Page 78: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $texto = date("h:i:s d:m:y"); $arquivo = fopen("log.txt","a"); fprintf($arquivo,"%s\n",$texto);?>

como tambem podemos abri o arquivo tanto para leitura ou escrita com a permissão w+, porem quando escrever ou ler o arquivo a posição onde esta sendo lida ou escrita vai mudando então para gente zerar essa posição para o inicio do arquivo novamente usamos o rewind

<?php $arquivo = fopen("kodo.txt","r+"); fprintf($arquivo,"salvar no arquivo"); rewind($arquivo); $leitura = fgets($arquivo); echo($leitura);?>

os dados só vai ser salvo no arquivo quando o handle for fechado ou seja quando terminar a execução do script para fechar o handle do arquivo antes disso usamos a função fclose e passamos ohande do arquivo como argumento (é sempre recomendado usar o fclose depois que terminar de escrever ou ler o arquivo)

<?php $arquivo = fopen("kodo.txt","w"); fprintf($arquivo,"salvar no arquivo"); fclose($arquivo);?>

depois que usar a função fclose vai precisar abrir o arquivo para escrever ou ler ele novamente

<?php $arquivo = fopen("kodo.txt","w"); fprintf($arquivo,"salvar no arquivo"); fclose($arquivo);

$arquivo = fopen("kodo.txt","r"); while($linha = fgets($arquivo)){ echo($linha . "<br>"); } fclose($arquivo)?>

podemos ver a posição atual da leitura do arquivo usando a função ftell, passamos como argumento para ela o handle do arquivo ela vai retornar a posição

<?php $arquivo = fopen("kodo.txt","r");

fgetc($arquivo);

Page 79: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

fgetc($arquivo); fgetc($arquivo);

$pos = ftell($arquivo); echo($pos); fclose($arquivo);?>

para a gente ir para uma posição especifica usamos a função fseek passamos como argumento para ela o handle do arquivo e a posição

<?php $arquivo = fopen("kodo.txt","r"); fseek($arquivo,10); $pos = ftell($arquivo); echo($pos); fclose($arquivo);?>

como já vimos podemos ver o tamanho de um arquivo bastando passar como argumento o local do arquivo para a função filesize e pegar o retorno sendo esse retorno em bytes

<?php $tamanho = filesize("kodo.txt"); echo($tamanho);?>

se dividir o tamanho do arquivo por 1024 para saber quantos KB tem o arquivo ou

<?php $tamanho = filesize("kodo.pdf"); $kb = $tamanho / 1024; settype($mb,"int"); echo($kb);?>

podemos fazer essa progressão dividir por mais 1024 para saber quantos MB depois dividir por mais 1024 para saber quantos GB e assim por diante

<?php $tamanho = filesize("kodo.zip"); $mb = ($tamanho / 1024) / 1024; settype($mb,"int"); echo($mb);?>

com a função filetype ele retorna se é um arquivo ou um diretorio, o seu retorno é string sendo ela file caso seja um arquivo ou dir caso seja um diretorio

Page 80: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $tipo = filetype("/var/www"); echo($tipo);?>

a função file_exists permite saber se um arquivo existe ou não sendo o seu argumento arquivo e retorno sendo 1 caso o arquivo exista

<?php $existe = file_exists("kodo.txt"); if($existe){ echo("arquivo existente"); } else{ echo("arquivo invalido"); }?>

podemos retornar o timestamp de acesso modificação ou criação do arquivo com as funções fileatime, filectime e filemtime

<?php $arquivo = "kodo.txt"; $atime = fileatime($arquivo); $ctime = filectime($arquivo); $mtime = filemtime($arquivo);

echo("acessado: $atime <br>"); echo("criado: $ctime <br>"); echo("modificado: $mtime <br>");?>

com a função fileowner a gente descobre o id dono do arquivo no caso do usuario no sistema

<?php $dono = fileowner("kodo.txt"); echo($dono);?>

para o cliente enviar um arquivo do navegador para o servidor temos que criar um formulario em html com um input file como esse

<html><form action="kodo.php" enctype="multipart/form-data" methd="post"><input type="file" name="arq"><input type="submit"></form></html>

Page 81: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

no script php podemos manipular o arquivo recebido com a matriz $_FILES, podemos exibir o nome do arquivo com o $_FILES sendo primeiro colchete que passamos como argumento o nome que foi definido o input file do formulario, e no segundo colchete usamos a string “name”

<?php echo("arquivo enviado tem o nome " . $_FILES["arq"]["name"]);?>

quando o arquivo é enviado para o servidor ele recebe um nome temporario que podemos acessar pelo tmp_name esse arquivo tambem vai para um diretorio especifico do próprio servidor web

<?php echo("nome temporario " . $_FILES["arq"]["tmp_name"]);?>

podemos usar o size para retornar o tamanho do arquivo enviado em bytes

<?php echo("tamanho " . $_FILES["arq"]["size"]);?>

com type retornamos o mime type do arquivo

<?php echo("mime " . $_FILES["arq"]["type"]);?>

como foi dito antes o arquivo é enviado para um diretorio do servidor web com um nome temporario, podemos mover esse arquivo para um diretorio especifico com a função move_uploaded_file nele passamos como argumento o nome temporario e o novo local que sera movido

<?php $tempo = $_FILES["arq"]["tmp_name"]; $novo = "upados/" . $_FILES["arq"]["name"]; move_uploaded_file($tempo, $novo);?>

tambem devo alertar que deve tomar cuidado quando esse arquivo vem do usuario já que poderia upar qualquer tipo de arquivo nada impede desse usuario upar um script php e executar ele no servidor como as webshell e assim invadido o mesmo

4.3 – Manipulando diretorios

tambem podemos manipular diretorios permitindo listar o diretorio inteiro, para isso usamos a função opendir e passamos como argumento para ela o diretorio que vamos abrir depois atribuimos o seu retorno a uma variavel sendo esse retorno um handle

<?php $diretorio = opendir("/var/www/html");

Page 82: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?>

para a gente abrir o diretorio atual usamos apenas um ponto

<?php $diretorio = opendir(".");?>

tambem da mesma forma do fopen precisamos fechar o diretorio com a função closedir

<?php $diretorio = opendir("."); closedir($diretorio);?>

depois que a gente tem o handle usamos a função readdir passamos como argumento para ele o handle e o retorno é o nome do arquivo ou do diretorio naquele diretorio

<?php $diretorio = opendir("."); $arquivo = readdir($diretorio); closedir($diretorio);?>

para a gente ler todos os arquivos e diretorios usamos o readdir em um while

<?php $diretorio = opendir(".");

while($arquivo = readdir($diretorio)){ echo($arquivo . "<br>"); } closedir($diretorio);?>

outra forma onde podemos ler o diretorio é usando a função scandir onde passamos como argumento o diretorio que sera lido e seu retorno sera atribuido para uma array sendo cada posição dela um arquivo ou diretorio

<?php $diretorio = scandir(".");

foreach($diretorio as $leitura){ echo($leitura . "<br>"); }?>

outra forma de ler o arquivo é pela classe dir bastando passar como argumento o diretorio a ser lido e atribuir ele para uma variavel

Page 83: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $diretorio = dir(".");?>

para ler os arquivos pelo dir usamos metodo read que tem o mesmo funcionamento do readdir

<?php $diretorio = dir("."); while($leitura = $diretorio->read()){ echo($leitura . "<br>"); }?>

é possível criar um novo diretorio com a funçao mkdir

<?php mkdir("anime");?>

com a função getcwd podemos retornar o diretorio atual do script

<?php $atual = getcwd(); echo($atual);?>

4.4 – Manipulando o terminal

a manipulação do terminal pelo php pode ser util na execução de programas do próprio sistema isso abre leque enorme com uma infinidade de opções por outro lado quando mal imprementado pode trazer vulnerabilidade como o RCE que permite o invasor ter controle total naquele servidor com isso temos que tomar um cuidado extra quando usar essas funções principalmente de forma mais dinamica, a função system permite executar e exibir um comando que seria executado no terminal do servidor como por exemplo o ls que é um comando usado para listar os arquivos do diretorio do sistema linux

<?php system("ls");?>

ou o comando dir que é usado para listar os arquivos no diretorio do sistema windows

<?php system("dir");?>

podemos usar por exemplo o php para executar o ping no sistema

Page 84: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $ip = "192.168.1.254"; system("ping -c 1 " . $ip);?>

no caso do exemplo acima o ip que a gente definiu é estatico ou seja é uma string que não muda, agora se essa string vim do usuario isso ai é uma baita brecha de segurança a vun RCE, isso porque existe a possibilidade de executar vários comandos na mesma string ou seja alem do ping o invasor pode usar qualquer outro comando do sistema “kodo.php?ip=192.168.1.2;cat /etc/passwd”

<?php //nunca faça isso tem risco do servidor ser invadido $ip = $_GET["ip"]; system("ping -c 1 " . $ip);?>

podems usar várias funções system porem uma funçao não afeta a outra então por exemplo se usar ocomando cd para mudar de diretorio não vai mudar para a outra chamada da função system

<?php system("pwd"); system("cd /etc/"); system("pwd");?>

para contornar o problema no exemplo anterior podemos colocar os comandos tudo no mesmo system separados por ponto e virgula no linux e no windows pelo &

<?php system("pwd ;cd /etc/ ;pwd");?>

o system não permite ter a saida armazenada em uma variavel uma forma de contornar isso de forma meio gambiarra seria redirecionar a saida para um arquivo depois bastando ler esse arquivo

<?php system("cat /proc/cpuinfo > info.txt"); $arquivo = file("info.txt"); foreach($arquivo as $lin){ echo($lin . "<br>"); }?>

outra função semelhante é o exec que permite executar algum programa do sistema seu argumento éo programa que vai ser executado e seu retorno seria uma linha da saida do comando

<?php $comando = exec("ls -la"); echo($comando);?>

Page 85: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

podemos ler mais de uma linha com exec bastando passar uma variavel como segundo argumento sera armazenado como array nessa varaiavel

<?php exec("ls -la", $comando); print_r($comando);?>

outra função semelhante ao exec é o passthru

<?php passthru("uname -a");?>

tambem podemos passar uma variavel como segundo argumento para receber o retorno do terminal igual o exec sendo a sua diferença que o retorno sera uma string e não uma array

<?php passthru("uname -a",$comando); echo($comando);?>

com a função shell_exec tabem podemos passar como argumento o comando do terminal e armazenar em uma variavel o retorno

<?php $comando = shell_exec("whoami"); echo($comando);?>

outra forma de fazer isso é usando a função popen sendo essa função uma especie de pipe para o terminal, seu uso é igual o a função fopen porem ao inves de definir um arquivo para ser aberto a gente define o comando para ser executado

<?php $comando = popen("ps aux","r"); pclose($comando);?>

depois basta ler o handle como se estivesse lendo um arquivo

<?php $comando = popen("ps aux","r"); while($linha = fgets($comando)){ echo($linha . "\n"); } pclose($comando);?>

Page 86: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

tambem podemos usar a permissão de escrita a diferença entre a leitura e escrita que a leitrua seria equivalente a executar o comando no sistema e redirecionar a saida para o script php já a escrita seria executar a função no script php e redirecionar para o comando do sistema

<?php $comando = popen("cat > kodo.txt","w"); fwrite($comando,"railgunbot é a bot mais kawaii do discord"); pclose($comando);?>

4.5 – Manipulando socket

sockets não são muitos utilizado em php pelo menos não diretamente ou pelo menos os socket servidores já que o php é usado mais para web do que para desktop com isso não é possivel subir sockets para criar servidores principalmente em webhosts que é limitado apenas ao servidor web, socket tambem é um assunto bem complexo que por si só já daria um ebook inteiro levando principalmente para o lado de rede e protocolos de rede, no caso os sockets são meios de comunicação entre duas ou mais maquinas sendo um socket servidor que fica aguardando a conexaoe o socket cliente que estebelece, em boa parte das vezes os sockets funciona ate a camada transporte de acordo com a pilha de protocolo tcp/ip (embora dependendo não se limita apenas a essa pilha) com isso podemos usar o socket para conectar em qualquer tipo de servidor que esteja rodando qualquer protocolo de rede porem apenas a conexao em si o protocolo de comunicação entre o cliente o servidor é outra historia, a conexao é sempre iniciada pelo socket cliente que estabelece a conexao no socket servidor porem depois que a conexao é estabelecida qualquer um dos lados pode se comunicar embora a comunicação deve ser seguindo algum protocolo especifico para que tenha essa comunicação de ambos os lados, no php podemos usar a função fsockopen para estabelecer a conexao algum socket servidor sendo seus argumentos o IP da maquina e a porta e seuretorno um handle

<?php $conexao = fsockopen("192.168.1.1", 5000);?>

podemos enviar dados pelo socket para o servidor que conectamos usando as funçãos de escrita em arquivo

<?php $conexao = fsockopen("192.168.1.1", 5000); fwrite($conexao,"oi servidor");?>

como tambem podemos receber dados vindo do servidor com funções leitura de arquivo, quando usamos ela o cliente no caso o nosso script vai ficar esperando os dados chegar para continuar executando o resto do codigo

<?php $conexao = fsockopen("192.168.1.1", 5000); $recebido = fgets($conexao); echo($recebido);?>

Page 87: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

podemos refezar qualquer protocolo apenas conhecendo ele, exemplo uma requisição a um servidor web

<?php $conexao = fsockopen("192.168.1.1", 80); fwrite($conexao,"GET /index.html http/\n\n"); $recebido = fread($conexao,1024); echo($recebido);?>

podemos fechar o handle e comunicação com a função fclose

<?php $conexao = fsockopen("192.168.1.1", 80); fclose($conexao);?>

é possível usar o protocolo udp bastando especificar ele na uri

<?php $conexao = fsockopen("udp://192.168.1.1", 5000);?>

da mesmo forma que o udp podemos especificar o tcp porem é opcional já que por padrao já é tcp

<?php $conexao = fsockopen("tcp://192.168.1.1", 5000);?>

como tambem é possível usar ssl na comunicação

<?php $conexao = fsockopen("ssl://31.13.85.36", 443);?>

tambem pode ser usando dominio ao inves do IP

<?php $conexao = fsockopen("eofclub.com", 80);?>

podemos converter um dominio para um IP usando a função gethostbyname

<?php $ip = gethostbyname("eofclub.com"); echo($ip);?>

ou então por um IP puxar o dominio reverso dele com a função gethostbyaddr

Page 88: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $host = gethostbyaddr("8.8.8.8"); echo($host);?>

tambem é possível usar funções de sockets de mais baixo level inclusive raw sockets ou criar sockets servidores com ele igual sockets na linguagem C porem não vamos abordar isso nesse ebook

4.6 – Manipulado banco mysql

os bancos de dados são meios de armazenamento e acesso de grande quantidade de informação de forma simples e rapida, existem diversos tipos de banco de dados entre eles o mais utilizado pelo menos o mais comum de ser encontrado em um webhost sendo o banco de dados mysql (mariadb), podemos manipular o banco de dados mysql usando diversas funções do php como mysql, mysqli e pdo entre outras, a função mysql esta caindo em desuso ou seja ela esta se tornando uma função deprecated por isso vamos começar com a função mysqli e não abordaremos a função mysql do phpcomo tambem não vamos nos aprofundar na linguagem SQL vou deixar isso para um futuro ebook sobre algum tipo de banco de dados, para a gente usar o banco de dados mysql no php temos que primeiro nos conectar a ele para isso usamos a função msqli_connect passamos como argumento o IP ou host do banco de dados, seguido do usuario daquele banco de dados, seguido da senha e por fim o nome banco de dados que vamos usar (é necessario que o banco de dados já esteja criado)

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp");?>

tambem podemos especificar a porta que o mysql esta usando junto ao IP sendo a porta padrão do mysql a 3306

<?php $banco = mysqli_connect("127.0.0.1:3306","root","12345","ebookphp");?>

dentro do banco de dados tem as tabelas sendo as tabelas divididas por colunas sendo que cada coluna tem um nome e um tipo de dados especifico, exemplo em um banco de dados chamado ebookphp temos a tabela cidade que por sua vez tem as colunas nome, estado, quantidade de pessoaonde estão armazenado os nomes estados e quantidade de pessoas de todas as cidade brasileira, podemos usar a linguagem SQL para fazer essa busca nesse banco de dados usando filtros como porexemplo buscar apenas cidades do estados de minas ou apenas cidades com nomes especificos, paragente fazer essa busca usamos a função mysqli_query passamos como argumento o handle do bancode dados e o comando em SQL que no caso da busca é usado “select * from ” seguido do nome da tabela onde estamos buscando

<?php $banco = mysqli_connect("127.0.0.1:3306","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade");?>

supondo que a gente quer filtrar e retornar apenas cidade de um estado especifico como minas

Page 89: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

gerais podemos usar where seguido do nome da coluna que vamos filtrar seguido de um sinal de igual e por fim da string que vai filtrar

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade where estado = 'mg' ");?>

tambem podemos limitar a quantidade de retorno isso seria uma boa para banco de dados muito grand. Para fazer isso usamos a palavra limit no final seguido da quantidade maxima de retorno

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade limit 1000");?>

depois de fazer a query temos que puxar os dados do retorno dela para isso usamos a função mysqli_fetch_array que vai armazenar toda coluna em uma array, esse armazenamento sera apenas a primeira linha da tabela no caso seria apenas da primeira cidade daquele exemplo, quando a gente usar o mysql_fetch_array novamente vai puxar o da segunda cidade e assim por diante

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade"); $dados = mysqli_fetch_array($busca);

echo("cidade: " . $dados[0] . "<br>"); echo("estado: " . $dados[1] . "<br>"); echo("quantidade: " . $dados[2] . "<br>");?>

como foi dito antes o mysql_fetch_array só vai puxar a primeira linha podemos usar ele em loop para puxar as demais linhas

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade"); while($dados = mysqli_fetch_array($busca)){ echo("cidade: " . $dados[0] . "<br>"); echo("estado: " . $dados[1] . "<br>"); echo("quantidade: " . $dados[2] . "<br><br>"); }?>

outra função parecida com a mysql_fetch_array é a mysql_fetch_assoc sendo a sua diferença que vai armazenar na posição da array o nome da coluna daquele banco

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp");

Page 90: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$busca = mysqli_query($banco,"select * from cidade"); $dados = mysqli_fetch_assoc($busca);

echo("cidade: " . $dados["nome"] . "<br>"); echo("estado: " . $dados["cidade"] . "<br>"); echo("quantidade: " . $dados["qnt"] . "<br>");?>

podemos usar o msqli_query para armazenar novos dados naquela tabela para isso usamos “insert into” no lugar o “select * from”

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); mysqli_query($banco,"insert into cidade(nome,estado,qnt) values ('rio de janeiro','rj', 500000)");?>

ou ate deletar determinado dado usando delete (Obs.: nunca use delete sem where vai deletar tudo kkk)

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); mysqli_query($banco,"delete from cidade where nome = 'são paulo' ");?>

tambem é possível modificar dados com o update (mesmo esquema sem where vai mudar tudo)

<?php $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); mysqli_query($banco,"update cidade set nome = 'barra do pirai' where nome = 'pirai'");?>

podemos fazer isso de forma mais dinamica usando variaveis

<?php $cid = "barra mansa"; $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade where nome = '" . $cid . "'");?>

porem temos que ter cuidado quando o valor dessa variavel vem do usuario isso pode deixar o codigo com uma vulnerabilidade chamada sqli com isso o banco de dados pode ser invadido

<?php //isso é uma falha de sql injection $cid = $_GET["cidade"]; $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $busca = mysqli_query($banco,"select * from cidade where nome = '" . $cid . "'");?>

para evitar o sqli podemos usar mysqi_real_escape_string na variavel

Page 91: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php $cid = $_GET["cidade"]; $banco = mysqli_connect("127.0.0.1","root","12345","ebookphp"); $cidseg = mysqli_real_escape_string($cid); $busca = mysqli_query($banco,"select * from cidade where nome = '" . $cidseg . "'");?>

tambem podemos fechar o handle com a função mysqli_close

<?php $banco = mysqli_connect("127.0.0.1:3306","root","12345","ebookphp"); mysql_close($banco);?>

5.0 – Orientação a objeto

a orientação a objeto é um conceito que trata todas as variaveis e funções que pertence a um determinado objeto como um todo permitindo abstrair determinada informação ou acesso de forma direta ou de forma indireta aquele objeto, os objetos criados da mesma estrutura são iguais tem as mesmas funções e variaveis sendo cada objeto único e ao decorrer do programa eles podem receber valores diferentes sem afetar o outro objeto gerado da mesma estrutura, as variaveis dentro de um objeto são chamados de atributos e as funções de metodos sendo que a cada novo objeto é uma instancia nova daquela estrutura sendo na linguagem php essa estrutura chamada de classe, a orientação a objeto tambem permite restringir acesso a determinados atributos por encapsulamento como tambem um classe pode herdar os atributos e funções de outra classe isso é chamado de herança

5.1 – Orientação a objeto: class

as classes na linguamgem php define exatamente como é a estrutura que compoe o objeto que sera instanciado por ela, é possivel instanciar quantos objetos a gente quiser de uma determinada classe sendo que todos eles vão ser único porem todos eles vão ter as mesmas carecteristicas sendo elas os metodos e atributos, para a gente criar uma classe basta usar a palavra reservada class seguido do nome dela que pode ser qualquer nome seguindo aquela regrinha das variaveis (sem espaço e sem simbolos especiais), depois do nome tem abre e fecha chaves que seria o escopo para especificar os atributos e metodos dele

<?php class kodo{ }?>

para gente instanciar essa classe ou seja gerar um objeto novo dela basta atribuir ela para uma nova variavel porem temos que usar o new para gerar um novo objeto dela e não uma copia da estrutura

<?php class kodo{ }

Page 92: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$kami = new kodo;?>

para gente criar um atributo usamos o tipo de acesso desse atributo naquele objeto sendo ele public seguido do nome dele

<?php class kodo{ public $x; }

$kami = new kodo;?>

para a gente atribuir um valor a esse atributo naquele objeto basta usar a variavel que esta o objeto seguido da hífen e maior que (->) e o nome do atributo isso vai permitir a gente acessar aquele aquele determinado atributo daquele objeto depois basta fazer como a atribuição nas variaveis

<?php class kodo{ public $x; }

$kami = new kodo; $kami->x = 315;?>

a sua leitura tambem seria da mesma forma bastando ler aquele atributo

<?php class kodo{ public $x; }

$kami = new kodo; $kami->x = 315; echo($kami->x);?>

podemos criar quantos atributos a gente quiser em uma classe

<?php class kodo{ public $x; public $y; public $resu; }

$kami = new kodo; $kami->x = 154;

Page 93: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$kami->y = 500; $kami->resu = $kami->x + $kami->y; echo($kami->resu);?>

para atributos do mesmo tipo como por exemplo o public podemos separar eles por virgula para nãoprecisar ficar escrevendo public

<?php class kodo{ public $x, $y, $resu; }?>

tambem é possível armarzenar outros tipos de dados nos atributos

<?php class kodo{ public $inteiro, $quebrado, $texto; }

$fts = new kodo; $fts->inteiro = 315; $fts->quebrado = 95.82; $fts->texto = "poo - programação orientada a objeto";?>

como já sabemos é possivel criar quantos objetos a gente quiser e cada um deles é único não interferindo no outro

<?php class kodo{ public $numero; }

$forumeof = new kodo; $forumeof->numero = 100;

$eofclub = new kodo; $eofclub->numero = 200;

echo($forumeof->numero . "<br>"); echo($eofclub->numero . "<br>");?>

é possiavel copiar todos os atributos de um objeto para outro se os dois forem instanciados do mesmo objeto

<?php class kodo{

Page 94: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

public $numero; }

$k1 = new kodo; $k2 = new kodo;

$k1->numero = 315; $k2 = $k1;

echo($k2->numero);?>

tambem podemos criar metodos que são as funções bastando especificar o tipo de acesso e criar o metodo exatamente como nas funções

<?php class kodo{ public function exibir(){ echo("eu sou um metodo<br>"); } }?>

é opcional o tipo de acesso para os metodos embora seja recomendado o seu uso

<?php class kodo{ function exibir(){ } }?>

para a gente chamar esse metodo fazemos da mesma forma que o atributo porem com aquele metodo ou seja instanciar o objeto e chamar o metodo pelo objeto

<?php class kodo{ public function exibir(){ echo("eu sou um metodo<br>"); } }

$objeto = new kodo; $objeto->exibir();?>

podemos passar valores como argumentos normalmente para o metodo como nas funções

<?php class kodo{

Page 95: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

public function somar($x, $y){ $resu = $x + $y; echo($resu . "<br>"); } }

$mate = new kodo; $mate->somar(1234, 4321);?>

como tambem podemos ter um retorno do próprio metodo

<?php class kodo{ public function somar($x, $y){ $resu = $x + $y; return $resu; } }

$mate = new kodo; $resultado = $mate->somar(1234, 4321); echo($resultado);?>

para acessar os atributos diretamente de um metodo dentro daquele objeto usamos um ponteiro especial chamado $this, esse ponteiro aponta para o próprio objeto e todos os atributos e metodos dentro dele

<?php class kodo{ public $numero; public function quadrado(){ $resu = $this->numero * $this->numero; echo($resu); } }

$obj = new kodo; $obj->numero = 5; $obj->quadrado();?>

o mesmo pode ser feito para chamar outros metodos dentro daquele metodo

<?php class kodo{ public function chamar(){ $this->exibir(); }

Page 96: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

public function exibir(){ echo("eu sou um metodo"); } }

$obj = new kodo; $obj->chamar();?>

outra forma de acessar metodos equvalente ao ponteiro $this é o self::

<?php class kodo{ public function chamar(){ self::exibir(); }

public function exibir(){ echo("eu sou um metodo"); } }

$obj = new kodo; $obj->chamar();?>

tambem é possível destruir o objeto bastando atribuir null para ele

<?php class kodo{ }

$obj = new kodo; $obj = null;?>

5.2 – Orientação a objeto: construtores

os contrutores são metodos especiais que são executados assim que o objeto é instanciado ou seja assim que usamos o new seguido da classe, os contrutores podem ser usados para chamar outros metodos atribuir valores iniciais ao atributos, o construtor na linguagem php é um metodo chamado __construct

<?php class kodo{ function __construct(){ } }

$obj = new kodo;

Page 97: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

?> tudo que for colocado no construtor sera executado assim que o objeto for instanciado

<?php class kodo{ function __construct(){ echo("fui instanciado <br>"); } }

$obj = new kodo;?>

podemos usar um construtor para atribuir um valor para um atributo

<?php class kodo{ public $valor; function __construct(){ $this->valor = 315; } }

$obj = new kodo; echo($obj->valor);?>

alguma linguagens não é possível atribuir um valor diretamente a um atributo sendo possível apenasvia construtor embora na linguagem php é possível já atribuir o valor diretamente a um atributo

<?php class kodo{ public $valor = 315; }

$obj = new kodo; echo($obj->valor);?>

tambem podemos passar variaveis como argumento para o construtor

<?php class kodo{ function __construct($x, $y){ echo($x + $y); } }?>

Page 98: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

os valores dessas variaveis como argumento deve ser passado quando instanciar o objeto

<?php class kodo{ function __construct($x, $y){ echo($x + $y); } }

$obj = new kodo(900, 50);?>

podemos atribuir um valor padrão para essa variavel como argumento se nenhum argumento for passado sera usado esse determinado valor caso algum outro valor seja passado como argumento elesera substituido pelo valor que foi passado como argumento

<?php class kodo{ function __construct($x = 1000){ echo($x . "<br>"); } }

$obj = new kodo; $obj2 = new kodo(50);?>

alem dos contrutores temos os destruidores que é o oposto de um construtor ou seja quando o objetofor destruido sera chamado e o seu metodo é o __destruct

<?php class kodo{ function __destruct(){ echo("fui destruido <br>"); } }

$obj = new kodo; $obj = null; echo("fim do codigo <br>");?>

caso a gente não destrua o objeto durante o codigo o destruidor sera chamado no final do codigo ou seja a destruição vai vim antes ou depois não importa você que decide isso (profundo isso '-' )

<?php class kodo{ function __destruct(){ echo("fui destruido <br>"); } }

Page 99: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$obj = new kodo; echo("fim do codigo <br>");?>

5.3 – Orientação a objeto: encapsulamento

encapsulamento é uma forma de restringir o acesso direto ao atributo ou ao metodo permitindo apenas de forma indireta atraves de outros metodos ter aquele acesso, em php e em boa parte das linguagens existem apenas 3 tipos de acesso ao metodo e atributo sendo eles public, private e protected, o metodo public que estamos usando ate agora permite o acesso aos metodo e atributo daquela class de forma direta sem nenhuma restrição

<?php class kodo{ public $nome = "flavio"; }

$kami = new kodo; echo($kami->nome);?>

o mesmo vale para os metodos

<?php class kodo{ public function exibir(){ echo("eu sou um metodo <br>"); } }

$kami = new kodo; $kami->exibir();?>

não especificar o public no metodo seria o mesmo que utilizar ele como public naquele metodo

<?php class kodo{ function exibir(){ echo("eu sou um metodo <br>"); } }

$kami = new kodo; $kami->exibir();?>

alem do public temos o private que restringe o acesso apenas dentro do própria classe não podendo chamar os atributos diretamente fora dela

Page 100: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

<?php class kodo{ private $nome = "flavio"; }

$kami = new kodo; //não é possível acessar o atributo nome dessa forma echo($kami->nome);?>

o mesmo vale para os metodos

<?php class kodo{ private function exibir(){ echo("eu sou um metodo <br>"); } }

$kami = new kodo; //não é possivel chamar o metodo exibir dessa forma $kami->exibir();?>

podemos acessar esses atributos e metodos apenas dentro da própria classe por outros metodos

<?php class kodo{ private $nome = "flavio"; public function mostrar(){ echo($this->nome); } }

$kami = new kodo; $kami->mostrar();?>

da mesma forma só podemos chamar metodos privados dentro da própria classe por outros metodos

<?php class kodo{ private function msg(){ echo("eu sou um metodo <br>"); } public function mostrar(){ $this->msg(); } }

$kami = new kodo;

Page 101: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$kami->mostrar();?>

muitos programadores usa um metodo para ler e outro para modificar o atritubo privado sendo comumente chamados de get e set

<?php class kodo{ private $nome; public function setNome($texto){ $this->nome = $texto; } public function getNome(){ return $this->nome; } }

$kami = new kodo; $kami->setNome("flavio"); echo($kami->getNome())?>

outro tipo acesso é protected que é paracido com o private o que difere os dois que o protected permite que os atributos e metodos protected possa ser herdado em outros metodos como herança jáo private não

<?php class kodo{ protected $nome = "flavio"; }

$kami = new kodo;?>

5.4 – Orientação a objeto: herança

uma classe pode herdar as mesmas caracteristicas de outra classe como os metodos e atributos isso échamado de herança a no classe que vai receber as caracteristica é classe filho e a classe onde herdou é classe pai, com isso não é necessario recriar os mesmos metodos e atributos bastando herdar eles de metodos já existentes no codigo ou ate mesmo criar novas funcionalidades de metodos antigos em novos metodos usando a herança, para a gente herder os metodos e atributos deuma classe basta criar a classe e usar extends seguida da classe que vai esta herdanda

<?php class pai{ }

class filho extends pai{ }

?>

Page 102: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

a classe que herdar vai ter os mesmo atributos que a outra classe

<?php class kodo{ public $forum = "eofclub"; }

class kami extends kodo{ }

$objeto = new kami; echo($objeto->forum);?>

como tambem tera os metodos da outra classe

<?php class kodo{ public function exibir(){ echo("herança <br>"); } }

class kami extends kodo{ }

$objeto = new kami; $objeto->exibir();?>

os metodos e atributos privados não são herdados por outras classes ficando limitado apenas aquela própria classe

<?php class kodo{ private $forum = "eofclub"; }

class kami extends kodo{ }

$objeto = new kami; echo($objeto->forum);?>

quando precisamos limitar o acesso direto como o metodo privado usamos o metodo protegido que funciona como metodo privado porem permite ser herdado por outras classes

<?php class kodo{

Page 103: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

protected $forum = "eofclub"; }

class kami extends kodo{ }

$objeto = new kami;?>

como os metodos e atributos protegidos são parecidos como os metodo privados então apenas podem ser acessados por outros metodos da própria classe ou das classes herdadas e não de forma direta

<?php class kodo{ protected $forum = "eofclub"; }

class kami extends kodo{ public function getForum(){ return $this->forum; } }

$objeto = new kami; echo($objeto->getForum());?>

a gente pode herdar uma classe que já tenha sido herdada em outra classe

<?php class kodo{ public $forum = "eofclub"; }

class kami extends kodo{ }

class fts extends kami{ }

$objeto = new fts; echo($objeto->forum);?>

se tanto na classe pai quanto na classe filho tiver um atributo com o mesmo nome o ponteiro $this vai apontar o da própria classe ou seja o da classe filho

<?php class kodo{ protected $nome = "kodo";

Page 104: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

}

class kami extends kodo{ protected $nome = "kami"; public function showNome(){ echo($this->nome); } }

$objeto = new kami; $objeto->showNome();?>

o mesmo vale para os metodos

<?php class kodo{ protected function exibir(){ echo("metodo classe pai"); } }

class kami extends kodo{ protected function exibir(){ echo("metodo classe filho"); } public function showExibir(){ self::exibir(); } }

$objeto = new kami; $objeto->showExibir();?>

podemos usar o parent sendo que seu uso funciona apenas com metodos e ele é parecido com o self porem aponta para classe pai ou seja aquela classe da onde herdamos o metodo

<?php class kodo{ protected function exibir(){ echo("metodo classe pai"); } }

class kami extends kodo{ protected function exibir(){ echo("metodo classe filho"); } public function showExibir(){ parent::exibir();

Page 105: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

} }

$objeto = new kami; $objeto->showExibir();?>

podemos especificar a classe colocando o nome dela isso permite acessar ate metodos que foram herdados de outras classes especificas

<?php class avo{ protected function msg(){ echo("metodo classe avo"); } } class pai extends avo{ protected function msg(){ echo("metodo classe pai"); } } class filho extends pai{ protected function msg(){ echo("metodo classe filho"); } public function showMsg(){ echo(avo::msg() . "<br>"); echo(pai::msg() . "<br>"); echo(filho::msg() . "<br>"); } }

$obj = new filho; $obj->showMsg();?>

5.5 – Orientação a objeto: polimorfismo

polimorfismo é quando alguma coisa acaba assumindo varias formas podendo ser um metodo que existe em uma classe pai e quando herdada pode fazer coisas diferentes a cada nova classe filho, esses metodos são chamados de metodos abstratos sendo seu prototipo criado na classe pai porem sua funcionalidade são criado nas classes filhos, para usar um metodo abstrato em php a própria classe deve ser abstrata como o seu metodo

<?php abstract class pai{ abstract public function msg(); }

Page 106: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

class filho extends pai{ public function msg(){ echo("sou o metodo abstrato"); } }

$obj = new filho; $obj->msg();?> as classes abstratada tambem pode ter outros metodos sem ser abstratos

<?php abstract class pai{ abstract public function msg(); public function segunda_msg(){ echo("sou metodo não abstrato"); } }

class filho extends pai{ public function msg(){ echo("sou o metodo abstrato<br>"); } public function chamar(){ $this->msg(); $this->segunda_msg(); } }

$obj = new filho; $obj->chamar();?>

classes abstratas não podem ser instanciadas como objeto e as classes que herdar classes abstratas devem obrigatorimente criar os metodos abastratos dela, como tambem podemos herdar uma classe abstrata em outra para que os metodos abstratos seja criado nela ou nas que herdam ela

<?php abstract class avo{ abstract public function msg(); }

abstract class pai extends avo{ }

class filho extends pai{ public function msg(){ echo("sou metodo abstrato do avo"); } public function getMsg(){

Page 107: END OF FILE – EBOOK PHP - eofclub.in file3.2 – Operação bit a bit 3.3 – Operadores de comparação e logicos 3.4 – Estruturas condicionais 3.5 – Estruturas de repetição

$this->msg(); } }

$obj = new filho; $obj->getMsg();?>

6.0 – EOF

bom galera aqui termina mais um ebook anual que eu deveria ter terminado no começo do ano, como sempre não posso deixar de agradecer a galerinha do eof como os mano s1m0n que tem uma radio pirata do undergroud que eu sei ta, sir.rafiki viciado em java ou java é viciado nele não sei dizer, mmxm que ate hoje estou esperando a ajuda com metal framework esse projeto era de 2013 kkk, neofito que curte anime lolicon (ainda acho shinobu melhor que a est), gjuniioor que aparece as vezes no discord e discute com os bots, e outros membros sumido como nass, lenda, hannibal e 0racle que deve ter sido preso kkk, uma amiga de longa data melots sempre converso com ela no face s2, rafell que sempre esta on quando eu estou off, facist aquele viciado em p2p, jhonydk para de jogar LOL caramba, a railgunbot minha bot-waifu que não consigo subir ta faltando modulos kkk, tambem outros manos de outros fóruns como fabrica de noobs e chatuba, mib, brasil black hat, caveira tech, gamemod não vou citar toda essa galera já que é muita gente \o

como falta 4 dias para o natal deixo vocês com essa imagem que achei no google kkk