‘Php’

“O código que escrevemos tem muito pouco impacto sobre as pessoas”

March 13th, 2010

As palavras que vemos no título desse post são do mestre Carlos Brando, especialista em Ruby on Rails. Carlos publicou em seu blog um post polêmico, lançando a seguinte pergunta no início de seu texto “Quer se tornar um programador de sucesso? Pare de escrever código”.

Brando contesta alguns programadores que focam demais no código e esquecem o usuário. “O problema é que a maior parte dos programadores se preocupam demais com o código. Passam horas e mais horas tentando criar o algoritmo perfeito. Porém se esquecem que o melhor código do mundo é inútil se ninguém utilizar o software que o contém.”

No final, sugere que o programador deixe de focar apenas no código, participando mais ativamente de comunidades, realizando palestras e melhorando suas habilidades sociais. Sobre isso Brando diz “Não escreva apenas código. Estude, escreva e fale mais sobre código”

O que Brando diz é bastante pertinente. E podemos trazer isso para o campo do Web Design. A questão é: afinal, trabalhamos com quem? Apenas com máquinas? Não, a finalidade do nosso trabalho serão sempre as pessoas. Não são máquinas, mas seres humanos.

O sucesso de sites e softwares mora justamente na interação com as pessoas. Basta observar os sites, aplicativos e serviços que são sucesso no mundo. O orkut surgiu como uma grande novidade. Porém toda aquela tecnologia já existia, principalmente as comunidades, que nada mais são que fóruns com pouquíssimos recursos se comparados com outros fóruns que temos por aí. Mas se tornou sucesso, graças a forma que o site “conversa” com o usuário, uma aliança de design, tecnologia e comunicação.

E o twitter? Existe alguma tecnologia nova e tão especial rodando nele? Nada mais que uma página com textinhos de poucos caracteres, que mais parece um mural de recados, os comentários de um blog, um RSS ou um chat altamente simples. Não há nada de novo em sua tecnologia mas há sim na sua comunicação com o usuário. O formato escolhido, o processo de postagem e interação dos usuários, sua forma simples de operar, tudo isso fez dele um sucesso.

O MSN Messenger, agora Windows Live Messenger, é um caso clássico de sucesso de comunicação com o usuário. Desbancou o reinado do ICQ graças a uma foto e um enter. Antigamente não era possível colocar uma fotinha junto ao nosso contato de ICQ. Além disso para enviar uma mensagem era necessário clicar com o ponteiro do mouse no botão “enviar”. Bastou a Microsoft incluir a possibilidade de colocar uma foto do usuário e apenas teclar “enter” para enviar a mensagem que a migração do ICQ para o MSN ocorreu em massa. Um caso clássico do formato de comunicação exercendo papel fundamental no sucesso de um software. Acredito que foi iso que Carlos Brando quis dizer, pouco interessa se o código do ICQ era melhor construído que o do MSN, o que importa é que o MSN se comunicou melhor com o usuário do que o ICQ.

Para mim programador ou web designer de sucesso é aquele que se comunica melhor com o seu cliente, com o cliente dos seus clientes e com seus colegas de trabalho, focando seu trabalho nas pessoas. Criar um bom código é fundamental para um programador ser chamado de programador assim como criar um bom design é requisito básico para um web designer ser chamado de web designer. O que irá diferenciar esses profissionais dos demais sempre será no formato de comunicação que escolherem na criação de seus trabalhos.

O foco é: gente. Gente de verdade.

Para o alto e Avante!

FONTE: http://www.brunoavila.com.br/avante/mercado/o-codigo-que-escrevemos-tem-muito-pouco-impacto-sobre-as-pessoas.html

Funções para tratamento de Arrays

October 11th, 2009

Funções Genéricas

Array

array array(…);

É a função que cria um array a partir dos parâmetros forncidos. É possível fornecer o índice de cada elemento. Esse índice pode ser um valor de qualquer tipo, e não apenas de inteiro. Se o índice não for fornecido o PHP atribui um valor inteiro sequencial, a partir do 0 ou do último índice inteiro explicitado. Vejamos alguns exemplos:

