Portal Chamar Táxi

Workshop de PHP

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Blasten blt-SEARCH 1.0.5



Um sistema buscador, realizado em PHP e MySQL, que é capaz de indexar conteúdos de um ou de vários web sites, oferecer resultados ordenados por importância e se configurar para diversos usos ou designs.
Por Emmanuel García De Caro





Neste artigo vamos apresentar Blasten blt-SEARCH, um sistema de busca e indexação de conteúdos escrito em PHP e que utiliza banco de dados MySQL. Trata-se de um produto gratuito e com interessantes possibilidades, que se mostra muito útil para prover de ferramentas de busca dentro de nosso web site, ou de outras páginas.

Uma das partes fundamentais de blt-SEARCH é um sistema scanneador de links, que colocará os resultados por importância e que permite ordenar al instante todos os links encontrados na busca. Para isso, calcula a semelhança entre o critério buscado e os conteúdos indexados, baseando-se na importância da página e consegue atribuir uma posição adequada, de acordo com a quantidade de links referidos durante o processo de indexação.

Na hora de indexar os conteúdos dos web sites, é capaz de excluir certas URL que superem uma quantidade dada de parâmetros enviados através de HTTP-GET. Se assim o desejamos, também pode eliminar parâmetros sem a necessidade de suprimir a exploração a essa página. O que se traduz em uma grande vantagem para sites gerados dinamicamente através de qualquer tecnologia. Ainda assim, pode iniciar conexões a páginas de acesso restringido com autentificação HTTP.

Tem também capacidade para denegar o seguimento de links a determinados domínios indicados por você mesmo, ou denegar todos.

Dispõe de outras características adicionais. Entre as que caberia destacar:
•Uma biblioteca de funções, que permitem obter informação confidencial de cada documento indexado, que são utilizadas por blt-SEARCH para gerar resultados.
•A possibilidade de obter resultados ainda muito mais específicos e avançados, buscado em URLS definidas pelo usuário.
•Produz sugestões totalmente exatas e efetivas quando não for encontrado com exatidão um critério no banco de dados.
•Pode-se definir uma série de palavras comuns para exclui-las nas buscas, o que melhora sua efetividade.
•É capaz de ler todos as metas tags e robots.txt das páginas a indexar e trabalhar de acordo com o que eles indicarem.
•Indexa também a totalidade dos frames flutuantes interpretados através das etiquetas <frame> e <iframe> respectivamente.
•Pode mostrar um mapa de todo o web site explorado e os elementos que o constituem.
•É possível indexar sites pessoais individuais ou múltiplos.
•Não só indexa páginas web, como também imagens em formatos (Jpeg, Gif, Png e Wbmp), das que extrai informação como o tamanho da imagem, dimensões, formato, Url, etc.
Na hora de mostrar os resultados, é possível configurar uma série de opções e parâmetros, para adapta-los às necessidades de cada web site.

Conclusão

Não cabe dúvida que os sistemas de busca são uma parte importante dentro de web sites grandes. blt-SEARCH nos facilita a tarefa de encontrar conteúdos de forma rápida e precisa, e isso se agradece muito. Este sistema é gratuito e adaptável a muitos casos diferentes, por isso certamente pode ser muito útil aos administradores de web sites.

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Classes e Objetos em PHP




Vemos o tipo de sintaxe com o qual se define uma classe.
Por Emmanuel García De Caro





Uma classe é uma coleção de variáveis e de funções que acessem a essas variáveis:


class Cart {
var $items; // Items em nosso carro da compra

// Adicionar $num artigos de tipo $artnr ao carro

function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}

// Sacar $num artigos do tipo $artnr do carro

function remove_item ($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}

O exemplo define uma classe chamada Cart que consiste em um array associativo de artigos no carro e duas funções para colocar e tirar itens do carro

As classes são tipos, ou seja, são planilhas para variáveis. Tem que criar uma variável do tipo desejado com o operador new.

Este exemplo cria um objeto $cart de classe Cart. A função add_item() desse objeto se chama para adicionar um item do artigo número 10 ao carro.

As Classes podem ser extensões de outras classes. As classes estendidas ou derivadas têm todas as variáveis e funções da classe base e o que se adiciona ao estender a definição. A herança múltiple não está suportada.

class Named_Cart extends Cart {
var $owner;

function set_owner ($name) {
$this->owner = $name;
}
}

Esse exemplo define uma classe Named_Cart (carro com nome ou dono) que tem todas as variáveis e funções de Cart, e ademais adiciona a variável $owner e uma função adicional set_owner(). Um carro com nome se cria da forma habitual e, uma vez feito, pode acessar ao proprietário do carro. Nos carros com nome também pode acessar às funções normais do carro: +

$ncart = new Named_Cart; // Criamos um carro com nome
$ncart->set_owner ("kris"); // Nomeamos o carro
print $ncart->owner; // Imprimimos o nome do proprietário
$ncart->add_item ("10", 1); // Funcionalidade herdada de Cart


Entre funções de uma classe, a variável $this faz referência ao próprio objeto. Tem que usar $this->oquefor para acessar a uma variável ou função chamada oquefor do objeto atual.

Os construtores são funções de uma classe que se chamam automaticamente ao criar uma nova instância (objeto) de uma classe. Uma função se converte em construtor quando tem o mesmo nome que a classe.

class Auto_Cart extends Cart {
function Auto_Cart () {
$this->add_item ("10", 1);
}
}

Este exemplo define uma classe Auto_Cart que é um Cart junto com um construtor que inicia o carro com um item do tipo de artigo "10" cada vez que se cria um novo Auto_Cart con "new". Os construtores também podem receber parâmetros e estes parâmetros podem ser opcionais, o que os torna mais úteis.

class Constructor_Cart extends Cart {
function Constructor_Cart ($item = "10", $num = 1) {
$this->add_item ($item, $num);
}
}

// Compramos as mesmas coisas chatas de sempre

$default_cart = new Construtor_Cart;

// Compramos as coisas interessantes

$different_cart = new Construtor_Cart ("20", 17);

Comentário: Em nosso manual de PHP contamos com detalhe o trabalho com objetos e classes. Por outra lado, também se comenta no manual de PHP 5.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Recuperando a qualidade de uma imagem JPEG



Nas imagens trabalhadas automaticamente com Php, enfrentamos a perda da cor e a qualidade das mesmas.
Por Emmanuel García De Caro





Buscando em php.net consegui uma função que permite regenerar praticamente uma imagem com sua cor real, uma das principais deficiências quando usamos sistemas de Thumbnail.

Esta função é: imagecreatetruecolor($largura, $altura); O resto do processo já o conhecemos.


header("Content-type: image/jpeg");
$src_img= @imagecreatefromjpeg('A IMAGEM.JPG')
$dst_img = @imagecreatetruecolor($LARGURA,$ALTURA);

@imagecopyresized($dst_img, $src_img, 0,0,0,0, $LARGURA, $ALTURA, ImageSX($src_img), ImageSY($src_img));

@imagejpeg($dst_img);
@imagedestroy($dst_img);

Explicação:

Em primeiro lugar enviamos um cabeçalho puro com o tipo de documento:

header();

Salvamos na variável $src_img uma nova imagem criada de tipo JPEG a partir de A IMAGEM.JPG que será a imagem que redimensionaremos ou editaremos.

Logo, na variável $dest_img, Criamos uma imagem nova com cor REAL, esta será a que utilizaremos para mostrá-la, observe que não estão definidas as variáveis $LARGURA, $ALTURA. Estas variáveis salvam o novo tamanho da imagem que obviamente será inferior à original, pelo qual pode se ajudar com a função getsizeimage(); que devolve um vetor com os píxels de X e Y , ou em seu efeito ImageSX() e ImageSY() para obter em base a esses parâmetros o novo tamanho uniforme e de acordo com nossa galeria de imagens.

Imagecopyresized(), como o próprio nome diz, copia só partes de uma imagem REDIMENSIONADA .

Logo, mostramos a imagem com imagejpeg(); se queremos que se salve no diretório com suas respectivas permissões, agregaremos um novo parâmetro:

@imagejpeg($dst_img,'NOVAIMAGEM.JPG');

Destruímos a imagem para economizar memória utilizada por imagecreatefromjpeg() e os processos subseqüentes;

E como já sabemos, o @ (arroba) ao começo de cada função serve para evitar que se imprima o erro em tela. Se for de sua preferência se pode tirá-las.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Comprovar se existe o domínio do correio



Workshop de PHP no qual vamos utilizar uma série de funções que nos permitirão verificar se existe o domínio de um correio dado.
Por Emmanuel García De Caro





Em PHP existem várias funções que nos permite obter a veracidade de endereços URL, DNS ou IPS.

Uma destas funções, checkdnsrr(), comprova registros correspondentes a nomes de máquinas ou endereços IP.

Algo que pode ser muito útil se quisermos comprovar se existe o domínio do correio aportado pelo usuário. Entretanto, só comprova o domínio, não se a conta de correio existe.

Sua sintaxe é a seguinte:

checkdnsrr ( string host [, string type])

Busca em DNS entradas do tipo type correspondentes a host. Devolve verdadeiro(TRUE) se encontrar algum registro; devolve false( FALSO) se não encontrar nenhum ou se tiver acontecido algum erro.

type pode ser: A, MX, NS, SOA, PTR, CNAME, ou ANY. Por padrão é MX.

O código é o seguinte:

<?? <?php

function validar_email($email){

$exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";

if(eregi($exp,$email)){

if(checkdnsrr(array_pop(explode("@",$email)),"MX")){
return true;
}else{
return false;
}

}else{

return false;

}
}

// para aplicá-la

if (validar_email($_GET[correio])){
// coloco as instruções
echo 'É correto o correio';
}else{
echo 'É falso o correio';
}

?>

Explicação:

O primeiro é definir nossa função, que terá como nome validar_email(). Utilizaremos Expressões regulares para buscar as coincidências e similitudes entre a expressão ($exp) e o valor de ($email).

Ver: PHP: eregi - Manual

Se esta condição avalia TRUE então quer dizer que efetivamente $email, Começa por qualquer letra que vá de [a-z] , [0-9], pode conter um hífen, ponto ou outro, seguido de um @( arroba como obrigatório) e logo se repetiria o processo para o nome do domínio, e finalmente um (.) PONTO como obrigatório, onde continuaria a extensão do domínio como final da cadeia.

Agora executamos a função checkdnsrr(). Como já disse anteriormente sempre e quando eregi, tome o valor TRUE. Com a função explode() dividimos o valor de $email em um ARRAY ou MATRIZ, tomando como ponto de separação o @ ARROBA. Lembremos que agora temos um Array onde [0] é o usuário do correio e [1] é o domínio do correio. Para logo obter este ultimo valor [1] da matriz com array_pop().

O seguinte parâmetro corresponde a buscar as entradas de tipo MX que é o default desta função.

De acordo com todas estas condições retornamos Booleanos segundo seja o caso:

return( TRUE/ FALSE );

Um exemplo:

Se alguém escreve: nosessssssssssssssssssssssssssssssssss@hotmail.com, nossa função nos devolverá TRUE, lembremos que esta função nos comprova se existe o host : >>> Hotmail.com , porém não o nome de usuário nossse…
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Tutorial de BBCode



Ensinamos a criar seu próprio BBCode com PHP.
Por Antonio Melé





Introdução

BBCode é uma implementação especial do HTML. Servirá para simplificar o código HTML de modo que nossos usuários possam utilizá-lo ao enviar notícias a nossa web, deixar suas mensagens em nosso fórum, etc. Usaremos em todo tipo de formulários nos que quisermos que o usuário possa inserir links, imagens, tabelas, imoticonos, etc. de forma simples e sem necessidade de ter conhecimentos sobre HTML.

O BBCode se utiliza de uma forma similar a linguagem HTML: Utilizam-se etiquetas entre colchetes da seguinte maneira: Usaremos [etiqueta] para abrir a etiqueta e [/etiqueta] para fechá-la.

Muitos conhecidos sistemas de fóruns e plataformas de gerenciamento de conteúdos web utilizam BBCode. Por exemplo phpBB ou SMF

Veremos o esquema de envio de texto + BBCode para incluir uma imagem. O usuário escreveria no textarea de um formulário:

[imagem]http://www.meu_servidor.com/minha_imagem.jpg[/imagem]


E ao enviá-la substituiríamos mediante uma função em PHP as etiquetas [imagem] e [/imagem] por código HTML, ficando da seguinte maneira:

<img src="http://www.meu_servidor.com/minha_imagem.jpg" />


