quinta-feira, 23 de outubro de 2008

Urls Amigáveis no PHP(Apache)

Mtas vezes o cliente ou o próprio programador deseja dar uma "enxugada" nas urls.
De modo que www.site.com?pagina.php?id=114&atr=nome&sessao=comentarios se torne algo como: www.site.com/comentarios/nome/114.


Para tanto nos usamos o mod_rewrite, o mod_rewrite é um módulo do servidor Apache que permite reescrevermos as urls.


Mas tem mais mnós não só reescrevemos elas como também tornamos imperceptível para o navegador,crawlers e spiders!


Nota: Crawlers e spiders são programas que vasculham a internet em busca de dados, com o google bot



Resumindo o artigo:
  • Para termos mod_rewrite devemos editar o .htacces que só deve ter esse nome e deve ficar na root do html;
  • Editando o htaccess devemos iniciar o mod_rewrite com RewriteEngine On;
  • Caso queiramos aplicar a regra apenas para alguns usamos RewriteCond;
  • Aplicamos a regra com RewriteRule REGEX Redirecionamento e Flags;
  • Usamos backreference que vem a ser o que a regex abriga para passar referência a pagina em si;
  • A Url fica imperceptível no lado cliente;
  • EXEMPLO Rápido:
    RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(artigos)(\/(.+)?)?$ /indexArtigos.php?tipo=ver&artigoNome=$3 [L]
    RewriteRule ^(editarArtigos)(\/(.+)?)?$ /indexArtigos.php?tipo=editar&artigoNome=$3 [L]

  • Exemplo para fingir que php é html
    RewriteEngine On
    RewriteRule ^(.*)\.htm /$1.php[L]


Iniciando, o arquivo .htaccess


o arquivo .htaccess é um arquivo que tem apenas este nome, não é algo.htaccess é apenas .htaccess, este arquivo deve ficar na pasta raiz de seu servidor ex: htdocs,www,public_html etc. Para certos servidores vc já tem um arquivo .htaccess lá, se for o caso o edite mas evite de deletar informações a não ser que saiba exatamente o que elas fazem!


A sintaxe do .htacces para mod_rewrite


Abaixo explicarei apenas as coisas mais usadas para maiores informações : http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html



  • Habilite o mod_rewrite RewriteEngine On OU RewriteEngine Off caso decida desabilitá-lo

  • Se desejado coloque condições RewriteCond String-de-Test Padrão-da-condição

  • Coloque a regra em si : RewriteRule Padrão Substituição


A sintaxe RewriteEngine é auto explicativa, abaixo explico em detalhes RewriteCond e RewriteRule


RewriteCond

Define a condição para que o mod_rewrite funcione, podemos utilizar variáveis com a sintaxe %{NOME-DA-VARIAVEL} em que as variaveis disponiveis são:


Variaveis RewriteCond

HTTP_HEADERS HTTP_USER_AGENT ,HTTP_REFERER ,HTTP_COOKIE ,HTTP_FORWARDED ,HTTP_HOST ,HTTP_PROXY_CONNECTION ,HTTP_ACCEPT


connection & request:REMOTE_ADDR ,REMOTE_HOST ,REMOTE_PORT ,REMOTE_USER ,REMOTE_IDENT ,REQUEST_METHOD, SCRIPT_FILENAME, PATH_INFO, QUERY_STRING ,AUTH_TYPE


server internals: DOCUMENT_ROOT ,SERVER_ADMIN ,SERVER_NAME ,SERVER_ADDR ,SERVER_PORT ,SERVER_PROTOCOL ,SERVER_SOFTWARE


system stuff: TIME_YEAR ,TIME_MON ,TIME_DAY ,TIME_HOUR ,TIME_MIN ,TIME_SEC ,TIME_WDAY ,TIME


specials:API_VERSION ,THE_REQUEST ,REQUEST_URI ,REQUEST_FILENAME ,IS_SUBREQ ,HTTPS