Exemplo 1
$teste = array(”um”, “dois”,”tr”=>”tres”,5=>”quatro”,”cinco”);

Temos o seguinte mapeamento:
0 => “um” (0 é o primeiro índice, se não houver um explicito)
1 => “dois” (o inteiro seguinte)
“tr” => “tres”
5 => “quatro” (valor explicitado)
6 => “cinco” (o inteiro seguinte ao último atribuído, e não o próximo valor, que seria 2)

Exemplo 2
$teste = array(”um”, 6=>”dois”,”tr”=>”tres”,5=>”quatro”,”cinco”);

Temos o seguinte mapeamento:
0 => “um”
6 => “dois”
“tr” => tres
5 => “quatro” (seria 7, se não fosse explicitado)
7 => “cinco” (seria 6, se não estivesse ocupado)

Em geral, não é recomendável utilizar arrays com vários tipos de índices, já que isso pode confundir o programador. No caso de realmente haver a necessidade de utilizar esse recurso, deve-se ter bastante atenção ao manipular os índices do array.

range

array range(int minimo, int maximo);

A função range cria um array cujos elementos são os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parâmetro for maior do que o do segundo, a função Devolve false (valor vazio).

shuffle

void shuffle(array &arr);

Esta função “embaralha” o array, ou seja, troca as posições dos elementos aleatoriamente e não Devolve valor algum.

sizeof

int sizeof(array arr);

Devolve um valor inteiro contendo o número de elementos de um array. Se for utilizada com uma variável cujo valor não é do tipo array, Devolve 1. Se a variável não estiver setada ou for um array vazio, Devolve 0.

Funções de “navegação”

Toda variável do tipo array possui um ponteiro interno indicando o próximo elemento a ser acedido no caso de não ser especificado um índice. As funções seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array para verificar seu conteúdo (chaves e elementos).

reset

mixed reset(array arr);

O ponteiro interno aponta para o primeiro elemento do array, e devolve o conteúdo desse elemento.

end

mixed end(array arr);

O ponteiro interno aponta para o último elemento do array, e devolve o conteúdo desse elemento.

next

mixed next(array arr);

O ponteiro interno aponta para o próximo elemento do array, e devolve o conteúdo desse elemento.

Obs.: esta não é uma boa função para determinar se um elemento é o último do array, pois pode devolver false tanto no final do array como no caso de haver um elemento vazio.

prev

mixed prev(array arr);

O ponteiro interno aponta para o elemento anterior do array, e devolve o conteúdo desse elemento. Funciona de maneira inversa a next.

pos

mixed pos(array arr);

Devolve o conteúdo do elemento actual do array, indicado pelo ponteiro interno.

key

mixed key(array arr);

Funciona de maneira bastante semelhante a pos, mas em vez de devolver o elemento actual indicado pelo ponteiro interno do array, devolve o seu índice.

each

array each(array arr);

Devolve um array contendo o índice e o elemento actual indicado pelo ponteiro interno do array. o valor da devolução é um array de quatro elementos, cujos índices são 0, 1, “key” e “value”. Os elementos de índices 0 e “key” armazenam o índice do valor atual, e os elementos de índices 1 e “value” contém o valor do elemento atual indicado pelo ponteiro.
Esta função pode ser utilizada para percorrer todos os elementos de um array e determinar se já foi encontrado o último elemento, pois no caso de haver um elemento vazio, a função não devolverá o valor false. A função each só devolve false depois q o último elemento do array foi encontrado.

Exemplo:

função que percorre todos os elementos de um array e imprime seus índices e valores

function imprime_array($arr) {
reset($arr);
while (list($chave,$valor) = each($arr))
echo “Chave: $chave. Valor: $valor”;
}

Funções de ordenação

São funções que servem para ordenar os elementos de um array de acordo com determinados critérios. Estes critérios são: manutenção ou não da associação entre índices e elementos; ordenação por elementos ou por índices; função de comparação entre dois elementos.

