‘Php’

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.