A maioria das variáveis são nativas do apache, já documentadas em outro lugar exceto as specials:



  • IS_SUBREQ: Contem true ou false se é um sub_request

  • API_VERSION Versão do Apache module API

  • THE_REQUEST a http_request completa enviada ao servidor ex: GET /index.html HTTP/1.1 Não inclui headers adcionais como coisas enviadas por um form

  • REQUEST_URI a URI por exemplo index.html

  • REQUEST_FILENAME caminho para o script dentro do server como c:\xampp\htdocs\index.html

  • HTTPS contem "on" ou "of" dependendo de se estar usando SSL/TLS


Vc pode colocar um ! na condição para especificar o que NÃO deve bater na expressão


Flags rewrite Cond


  • -d se é um diretório

  • -f se é um arquivo comum(ex: txt,xml etc..)

  • -s arquivo comum com tamanho maior que 0

  • -l Link Simbólico

  • -D se é um diretório(Via sub-request)

  • -F se é um arquivo comum(Via sub-request)


OR e AND em RewriteCond

Normalmente ao se colocar uma regra como:


RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d


Teriamsos a seguinte interpretação Se ele NÃO É um arquivo comum E não é um diretorio


Caso nós queiramos um ou basta colocar o seguinte


RewriteCond %{SCRIPT_FILENAME} !-f[OR]
RewriteCond %{SCRIPT_FILENAME} !-s


Nesse caso a regra se aplica pra arquivos que Não Sejam arquivos comuns OU sejam arquivos comuns com tamaho maior que zero


Exemplo:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepageMoz.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /homepageLynx.html [L]
RewriteRule ^/$ /homepageOther.html [L]


essa condição bate se o usuário estiver usando mozilla vai pra uma pagina, lynx outra e o resto outra, ficara mais claro quando explicarmos a RewriteRule


RewriteRule

A RewriteRule usa expressões regulares(Regex), caso não saiba pesquise no google, talvez num futuro próximo escreva um artigo sobre isso, por hora suponho que vc entenda Regex


Sintaxe Básica

RewriteRule ^(admin)(\/(\w+)?)?$ /adminArea/admin.php?pagina=$3


no caso acima utilizamos a seguinte regra quando o usuario digitar /admin ou /admin/QUALQUER-LETRA ele sera direcionado para a pagina /adminArea/admin.php?pagina=$3 com o conteudo na parte de texto indo para a variavel GET pagina. Isso é feito por backreferences em que o numero em $ indica o numero do que pegamos com a expressão no nosso caso ,em que $0 é a expressão todo $1 seria admin $2 seria admin/qlqr-letra e $3 qualquer-letra


Algumas flags interessantes para RewriteRule


  • F OU forbidden lança para uma pagina com o erro 403 exemplo:
    RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} -d
    RewriteRule ^.* /paginaProibida.php[F]
    OU
    RewriteCond %{SCRIPT_FILENAME} -d
    RewriteRule ^.* /paginaProibida.php[forbidden]
    O exemplo acima lança para qualquer Diretorio pra paginaProibida.php com o erro 403 enviado ao browser



  • L OU last não aplica mais regras como no exemplo
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
    RewriteRule ^/$ /homepageLynx.html [L]
    Que não passaria pras regras subsequentes

  • N ou next Repassa as regras para o inicio das regras agora com a url ja modificada pela ultima rewrite rule



É isso para maiores referências pesquise urls açucaradas,urls amigaveis ou vá na página do mod_rewrite http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

sábado, 18 de outubro de 2008

Tutorial RED5 Parte 2

Parte 2 Desenvolvendo aplicação Demo


Continuando o Tutorial vou ensinar a criar uma nova aplicação, para referência pode-se usar os tutorias do flashExtensions da ultima postagem http://www.flashextensions.com/tutorials.php O migration guide http://www.joachim-bauch.de/tutorials/red5/MigrationGuide.txt e o HOW TO build new applications http://www.joachim-bauch.de/tutorials/red5/HOWTO-NewApplications.txt