sort

void sort(array &arr);

A função mais simples de ordenação de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os índices.

rsort

void rsort(array &arr);

Funciona de maneira inversa à função sort. Ordena os elementos de um array em ordem decrescente, sem os manter os relacionamentos com os índices.

asort

void asort(array &arr);

Tem o funcionamento bastante semelhante à função sort. Ordena os elementos de um array em ordem crescente, porém mantém os relacionamentos com os índices.

arsort

void arsort(array &arr);

Funciona de maneira inversa à função asort. Ordena os elementos de um array em ordem decrescente e mantém os relacionamentos dos elementos com os índices.

ksort

void ksort(array &arr);

Função de ordenação baseada nos índices. Ordena os elementos de um array de acordo com seus índices, em ordem crescente, mantendo os relacionamentos.

usort

void usort(array &arr, function compara);

Esta é uma função que utiliza outra função como parâmetro. Ordena os elementos de um array sem manter os relacionamentos com os índices, e utiliza para efeito de comparação uma função definida pelo utilizador, que deve comparar dois elementos do array e devolver 0, 1 ou -1, de acordo com qualquer critério estabelecido pelo utilizador.

uasort

void uasort(array &arr, function compara);

Esta função também utiliza outra função como parâmetro. Ordena os elementos de um array e mantém os relacionamentos com os índices, utilizando para efeito de comparação uma função definida pelo utilizador, que deve comparar dois elementos do array e devolver 0, 1 ou -1, de acordo com qualquer critério estabelecido pelo utilizador.

uksort

void uksort(array &arr, function compara);

Esta função ordena o array através dos índices, mantendo os relacionamentos com os elementos., e utiliza para efeito de comparação uma função definida pelo utilizador, que deve comparar dois índices do array e devolver 0, 1 ou -1, de acordo com qualquer critério estabelecido pelo utilizador.

FONTE: http://www.truquesedicas.com/tutoriais/php/apendices/00002a.htm

O desabafo de um Web Designer envergonhado

September 30th, 2009

Nesse vídeo mostro o relato do web designer W.L.D., de 23 anos, que pediu para não ser identificado. Um relato sincero e emocionado que quero compartilhar com todos vocês.

veja mais

FONTE: http://www.brunoavila.com.br/avante/cursos/o-desabafo-de-um-web-designer-envergonhado.html

12 dicas para otimizar seus códigos PHP

September 8th, 2009

É sempre útil ler algumas dicas rápidas para melhorar a sua codificação. Geralmente temos vícios que adquirimos no dia-a-dia que, sem sabermos, tornam o nosso código mais lento.

Seguem abaixo 12 dicas para melhorar o processamento dos seus códigos PHP.

1. Se um método pode ser static, declare-o como static! O desempenho aumenta 4 vezes;

2. Evite utilizar metódos mágicos como __get, __set e __autoload, se possível;

3. require_once() é dispensável e demanda bastante memória;

4. Use caminhos completos (full path) nos includes e requires, pois é gasto menos tempo resolvendo os caminhos do sistema operacional;

5. Se você quer descobrir o tempo em que o script começou a ser executado, é preferível utilizar $_SERVER[´REQUEST_TIME´] do que time();

6. Veja se pode utilizar strncasecmp, strpbrk e stripos ao invés de regex;

7. str_replace é mais rápido que preg_replace, mas strtr é 4 vezes mais rápido que str_replace;

8. Se uma função, como de substituição de strings, aceitar tanto arrays como caracteres simples como argumentos, e se a sua lista de argumentos não é muito longa, considere fazer algumas declarações redundantes de substituição, passando um caractere por vez, ao invés de uma linha de código que aceita arrays como argumentos de busca e substituição;

9. Supressão de erro com @ é muito lento;

10. $row[´id´] é 7 vezes mais rápido que $row[id];

11. Mensagens de erro demandam mais processamento;