Isto nos permite usar como quisermos as etiquetas. Se utilizamos um banco de dados podemos salvar as mensagens enviadas em modo texto e BBCode tal como foram redigidas e para mostrá-las utilizar uma função PHP para substituir o código BBCode pelo código HTML correspondente.

Criando nossos BBCodes com PHP

Definiremos as etiquetas BBCode que nós queremos com o código HTML que lhes corresponda e criaremos uma função com PHP para substituir os BBCodes escritos pelo usuário por código HTML. Utilizaremos a função STR_REPLACE() de PHP para substituir as etiquetas BBcode por HTML.

Primeiro, associaremos o código HTML a etiquetas elementares de BBCode mediante um array. Logicamente, vocês podem criar suas próprias etiquetas com o código HTML que quiserem:

<?php

$bb_code = array(
// emoticonos: deve apontar a suas imagens no código HTML
':)' => '<img src="feliz.gif" />',
':(' => '<img src="triste.gif" />',
':D' => '<img src="contente.gif" />',

// letra negrito
'' => '<span style="font-weight:bold">',
'
' => '</span>',

// letra cursiva
'' => '<span style="font-style:italic">',
'
' => '</span>',

// letra sublinhada
'' => '<span style="text-decoration:underline">',
'
' => '</span>',

// quebra de linha
'[quebra]' => '<br><br>',

// imagens
'[imagem]' => '<img src="',
'[/imagem]' => '" />'

// lembrem que depois do último elemento não há vírgula
);
?>

Agora utilizaremos uma função para substituir as etiquetas BBCode por código HTML:

<?php
function substituir( $codigo )
{
$search = array_keys( $GLOBALS['bb_code'] );
$codigo = str_replace( $search, $GLOBALS['bb_code'], $codigo );
return $codigo;
}
?>

Neste exemplo $codigo é a variável na que passaremos à função com o texto+BBCode que tiver escrito o usuário.

Agora vamos a ver o código completo pronto para ser provado que inclui os códigos anteriores com um texto+BBCode de exemplo:

<?php

// definimos nossas etiquetas
$bb_code = array(
// emoticonos: deve apontar a suas imagens no código HTML
':)' => '<img src="feliz.gif" />',
':(' => '<img src="triste.gif" />',
':D' => '<img src="contente.gif" />',

// letra negrito
'' => '<span style="font-weight:bold">',
'
' => '</span>',

// letra cursiva
'' => '<span style="font-style:italic">', < '' => '</span>',

// letra sublinhada
'' => '<span style="text-decoration:underline">',
'
' => '</span>',

// quebra de linha
'[quebra]' => '<br><br>',

// imagens
'[imagem]' => '<img src="',
'[/imagem]' => '" />'

// lembrem que depois do último elemento não há vírgula
);

// Definimos nossa mensagem de prova
$mensagem = 'Esta palavra está em negrito e isto está sublinhado. '
.'[salto]Este é o logo de criarweb: [quebra]'
.'[imagem]http://www.criarweb.com/images/logo-criarweb.gif'
.'[/imagem]';

// Substituímos o BBCode pelo código HTML e o mostramos na página
echo '<p>'.substituir ( $mensagem ).'</p>';

// Incluímos a função para substituir o código
function substituir ( $codigo )
{
$search = array_keys( $GLOBALS['bb_code'] );
$codigo = str_replace( $search, $GLOBALS['bb_code'], $codigo );
return $codigo;
}
?>

Para trabalhar com formulários só temos que substituir $mensagem pelo valor enviado através do formulário. Por exemplo, colocaríamos um campo textarea chamado "mensagem" no formulário que apontará ao nosso script PHP e neste mudaríamos o valor de $mensagem por $HTTP_POST_VARS['mensagem']

Espero que este tutorial tenha sido de utilidade para muita gente.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Função em PHP para o cálculo de minutos transcorridos em duas horas dadas


Função que nos permite averiguar as horas ou minutos entre dois tempos dados de um mesmo dia.
Por Emmanuel García De Caro





Trata-se de uma função que nos permite obter o total de Minutos ou Horas transcorridas entre dois Tempos de um mesmo dia.

Algo como:
Hora 1= 13:56
Hora 2=18:07
A função Imprime: Transcorreram 04:11 Horas.

O processo é muito simples, vejamos o código fonte:

<? function calcular_tempo_trasnc($hora1,$hora2){
$separar[1]=explode(':',$hora1);
$separar[2]=explode(':',$hora2);

$total_minutos_trasncorridos[1] = ($separar[1][0]*60)+$separar[1][1];
$total_minutos_trasncorridos[2] = ($separar[2][0]*60)+$separar[2][1];
$total_minutos_trasncorridos = $total_minutos_trasncorridos[1]-$total_minutos_trasncorridos[2];
if($total_minutos_trasncorridos<=59) return($total_minutos_trasncorridos.' Minutos');
elseif($total_minutos_trasncorridos>59){
$HORA_TRANSCORRIDA = round($total_minutos_trasncorridos/60);
if($HORA_TRANSCORRIDA<=9) $HORA_TRANSCORRIDA='0'.$HORA_TRANSCORRIDA;
$MINUTOS_TRANSCORRIDOS = $total_minutos_trasncorridos%60;
if($MINUTOS_TRANSCORRIDOS<=9) $MINUTOS_TRANSCORRIDOS='0'.$MINUTOS_TRANSCORRIDOS;
return ($HORA_TRANSCORRIDA.':'.$MINUTOS_TRANSCORRIDOS.' Horas');

} }
//chamamos a função e imprimimos
echo calcular_tempo_trasnc(date('H:i'),'16:12');
?>

Explicando:

Primeiro, definiremos uma função para não repetir o mesmo código em todas as partes onde o utilizaremos, De nome calcular_tempo_trasnc($hora1,$hora2);

Onde: $hora1 é a hora maior desde onde se calculará; no exemplo anterior seria 18:07, E $hora2 é o ponto desde onde se calculará as horas e minutos transcorridos.

Cabe destacar que ambas horas devem estar no seguinte formato: ( H: i) .
Como já sabemos "H" é a hora de 00 a 23 e "i", os minutos de 00 a 59 parâmetros definidos para a função date();

Logo, atribuímos valor às matrizes $separar[1] e $separar[2] respectivamente com o resultado devolvido pela função explode(); encarregada de separar uma cadeia a partir de um valor, neste caso será : (dois pontos) devolvendo uma nova matriz com duas partes, onde:

$separar[1][0] <= É a hora de $hora1. Se o valor de $hora1 for igual a (11:15), então $separar[1][0] é igual a "11";
E $separar[1][1] <= Os minutos de $hora 1, igual a 15.

Onde o primeiro [1], é o Key ou a chave de $separar, e correspondente à $hora1, se fosse 2, seria a $hora2. E até ali porque só estão definidos 2 parâmetros.

Passaremos os valores de $separar[1][0] e $separar[2][0] respectivamente de horas a minutos ( Multiplicando esse valor por 60 ) que são os minutos de uma hora.

$separar[1][0]*60

Para logo somar os minutos devolvidos por $separar[1][1] e $separar[2][1] respectivamente, Deste modo obtemos o valor global dos minutos transcorridos em ambas horas. Os resultados os agruparemos em $total_minutos_trasncorridos[1] e $total_minutos_trasncorridos[2].

O passo seguinte é atribuir-lhe o valor da diferença entre $total_minutos_trasncorridos[1] e $total_minutos_trasncorridos[2] à variável $total_minutos_trasncorridos.

Já temos a diferença em Minutos de ambos cortes de horas. Agora devemos lhe dar formato legível e entendível.

Iniciamos uma condição onde dizemos: Se $total_minutos_trasncorridos for menor ou igual a 59( if($total_minutos_trasncorridos<=59)) quer dizer que ainda não transcorreu 1 hora , portanto retornamos (return($total_minutos_trasncorridos.' Minutos')), que não é mais que a mensagem que devolverá toda a função quando se chame.

Do contrário se (elseif($total_minutos_trasncorridos>59)) $total_minutos_trasncorridos for maior que 59, então se transcorreu pelo menos 1 hora e executamos as seguintes instruções:
Levaremos os minutos a horas, dividindo por 60 (minutos de uma hora) e arredondamos o valor com round(); Já temos a Hora, porém nos falta os minutos.

Para os minutos ($MINUTOS_TRANSCOrRIDOS), obteremos o resíduo da divisão entre $total_minutos_trasncorridos e 60 (minutos de uma hora).

$MINUTOS_TRANSCORRIDOS=$total_minutos_trasncorridos%60

Já temos os valores desejados.
Agora indicaremos se o valor de $HORA_TRANSCORRIDA ou $MINUTOS_TRANSCORRIDOS é menor ou igual que 9, para colocar-lhe um zero à esquerda. Por exemplo: se $MINUTOS_TRANSCORRIDOS for igual a 9, então a condição avalia TRUE e lhe coloca o 0 ao começo, devolvendo 09.

O mesmo processo o repetimos com $HORA_TRANSCORRIDA.

Finalmente retornamos o resultado:
return ($HORA_TRANSCORRIDA.':'.$MINUTOS_TRANSCORRIDOS.' Horas');

Cabe destacar que podem adaptar-lhe umas instruções para que quando os minutos forem iguais a 1 diga (Minuto) e não (Minutos), assim como com as horas.

Para chamar a função: calcular_tempo_trasnc(date('H:i'),'16:12');
Onde date('H:i'),é a hora atual do servidor e 16:12 desde onde se começa a contar.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Criação de gráficos em PHP com JpGraph



Apresentação da biblioteca JpGraph, que serve para gerar imagens com todo tipo de gráficos de dados em PHP.
Por Pablo González





Uma tarefa que mais cedo ou mais tarde vamos ter que enfrentar ao longo de nossa andança como profissionais do web, é a criação de gráficos a partir de dados. Quando falo de gráficos me refiro a todo tipo de imagens que sirvam para representar dados, como gráficos de barras, de linhas, de progresso, de pizza, etc.

Obviamente, a criação de gráficas não é um tema trivial, e sim que requer uma grande dose de dedicação e esforço. Os gráficos, que geralmente se mostram em imagens, podem ser de muitos tipos diferentes e só o fato de tratar de desenhar em uma imagem linhas, barras ou inclusive pizzas em três dimensões, pode ser bastante complicado.

Entretanto, existem sistemas como JpGraph, que podem nos facilitar a tarefa de uma maneira muito interessante, pois oferecem uma série de mecanismos para a geração das imagens com os gráficos, de modo que nós só temos que nos centrar em carregar os dados a representar e escolher o tipo de gráfico que desejamos visualizar.

O que é JpGraph

É uma biblioteca que inclui uma série de classes -código orientado a objetos- que servem para criar imagens com todo tipo de gráficos, dinamicamente através páginas PHP.

O sistema está muito depurado e suporta uma infinidade de funcionalidades, por isso certamente encontraremos solução a praticamente qualquer necessidade no âmbito de criação de gráficos. Além disse, a maioria das configurações dos gráficos vêem com opções padrão, portanto resulta bastante simples obter resultados rapidamente.

Algumas das características do sistema são:


•Reduzido peso em bytes das imagens resultado. Habitualmente poucas KB.
•Suporte às bibliotecas GD1 ou GD2.
•Uso da Interpolação matemática para obter curvas a partir de poucos valores.
•Diversos tipos de gráficos 2D ou 3D, como de pontos, linhas, pizzas, barras, caixas...
•Escalas flexíveis tanto no eixo X como no Y, que se ajustam ao jogo de dados que tiver que representar.
•Suporte para gerar gráficos com vários jogos de valores de uma só vez.
•Configurável com distintos tipos de cores, legendas, tipografias, imagens de fundo, etc.
Como usar JpGraph

Este jogo de bibliotecas dispõe de uma extensa documentação e tutoriais para aprender a manejá-lo. Na documentação se encontram ainda numerosos exemplos de seu uso, desde os quais podemos partir para solucionar nossas necessidades.

O modo de trabalho para usar esta biblioteca é muito simples, trata-se de criar uma imagem com a etiqueta <img> de HTML, em cujo atributo src colocaremos a rota para o script PHP que se encarregará de gerar o gráfico.

No arquivo PHP que gerará o gráfico teremos que incluir as bibliotecas apropriadas para o tipo de gráfico que desejarmos realizar, também haverá que instanciar o objeto JpGraph correspondente, carregar os dados a visualizar e chamar aos métodos adequados para mostrar a imagem. Um mecanismo bastante simples que veremos em um par de exemplos a seguir.

Exemplo 1: um gráfico de linha

grafica_ejemplo1.gif



Neste exemplo vamos criar um gráfico linear no qual mostraremos as horas de trabalho de uma pessoa ao longo de 10 dias.