Para IDE eu sugiro o Eclipse mas se vc quiser criar na Unha(nesse caso te invejo ) ou usando NETbeans ou o que seja sinta-se a vontade


A forma mais simples de se criar uma aplicação e copiando outra, geralmente há a aplicação test, copia e renomeie para o nome que qusier neste caso usaremos o nome exemplo


Estrutura de pastas


Na pasta webapps estará todas as suas aplicações por hora


Cada aplicação Deve/pode ter a pasta WEB-INF e Streams(Pode ter outro nome como podemos ver em outro tutorial)


Na WEB-INF teremos nosso binários e fontes dentro da WEB-INF temos lib,src,classes


Na lib colocaremos qlqr jar de referência que necessitarmos


Na classes teremos nossos binários


Na src nossos fontes (.java)


Desenvolvendo o Red5 com eclipse



  • Copie a pasta webapps/test ou crie uma nova pasta com o nome da sua aplicação no nosso caso exemplo,dentro da pasta devemos ter a pasta WEB-INF.Na WEB-INF devemos ter as pastas classes,streams e lib

  • No eclipse selecione o workspace para ser webapps e crie um novo projeto a partir do existente na pasta da aplicação

  • Na pasta do seu projeto clique com o botão direito,build path >configure build path clique em libraries, add external jars e adcione o red5.jar

  • Ainda em configure build path clique em source e vá em Default output folder e coloque a pasta WEB-INF/classes

  • clique com o direito WEB-INF/src>build path e va em use as source folder ou em configure build path novamente e coloque o WEB-INF/src como source folder, o icone deverá mudar

  • Crie um novo package algo como br.com.exemplo e nesse package crie uma classe com o nome de TesteExemplo


Agora preparamos o PROJETO vamos preparar os arquivos



Arquivos importantes


web.xml Arquivo principal de configuração copie-o do teste
Mudaremos algumas coisas procure a parte que diz
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/test</param-value>
</context-param> e mude o test para exemplo isso dirá ao red5 como acessar nossa aplicação


red5-web.xml Esse arquivo é vital , uma leve adaptação dele será no futuro o que exportaremos para o tomcat, partes importantes dele são o bean com o id de web.scope e o bean com o id de web.handler


No bean web.scope nós temos coisas relevantes ao ACESSO a nossa aplicação, enquanto ela está rodando no red5 como um serviço podemos usar o arquivo red5-web.properties para estocar algumas variáveis(ainda não testei isso no Tomcat)


Caso optemos por usar variáveis nesse arquivo a referência a ela estará na parte do bean de id "placeholderConfig" onde o value é o caminho a apartir da nossa aplicação pro arquivo properties


Voltando ao web.scope nesta parte nos temos:


<property name="server" ref="red5.server" /> Referência ao servidor global do red5(não mecha)


<property name="parent" ref="global.scope" /> Escopo Pai normalmente é o global.scope


<property name="context" ref="web.context" /> Contexto desse escopo referencia o no com msm id


<property name="handler" ref="web.handler" /> Handler, ponto de entrada referência nó com o msm id


<property name="contextPath" value="${webapp.contextPath}" /> Nome de acesso da aplicação no nosso caso exemplo, o valor poderia ser "/exemplo" ou como está ${webapp.contextPath} nesse caso estamos puxando esse valor do red5-web.properties


<property name="virtualHosts" value="${webapp.virtualHosts}" /> Hosts de acesso novamente estamos referenciando o red5-web.properties são os servidores ao qual permitimos acesso a essa aplicação poderia ser por exemplo:
*,localhost, localhost, 127.0.0.1, localhost:1935


red5-web.properties Esse arquivo referênciado pela tag <bean id="placeholderConfig"> do red5-web.xml configura variáveis externas no nosso caso temos as variaveis contextPath e virtualHosts no caso, a sintaxe eh NOME_DA_VARIAVEL=VALOR e só, separe-as por new line , no nosso caso algo assim:


