2008
Versão 1.1
flaviogomesdasilva@yahoo.com.br
www.fgsl.eti.br
Sumário
AMBIENTE INTEGRADO DE DESENVOLVIMENTO.................................................................. 3
Instalação do XAMPP Linux 1.6.1.................................................................................................. 3
Passo 1: Download......................................................................................................................3
Passo 2: Instalação...................................................................................................................... 3
Passo 3: Iniciando....................................................................................................................... 4
Passo 4: Teste..............................................................................................................................4
Passo 5: Segurança......................................................................................................................4
Passo 6: Trocando a versão do PHP............................................................................................5
Passo 7: Parâmetros avançados do XAMPP............................................................................... 6
CAMADA DE VISÃO.........................................................................................................................7
Instalação do Smarty Template Engine........................................................................................... 7
Instalação Básica.........................................................................................................................7
PADRÕES.......................................................................................................................................... 12
Padrões de Codificação PHP......................................................................................................... 12
BANCO DE DADOS......................................................................................................................... 16
Instalação do PostgreSQL 8.2.4.....................................................................................................16
GERENCIADOR DE BANCO DE DADOS..................................................................................... 17
Instalação do phpPgAdmin 4.1.3................................................................................................... 17
FRAMEWORK.................................................................................................................................. 17
Instalação do Zend Framework......................................................................................................17
DOCUMENTAÇÃO.......................................................................................................................... 18
Instalação do phpDocumentor....................................................................................................... 18
ALTERANDO A CAMADA DE VISÃO DO ZEND FRAMEWORK............................................ 21
Integração do Smarty com o Zend Framework............................................................................. 21
ANEXO 9........................................................................................................................................... 25
Introdução ao Ambiente Web........................................................................................................ 25
ANEXO 10......................................................................................................................................... 26
Introdução ao MVC [5]..................................................................................................................26
1
AMBIENTE INTEGRADO DE DESENVOLVIMENTO
Apache Friends é um projeto sem fins lucrativos criado para promover o uso do servidor
web Apache, através de atividades que tornam mais amigáveis a instalação de software e a leitura
de documentação, além da criação de uma comunidade on-line para ajudar os usuários de Apache.
Esse projeto foi criado em 2002 por Kai 'Oswald' Seidler and Kay Vogelgesang.
Um dos produtos gerados por esse projeto foi o LAMPP, agora denominado XAMPP Linux.
Passo 1: Download
Passo 2: Instalação
su
Aviso 1: Por favor, use somente este comando para instalar XAMPP. Não use quaisquer
ferramentas do Windows para extrair esse arquivo, isso não funciona.
2
Aviso 2: Versões do XAMPP já instaladas são sobrescritas por esse comando.
Passo 3: Iniciando
/opt/lampp/lampp start
Passo 4: Teste
Para verificar se tudo está realmente funcionado digite a seguinte URL no seu browser de
internet:
http://localhost
Agora você deve ver a página inicial do XAMPP contendo alguns links para verifica o status
do software instalado e alguns exemplos de programação.
Passo 5: Segurança
3
● O MySQL está acesível na rede.
/opt/lampp/lampp security
/opt/lampp/lampp php4
/opt/lampp/lampp php5
4
Se você esquecer qual versão do PHP está em uso, utilize a função phpinfo() em um script
php ou este comando:
/opt/lampp/lampp phpstatus
Parâmetro Descrição
start Inicia o XAMPP
stop Encerra o XAMPP
restart Encerra e, em seguida, inicia o XAMPP
startapache Inicia somente o Apache
startssl Inicia o Apache com suporte a SSL. Este comando ativa o suporte SSL de
modo permanente. Isso quer dizer que se você reiniciar o XAMPP no
futuro a SSL estará ativada.
startmysql Inicia somente o servidor de banco de dados MySQL
startftp Inicia o servidor ProFTPD. Através de FTP você pode carregar arquivos
para o seu servidor web (usuário “nobody”, senha “lampp”). Este
comando ativa o ProFTPD de modo permanente. Isso quer dizer que se
você reiniciar o XAMPP no futuro o FTP estará ativado.
stopapache Encerra o Apache.
stopssl Encerra o suporte SSL do Apache. Este comando desativa o suporte de
modo permanente. Isso quer dizer que se você reiniciar o XAMPP no
futuro a SSL estará desativada.
stopmysql Encerra o servidor de banco de dados MySQL
stopftp Encerra o servidor ProFTPD. Este comando desativa o ProFTPD de modo
permanente. Isso quer dizer que se você reiniciar o XAMPP no futuro o
FTP estará desativado.
security Inicia um pequeno programa de verificação de segurança
5
CAMADA DE VISÃO
O Smarty requer, para sua instalação, um servidor web rodando PHP 4.0.6 ou superior.
Instalação Básica
● Smarty.class.php
● Smarty_Compiler.class.php
● Config_File.class.php
● debug.tpl
● /internals/*.php (all of them)
● /plugins/*.php (todos eles por precaução, embora a sua pagina precise apenas de alguns)
O Smarty utiliza uma constante do PHP chamada SMARTY_DIR que é o caminho completo
para o diretório 'libs/' do Smarty. Basicamente, se sua aplicação puder encontrar o arquivo
Smarty.class.php, você não precisa definir SMARTY_DIR, o Smarty irá encontrar por si só.
Entretanto, se Smarty.class.php não estiver em seu include_path, ou você não indicar um caminho
absoluto para ele em sua aplicação, então você deverá definir SMARTY_DIR manualmente.
SMARTY_DIR deve incluir uma barra ao final.
Aqui está um exemplo de como você cria uma instância do Smarty em seus scripts PHP:
6
require_once('Smarty.class.php');
$smarty = new Smarty();
Criação de uma instância do Smarty
Tente rodar o script acima. Se você obtiver um erro dizendo que o arquivo Smarty.class.php
não pôde ser encontrado, você tem que fazer uma das coisas a seguir:
// estilo windows
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;
7
Agora que os arquivos da biblioteca estão no lugar, é hora de configurar os diretórios do
Smarty para a sua aplicação.
O Smarty necessita de quatro diretórios, que são chamados por padrão 'templates/',
'templates_c/', 'configs/' e 'cache/'.
Cada um deles pode ser definido pelas propriedades da classe Smarty $template_dir,
$compile_dir, $config_dir, e $cache_dir repectivamente. É altamente recomendado que você
configure um conjunto diferente destes diretórios para cada aplicação que for usar o Smarty.
Certifique-se que você sabe a localização do 'document root' do seu servidor web. Em nosso
exemplo, o 'document root' é "/web/www.mydomain.com/docs/". Os diretórios do Smarty só são
acessados pela biblioteca do Smarty e nunca acessados diretamente pelo navegador. Então para
evitar qualquer preocupação com segurança, é recomendado colocar estes diretórios fora do
document root.
Para o nosso exemplo de instalação, nós estaremos configurando o ambiente do Smarty para
uma aplicação de livro de visitas. Nós escolhemos uma aplicação só para o propósito de uma
convenção de nomeação de diretório. Você pode usar o mesmo ambiente para qualquer aplicação,
apenas substitua "guestbook" com o nome de sua aplicação. Nós colocaremos nossos diretórios do
Smarty dentro de "/web/www.mydomain.com/smarty/guestbook/".
Você precisará pelo menos de um arquivo dentro de seu 'document root', e que seja acessado
pelo navegador. Nós chamamos nosso script de "index.php", e o colocamos em um subdiretório
dentro do 'document root' chamado "/guestbook/".
Nota Técnica: É conveniente configurar o servidor web para que 'index.php' possa ser
identificado como o índice padrão do diretório, asssim se você acessar
http://www.example.com/guestbook/, o script 'index.php' será executado sem adicionar 'index.php'
na URL. No Apache você pode configurar isto adicionando "index.php" ao final da sua
configuração DirectoryIndex (separe cada item com um espaço.) como no exemplo de httpd.conf:
/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php
/usr/local/lib/php/Smarty-v.e.r/libs/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty-v.e.r/libs/Config_File.class.php
8
/usr/local/lib/php/Smarty-v.e.r/libs/debug.tpl
/usr/local/lib/php/Smarty-v.e.r/libs/internals/*.php
/usr/local/lib/php/Smarty-v.e.r/libs/plugins/*.php
/web/www.example.com/smarty/guestbook/templates/
/web/www.example.com/smarty/guestbook/templates_c/
/web/www.example.com/smarty/guestbook/configs/
/web/www.example.com/smarty/guestbook/cache/
/web/www.example.com/docs/guestbook/index.php
O Smarty irá precisar de acesso de escrita (usuários de windows por favor ignorem) em
$compile_dir e $cache_dir, então tenha certeza que o usuário do servidor web possa escrever. Este é
geralmente o usuário "nobody" e o grupo "nobody" (ninguém). Para SO com X usuários, o usuário
padrão é "www" e o grupo "www". Se você está usando Apache, você pode olhar em seu arquivo
httpd.conf (normalmente em "/usr/local/apache/conf/") para ver qual o usuário e grupo estão sendo
usados.
Nota Técnica: chmod 770 será a segurança correta suficientemente restrita, só permite ao
usuário "nobody" e o grupo "nobody" acesso de leitura/escrita aos diretórios. Se você gostaria de
abrir o acesso de leitura para qualquer um (na maioria das vezes para sua própria conveniência de
querer ver estes arquivos), você pode usar o 775 ao invés do 770.
Nós precisamos criar o arquivo "index.tpl" que o Smarty vai ler. Ele estará localizado em
seu diretório templates.
{* Smarty *}
9
Nota Técnica: {* Smarty *} é um comentário de template. Ele não é exigido, mas é uma
prática boa iniciar todos os seus arquivos de template com este com este comentário. Isto faz com
que o arquivo seja reconhecido sem levar em consideração a sua extensão. Por exemplo, editores de
texto poderiam reconhecer o arquivo e habilitar coloração de sintaxe especial.
Agora vamos editar 'index.php'. Nós vamos criar uma instancia do Smarty, definir (assign)
uma variável do template e mostrar (display) o arquivo 'index.tpl'.
<?php
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
Nota Técnica: No nosso exemplo, nós estamos definindo caminhos absolutos para todos os
diretórios do Smarty. Se /web/www.example.com/smarty/guestbook/ estiver dentro do seu
include_path do PHP, então estas definições não são necessárias. Entretanto, é mais eficiente e (por
experiência) causa menos erros definir como caminhos absolutos. Isto te faz ter certeza que o
Smarty está lendo os arquivos dos diretórios que você quer.
Agora carregue o arquivo index.php em seu navegador. Você veria "Olá, Ned! bem vindo ao
Smarty"
A configuração básica para o Smarty está completa.
10
PADRÕES
Este arquivo lista diversos padrões que qualquer programador, ao adicionar ou alterar código
em PHP, deveria seguir. Como este arquivo foi adicionado em um estágio tardio do
desenvolvimento do PHP 3.0, o código base não o segue totalmente (ainda), mas está caminhando
nessa direção. Como nós agora estamos dentro dos releases da versão 4, muitas seções tem sido
recodificadas para usar estas regras.
(...)
Convenções de Nomeação
--------------------------------
[1] Nomes de funções para funções em nível de usuário (...) devem estar em minúsculo, com
palavras separadas por underscore, com o cuidado de minimizar a quantidade de letras. Abreviações
não devem ser usadas quando elas prejudicam a legibilidade do nome da própria função.
Bom:
'mcrypt_enc_self_test'
'mysql_list_fields'
Aceitável:
'mcrypt_module_get_algo_supported_key_sizes'
'get_html_translation_table'
Ruim:
11
'hw_GetObjectByQueryCollObj'
'pg_setclientencoding'
'jf_n_s_i'
[2] Se elas são parte de um “conjunto-pai” de funções, esse pai deve ser incluído no nome da
função de usuário, e deve ser claramente relacionado ao programa pai ou família de funções. Isso
deveria estar na forma parent_*.
Bom:
'foo_select_bar'
'foo_insert_baz'
'foo_delete_baz'
Ruim:
'fooselect_bar'
'fooinsertbaz'
'delete_foo_baz'
[3] Nomes de funções usadas por funções de usuário devem ser prefixadas com “_php_”, e
seguidas por uma palavra ou uma lista de palavras delimitada por underscores, em letras
minúsculas, que descreva a função. Se aplicável, elas devem ser declaradas como 'static'.
[4] Nomes de variáveis devem ser significativos. Nomes de variáveis de uma letra devem ser
evitados, exceto em lugares onde a variável não tem significado real ou tem um significado trivial.
(por exemplo, em for (i=0; i<100; i++) ).
[5] Nomes de variáveis devem ser escritas em minúsculo. Use underscores para separar as
palavras.
[6] Nomes de método seguem a convenção de nomeação 'Camel Case', com o cuidado de
minimizar a quantidade de letras. A letra inicial do nome é minúscula, e cada letra que inicia uma
nova palavra é em maiúsculo.
12
Bom:
'connect()'
'getData()'
'buildSomeWidget()'
Ruim:
'get_Data()'
'buildsomewidget'
'getI()'
[7] Para classes devem ser dados nomes descritivos. Evite usar abreviações quando possível.
Cada palavra no nome da classe deve começar com uma letra maiúscula, sem underscores como
delimitadores (Camel case com inicial maiúscula). O nome da classe deve ser prefixado com o
nome do 'conjunto pai' (por exemplo, o nome da extensão).
Bom:
'Curl'
'FooBar'
Ruim:
'foobar'
'foo_bar'
Sintaxe e indentação
-------------------------
[1] Nunca use comentários estilo C++ (//). Sempre use comentários estilo C puro. PHP é escrito
em C, e é indicado para compilar debaixo de qualquer compilador ANSI_C. Mesmo que muitos
compiladores aceitem comentários estilo C++ no código C, você tem de garantir que seu código
compile com outros compiladores da mesma forma. A única exceção para esa regra é o código que
é específico para Win32, porque a porta para o Win32 é especificamente o MS-Visual C++, e esse
13
compiladore e conhecido por aceitar comentários estilo C++ em código C.
[2] Use o estilo K&R. Na verdade, nós não podemos e não queremos forçar ninguém a usar um
estilo ao qual não está acostumado, mas, quando você escreve código que vai para o núcleo do PHP
ou um de seus módulos padrão, por favor, mantenha o estilo K&R. Isso é aplicável a tudo,
começando com indentação e estilos de comentário e passando para sintaxe de declaração de
funções. (Veja mais em http://www.catb.org/~esr/jargon/html/I/indent-style.html).
if (foo) {
bar;
a:
if(foo)bar;
[4] Quando indentar, use o caracter tab. Espera-se que um tab represente quatro espaços. É
importante manter consistência de modo que definições, comentários e estruturas de controle
estejam alinhados corretamente.
[5] Comandos de pré-processador (#if e outros) DEVEM começar na coluna 1. Para indentar
diretivas de pré-processador você deve colocar o # no começo de uma linha, seguido por um
número qualquer de espaços em branco.
(...)
14
BANCO DE DADOS
Compilação:
$ gmake
Instalação:
$su
# gmake install
#groupadd postgres
# adduser postgres
#mkdir usr/local/postgres/data
15
# chown postgres:postgres /usr/local/postgres/data
Inicialização do banco:
#su postgres
$ initdb -D /usr/local/postgres/data
Para rodar o PostgreSQL foi usado o seguinte comando:
$ postgres -D /usr/local/postgres/data
$ pg_ctl start
E para parar:
$ pg_ctl stop
FRAMEWORK
16
objetos, licenciamento corporativamente amigável e uma base de código ágil testada rigorosamente.
É focado na construção de aplicações Web 2.0 e web services mais seguras, confiáveis e modernas.
http://localhost/zend/acme
DOCUMENTAÇÃO
Instalação do phpDocumentor
Para que o código fonte PHP seja documentado, você deve colocar as tags do
phpDocumentor dentro do comentário estilo C, mas sempre colocando um asterisco logo após a
abertura do comentário, com cada tag precedida por um asterisco, assim:
17
/**
* @version 1.0
*/
@access [escopo]
Se @access for omitida para um elemento (classe ou função), será considerado como se
fosse @access public.
@access private faz com que o elemento não seja documentado, a menos que na linha de
comando seja usado switch --parseprivate.
@acess protected documenta o elemento, informando que ele só deve ser referenciado pela
classe que o contém ou pelas filhas dela.
@author [nome]
@copyright [descrição]
Informações de copyright.
@deprecated
Elementos que estão obsoletos e não devem mais ser usados pois serão removidos de
alguma forma em versões futuras.
Cria um link destacado para um arquivo externo que contém um exemplo de uso do
elemento.
@filesource
Cria um arquivo de referência cruzada com sintaxe destacada contendo o código fonte do
arquivo atual e um link para ele.
18
@ignore
@internal
@license [URL]
<a href=”URL]”>[identificador]</a>
Mostra um método mágico, encontrado dentro da classe. Métodos mágicos na verdade são
métodos que não foram declarados na classe, mas cuja chamada é possível através do método
__call.
Cria um apelido para uma variável global para melhorar a legibilidade da documentação.
19
@return int|string pode retornar inteiro ou string
@see class::elementname
@see class::methodname()
@see class::$variablename
@see functioname()
Define um subpacote para agrupar classes e funções dentro dele. Exige a tag @package.
@todo [informação]
Para utilizar o Smarty dentro do Zend Framework, é necessário seguir alguns passos:
20
Nesse novo arquivo, localize a linha:
$template_header = "<?php /* Smarty version ".$this->_version.", created on
".strftime("%Y-%m-%d %H:%M:%S")."\n";
Substitua por:
$template_header = "<?php /* Smarty version ".$this->_version."\n";
Isso é necessário porque o uso da função strftime é avaliada como um erro pelo Zend
Framework.
//$this->_smarty->template_dir =
'/opt/lampp/lib/php/Smarty-2.6.18/templates/';
$this->_smarty->compile_dir =
'/opt/lampp/lib/php/Smarty-2.6.18/templates_c/';
$this->_smarty->compiler_file =
'/opt/lampp/lib/php/Smarty-
2.6.18/libs/Smarty_Compiler.Zend.class.php';
$this->_smarty->config_dir =
'/opt/lampp/lib/php/Smarty-2.6.18/configs/';
$this->_smarty->cache_dir =
'/opt/lampp/lib/php/Smarty-2.6.18/cache/';
21
}
/*
* O método _run() é o único método que precisa
* ser implementado em qualquer subclasse de
* Zend_View_Abstract. É chamado automaticamente
* de dentro do método render().
*/
protected function _run()
{
$this->_smarty->display($this->getTemplate());
}
/*
* O método assign de Zend_View_abstract funciona
* de modo similar ao seu homônimo da classe Smarty
* A grande diferença é que os valores
* são associados ao objeto Smarty e não
* ao array de variáveis $this->_vars variables array
* da classe Zend_View_Abstract.
*/
public function assign($spec,$value=NULL)
{
if (is_string($value))
{
$this->_smarty->assign($spec, $value);
}
elseif (is_array($value))
{
foreach ($value as $key => $content)
{
$this->_smarty->assign($key, $content);
}
}
else
{
throw new Zend_View_Exception('assign() expects a
string or array, got '.gettype($value));
}
}
/*
* O escape anula o efeito de caracteres especiais.
* Este método trabalha tanto para valores string quanto
* para arrays e também usa o método escape() method
* de Zend_View_Abstract. A vantagem dele é que você
* não tem de tomar cuidado para cada valor de
* de um array ser anulado apropriadamente.
*/
public function escape($var)
{
22
if (is_string($var))
{
return parent::escape($var);
}
elseif (is_array($var))
{
foreach ($var as $key => $val)
{
$var[$key] = $this->escape($val);
}
return $var;
}
else
{
return $var;
}
}
/*
* Isto é apenas um wrapper para o método render()
* de Zend_View_Abstract.
*/
public function output($name)
{
$this->setTemplate($name);
print parent::render($name);
}
return FALSE;
}
23
$this->_template = $template;
}
?>
XView.php
Por esta:
$view = new Zend_Smarty_XView();
$view->output([nome do template]).
24