A geração do gráfico deste exemplo a fazemos em um arquivo que chamamos grafico_linha.php, portanto, a chamada a este arquivo dentro de uma imagem será a seguinte:

<img src="grafico_linha.php" alt="" border="0"> O código PHP do arquivo grafico_linha.php é o seguinte:

<?php
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_line.php");

// Some data
$ydata = array(11.5,3,8,12,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(450,250,"auto");
$graph->SetScale("textlin");
$graph->img->SetAntiAliasing();
$graph->xgrid->Show();

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->SetColor("black");
$lineplot->SetWeight(2);
$lineplot->SetLegend("Horas");

// Setup margin and titles
$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Exemplo: Horas de Trabalho");
$graph->xaxis->title->Set("Dias");
$graph->yaxis->title->Set("Horas de Trabalho");
$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#F9BB64@0.5');
//$graph->SetShadow();

// Add the plot to the graph
$graph->Add($lineplot);

// Display the graph
$graph->Stroke();
?>

Exemplo 2: um gráfico de pizza em 3D



grafica_ejemplo2.gif



Por outro lado, vamos realizar um exemplo de um gráfico de pizza, no qual aparecem as horas realizadas por cada um dos empregados e a porcentagem com respeito aos totais. Neste caso, a pizza vai se apresentar em um desenho em 3 dimensões.

O arquivo onde se gera o gráfico se chama grafico_pizza.php. Ele será chamado dentro de uma imagem com este código HTML.

<img src="grafico_pizza.php" alt="" border="0">

O código PHP do arquivo grafico_pizza.php será o seguinte:

<?php
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");

$data = array(40,60,21,33);

$graph = new PieGraph(450,200,"auto");
$graph->img->SetAntiAliasing();
$graph->SetMarginColor('gray');
//$graph->SetShadow();

// Setup margin and titles
$graph->title->Set("Exemplo: Horas de Trabalho");

$p1 = new PiePlot3D($data);
$p1->SetSize(0.35);
$p1->SetCenter(0.5);

// Setup slice labels and move them into the plot
$p1->value->SetFont(FF_FONT1,FS_BOLD);
$p1->value->SetColor("black");
$p1->SetLabelPos(0.2);

$nomes=array("pepe","luis","miguel","alberto");
$p1->SetLegends($nomes);

// Explode all slices
$p1->ExplodeAll();

$graph->Add($p1);
$graph->Stroke();
?>

Conclusão

JpGraph é uma ferramenta muito potente para a geração de gráficos em nossa página web e graças ao seu uso nos damos conta de suas muitas bondades:


•É uma biblioteca gratuita (para uso não comercial), fácil de instalar e de fácil manejo.
•Inclui uma completa documentação com uma infinidade de exemplos dos distintos gráficos que se podem gerar.
•Além de gerar muitos tipos de gráficos, permite 'customizar' quase tudo o que se vê, resultando isto muito útil para integrar perfeitamente o gráfico no design de nossa web.
•A forma de integrar o gráfico é muito simples: unicamente é necessário incluir uma imagem (etiqueta <IMG>) cujo src seja o script PHP que gerará nosso gráfico (ver exemplos).

Encontramos poucos defeitos na biblioteca, somente se poderia mais o seguinte:


•As mensagens de erro são meio e escassas, e a maioria das vezes quando algo falha, não obtemos nenhuma explicação.
•Faz falta algo de definição nos gráficos, sobretudo nos gráficos de setores.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Gerar documentos de Word RTF com PHP



Criar arquivos RTF combinando um documento com dados armazenados na Intranet/Extranet.
Por Alfredo Anaya




Em muitos desenvolvimentos web surge a necessidade de criar documentos que procedem da combinação de um documento origem com os dados armazenados na Intranet/Extranet da empresa, algo parecido ao que se consegue com a combinação de correspondência de Word.

Exemplos práticos podem ser os seguintes:

Geração de etiquetas a partir de um banco de dados de clientes ou artigos.
Certificados ou diplomas para os alunos de um curso.
Listagem de participantes em um evento.
O controle da impressão através de um documento HTML é algo bastante complexo, por isso que gerar um documento DOC, ou melhor dito RTF, nos permitirá resolver nosso problema de uma maneira muito efetiva.

Neste artigo desenvolveremos um exemplo prático, o de obter um certificado de assistência para cada um dos alunos que assistem a um curso.

A estratégia:
Nossa estratégia se fundamenta nos seguintes passos:

Partimos do documento em formato de Word que queremos obter.
Convertemos o formato .DOC em .RTF. (Os arquivos .RTF são de texto legível)
Introduzimos no documento .RTF uns códigos manuais que serão substituídos pelos dados procedentes do banco de dados.
Criamos uma aplicação em PHP que leia o arquivo .RTF e substitua os códigos introduzidos pelos dados buscados.

Primeiro passo, Preparar a tela:

Para nosso exemplo partimos de um documento .DOC que certifica que um aluno realizou um curso. Na seguinte imagem vemos um certificado tipo.



original.gif



Será preciso criar um certificado para cada um dos alunos que realizou um curso, os dados que varia são os do aluno e os do curso realizado.

Una vez aberto o documento com Word, o salvamos em formato RTF e substituímos cada dado variável por uns códigos facilmente reconhecíveis. Atenção, o formato RTF é muito chato, por isso será preciso escrever os códigos sem se confundir para que não se introduzam caracteres raros.


plantilla.jpg



No caso do exemplo utilizamos a # e o * de tal maneira que por exemplo, substituímos o nome do aluno por #*NOMBRE*#

Salvaremos o documento com o nome de plantilla.rtf

Segundo passo, O programa PHP:

Criaremos duas funções auxiliares, a primeira se chama leef().



leef.gif



Esta função como se pode ver, recebe como argumento o nome do arquivo RTF, o abre e armazena o conteúdo na variável de texto $todo. Esta função portanto, devolve o conteúdo de um arquivo.

A seguinte função, rtf(), é a que cria um RTF a partir de uma planilha e substituindo os códigos pelos dados da Intranet.



rtf.gif


Esta função recebe quatro argumentos:

$sql: a instrucao sql que devolve os dados que se necessitam
$plantilla: a planilha RTF com os codigos
$fsalida: o nome do arquivo resultado
$matequivalencias: uma matriz com as equivalências entre os dados procedentes da instrução sql e os campos do certificado.
Vamos comentar linha a linha o programa:

As linhas 13 e 14 determinam o nome e a rota do arquivo de saída, utilizamos a função time() para nos assegurar de que não se produzirão dois arquivos com o mesmo nome.

Na linha 17 se armazena o conteúdo da planilha na variável $txtplantilla

Nas linhas 19 a 24 se extrai o corpo do documento RTF, o corpo do documento é o que se repete, para extraí-lo primeiro obtemos o cabeçalho do documento, o cabeçalho fica determinado pela etiqueta rtf sectd. Um documento rtf termina sempre em }, com essa informação extraímos o corpo.

No passo 3, a partir da linha 26 vamos escrevendo o arquivo resultado.

Na linha 27 escrevemos o cabeçalho do documento

Na linha 28 executamos a consulta e na 29 entramos em loop, em cada ciclo obteremos os dados de um aluno e criaremos um certificado.

Na linha 30 criamos uma cópia do corpo do documento chamada $despues, sobre essa copia realizaremos as mudanças.

Na linha 31 entramos em um loop que percorre a matriz de equivalências, a linha 32 obtém do banco de dados o dado, a linha 34 obtém da matriz o código a substituir na planilha e a linha 35 substitui o dado pelo código.

Uma vez substituídos todos os campos a linha 37 escreve o certificado do aluno e as linhas 38 e 39 geram uma quebra de página para voltar a escrever o seguinte certificado.

Uma vez que saímos do While que vai extraindo os dados, a linha 41 fecha o documento rtf e a 42 a escritura do arquivo.

Terceiro passo, Chamada à função RTF:
Uma vez criadas estas duas funções já podemos chamar à função rtf() e gerar o documento.



llamada.gif



Comentamos as linhas:

Na linha 48 especificamos qual é a planilha.

Na linha 49 estabelecemos a instrução SQL que extrai os dados, no caso do exemplo é um pouco complexo pois extrai os dados de várias tabelas.

Nas linhas 50 a 71 criamos a matriz de equivalências, trata-se de uma matriz de duas dimensões que relaciona o código que se encontrará no arquivo RTF com o campo da instrução SQL.

A linha 72 chama à função rtf()

E por fim, as linhas 73 e 74 geram um link ao arquivo resultado.

Melhorias e comentários:
Tudo nesta vida é suscetível de ser melhorado, neste caso me resta pendente gerar o arquivo de saída diretamente ao navegador, com o objetivo de não ter que escrevê-lo no disco rígido.

Ademais, temos desenvolvidos exemplos de listagens e de etiquetas que podemos documentar em posteriores artigos.

Um aspecto importante para continuar progredindo neste tema é conhecer a sintaxe dos documentos rtf. Trata-se de um trabalho um pouco duro que também podemos abordar em posteriores artigos.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Introdução ao Symfony



Veremos um framework chamado Symfony que é completo e projetado para otimizar o desenvolvimento de aplicações web.
Por Patrick Espake




Um framework racionaliza o desenvolvimento de muitos padrões empregados para um determinado fim, acrescenta estrutura ao código, levando o programador a escrever melhor, mais legível e um código mais sustentável. Em última análise um framework torna a programação mais fácil, uma vez que transforma um pacote de complexas operações em simples afirmações.

Symfony é um framework completo projetado para otimizar o desenvolvimento de aplicações web, através de várias características. Para começar ele separa um aplicativo web das regras do negócio, lógica e apresentação. Ele contém diversas ferramentas e classes que visam reduzir o tempo de desenvolvimento de uma complexa aplicação web. Além disso, ele automatiza tarefas comuns, para que o desenvolvedor possa se concentrar inteiramente nas especifidades da aplicação. O resultado final dessas vantagens é que não há necessidade de reinventar a roda a cada vez que um novo aplicativo web é construído.

O symfony foi escrito inteiramente em PHP 5. Ele foi testado em vários projetos do mundo real, é na verdade, no uso de alta demanda em sites de negócio. Ele é compatível com a maioria das bases de dados disponíveis, incluindo o MySQL, PostgreSQL, Oracle e Microsoft SQL Server. Ele roda em plataformas Windows e *nix. Vamos começar uma análise mais atenta às suas características.

Características symfony

O symfony foi construído a fim de cumprir os seguintes requisitos:


•Fácil instalação e configuração em mais plataformas (garantido para trabalhar no padrão *nix e Windows)
•Mecanismo de banco de dados independente
•Simples de usar, na maior parte dos casos e suficientemente flexível para se adaptar aos casos complexos
•Baseado na premissa de convenção sobre a configuração, o desenvolvedor precisa configurar apenas o convencional
•Compatível com a maioria das melhores práticas web e padrões de design
•Código legível, documentação e fácil manutenção
•Fácil de estender, permitindo a integração com outras bibliotecas


Automatização de Projetos Web Características

A maior parte das características comuns de um projeto web são automatizadas no symfony, segue:


•Camada de internacionalização permite a tradução dos dados e da interface, bem como conteúdo (localization)
•A camada de apresentação utiliza templates e layouts que podem ser construídos pelos designers HTML sem qualquer conhecimento do framework. Ajudantes para reduzir a quantidade de código na camada de apresentação e escrever encapsulado de grandes porções de código em simples funções.
•Automatização para trabalhar com formulários, validação e repovoamento, e isso garante uma boa qualidade dos dados na bases de dados e uma melhor experiência do usuário
•Protege a aplicação contra ataques via dados corrompidos
•Sistema de cache com a funcionalidade de reduzir o uso de banda larga e carga do servidor
•Autenticação e credenciais, para facilitar a criação de seções restritas e gestão de segurança do usuário
•Roteamento inteligente e URLS amigáveis fazem parte da interface e mecanismo amigáveis de busca
•Paginação de resultados são mais fáceis, graças a automatizadores de paginação, seleção e filtragem
•Plug-ins proporcionam um elevado nível de extensibilidade
•Interações Ajax são fáceis de implementar, graças aos ajudantes e efeitos JavaScript


Ambiente de Desenvolvimento Ferramentas

Para cumprir os requisitos das empresas que possuem suas próprias orientações, regras de codificação e gestão do projeto, o symfony pode ser totalmente personalizado. Ele fornece, por padrão, vários ambientes de desenvolvimento, com várias ferramentas que automatização tarefas comuns de engenharia de software.