12. Não utilize funções dentro de loops, como por exemplo: for ($x=0; $x < count($array); $x). A função count() é chamada todas as vezes que o loop é executado.;

FONTE: http://imasters.uol.com.br/artigo/8962/php/12_dicas_para_otimizar_seus_codigos_php/

Enviar formulário com AJAX usando PHP

September 1st, 2009

Uma dica rápida mas muito útil para enviar formulários HTML através de AJAX.

São três arquivos:

* script.js: contém o javascript necessário para enviar o formulário;
* form.php: contém o código HTML do formulário;
* processar.php: processa o conteúdo recebido;

Note que no arquivo processar.php, o método de recebimento é GET, porém o AJAX envia através de POST, por isso, ao enviar, não aparecem os campos enviados na barra de endereços do navegador.
script.js

var navegador = navigator.userAgent.toLowerCase(); //Cria e atribui à variável global 'navegador' (em caracteres minúsculos) o nome e a versão do navegador

//Cria uma variável global chamada 'xmlhttp'
var xmlhttp;

//Função que inicia o objeto XMLHttpRequest

function objetoXML() {

    if (navegador.indexOf('msie') != -1) { //Internet Explorer

        var controle = (navegador.indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'; //Operador ternário que adiciona o objeto padrão do seu navegador (caso for o IE) à variável 'controle'

        try {

            xmlhttp = new ActiveXObject(controle); //Inicia o objeto no IE

        } catch (e) { }

    } else { //Firefox, Safari, Mozilla

        xmlhttp = new XMLHttpRequest(); //Inicia o objeto no Firefox, Safari, Mozilla

    }

}

//Função que envia o formulário

function enviarForm(url, campos, destino) {

    //Atribui à variável 'elemento' o elemento que irá receber a página postada
    var elemento = document.getElementById(destino);

    //Executa a função objetoXML()
    objetoXML();

    //Se o objeto de 'xmlhttp' não estiver true
    if (!xmlhttp) {

        //Insere no 'elemento' o texto atribuído
        elemento.innerHTML = 'Impossível iniciar o objeto XMLHttpRequest.';

        return;

    } else {

        //Insere no 'elemento' o texto atribuído
        elemento.innerHTML = 'Carregando...';

    }

    xmlhttp.onreadystatechange = function () {

        //Se a requisição estiver completada
        if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0) {

            //Se o status da requisição estiver OK
            if (xmlhttp.status == 200) {

                //Insere no 'elemento' a página postada
                elemento.innerHTML = xmlhttp.responseText;

            } else {

                //Insere no 'elemento' o texto atribuído
                elemento.innerHMTL = 'Página não encontrada!';

            }

        }

    }

    //Abre a página que receberá os campos do formulário
    xmlhttp.open('POST', url+'?'+campos, true);

    //Envia o formulário com dados da variável 'campos' (passado por parâmetro)
    xmlhttp.send(campos);

}

form.php

<html>

<head>

<title>Enviando formulário com AJAX</title>

<!-- Carrega o arquivo 'script.js' ao iniciar a página! //-->

<script language="javascript" src="script.js" type="text/javascript"></script>

</head>

<body>

<table cellpadding="2" cellspacing="0" width="50%">

<form action="processar.php" method="post" onsubmit="setarCampos(); enviarForm('processar.php', campos, 'mensagem'); return false;">

<tr><td>Nome</td><td><input name="nome" id="nome" type="text"></td></tr>

<tr><td>Email</td><td><input name="email" id="email" type="text"></td></tr>

<tr><td></td><td><input type="submit" value="Enviar">&nbsp;<input type="reset" value="Limpar"></td></tr>

</form>

</table>

<div id="mensagem"/>

<script>

//Cria a função com os campos para envio via parâmetro

function setarCampos() {

campos = "nome="+encodeURI(document.getElementById('nome').value).
toUpperCase()+"&email="+encodeURI(document.getElementById('email').value);

}

</script>

</body>
</htm>

processar.php

<?php

