You are currently browsing Pablo Dall'Oglio’s articles.

Palavras-chave: PHP, INI, configuração, parsing

Arquivos .INI são comumente utilizados para armazenar informações sobre a configuração das aplicações. Caminhos de diretórios, caminhos de programas externos, usuários, senhas, dentre outros.

Em aplicações PHP é extremamente simples realizar a leitura de arquivos INI. Para isto existe a função parse_ini_file(). Ela lê o INI e retorna um array multidimensional (matriz) indexado pela chave de cada linha. Inclusive, se o arquivo INI tiver seções, estas seções poderão ser utilizadas como chaves deste array. Veja:

arquivo INI:
==============
; Exemplo de arquivo .INI
; Isto é um comentário
[paths]
app=/usr/local/programa
temp=/tmp

[layout]
cor=vermelho
fonte=arial
tamanho=12

arquivo PHP:
==============
<?php
// primeiro vamos realizar a leitura
// simples do INI, cada chave é transformada
// em um índice do array unidimensional
$ini = parse_ini_file('config.ini');
print $ini['temp'] . "<br>";
print $ini['fonte'] . "<br>";

// agora iremos respeitar a hierarquia das
// seções do INI. O segundo parâmetro faz
// com que as seções sejam as chaves de acesso
// para este array multi-dimensional
$ini = parse_ini_file('config.ini', true);
print $ini['paths']['temp'] . "<br>";
print $ini['layout']['fonte'] . "<br>";
?>

Palavras-chave: PHP, enviar, e-mail, email, gmail, evolution

Uma das coisas mais chatas em PHP é enviar email. Não por causa do PHP, mas porque cada software cliente de email trata os headers de uma maneira diferente.

Passei uma madrugada dessas quebrando a cabeça, porque os emails funcionavam no Evolution, mas não no Gmail. Depois funcionavam no Gmail, mas não no Evolution. Quando consegui fazer funcionar nos dois, empacotei tudo numa classe.

E aí está, para ajudar outros a não quebrarem a cabeça :-)

<?php
/*
 * Classe Mail
 * para envio de emails
 */
class Mail
{
    private $parts;

    /*
     * Método construtor
     */
    function __construct()
    {
        $this->parts = array();
        $this->boundary = md5(time());
    }

    /*
     * Adiciona HTML
     */
    function addHtml($body)
    {
        $body = stripslashes($body);
        $msg  = "--{$this->mime_boundary}\\n";
        $msg .= "Content-Type: text/html; charset=ISO-8859-1\\n\\n";
        $msg .= $body;

        $this->parts[] = $msg;
    }

    /*
     * Adiciona Texto
     */
    function addText($body)
    {
        $body = stripslashes($body);
        $msg  = "--{$this->mime_boundary}\\n";
        $msg .= "Content-Type: text/plain; charset=ISO-8859-1\\n\\n";
        $msg .= $body;

        $this->parts[] = $msg;
    }

    /*
     * Adiciona Imagem
     */
    function addPng($filename, $download)
    {
        $fd=fopen($filename, 'rb');
        $contents=fread($fd, filesize($filename));
        $contents=chunk_split(base64_encode($contents),68,"\\n");
        fclose($fd);

        $msg  = "--{$this->mime_boundary}\\n";
        $msg .= "Content-Type: image/png; name={$download}\\n";
        $msg .= "Content-Transfer-Encoding: base64\\n";
        $msg .= "Content-Disposition: attachment; filename={$download}\\n\\n";
        $msg .= "{$contents}";

        $this->parts[] = $msg;
    }

    /*
     * Envia Email
     */
    function send($from, $to, $subject)
    {
        $headers  = "From: {$from}\\n";
        $headers .= 'Content-Type: multipart/mixed; boundary="'.$this->mime_boundary."\"\\n";
        $headers .= 'X-Mailer: PHP-' . phpversion() . "\\n";
        $headers .= "Mime-Version: 1.0\\n\\n";

        $msg = implode("\\n", $this->parts);

        mail($to, $subject, $msg, $headers);
    }
}
?>

Palavras-chave: PHP, vetor, array, objeto, index

Este trecho de código abaixo é muito útil pois é um modelo de como converter vetores (arrays) em objetos no PHP.

O funcionamento é bastante simples, ele pega um array indexado e o converte em um objeto onde os índices do array serão os nomes das propriedades dos objetos, e o valor do array naquela posição (índice), será o valor da propriedade. O segredo todo está no foreach ;-)

<?php

$a['cor'] = 'azul';
$a['potencia'] = '1000';
$a['marca'] = 'fiat';
$a['modelo'] = 'palio';

foreach ($a as $key => $value)
{
    $objeto->$key = $value;
}
echo $objeto->cor;
echo $objeto->potencia;
echo $objeto->marca;
echo $objeto->modelo;
?>

Palavras-chave: PHP, thumbnail, Imagens, GD

A grande maioria dos sites precisa gerar algum tipo de thumbnail ou pré-visualização em miniatura a partir de uma foto submetida ou de uma screenshot.

Abaixo segue uma pequena função em PHP que recebe uma imagem e gera outra, com a nova largura especificada, a altura é automaticamente calculada para manter a proporção em relação à imagem original. A imagem é redimensionada mantendo-se a qualidade de 100% (válido especialmente para o formato JPEG).

/*
 * Método geraThumb
 * Gera thumbnail a partir da foto
 */
function geraThumb($photo, $output, $new_width)
{
    $source = imagecreatefromstring(file_get_contents($photo));
    list($width, $height) = getimagesize($photo);
    if ($width>$new_width)
    {
        $new_height = ($new_width/$width) * $height;
        $thumb = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($thumb, $source, 0, 0, 0, 0,
            $new_width, $new_height, $width, $height);
        imagejpeg($thumb, $output, 100);
    }
    else
    {
        copy($photo, $output);
    }
}
?>
Add to Technorati Favorites

Assuntos