•Ferramentas de geração de código, com apenas um clique é possível gerar interfaces administrativas
•Testes de unidade e testes funcionais, o framework fornece ferramentas para permitir testes na fase de desenvolvimento
•Painel de debugação acelera a depuração, apresentado todas as informações que o desenvolvedor precisa sobre a página que está trabalhando
•A interface de linha de comando automatização a implantação da aplicação entre dois servidores
•Configurações de mudança são possíveis e eficazes
•Sistema de log fornece ao desenvolvedor detalhes completos sobre as atividades da aplicação


Quem fez o symfony e por quê?

A primeira versão do symfony foi lançada em Outubro de 2005 pelo fundador do projeto Fabien Potencier. Fabien é o CEO da Sensio (Sensio - agence interactive), uma agência web francesa muito conhecida pelos seus pontos de vista inovadores sobre desenvolvimento web.

Já em 2003, Fabien passou algum tempo adquirindo conhecimentos sobre os instrumentos de desenvolvimento open source para aplicações web em PHP. Ele descobriu que nenhuma satisfazia os requisitos descritos anteriormente. Quando o PHP 5 foi liberado, ele decidiu que os instrumentos tinha atingido uma fase madura e suficiente para ser integrado em um framework.

Após o sucesso usando symfony em alguns projetos, Fabien decidiu divulgá-lo sob uma licença open source. Fez para doar o trabalho do projeto para a comunidade e beneficiar outros desenvolvedores.

Para o symfony ser um êxito o projeto fonte foi aberto e foi necessário dispor uma documentação extensiva, em Inglês, para aumentar a taxa de desenvolvedores. Fabien pediu para o seu empregado François Zaninotto, verificar o código e escrever um livro on-line sobre o assunto. Demorou um pouco, quando o projeto foi tornado público, o que foi documentado foi suficiente para atrair numerosos colaboradores.

Comunidade do symfony

Logo que o site do symfony foi lançado (symfony | Web PHP Framework), muitos desenvolvedores de todo o mundo baixaram e instalaram o framework, leram a documentação online e construiram sua primeira aplicação com o symfony.

Frameworks web foram ficando populares nessa época, bem como a necessidade de um framework completo em PHP foi elevado. O symfony ofereceu uma solução atraente devido às suas impressionantes qualidade de código e significativa documentação, duas grandes vantagens sobre os demais frameworks. Os colaboradores logo começaram a propor correções, melhorias e documentação.

Com código fonte aberto e sistema de repositório ofereceram uma maneira fácil de contribuir com o projeto. Fabien ainda é o principal coordenador do tronco do repositório e garante a qualidade do código.

Hoje, o fórum do symfony, lista de discussão e IRC, oferecem um grande apoio para tirar dúvidas. O wiki ajuda a documentação crescer e o número de aplicações conhecidas usando symfony aumenta, em média, cinco por semana.

symfony é para mim?

Se você é um perito em PHP 5 ou um iniciante em aplicações web, você será capaz de usar o symfony. O principal fator para decidir se deve ou não usa-lo é o tamanho do seu projeto.

Se você quiser desenvolver um site simples com cinco a dez páginas, acesso limitado a um banco de dados e não obrigação de garantir o seu desempenho ou fornecer documentação, você deve usar PHP sozinho. Você não iria ganhar muito mais a partir do uso de um framework, usando orientação a objetos ou um modelo MVC provavelmente só iria abrandar o seu processo de desenvolvimento.

Por outro lado, se você precisar desenvolver aplicações web mais complexas, com pesadas lógica de negócio, PHP por si só não é suficiente. Se você planeja em manter ou aumentar o seu código no futuro, você vai precisar do seu código leve, de fácil leitura e eficaz. Se você quiser usar os mais recentes avanços na interação com Ajax, em uma forma intuitiva, você não pode simplesmente escrever centenas de linhas de Javascript. Se você quiser ter divertimento e desenvolver rapidamente, em todos esses casos o symfony é para você.

Objetivo desse Artigo

Nesse artigo quis mostrar algumas informações sobre frameworks e o symfony. Eu acredito que mais de 90% dos desenvolvedores web não usam nenhum tipo de framework, isso é um grande problema, atualmente existe a demanda de desenvolvimento de aplicações que exigem muito e muitos desenvolvedores não estão acompanhado a evolução. O mercado está pedido profissionais com essa características. A web cada vez mais está direcionando para olhares de usuários mais criteriosos e ansiosos por serviços de ótima qualidade. Meu objetivo é ajudar você a ver novos horizontes.

Nos próximos artigos falaremos sobre alguns conceitos fundamentais do symfony e na sequência vamos criar uma aplicação do zero usando symfony.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Arredondar decimais em PHP



Realizamos uma função para arredondar decimais em PHP, ou seja, formatar um float para que tenha um número de decimais qualquer que se deseje.
Por Pablo González





Entre as funções matemáticas de PHP se encontra uma que nos permite arredondar um float (número em vírgula flutuante ou número com decimais) ao valor inteiro mais próximo. Trata-se da função round(). Para explicar seu uso, o melhor é vê-la com um par de exemplos:

round(0.6) devolveria o valor inteiro 1.
round(7.3) devolveria o valor inteiro 7.

Porém, em muitas ocasiões vamos necessitar arredondar um número em vírgula flutuante de maneira que conservemos alguns decimais. Por exemplo, se estamos fazendo operações com euros ou dólares, o lógico é que conservemos dois decimais no arredondamento. Por estranho que pareça, PHP não inclui uma função de arredondamento que permita arredondar conservando decimais, e por isso que vamos comentar neste artigo uma maneira de consegui-lo.

Arredondamento com dois decimais

Vamos utilizar um pequeno truque para arredondar com dois decimais, ajudando-nos através da função round() de PHP. Trata-se de fazer esta simples operação matemática.

Dado um valor, primeiro vamos multiplicá-lo por 100, vamos arredondar e finalmente, vamos dividir o resultado outra vez por 100. O caso, em um exemplo, é este:

Para o valor 2.7931. Primeiro o multiplicamos por 100. Temos o valor 279.31. Agora fazemos o arredondamento, visto que os 0.31 queremos nos desfazer deles. Faríamos um round (279.31) que devolve como resultado 279. Por último, a este valor o dividimos por 100, para recuperar os decimais, o que nos dá 2.79, que é o valor que desejávamos obter.

A fórmula que sacamos seria a seguinte:

round(valor_float * 100) / 100

Se quisermos, podemos utilizar uma função como esta para o arredondamento até obter duas cifras decimais:

function arredondar_dois_decimal($valor) {
$float_arredondar=round($valor * 100) / 100;
return $float_arredondado;
}

Para um jogo de valores como este:

arredondar_dois_decimal(3.56666)
arredondar _dois_decimal(3.008)
arredondar _dois_decimal(3.66)
arredondar _dois_decimal(3.199)
arredondar _dois_decimal(3.9999)


Daria o seguinte resultado:

3.57
3.01
3.66
3.2
4

Arredondar para um número de decimais qualquer

Seguindo as pautas marcadas no exemplo anterior, vamos criar uma função para arredondar um float a qualquer número de decimais desejado.

Trata-se de aplicar a mesma lógica anterior. Para arredondar dois decimais vimos que havia que multiplicar por 100, arredondar e logo dividir outra vez por 100. Se quisermos arredondar com um só decimal, teremos que multiplicar por 10, arredondar e logo dividir outra vez por 10.

Vamos realizar um exemplo de arredondamento a três decimais. Temos o valor 0.65195. Como queremos conservar 3 decimais, devemos multiplicar por 1000, com o qual obtemos 651.95. Agora fazemos o arredondamento com a função round(), que nos deixa a cifra sem decimais em 652 (se arredonda ao inteiro mais próximo). Finalmente, devemos voltar a dividir por 1000 o valor, com o qual temos 0.652.

A regra então é que temos que multiplicar e logo dividir, pela potência de 10 com o número de decimais que desejarmos conservar. Para obter potências em PHP temos a função pow(), que recebe a base e expoente da potência buscada.

Por exemplo, pow(10,3) nos devolve 1000 e pow(10,1) nos devolve 10.

Com esta função em PHP poderemos obter o arredondamento aos decimais que se deseje.

function arredondado ($numero, $decimais) {
$fator = pow(10, $decimais);
return (round($numero*$fator)/$fator); }

Se a chamamos com um jogo de valores como estes:

arredondado (0.00211,3)
arredondado (8.56,2)
arredondado (7.26,1)
arredondado (211,3)
arredondado (2.009,2)

Obteremos os seguintes resultados:

0.002
8.56
7.3
211
2.01

Esperamos que este par de funções sejam úteis. Há que agradecer a Héctor Alonso a segunda das funções mostradas neste artigo.

Referências: Também recomendamos a leitura da FAQ Formatar decimais em PHP, onde se explica com detalhe a função de PHP number_format(), que além de arredondar decimais, permite formatar o número para que mostre o separador que desejemos nos milhares e nos decimais.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Envio de boletins a e-mails de um banco de dados MySQL



Código em PHP para o envio de boletins a e-mails armazenados em um banco de dados.
Por Raúl Avilés





Agora está muito na moda o envio de boletins para informar das novidades nas webs. O único problema é que para fazê-lo, a maioria de webmasters tem que depender de alguma empresa (ou servidor) que lhes gerencie o banco de dados e lhes envie e-mails quando o requeiram.

Neste artigo explicarei passo a passo como criar a tabela (no banco de dados MySQL) necessária para o armazenamento dos e-mails e posteriormente, como enviar um boletim a todos eles, com o estímulo de que não apareçam todos os destinatários no campo "Para:" da mensagem.

Criação de tabela no banco de dados

Mediante seu gerenciador do banco de dados MySQL (certamente "phpMyAdmin") deve criar uma nova tabela em seu banco de dados. Aqui lhe facilitamos o arquivo de texto para isso:

CREATE TABLE usuarios (
id bigint(7) NOT NULL auto_increment,
nick varchar(100) NOT NULL,
passoword varchar(100) NOT NULL,
nome varchar(255) default NULL,
email varchar(100) default NULL,
KEY id (id)
)

E ficará assim em seu phpMyAdmin:


msd_tecnologia2.gif



Depois disso, você já tem a tabela necessária para armazenar os dados dentro de um banco de dados MySQL. Poderia explicar como introduzir os dados nesta tabela mediante formulários de registro... porém isso já deixo a gosto do webmaster.

Envio do boletim