//Determina o tipo da codificação da página
header("content-type: text/html; charset=iso-8859-1");

//Extrai os dados do formulário
extract($_GET);

//Verifica se algum nome foi digitado
$nome = ($nome != "") ? $nome : "desconhecido";

//Verifica se algum email foi digitado
$email = ($email != "") ? $email : "desconhecido";

//Retorna com a resposta
echo "Olá <b>".$nome."</b>, seu email é: <a href='mailto:".$email."'><b>".$email."</b></a>";

?>

FONTE:  http://codigofonte.uol.com.br/codigo/js-dhtml/formulario/enviar-formulario-com-ajax-usando-php

Criando Sub-dominio no Cpanel com PHP

September 1st, 2009

Segue um simples script que acessa o Cpanel e cria um sub-dominio.
Esse script faz uso da biblioteca CURL que está disponível na maioria dos servidores PHP.

<?php

//Configurações
$dominio = 'dominio.com';
$usuario_cpanel = 'UsuarioDpCpanel';
$senha_cpanel = 'SenhaDoCpanel';
$tema = 'x3'; // o "skin" ou "tema" padrão do Cpanel é o "x3".
$criar_subdominio = 'teste'; //Sub-dominio a ser criado. Nesse caso criará o sub-domínio teste.dominio.com

$url = 'http://'.$usuario_cpanel.':'.$senha_cpanel.'@'.$dominio.':2082/frontend/'.$tema.'/subdomain/doadddomain.html?domain='.$criar_subdominio.'&rootdomain='.$dominio.'&dir=public_html%2F'.$criar_subdominio.'&go=Criar';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec ($ch);
curl_close ($ch);

?>

Classe Crawler PHP – Identificar links e imagens com PHP

September 1st, 2009

Olá
Hoje vou postar uma classe para identificar links e imagens em sites. Essa classe foi encontrada no phpclasses.org.
Primeiro, vamos ver um exemplo de como pegar os links:

<?php include("Crawler.php");
$crawler = new Crawler();
$url = 'http://www.google.com/';
$link = $crawler->crawlLinks($url);

echo '<table width="100%" border=\"1\">
<tr>
<td width="30%"><div align="center"><b>Texto</b></div></td>
<td width="30%"><div align="center"><b>Link</b></div></td>
<td width="40%"><div align="center"><b>Link Completo</b> </div></td>
</tr>';

for($i=0; $i < sizeof($link['link']); $i++){
echo '<tr>
<td><div align="center">'.$link['text'][$i].'</div></td>
<td><div align="center">'.$link['link'][$i].'</div></td>
<td><div align="center"><a href="'.$link['link'][$i].'">'.$link['text'][$i].'</a></div></td>
</tr>';

}

echo '</table>';
?>

Abaixo você encontra um outro exemplo de como pegar imagens e links de sites:

<?php

include("Crawler.php");
$crawler = new Crawler();
$url = 'http://www.uol.com.br';
$imagem = $crawler->crawlImage($url);

echo '<table width="100%" border="1">
<tr>
<td width="30%"><div align="center"><b>Imagem</b></div></td>
<td width="30%"><div align="center"><b>Link</b></div></td>
<td width="40%"><div align="center"><b>Link Completo</b> </div></td>
</tr>';

for($i=0; $i<sizeof($imagem['link']); $i++){
echo '<tr>
<td><div align="center"><img src="'.$imagem['src'][$i].'"/></div></td>';

if(($imagem['link'][$i])==null){
echo '<td width="30%"><div align="center\">Sem link</div></td>
<td width="40%"><div align="center\">Sem link</div></td>
</tr>';

} else {

echo '<td><div align="center">'.$imagem['link'][$i].'</div></td>
<td><div align="center"><a href="'.$imagem['link'][$i].'">Ir para Link.</a></div></td>
</tr>';

}
}

echo '</table>';
?>

Links para ver os scripts em funcionamento:
URL
IMAGEM

Para fazer o download da classe “Crawler.php” e dos exemplo clique aqui.