contextPath=/exemplo
virtualHosts= *,localhost, localhost, 127.0.0.1, localhost:1935


O bean de id web.handler diz onde está a classe que cuida das requisições(podemos ter services que seriam outras classes tbm mas por hora vamos apenas usar este handler) o atributo class diz onde está o caminho no package pra nossa aplicação por exemplo no nosso caso br.com.exemplo.TesteExemplo, e o atributo singleton diz se ele é um singleton(criado apenas uma vez) ou não



Agora podemos criar nossa aplicação estando tudo preparado


Desenvolvendo a aplicação propriamente dita


Na sua aplicação extenda org.red5.server.adapter.ApplicationAdapter provavelmente vc terá que exportar alguns jars que estarão em Red5/lib


Coloque um método público como soma do red5 algo como isso aqui:
public Double soma(Double num,Double outroNum){
return num+outroNum;
}


Terminamos a parte do servidor


Lado cliente da aplicação


Para os leigos em comunicação com servidor em flash nos usaremos a classe netConnection que fará uma conexão RTMP, que é o protocolo de acesso usado pelo Red5(tpo http,ftp,https etc), com o servidor abaixo o código comentado



nc = new NetConnection();//Cria o objeto
nc.connect("rtmp://localhost/exemplo");//Se conecta ao exemplo O nome que colocamos como acesso
nc.onStatus= function (obj){//Funcao que lida com a conexao
switch(obj.code){
case "NetConnection.Connect.Success"://Ao se conectar com sucesso chamamos o metodo
nc.call("soma", nc, 3.0, 2.5);
break;
default:
trace("Deu algum pal "+obj.code);
}
nc.onResult = function(obj) {
trace("Resultado: " + obj);//Recebemos o retorno do metodo deve imprimir 5.5
}


É isso ae qlqr duvida comentem, publicarei outras coisas sobre Red5 caso alguem leia ou peça

Tutorial RED5

Parte 1: Preparando o Terreno


Mto bem tentando retomar o blog que nunca foi realmente tomado e devolver alguma coisa pra comunidade de TI.


Vou tentar neste e nos próximos posts postar um tutorial de Red5


O que é o Red5?


Red5 é um servidorFlash server Open Source em JAVA que suporta:



  • Streaming Audio/Video (FLV e MP3)

  • Gravação de Client Streams (Só FLV)

  • Shared Objects

  • transmissão de stream ao vivo

  • AMF



Downloads


Primeiramente baixe o red5 em http://osflash.org/red5/red5downloads Tenha o JAVA 6 Instalado preferencialmente e por segurança baixe o ANT(Atualmente eu não preciso dele com Red50.7 no Windows XP)


Após baixar o ant coloque-o em uma pasta e SE quiser adicione ele nas variaveis de sistema


Munidos e Instalados de ANT,JAVA6 e Red5 vamos as variáveis


Variáveis de Ambiente


NO WINDOWS


Para setar qualquer variavel ou vá em Painel de Controle>Sistema>Avançado>Variaveis de Ambiente na área de váriavies de sistema clique em nova pra cada variável.


Ou vá no Prompt de comando


ANT


  1. Coloque ele onde bem Entender

  2. Adcione o caminho ate a pasta do ANT na variavel ANT_HOME

  3. No prompt digite algo como :set ANT_HOME=c:\ant

  4. TENHA CERTEZA DE NÃO SOBRESCREVER A VARIÁVEL PATH

  5. Adcione no FINAL de path o caminho até a pasta do bin dentro da pasta do ant

  6. No prompt de comando digite set PATH=%PATH%;%ANT_HOME%\bin



JAVA_HOME


  1. Encontre a pasta JDK no seu windows estará algo como C:\Arquivos de programas\Java\jdk1.6.0_05\

  2. Coloque esse valor na variável java_home no prompt digite set JAVA_HOME=C:\Arquivos de programas\Java\jdk1.6.0_05\


NO LINUX


ANT

No shell exporte as variáveis do ANT como dito acima



  1. export ANT_HOME=/usr/local/ant

  2. TENHA CERTEZA DE NÃO SOBRESCREVER A VARIÁVEL PATH

  3. export PATH=${PATH}:${ANT_HOME}/bin


Dependendo do linux os comandos serão



  1. setenv ANT_HOME /usr/local/ant

  2. TENHA CERTEZA DE NÃO SOBRESCREVER A VARIÁVEL PATH

  3. set path=( $path $ANT_HOME/bin )


JAVA_HOME


  • export JAVA_HOME=/usr/local/jdk-1.6.0.05

  • OU setenv JAVA_HOME /usr/local/jdk/jdk-1.6.0.05


Referência: http://ant.apache.org/manual/install.html


Se vc manja mais de inglês esse tutorial é fantástico pra td o que vou falar aqui: http://www.flashextensions.com/tutorials.php procure a aba do Red5 e mande bala

segunda-feira, 26 de maio de 2008

Retomando: Planeta Terror

Resolvi voltar a ter um blog, e sei q nem tinha usado este mas agora vou usar.
O primeiro post é sobre o filme planeta terror e sobre o porque dele ser tão foda
  1. O trailer do machete.
  2. A ferg lésbica.
  3. Loira gostosa-anestesiada-de-pulso-quebrado-lésbica-que-dirige-mesmo-assim-e-depois-quebra-um-dente
  4. A puta pirata.
  5. Mortal do cara fodão/galã do filme.
  6. Bruce willis.
  7. O corte no meio do filme.
  8. Testiculos.
  9. Mini-moto.
  10. Zumbis.
  11. Zumbis-em-chamas
  12. O tiro do cara fodão/galã do filme.
  13. Gemêas Loucas com ancinhos.
  14. Citação do Bin Laden.
  15. Bruce willis matou o bin laden.
  16. A frase "Best in texas".
  17. A voz de um carinha sendo desmembrado.
  18. A frase "Malditas Noites de Quarta-feira".
  19. A frase "Deus tem piedade,eu não". By padre irmão do machete.
  20. Pus e sangue.
  21. Garoto suicida.
  22. Zumbi com moto-serra-de-cortar-gesso.
  23. Faca para cortar testículos.
  24. A caixa do td ou nd.
  25. Cachorro suicida.
  26. Explosões.
  27. Mtas explosões.
  28. Zumbis-ejetáveis.
  29. A frase "Ele está molhando o biscoito Sr".
  30. Quentin Tarantino.
  31. Máscaras de gás.
  32. A camêra distorcida.
  33. Bruce Willis inflado.
  34. Pessoas desdentadas.
  35. Stripper perneta dançando.
  36. Arma de seringa.
  37. Metralhadora no lugar da perna.
  38. TDS minas de top.
  39. Numeração de talentos inuteis
  40. Policial sexy.
  41. HEAD SHOTS
  42. O Võo da striper
  43. Munição infinita/GameShark
  44. Mano do gueto coadjuvante.
  45. Brigas conjugais(c/zumbis!).
  46. A frase "Tão inutil qnt o pau de um sacerdote".
  47. Cafetão piloto.
  48. Zumbis covardes.
  49. Decepar zumbis c/ helicopteros
  50. "Necrofilia"
  51. Mexicanos
  52. Fim do mundo
  53. Perna de 6 canos
  54. THE END
  55. Ñ falam pq o fodão é fodão;
  56. Trilha sonora.
Se eu fosse vc saia correndo pra alugar agora.
PS: Assistir em grupo é mto melhor

quarta-feira, 26 de dezembro de 2007

Primeiro post

este é o primeiro post do meu rascunho de blog. Deseja eu mesmo fazer o meu mas circunstâncias fora do meu controle não permitiram.
Farei o meu com FLEX qnd der.
De qualquer forma este blog pretende ser uma fonte de qualquer coisa relacionada a programação,HQs e coisas de gente Nerd.
Principalmente PHP,Java e Linux