Para enviar o boletim só deve mudar os dados do seguinte arquivo php pelos de seu banco de dados e terá seu arquivo pronto. Para enviar o boletim só tem que executar este arquivo em seu servidor (carregá-lo: por exemplo, entrar em Lycos

<?php
$minha_conexion=mysql_connect('servidor','nome_de_usuarior','senha') or die('Não se pode conectar com o banco de dados!');

/*
Servidor: aqui deve colocar o endereço de seu servidor, na maioria das companhias é 'localhost'
Nome_de_usuario: deve colocar seu nome de usuário no servidor.
Senha: sua senha.
*/

mysql_select_db('banco_de_dados',$minha_conexao);

/*
Banco_de_dados: nome de seu banco de dados.
*/

$query_Tabela = "SELECT email FROM usuarios ORDER BY id ASC";
$Tabela = mysql_query($query_Tabela, $minha_conexao) or die(mysql_error());

/*
E-mail: é o nome do campo que requeremos, se seguiu nossas instruções criando nossa mesma tabela no banco de dados não deve mudar isto.
Usuários: é o nome da tabela onde está o campo 'email', se seguiu nossas instruções criando nossa mesma tabela em banco de dados não deve mudar isto.
*/

//elaboramos cadeia de emails
$osemails="";
while ($row_Tabela=mysql_fetch_assoc($Tabela)) {
$osemails.=($row_Tabela['email'].", ");
}

$largo=strlen($osemails);
if ($largo>2)
{
//tiramos ultimos ", "
$osemails=substr($osemails,0,$largo-2);
}
else
{
echo "Não há destinatários!";
die();
};

// se definem os argumentos de mail( ):
$assunto='Prova de email atraves de PHP';
$mensagem='<html>
<head>
<title>Titulo da Pagina</title>
</head>
<body>
<p>Esta é uma prova de emails em formato HTML</p>
Preços de nossos produtos:
<table>
<tr>
<th>PRODUTO<th>PRECO<th>PROMOCAO</th>
</tr>
<tr>
<td>Refrigerante Grande</td><td>25,50</td><td>23,00</td>
</tr>
<tr>
<td>Sorvete Napolitano</td><td>27,50</td><td>25,00</td>
</tr>
<tr>
<td>Batatas</td><td>18,50</td><td>15,00</td>
</tr>
</table>
</body>
</html>';

/*
Aqui deve colocar seu email em formato HTML
*/

$envia='enviante';
$remete='email_remetente';

/*
Enviante: Nome do enviante
Email_remetente: email que deseja mostrar como remetente.
*/

/// Envio do email:

mail(null, $assunto, $mensagem, "MIME-Versao: 1.0
Content-type: text/html; charset=iso-8859-1
From: $envia <$remete>
Bcc: $osemails" . "\r\n") or die("Erro ao Enviar o Email");
echo "Mensagem Enviado com Sucesso!"; //

mysql_free_result($Tabela);
mysql_close($minha_conexao);
?> Já temos nosso sistema de envio de boletins, não teremos que depender de ninguém.

O único problema que apresenta este sistema é que ao não aparecer nada no campo "Para:" do email, alguns gerenciadores de email o colocam como "correio não desejado". Aceito contribuições de outros leitores para melhorá-lo.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Htaccess e páginas dinâmicas



Forma de fazer com que as url tenham um bom aspecto, sem que apareçam todos os parâmetros que se passam pela url.
Por Emmanuel García De Caro




Uma das dificuldades que se apresenta quando utilizamos URL dinâmicas, ou seja, que envia valores através do método GET; radica no momento quando os robôs que navegam por toda a rede recopilando informação de diferentes índoles, ingressam ao nosso web site e se conseguem com parâmetros que eles não admitem na maioria dos casos.

Por exemplo, temos esta url: http://localhost/index.php?cat=4&subcat=45&id=4566
Neste caso a maioria dos indexadores não admitiriam mais de 1 só parâmetro e fariam caso omisso aos caracteres: ( & ? = # ) seguintes. Então, já dependeria de nosso PageRank se essa url é indexada aos principais motores de busca.

Entretanto, existe uma forma que "DISFARÇA" a url, por dizer alguma palavra, sem modificar a funcionalidade de nossa página; editando o arquivo .htaccess que deve se localizar no começo de cada diretório.

Devemos agregar as seguintes linhas:

<? RewriteEngine on
RewriteRule ^.*$ index.php
?>

Onde index.php, é nosso arquivo principal do diretório a mostrar.

Agora voltando ao exemplo anterior, já poderíamos chamar a url da seguinte forma:
http://localhost/4/45/4566

Já não teremos nenhum problema com os motores de busca. Agora nos resta uma tarefa sumamente simples.
Como extrair esses valores que se armazenam nessa url?

Certamente $REQUEST_URI, nos devolve todo o fragmento ou path físico da url atual. O seguinte seria utilizar uma função que nos permita dividir essa url; utilizando a / (Barra) como ponto de referência, podendo ser com explode() que nos devolve uma matriz com as de cada uma das partes.

Código Fonte:

<? PHP
$aux = substr( $_SERVER['REQUEST_URI'], strlen('/'));
if( substr( $aux, -1) == '/'){
$aux=substr( $aux, 0, -1);
}
$urlARRAY___ =explode( '/', $aux);

/////////////VALORES A UTILIZAR
$CATEGORIA=$urlARRAY___[0];
$SUBCATEGORIA=$urlARRAY___[1];
$ID=$urlARRAY___[2];
?>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Criando imagens com PHP



É possível criar imagens com apenas o PHP. Basta ter a biblioteca GD instalada no PHP do seu servidor.
Por Jonas Ruth





Isso é sério?

Sim, é possível criar imagens com apenas o PHP. Basta ter a biblioteca GD instalada no PHP do seu servidor. Pode-se fazer coisas incríveis utilizando as funções que a biblioteca GD disponibiliza. Uma delas é aquele sistema típico de imagem de verificação em formulários.

Iniciando

O código que apresento é o pontapé inicial para nosso desenvolvimento:

<?php
//diz ao servidor que isto é do tipo mime image/gif
header("Content-type:image/gif");
// cria uma imagem com 200 de largura e 200 de altura
$img = imagecreate(200,200);
//deixo o fundo com a cor azul
$azul = imagecolorallocate($img,0,0,255);
//faço a imagem ser impressa em vídeo
imagegif($img);
//retiro a imagem da memoria
imagedestroy($img);
?>

O resultado é uma imagem inteira azul.

Inserindo Texto na Imagem

<?php
header("Content-type:image/gif");
$img = imagecreate(200,200);
$azul = imagecolorallocate($img,0,0,255);
//defino algumas outras cores
$branco = imagecolorallocate($img,255,255,255);
$verde = imagecolorallocate($img,0,255,0);
//escrevendo www.JONASRUTH.com.br em branco
//IMPORTANTE: Neste exemplo copie o arquivo de fonte para a mesma pasta que este arquivo
imagettftext($img,10,0,5,15,$branco,"Arial.ttf","www.JONASRUTH.com.br");
//isso também funcionaria, mas agora em preto!
$meuTexto = "www.JONASRUTH.com.br";
imagettftext($img,10,0,5,40,$verde,"Arial.ttf",$meuTexto);
imagegif($img);
imagedestroy($img);
?>


Para criar imagens JPEG basta alterar o header("Content-type:image/gif") para header("Content-type:image/jpeg") e o imagegif($img) para imagejpeg($img);

Testando Para testar este exercício adicione esta imagem a uma pagina HTML assim: <img src="http://www.seuservidor.com.br/criando-imagens-com-php.php" /> . Ou diretamente, abrindo o arquivo no seu navegador WEB. Naturalmente o servidor onde o arquivo PHP está necessita ter suporte à linguagem.

Baixe aqui os arquivos-fonte finais.

Caso necessite, no site do PHP (php.net) pode-se encontrar a descrição das funções utilizadas neste tutorial.

E a vida segue. Abraço!
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Programar um buscador com PHP e MySQL



Passos a seguir para a criação de um buscador com PHP e MySQL.
Por Alfredo Anaya





Suponho que o leitor esteja familiarizado com a programação em PHP e com a administração básica de Mysql.

Como ponto de partida, temos que ter a informação a buscar armazenada e, uma tabela de nosso banco de dados. Colocamos como exemplo uma tabela com artigos técnicos que chamaremos ARTIGOS. Esta tabela ARTIGOS terá como mínimo dois campos chamados TITULO e DESENVOLVIMENTO, que armazenarão o título do artigo e seu conteúdo respectivamente.


tabla.jpg



Os tipos dos campos a buscar deverão ser CHAR, VARCHAR ou TEXT com suas variantes.

Agora desenharemos uma página com um formulário e uma caixa de texto para escrever a cadeia de consulta "busca" e chamar ao script de busca "buscar.php". Exemplo:

<FORM METHOD=POST ACTION="buscar.php">
Buscar: <INPUT TYPE="text" NAME="busca">
</FORM>

No arquivo buscar.php é onde está o clique da questão.
Há que fazer a consulta que busque as palavras e devolva como resultado os registros coincidentes. Ate aqui parece fácil e poderíamos resolvê-lo assim:

SELECT * FROM ARTIGOS WHERE DESENVOLVIMENTO LIKE '%$busca%' OR TITULO LIKE '%$busca%'

Pois esta consulta nos mostrará todos os artigos em seu título ou que em seu conteúdo apareça a frase de busca tal e como nós a introduzimos. Isto é muito limitado já que uma mudança na ordem das palavras ou um artigo de separação terminará com nossa busca não mostrando os resultados desejados.
Também poderíamos depurar e melhorar a sintaxe de nossa busca utilizando o operador LIKE, porém as buscas resultariam muito lentas e não teriam o resultado esperado.

A solução mais eficiente é utilizar os índices FULLTEXT especificamente indicados para estas funções. Sendo assim, isto implica ir ao nosso banco de dados e criar um índice FULLTEXT com todos os campos que desejamos incluir em nossa busca, que em nosso caso são TITULO e DESENVOLVIMENTO. Para isso, basta com o phpmyadmin ou então escrever a instrução diretamente:

ALTER TABLE ARTIGOS ADD FULLTEXT(TITULO, DESENVOLVIMENTO);


indice.gif



Uma vez criado o índice a instrução SQL para buscar será:

SELECT * FROM ARTIGOS WHERE MATCH(TITULO, DESENVOLVIMENTO) AGAINST ('$busca')

Esta linha utiliza a função MATCH ... AGAINST ... que encontra o texto buscado, usando consultas em linguagem natural parecida a como o fazem os motores de busca. Ademais, se calcula internamente uma pontuação em função de como aparecem os termos buscados dentro de nosso artigo.

Aperfeiçoando a busca:

SELECT * , MATCH (TITULO,DESENVOLVIMENTO) AGAINST ('$busca') AS pontuacao FROM ARTIGOS WHERE MATCH (TITULO, DESENVOLVIMENTO) AGAINST ('$busca') ORDER BY pontuacao DESC LIMIT 50

Esta linha devolve os 50 primeiros resultados encontrados ordenados de mais a menos pontuação. O valor da pontuação é um número decimal compreendido entre 0 e 1 por cada ocorrência do padrão da busca, que se irá somando se esse padrão for encontrado em várias ocasiões. De qualquer forma esta pontuação é um algoritmo interno do banco de dados.

Alguns problemas: As buscas realizadas com MATCH ...AGAINST em ocasiões falham quando o termo a buscar contém uma só palavra. Do contrário são umas buscas rapidíssimas que produzem melhores resultados que outros métodos mais rudimentares como o LIKE quando se trata de várias palavras ou frases.

A solução que dei a esse problema das buscas com MATCH...AGAINST foi checar o número de palavras a buscar, utilizando uma busca simples com LIKE no caso de uma só palavra, e o método MATCH...AGAINST no caso de várias. Exemplo do arquivo buscar.php

<?php
//cadeia de conexao
mysql_connect("host","usuario","password");
//DEVO PREPARAR OS TEXTOS QUE VOU BUSCAR se a cadeia existe
if ($busca<>''){
//CONTA O NUMERO DE PALAVRAS
$pedacos=explode(" ",$busca);
$numero=count($pedacos);
if ($numero==1) {
//SE SO HA UMA PALAVRA DE BUSCA SE ESTABELECE UMA INSTRUCAO COM LIKE
$cadbusca="SELECT REFERENCIA, TITULO FROM ARTIGOS WHERE VISIBLE =1 AND DESARROLLO LIKE '%$busca%' OR TITULO LIKE '%$busca%' LIMIT 50";
} elseif ($numero>1) {
//SE HA UMA FRASE SE UTILIZA O ALGORTIMO DE BUSCA AVANCADO DE MATCH AGAINST
//busca de frases com mais de uma palavra e um algoritmo especializado
$cadbusca="SELECT REFERENCIA, TITULO , MATCH ( TITULO, DESENVOLVIMENTO ) AGAINST ( '$busca' ) AS Score FROM ARTIGOS WHERE MATCH ( TITULO, DESENVOLVIMENTO ) AGAINST ( '$busca' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacao", $cadbusca);
While($row=mysql_fetch_object($result))
{
//Mostramos os titulos dos artigos ou o que desejemos...
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo $referencia." - ".$titulo."<br>";;
}
?>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Loop para receber todos os dados de uma fila de um recordset com PHP



Realizamos uma função que recebe uma fila de um conjunto de registros vindo desde um banco de dados e declara variáveis globais com todos os dados da fila.
Por Miguel Angel Alvarez - Tradução de JML




Vamos realizar uma função para receber todos os dados de uma fila de um recordset (conjunto de registros extraídos de um banco de dados, Mysql no caso deste artigo) e declará-los como variáveis globais à página. Tara-se de uma função que realiza um percorrido genérico a todos os dados de qualquer fila e qualquer recordset e vai gerando as variáveis globais para trabalhar com esses dados.
As variáveis globais teriam como nome o mesmo do campo (que é o mesmo nome que a coluna da tabela associada a esse dado) e como valor, o dado que salva essa fila na coluna determinada.


Nota: Este artigo é similar a outro no qual se realiza um percorrido genérico às variáveis recebidas por POST. As explicações desse artigo podem ser bom para compreender melhor este.

Para uma tabela como esta:


id_cliente -----nome_cliente------ telefone_cliente
1 ------------Pedro-------------- 90 000 00 00
2 ------------Joao ---------------99 888 88 88
3 ------------Maria-------------- 999 99 99 99

Se a função recebesse uma fila qualquer, se gerariam variáveis com nomes id_cliente, nome_cliente e telefone_cliente e seus valores seriam os dessa fila em concreto. Para a fila 1, se gerariam as variáveis:

id_cliente=1
nome_cliente="Pedro"
telefone_cliente="90 000 00 00"

O percorrido será genérico, por isso servirá para qualquer tabela, com qualquer número e nome das colunas. As variáveis geradas serão sempre as colunas que existam, com os valores da fila que tiver recebido por parâmetro.

Esta função é muito útil para receber os dados de uma fila e colocá-los em variáveis globais, para logo operar com eles. Como o percorrido é genérico, tanto faz o número, nome e tipo dos campos que se colocarão nas variáveis.

function recebe_fila($fila){
foreach($fila as $nome_campo => $valor){
if (gettype($nome_campo)!="integer"){
$atribuicao = "\$GLOBALS[\"" . $nome_campo . "\"]='" . $valor . "';";
eval($atribuicao);
//echo $ atribuicao . "<br>";
}
}
}

Um exemplo de uso desta função

Vejamos como utilizar esta função para receber os dados de uma fila. Supõe-se que antes de executar estas linhas deve-se ter aberto uma conexão com o banco de dados. Também se supõe que depois de executar este código, se deveria fechar essa conexão com o banco de dados.

$ssql="select * from cliente where id_cliente=2";
$rs=mysql_query($ssql);
$fila=mysql_fetch_array($rs);
recebe_fila($fila);

Depois destas linhas, terão se criado as variáveis globais com os dados da fila extraída da tabela cliente, uma variável para cada uma das colunas da fila.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Criação de BBcode em PHP



Para começar com a categoria PHP, vou ensinar-lhes como criar uma simples função para poder colocar BBcode que inclua a opção de por um texto em negrito, em cursiva, sublinhado, links e imagens.
Por Mario Juárez





Veremos como realizar isto passo a passo. O primeiro é criar a função PHP sem incluir suas instruções.

<?
function BBcode($texto){
// aqui irá o conteúdo da função
return $texto;
}
?>

Para realizar isto vamos utilizar uma função muito básica em PHP, preg_replace().

De tal forma que se quisermos que quando em $texto apareçam as tags e se convertam no HTML <b> e </b> poderíamos fazê-lo da seguinte maneira:

<?
preg_replace("/\[b\](.*?)\[\/b\]/is","<b>$1</b>",$texto);
?>

E assim poderíamos realizá-lo com todas as tags simples que desejarmos, porém como sempre há uma melhor opção e essa é utilizar um array para as expressões regulares (padrão) e outro para o texto de substituição:

<?
function BBcode($texto){
$a = array(
"/\[i\](.*?)\[\/i\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[u\](.*?)\[\/u\]/is"
);

$b = array(
"<i>$1</i>",
"<b>$1</b>",
"<u>$1</u>"
);
$texto = preg_replace($a, $b, $texto);
return $texto;
}
?>

Bem, já temos uma simples função para poder colocar texto em cursiva, negrito e riscado.

Porém, o proposto é também colocar imagens e links, para as imagens é muito similar ao anterior, mas para os links é um pouco mais complicado. A função então ficaria da seguinte maneira:

<?
function BBcode($texto){
$a = array(
"/\[i\](.*?)\[\/i\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[u\](.*?)\[\/u\]/is",
"/\[img\](.*?)\[\/img\]/is",
"/\(.*?)\[\/url\]/is"
);

$b = array(
"<i>$1</i>",
"<b>$1</b>",
"<u>$1</u>",
"<img src=\"$1\" />",
"<a href=\"$1\" target=\"_blank\">$2</a>"
);
$texto = preg_replace($a, $b, $texto);
return $texto;
}
?>

Agora também podemos adicionar à função alguma função extra como pode ser que o texto enviado em html não seja permitido e que este se mostre, isto se faz com a htmlentities() e também podemos agregar que as quebras de linha sejam convertidas automaticamente em <br /> con nl2br(), nossa função BBcode() final ficará da seguinte forma:

<?
function BBcode($texto){
$texto = htmlentities($texto);
$a = array(
"/\[i\](.*?)\[\/i\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[u\](.*?)\[\/u\]/is",
"/\[img\](.*?)\[\/img\]/is",
"/\[url=(.*?)\](.*?)\[\/url\]/is"
);
$b = array(
"<i>$1</i>",
"<b>$1</b>",
"<u>$1</u>",
"<img src=\"$1\" />",

"<a href=\"$1\" target=\"_blank\">$2</a>"
);
$texto = preg_replace($a, $b, $texto);
$texto = nl2br($texto);
return $texto;
}
?>
(.*?)\
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Incluir feeds em sua web em 5 passos



Dada a crescente oferta de conteúdos em RSS e, sobretudo, a gratuidade de muitos deles, é uma opção muito tentadora para todo webmaster incluir em sua página web uma seção de títulos de notícias, blogs, etc.
Por Raúl Cano





Há pouco tempo quis fazer isso em meu site de notas Infoapuntes.com, ou seja, incluir um pequeno bloco onde mostrar títulos de notícias de informática. Entretanto, toda a informação que encontrei na web circula em torno da leitura de feeds, não à integração em web sites e, o que referia a este último falava de complicados códigos. Parecia que não ia ser possível até que me deparei com MagpieRSS.

Neste manual vamos explicar como incluir notícias em sua web, da forma que quiser; a fonte que usamos para nossos feeds neste caso é a de Barrapunto.com e nos apoiamos no script MagpieRSS para o funcionamento.

O que necessitamos?


•Conhecimentos básicos de PHP.
•O script MagpieRSS para integrar RSS em sua web.
•O feed da fonte que desejar, neste caso o de Barrapunto. Este é: Feed de Barrapunto

Inclui feeds em 5 passos

Vamos começar instalando o script em nosso servidor e em nossa web.


1.Crie uma pasta no diretório raiz de seu servidor chamada "magpierss".
2.No script onde for publicar as notícias, inclua isto:
* require_once "magpierss/rss_fetch.inc";
3.A seguir faremos com que o script processe o feed:
* $url = Barrapunto
* $rss = fetch_rss($url);
4.Com este último se criará por padrão uma pasta chamada "cache" para acelerar as chamadas ao feed.
Devolve-se um objeto com a informação que queremos que se encontre na variável $rss->items
5.Agora criamos um array com a informação que extraímos:
* $items = array_slice($rss->items, 0);
Já temos os seguintes dados, que podem ser acessados como qualquer variável:

•$items[$num_articulo]['title'] -> Título da noticia/artigo.
•$items[$num_articulo]['summary'] -> Resumo da notícia.
•$items[$num_articulo]['pubdate'] -> Data de publicação.
•$items[$num_articulo]['link'] -> Link ao feed na página original.
•$items[$num_articulo]['author'] -> Autor do conteúdo.
onde $num_articulo é o número de artigo ao que queremos acessar. Estão ordenados por data de publicação, onde o mais recente é o número 0 (zero).

Por último, o que falta é que aplique sua criatividade para dar formato aos resultados. Inclusive, você também poderia usar Cron para executar os scripts periodicamente.

Exemplo

Aqui temos o exemplo de um script completo:

require_once "magpierss/rss_fetch.inc";

//barrapunto
$url = "http://backends.barrapunto.com/barrapunto.rss";

$rss = fetch_rss($url);

$items = array_slice($rss->items, 0);

$max_noticias = 30;
$cont = 0;
echo '<h1> Títulos</h1>';
echo '<marquee scrollamount="1" direction="up" loop="true" onmouseover="this.stop()" onmouseout="this.start()" align="left">'; while(!empty($items[$cont])&&($cont<$max_noticias)){

echo '<b>Autor:</b> '.$items[$cont]["author"].'<br>';
echo ' <b>Fecha:</b> '.$items[$cont]["pubdate"].'<br>';
echo '<a href="'.$items[$cont]["link"].'" target="_blank">'.$items[$cont]["title"].'</a><br>';
echo $items[0]["pubdate"].'<br>';
echo $items[0]["summary"].'<br>';
$cont++;
}
echo '</marquee>';

Conclusão

Até aqui vai este manual sobre a inclusão de feeds em sua web. Comprovarão a partir de agora, que a inclusão de conteúdos em sua web é tremendamente fácil e que além disso, têm um amplíssimo leque de conteúdos de todo tipo de categorias.

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Calcular dias entre duas datas com PHP




Script PHP para calcular os dias de diferença que há entre duas datas.
Por Miguel Angel Alvarez - Tradução de JML





Às vezes precisamos saber os dias que transcorreram entre duas datas. Com PHP podemos fazer essa tarefa facilmente, simplesmente diminuindo o valor timestamp das duas datas e convertendo a dias. Explicaremos tudo isso passo a passo neste artigo.

O exercício é muito simples. Vamos obter os valores timestamp das duas datas. (Lembrar que os timestamp são os segundos que passaram desde zero hora de 1 de janeiro de 1970) Como os dois timestamps são uma quantidade de segundos, não temos mais que subtraí-los para obter os segundos de diferença entre as duas datas. Logo, se trataria de converter esses segundos em dias para obter o dado que estamos buscando.

Vejamos então a maneira de obter um timestamp de uma data. Entre as funções de datas de PHP há várias que podem nos servir para trabalhar com timestamp, porém nós temos que utilizar uma em concreto chamada mktime(). Esta função recebe vários parâmetros:

mktime ( [int hora [, int minuto [, int segundo [, int mes [, int dia [, int ano [, int es_dst]]]]]]] )

O primeiro parâmetro é a hora, logo os minutos e segundos. Logo, os meses, dias e anos. Com todos esses valores nos devolve o timestamp de uma data qualquer. Podemos omitir parâmetros e nesse caso tomará os valores da data atual do servidor.

O código para obter os timestamp de um par de datas inventadas poderia ser algo como o seguinte:

//defino data 1
$ano1 = 2006;
$mes1 = 10;
$dia1 = 2;

//defino data 2
$ano2 = 2006;
$mes2 = 10;
$dia2 = 27;

//calculo timestam das duas datas
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(0,0,0,$mes2,$dia2,$ano2);

Logo, poderíamos subtrair os timestamp e converter os segundos em dias:

//diminuo a uma data a outra
$segundos_diferenca = $timestamp1 - $timestamp2;
//echo $segundos_diferenca;

//converto segundos em dias
$dias_diferenca = $segundos_diferenca / (60 * 60 * 24);

Para converter os segundos em dias, como se pode observar no código, há que dividir entre o número de segundos de um dia. (60 segundos de um minuto, pelos 60 minutos de uma hora, pelas 24 horas de um dia).

Agora também, com um código como o anterior, o valor dos dias de diferença pode ter decimais e ser negativo. Nós queremos um número de dias inteiro e positivo. Então, ainda teremos que fazer duas operações matemáticas. Primeiro, tirar o sinal negativo e logo tirar os decimais.

//obtenho o valor absoulto dos dias (tiro o possível sinal negativo)
$dias_diferenca = abs($dias_diferenca);

//tiro os decimais aos dias de diferença
$dias_diferenca = floor($dias_diferenca);

Tiramos os decimais simplesmente arredondando para baixo. Visto que se tivermos um número decimal de dias é porque não chegou a um dia completa e não nos interessa contabilizá-lo.

O código completo pode ser visto a seguir:

<?
//defino data 1
$ano1 = 2006;
$mes1 = 10;
$dia1 = 2;

//defino data 2
$ano2 = 2006;
$mes2 = 10;
$dia2 = 27;

//calculo timestam das duas datas
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(4,12,0,$mes2,$dia2,$ano2);

//diminuo a uma data a outra
$segundos_diferenca = $timestamp1 - $timestamp2;
//echo $segundos_diferenca;

//converto segundos em dias
$dias_diferenca = $segundos_diferenca / (60 * 60 * 24);

//obtenho o valor absoluto dos dias (tiro o possível sinal negativo)
$dias_diferenca = abs($dias_diferenca);

//tiro os decimais aos dias de diferenca
$dias_diferenca = floor($dias_diferenca);

echo $dias_diferenca;
?>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Exemplo de conexão com banco de dados Access em PHP



Um pequeno exemplo para mostrar o modo de conectar de um banco de dados Access com PHP por meio de ODBC.
Por Miguel Angel Alvarez - Tradução de JML





PHP dispõe de diversos jogos de funções para conectar com diferentes tipos de bancos de dados. Por exemplo, existe um jogo de funções específico para MySQL, outro para Oracle, PostgreSQL, etc. Embora não exista entre suas bibliotecas nenhuma função para acessar especificamente a um banco de dados Access. Para isso, dispomos das funções de conexão ODBC com banco de dados.
ODBC é um padrão de conexão com bancos de dados que utilizam os sistemas Windows. Com ODBC se pode acessar a qualquer banco de dados, sempre que exista o correspondente driver ODBC para esse banco de dados. As conexões ODBC são próprias de sistemas Microsoft, portanto poderemos utilizá-las através de qualquer linguagem de programação em Windows, como PHP, para acessar a qualquer banco de dados, incluindo Access.

O primeiro que teremos que fazer para conectar com PHP é criar um DSN em nosso computador. Um DSN é um nome de conexão que utilizaremos para referenciar a um banco de dados. Podemos ter tantos DSN em nosso sistema quanto necessitemos, para acessar através de aplicações ou linguagens de programação a bancos de dados por ODBC. Isto se faz através do painel de controle de Windows na opção "Ferramentas administrativas - Origens de dados ODBC". Temos que criar um DNS de sistema ou de usuário, na aba correspondente e logo apertando agregar. Há que selecionar o driver ODBC que temos que utilizar, como se trata de um banco de dados de Access, devemos selecionar o driver ODBC de Access. Logo, temos que dar um nome ao DSN e selecionar o arquivo .mdb que contém nosso banco de dados. Uma vez realizado isto, necessitaremos lembrar do nome do DSN que criamos, porque teremos que utilizá-lo em nosso código de conexão.


Referência: Explica-se como criar um DSN com mais detalhes no artigo Passos prévios II: Conexão a BD. É um capítulo do manual de ASP, porém se faz de igual forma para conectar Access com PHP.

Se tivermos nossa página hospedada em um provedor de hosting e quisermos conectar Access com PHP, se é que o permitem (pois o típico nesses casos é utilizar um banco de dados MySQL), teríamos que perguntar como criar o DSN em seus sistemas.

Uma vez que tenhamos o DSN utilizaremos um código de conexão como este:

$conn_access = odbc_connect ("guiarte_access", "", "");

Com a função odbc_connect() se conecta com um banco de dados por ODBC, indicando o nome do DSN no primeiro parâmetro e logo o usuário e a senha. Em Access normal não se tem nem sequer o usuário e senha, portanto esses dois parâmetros foram passados com uma cadeia vazia. O identificador da conexão nos devolve com o banco de dados.

Para executar uma sentença SQL utilizaremos a função odbc_exec(). Deste modo:

$rs_access = odbc_exec ($conn_access, "select * from tabela");

Como se pode ver, odbc_exec() recebe o identificador da conexão obtida anteriormente e a sentença SQL a executar. Devolve um identificador do conjunto de registros resultado de executar a sentença.

Logo utilizaremos funções como odbc_fetch_array() ou odbc_fetch_object() para acessar a cada um dos registros obtidos no conjunto de resultados.

Um código completo de conexão com um banco de dados Access poderia ser o seguinte:

if ($conn_access = odbc_connect ( "guiarte_access", "", "")){
echo "Conectado corretamente";
$ssql = "select * from livros";
if($rs_access = odbc_exec ($conn_access, $ssql)){
echo "A sentença se executou corretamente";
while ($fila = odbc_fetch_object($rs_access)){
echo "<br>" . $fila->titulo;
}
}else{
echo "Erro ao executar a sentença SQL";
}
} else{
echo "Erro na conexão com o banco de dados";
}


Nota: As funções odbc_fetch_array() e odbc_fetch_object(), assim como outras funções de PHP para o acesso por ODBC a bancos de dados, são idênticos ou muito similares em sua utilização Às funções próprias para outros bancos de dados como MySQL. Em nossos manuais e workshops de PHP temos muitos exemplos de conexão e trabalho com bancos de dados MySQL, que podem nos servir de guia para aprender a trabalhar com bancos de dados Access. Simplesmente, teria que ter o DSN para a conexão com o banco de dados Access e mudar os nomes das funções como mysql_fetch_array() por suas correspondentes, como odbc_fetch_array().
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Utilizar Curl para copiar uma imagem de uma web em nosso disco rígido



Vamos ver um exemplo de utilização da biblioteca CURL para copiar uma imagem que está em uma página web ao nosso disco rígido.
Por Miguel Angel Alvarez - Tradução de JML




Vamos realizar um exemplo complexo de utilização de PHP, no qual nos conectamos com um servidor web para receber um arquivo de imagem que está hospedado em tal servidor. Para especificar a imagem que queremos extrair utilizamos a URL e logo especificamos outra rota dentro de nosso disco rígido, onde copiaremos a imagem que recebemos de tal URL.

Eu utilizei este código para facilitar a migração automática de um web site. O site novo tinha uma estrutura diferente e por isso tinham que receber as imagens para salvá-las em outros diretórios. Com esta função, e outras similares, pude extrair todas as imagens do site antigo e colocá-las nos diretórios corretos no site novo.

Como dizia, vamos a utilizar CURL para realizar esta tarefa. Com certeza existem outras maneiras de realizá-la, porém esta me pareceu bastante prática. Curl é uma biblioteca para trabalho e tratamento de informação em URLs, ou seja, para fazer coisas com endereços URL, como explorar o conteúdo que têm, copiar o conteúdo a outros lugares, comprovar a existência de uma URL. Tenho que admitir que não manejo muito a biblioteca Curl, mas poderia dizer que é bastante potente e complexa.

CURL se encontra em PHP

Segundo a informação que tenhamos de PHP teremos disponíveis, ou não, as funções da biblioteca CURL. A melhor maneira de saber se dispomos de Curl em nossa instalação PHP é invocar uma de suas funções. Se nos mostra um erro de função não existente, é que não temos possibilidade de usar Curl. O próprio manual de PHP especifica o que devemos fazer para poder utilizar as bibliotecas.

Para poder usar estas funções, deve-se compilar PHP adicionando o parâmetro --with-curl[=DIR], onde DIR aponta ao diretório que contém os diretórios lib e include da biblioteca. No diretório include, deve existir uma pasta chamada "curl" e que contém os arquivos easy.h e curl.h. Ademais, deve existir um arquivo chamado libcurl.a no diretório "lib". A partir da versão de PHP 4.3.0 se pode configurar que PHP faça uso de CURL para o manejo das conexões com URLs, mediante a opção --with-curlwrappers.

Nota para os usuários de plataformas Windows: Para ativar este módulo em ambientes Windows, deve-se copiar os arquivos libeay32.dll e ssleay32.dll que se encontram na pasta DLL do diretório PHP/Win32 à pasta SYSTEM de Windows, que normalmente se encontra em C:\WINNT\SYSTEM32 ou C:\WINDOWS\SYSTEM.

Não obstante, em meu computador local utilizo Easy PHP, que é um pacote que instala o conjunto Apache-PHP-MySQL em seu sistema Windows, sem que tenha que fazer nada, nem aprender a configurar os distintos sistemas. Easy PHP não dispõe por padrão de suporte para Curl, porém mudando uma linha do arquivo de configuração de PHP (o arquivo php.ini) poderemos dar suporte a Curl. A linha teoricamente é:

;extension=php_curl.dll

Esta linha à princípio está comentada, por isso começa por ";". Simplesmente há que tirar o "ponto e vírgula" para que EasyPHP disponha de suporte Curl. Mesmo que não utilize EasyPHP prove tirar o comentário desta linha, se é que você na dispõe de suporte para CURL.

Função para obter uma imagem de uma URL determinada

Vamos tratar já do objetivo final do artigo, que é trazer uma imagem hospedada em uma web ao nosso disco rígido. Para isso, criamos uma função que recebe dois parâmetros. O primeiro é a URL da imagem que desejamos obter e o segundo é o nome do arquivo que queremos gerar no disco rígido, onde copiaremos a imagem. O nome do arquivo destino é relativo ao documento, podendo indicar uma rota relativa, composta por vários diretórios e um nome de arquivo.

function recebe_imagem ($url_origem,$arquivo_destino){
$minha_curl = curl_init ($url_origem);
$fs_arquivo = fopen ($arquivo_destino, "w");
curl_setopt ($minha_curl, CURLOPT_FILE, $fs_arquivo);
curl_setopt ($minha_curl, CURLOPT_HEADER, 0);
curl_exec ($minha_curl);
curl_close ($minha_curl);
fclose ($fs_arquivo);
}

Nesta função há que registrar uma sessão CURL, com curl_init($url_origem), em onde passamos a URL a qual desejamos acessar.

Logo, utilizamos as funções do sistema de arquivos de PHP para criar um novo arquivo no disco rígido do computador. Se observarmos, se indica o arquivo destino e o parâmetro "w" que quer dizer que a conexão com o arquivo é para escritura.

Em seguida, indicamos um par de opções na sessão CURL.

curl_setopt ($minha_curl, CURLOPT_FILE, $fs_arquivo);
curl_setopt ($minha_curl, CURLOPT_HEADER, 0);

A mais importante é a primeira, na que se indica o valor CURLOPT_FILE, onde se atribui o arquivo no qual se salvará os dados da URL. O parâmetro $fs_arquivo deve ser um recurso de tipo stream ou fluxo de dados. Neste caso é o arquivo destino, conectado com o sistema de arquivos do servidor anteriormente na mesma função.

A segunda opção definida faz com que o cabeçalho não se inclua na saída.

Para continuar, executamos a conexão CURL com curl_exec() e por último, se fecham tanto a conexão CURL como o arquivo onde salvamos a imagem.

Conclusão

CURL é uma biblioteca muito potente. Esta é só uma das utilidades da biblioteca, que pode servir de exemplo para entender o uso e dar pé a outras utilidades interessantes. Poderia ter complicado um pouco o script simplesmente comprovando que a URL indicada no parâmetro é correta ou realizando outros tipos de ações de validação ou tratamento da imagem recebida na URL.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Controle da saída em PHP




PHP dispõe de funções para controlar na saída de dados para o cliente. Pode-se armazenar a saída em um buffer, para enviá-la ao cliente quando se desejar.
Por Miguel Angel Alvarez - Tradução de JML





Como sabemos, PHP realiza um processamento da página e envia ao computador do usuário o resultado de processar o código PHP. Por regra geral, à medida que vai processando a página, se envia o código HTML resultante ao cliente, porém esta configuração pode mudar, inclusive em tempo de execução.

Com PHP podemos armazenar a saída, à medida que vai se gerando em um buffer. De modo que não se envie nenhum dado ao cliente hasta que se indique expressamente. Existem uma série de funções que utilizam para conseguir este comportamento, que são as funções de controle de saída.

Este comportamento é muito útil quando se tem que enviar informação no cabeçalho da página, depois de ter começado a processar o código PHP e ter começado a gerar a saída.

Nota:Como devemos saber, existem funções como header() ou setcookie() que devem se executar antes de ter sido enviado algum texto da página ao cliente. Neste caso contrário se produzirá um erro "Cannot modify header information - headers already sent by…"

Neste artigo veremos um pequeno exemplo de código PHP que realiza o buffering da saída, para enviá-la uma vez terminado de processar todo o código.

Utilizaremos duas funções que possivelmente não conheçamos, para o controle da saída: ob_start() e ob_end_flush().

A função ob_start() serve para indicar a PHP que há que iniciar o buffering da saída, ou seja, que deve começar a salvar a saída em um buffer interno, ao invés de enviá-la ao cliente. De modo que, embora se escreva código HTML com echo ou diretamente fora do código PHP, não se enviará ao navegador até que se ordene explicitamente. Ou eventualmente, até que se acabe o processamento de todo o arquivo PHP.

A função ob_end_flush() serve para indicar a PHP que se deseja realizar a inversão de todo o bufer na saída, com o qual se enviará ao cliente que solicitou a página.

Vejamos este código:

<?
ob_start();
echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">"
?>
<html>
<head>
<title>Página processada com buffer de saída</title>
</head>
<body>
Esta é minha página!!!
</body>
</html>
<?
setcookie("nome", "pepe");
ob_end_flush();
?>

Assim que começar se executa ob_start(). Com isto se salvará toda a saída em um buffer. Agora, quando se escreve na página, na seguinte linha com o echo, e nas outras, fora do código PHP, o único que ocorre é que o mencionado buffer vai enchendo.

Antes de terminar a página, no seguinte bloco de código PHP, se envia uma cookie ao navegador do usuário. Essa cookie chega sem problemas e não gera nenhum erro, apesar de ter se escrito código da página, o código não havia sido enviado ao navegador, e sim, havia sido armazenado no buffer.

Por último, se executa ob_end_flush() para enviar o buffer à saída.

Podemos provar comentando as linhas que se executam as funções ob_start() e ob_end_flush(). Então, veríamos como a função setcookie() provocaria um erro, porque esta função não se pode executar se já se escreveu texto na página e portanto, se enviaram os cabeçalhos do http ao cliente.

É um exemplo muito simples do controle da saída em PHP. Porém, a partir daqui se pode complicar tudo o que for preciso. Esperamos que este artigo seja uma interessante introdução para continuar investigando temas relacionados com esta funcionalidade básica de PHP.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Controle de saída em PHP II



Vejamos outras funcionalidades interessantes do controle da saída em PHP, para trabalhar com um buffer de saída. Eliminamos o buffer e executamos funções antes de mostrá-lo.
Por Miguel Angel Alvarez - Tradução de JML





Continuamos explorando algumas utilidades interessantes de PHP para realizar controle de saída, através de um buffer, para não enviar ao cliente o código HTML gerado por PHP até que o programador o deseje.

Este artigo continua com o outro anterior publicado em CriarWeb.com: Controle de saída em PHP.

Agora vamos aprender a eliminar ou cancelar uma saída armazenada em um buffer e a executar funções para realizar um processamento do código armazenado em um buffer antes de enviá-lo ao cliente. Para isso, vamos conhecer novas funções:

A função ob_clean() limpa o buffer de saída. Isso quer dizer que o que tivermos no buffer de saída se perderá.

A função ob_end_clean() serve para limpar o buffer de saída e ademais desabilitá-lo. Ou seja, termina de trabalhar com o buffer e ainda descarta todas as mudanças que tiverem sido incluídas no buffer.

Também utilizaremos um parâmetro que não tínhamos visto da função ob_start(parâmetro). Esse parâmetro serve para indicar o nome de uma função que será chamada antes de enviar o buffer de saída ao cliente.

Vejamos este código, que faz uso das novas funções e vamos explicando a seguir passo a passo.

<html>
<head>
<title>Página processada com buffer de saída</title>
</head>
<body>
<?
//inicio o buffer de saída
ob_start();

echo "Oi!!! Isto vai ao buffer!";

//limpo o buffer de saída
ob_clean();

echo "Outra vez escrevo!!";

//limpo o buffer de saída e o desabilito
ob_end_clean();

echo "Isto sim que vai aparecer na página<br>";

function converte_caracteres_especiais($buffer){
return htmlentities ($buffer);
}

//inicio o buffer de saída
ob_start("converte_caracteres_especiais");

echo "Tinha que provar mais coisas. Espero que se leia com interesse.";

ob_end_flush();
?>
</body>
</html>

Com ob_start(); iniciamos o buffering da saída. A partir de agora tudo o que se escrever na página se salvará no burffer. Portanto, o seguinte echo "Oi!!! Isto vai ao buffer!"; se salvará no buffer.

Com a linha ob_clean(); se apaga o conteúdo do buffer, por isso a saída armazenada se perde. Ou seja, o echo anterior não se mostrará na página.

O buffer, apesar de estar recém limpo, continua ativo. Por isso com o echo "Outra vez escrevo!!";, o texto continuará inserindo-se no buffer.

Logo, com a linha ob_end_clean(); se apaga o conteúdo do buffer e se desabilita. Perdemos outra vê tudo que tiver sido escrito na página a partir do início de uso do buffer, portanto o anterior echo não se mostrará.

Na seguinte linha fazemos um echo "Isto sim que vai aparecer na página<br>"; Como tínhamos desabilitado anteriormente o buffer com ob_end_clean(), esse texto se irá direto à saída e chegará ao navegador que solicitou a página.

Logo no código vemos uma declaração de uma função:

function converte_caracteres_especiais($buffer){
return htmlentities ($buffer);
}

Utilizaremos esta função para executá-la antes de enviar o buffer ao cliente. Recebe um parâmetro que é o buffer que se está processando. Dentro da função se podem realizar ações e se deve devolver um valor, que será o que definitivamente se envie ao navegador do visitante.

Para dizer ao PHP que se deve executar essa função antes de enviar o buffer ao cliente se deve iniciar o uso do buffer ob_start(parâmetro), com o parâmetro que é o nome da função, tal como comentamos antes.

ob_start("converte_caracteres_especiais");

O seguinte echo "Tinha que provar mais coisas. Espero que se leia com interesse."; se coloca no buffer. E finalmente com ob_end_flush(); se envia o buffer ao cliente.

Como ao iniciar o buffer havia sido indicado um parâmetro com o nome da função converte_caracteres_especiais() se executará essa função antes de enviar o conteúdo ao cliente web.

Nesse função simplesmente se processa o buffer, convertendo os caracteres especiais que tiver em seus correspondentes códigos especiais de HTML, com htmlentities().

Portanto, o texto que se enviará ao cliente é o texto que tiver no buffer depois de executar htmlentities().

Conclusão e resultado do controle de saída de PHP

Para acabar, podemos ver o código que se geraria e se enviaria ao cliente como resultado do processamento dessa página.

<html>
<head>
<title>Página processada com buffer de saída</title>
</head>
<body>
Isto sim que vai aparecer na página<br><br>Tinha que provar mais coisas. Espero que se leia com interesse.</body>
</html>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Mostrar código PHP de um arquivo com cores ressaltadas



Função de PHP para mostrar um arquivo com código PHP com formato e cores ressaltadas para uma leitura mais cômoda.
Por Juliana Monteiro Lázaro





Vamos mostrar um pequeno truque que nos oferece uma das funções de PHP, que serve para mostrar código ressaltado com cores. É uma função útil para mostrar na saída de um pedaço de código PHP, porém com diferentes cores e quebras de linhas, o que facilita sua leitura.
PHP incorpora uns padrões para ressaltar texto com código PHP, em distintas cores. Este se pode invocar com a função highlight_file(), que recebe dois parâmetros:

- Primeiro, o nome do arquivo que queremos que mostre seu código ressaltado.
- Segundo, um parâmetro opcional que é um booleano, com valor padrão FALSE. O valor verdadeiro ou TRUE significa que queremos que nos devolva um string com o código ressaltado. O valor falso ou FALSE, que é o comportamento pré-determinado, serve para que nos mostre na saída o código PHP formatado e com cores.

Esta função pode ser útil em páginas de tutoriais de PHP, para mostrar código ressaltado com cores sem se complicar muito, assim como na documentação de programas realizados com PHP.

Para ver a função em funcionamento é muito simples. Simplesmente temos que chamá-la assim:

<?
highlight_file ("arquivo.php");
?>

Supõe-se que "arquivo.php" estará no mesmo diretório onde está o arquivo PHP com o qual estamos trabalhando.

Se arquivo.php tivesse um código como este:

<html>
<head>
<title>Provando</title>
</head>

<body>

<h1>Oi amigos</h1>

<p>Isto é uma <b>prova</b> para ver como funciona</p>

<?
function tem_acentos($cadeia){
$buscar = "áéíóúüÁÉÍÓÚÜ;
for ($i=0; $i<strlen($cadeia); $i++){
if (strpos($buscar, substr($cadeia,$i,1))!==false)
return true;
}
return false;
}
?>

</body>
</html>

O resultado que visualizaríamos, com o código ressaltado, é este:

<html>
<head>
<title>Provando</title>
</head>

<body>

<h1>Oi amigos</h1>

<p>Isto é uma <b>prova</b> para ver como funciona</p>

<?
function tem_acentos($cadeia){
$buscar = "áéíóúüÁÉÍÓÚÜ";
for ($i=0; $i<strlen($cadeia); $i++){
if (strpos($buscar, substr($cadeia,$i,1))!==false)
return true;
}
return false;
}
?>

</body>
</html>

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Propagar o identificador de sessão de PHP por cookies ou URL



O identificador da sessão aberta se pode propagar em uma cookie ou como parâmetro na URL. Vemos as diferenças e como configurar PHP para cada caso.
Por Miguel Angel Alvarez - Tradução de JML





Para salvar na sessão informações independentes para cada usuário, PHP deve identificar a sessão de cada cliente que se conecta à página. Ao entrar um novo usuário na página, PHP gera um identificador de sessão que é único e que será sempre o mesmo durante toda sua visita à página. As variáveis de sessão são armazenadas por PHP internamente, associadas ao identificador da sessão e deve se assegurar que cada cliente poda memorizar o identificador de sessão durante toda sua visita.
PHP dispõe de um par de métodos para poder propagar o identificador de sessão em cada página que visita o cliente: em uma cookie, ou então a propaga através da URL.

Em uma cookie
É o método mais cômodo e vem configurado por padrão. Nós não temos que fazer nada. PHP se encarrega de salvar a informação da sessão por nós em uma cookie no navegador do usuário. O problema deste método é que não podemos estar seguros que todos os usuários aceitem cookies de sessão em seus navegadores.

Em uma variável passada por parâmetro na URL
Consiste em enviar o identificador em todas as URL como parâmetro, para recolher por método GET. É um pouco mais confuso porque em cada URL aparecerá o parâmetro, algo como isto: pagina.php?PHPSESSID=8af7f938a4ab81aa6406e3d57ea41081 Este método tem também suas vantagens e inconvenientes. Por um lado é mais confiável que as cookies, porque passar o identificador pela URL é possível sempre, independentemente do navegador cliente ou sua configuração. Porém, por outro lado, enviar o PHPSESSID pela URL pode trazer problemas, porque pode tornar público seu identificador de sessão a outras pessoas ou programas ou porque pode se armazenar em favoritos ou no histórico de urls com identificadores de sessão antigos.

Passar o identificador por uma cookie

Na maioria dos casos PHP tentará salvar o identificador de sessão em uma cookie, embora php.ini tenha algumas configurações para alterar este comportamento por padrão.

session.use_cookies nos serve para indicar se queremos que se envie a cookie com o identificador de sessão. Por padrão está ativado com o valor 1.


Nota: Lembre-se de reiniciar Apache quando fizer alterações em php.ini para que se tornem efetivas.

Passar o identificador de sessão como parâmetro na URL

Podemos fazer uma prova para ver o que acontece com as variáveis de sessão quando não se dispõe de cookies. Veremos que não se memorizam as variáveis de sessão nas sucessivas páginas. Isto se pode solucionar passando o identificador de sessão pela URL. Em PHP seria algo como isto:

<a href="leer_sesion.php?<?=SID?>">Passo variável de sessão por URL</a>

É cansativo ter que escrever esse dado em cada URL, porém PHP também dispõe de mecanismos para que as URL se escrevam automaticamente com os identificadores de sessão, de maneira transparente para o desenvolvedor. Isto se pode indicar através do arquivo php.ini na variável de configuração session.use_trans_sid.


Nota: segundo o site de PHP a alteração das URLs automática para propagar o identificador de sessão só se pode fazer se se compilou PHP com a opção --enable-trans-sid. Em minha configuração de PHP sobre Windows sim que me permite usar session.use_trans_sid e se propagam os identificadores de sessão sem que tenha que fazer nada.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Como converter páginas com extensão .PHP à extensão que desejar




Este artigo oferece uma solução no caso em que por algum motivo se queira converter as extensões PHP de seu site em outro tipo de extensão já seja alguma conhecida como .htm ou qualquer outra. Neste exemplo utilizaremos .wii.
Por Manu Gutierrez





Os requisitos para realizar este truque é ter um servidor Apache superior à versão 1.3. A solução é redefinir os processos de execução associados aos tipos de arquivos mod_mime de Apache.

Depois desta breve introdução passaremos à explicação deste simples processo de mudar as extensões .php por . wii em nosso servidor.

Temos que indicar ao Servidor que execute as páginas Web .wii como .php

A primeira coisa que necessitaremos fazer é configurar Apache para permitir que utilizemos ".wii" como extensão.

# Abrimos o arquivo de Apache httpd.conf e vamos à área onde esta AddType application/x-httpd-php .php e apenas agregaremos um .wii atrás dele. Deve parecer isto:

AddType application/x-httpd-php .php .ass

# Uma vez que tiver conseguido incorporar seu ".wii" no arquivo de httpd.conf, reinicie apache. Geralmente seria "reiniciar httpd" ou "reiniciar apachectl", tudo depende de seu sistema.

Agora, depois de ter mudado todas nossas extensões ".wii" de PHP ao invés de" .php " você poderá ver as páginas desta maneira:

"seusite/index.wii" e funcionará justamente como se fosse "seusite/index.php"

Outra coisa que podemos ajustar no Apache no arquivo de httpd.conf é o ServerSignature a OFF e depois corrigir seu arquivo de php.ini para incluir o "expose_php = off". Estes ajustes juntos tornarão mais difícil para os hackers descobrir a versão do servidor e outras informações valiosas que podem colocar em perigo seu servidor.

Recapitulação rápida do que acabamos de fazer:


1.Corrigir httpd.conf para refletir "AddType application/x-httpd-php .php .wii"
2.Corrigir httpd.conf para refletir "ServerSignature off"
3.Corrigir o arquivo de php.ini para refletir o "expose_php = off"
4.Renomear todos os arquivos de .php a .wii e depois fixar todos os links para refletir .wii ao invés de .php
5.Reiniciar Apache e se preparar para mostrar sua extensão .wii!

Boa sorte ocultando seu PHP!
 
Topo