TAG | PHP

Em um ambiente de produção é interessante que a configuração de exibição de erros esteja em OFF no servidor PHP, pois informações acerca de um erro, seja ele ocasional ou causado propositalmente pelo usuário, pode fornecer informações importantes sobre o banco de dados utilizado, servidor Web, servidor PHP e até mesmo da sua própria aplicação.
Mas em um ambiente de desenvolvimento a exibição de erros e warnings se torna essencial para a depuração e testes do sistema, como resolver este conflito?
O ideal é não deixar os ambientes de produção e desenvolvimento divergentes para evitar surpresas desagradáveis no momento da publicação em produção, a solução fica então em configurar os scripts que estão em testes para que eles exibam os erros, veja um exemplo:
ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', dirname(__FILE__) . '/ERROS.LOG'); error_reporting(E_ALL); |
No trecho de código abaixo informamos para que o script PHP em questão exiba todos os erros e warnings e de quebra que os salve no arquivo ERROS.LOG que ficará armazenado na pasta que o script PHP.
Leia mais:
Recentemente me deparei com vários iniciantes em PHP questionando como formatar datas oriundas de outros sistemas ou de um banco de dados, em geral a data estava sendo enviado ao script PHP no seguinte formato: YYYY/MM/DD HH:MM:SS.
Uma das caracterÃsticas essenciais do PHP é a sua tipagem dinâmica, que se utilizada com responsabilidade vai ajudar o desenvolvedor a produzir scripts mais enxutos, veja o caso do tratamento da data citada passando-a para o formato DD/MM/YYYY HH:MM:SS.
list($data, $hora) = split(“ “, $dataBase); list($ano, $mes, $dia) = slit('[/.-]', $data); $dataFinal = $dia . “/†. $mes . “/†. $ano . “ “ . $hora |
Um trecho de código PHP simples que pode ser transformado em uma função e ser utilizado em diversos pontos do seu sistema.
Basicamente, este código PHP, por ser um formato de data conhecido me permite quebrar a string original e jogar o resultado diretamente em strings pelo list(), evitando assim a criação dinâmica de um array.
Leia mais:
Muitos desenvolvedores Web se veem obrigados a espalhar códigos CSS em meio ao HTML, JavaScript ou PHP por um simples motivo: o seu código CSS precisa receber valores dinamicamente, um caso difÃcil de ser resolvido, bem, difÃcil até agora.
Na verdade existem duas formas de conseguir enviar valores para um arquivo CSS, a primeira é editando o arquivo .htaccess e por consequência só irá funcionar em servidores Apache, mas é bem provável que você encontre formas alternativas em outros servidores web, esta técnica não envolve nenhuma alteração mais profunda no código-fonte da sua aplicação web e toda a alteração consiste apenas no lado do servidor.
Consiste em incluir uma linha como esta no seu arquivo .htaccess:
AddType application/x-httpd-php .css |
Está linha irá indicar para o servidor Apache que arquivos com a extensão CSS deverá ser interpretados como um arquivo PHP, logicamente captura de dados via GET e POST será possÃvel de ser implementado, somente se lembre de tomar cuidado com a segurança de sua aplicação web.
A segunda técnica não necessita de alterações nas configurações do servidor web e por isso toda a implementação é realizada via código-fonte da própria aplicação e seu uso se torna universal. Esta técnica somente aceita parâmetros enviados via GET e consiste em forçar um cabeçalho indicando que se trata de um arquivo CSS e nomeá-lo com a extensão .PHP, assim você terá um arquivo PHP (poderá utilizar todo o poder de programação da linguagem) e o mesmo será tratado como um CSS. Veja o exemplo abaixo:
<?php header('Content-type:text/css'); ?> body { background-color: <?php echo (isset($_GET['fundo']) && $_GET['fundo'] == 'verde') ? '#0f0' /* Verde */ : '#00f' /* Azul */; ?> } |
Viu, código CSS e PHP juntos.
Fonte: PHPIT
Leia mais:
JavaScript · PHP · segurança
Muita gente que está migrando do PHP para Java tem uma dúvida simples: como resgatar o valor de um parâmetro passado na URL?
Vamos supor que nossa URL seja: HTTP://www.servidor.com.br/?varTeste=14
Em PHP a simplicidade impera, basta fazer o seguinte:
<?php ... $varInterna = $varTeste; ... ?>; |
Nem o tipo da variável eu preciso declarar, graças à tipagem dinâmica do PHP, se observarem bem, eu armazenei em uma variável que será usada no meu código um valor passado via método GET (URL), altamente suscetÃvel à manipulação pelo usuário sem nenhum tratamento para me garantir segurança, isso não é recomendado, apenas deixei assim para facilitar o entendimento, em um ambiente real de desenvolvimento tal prática não deve ser utilizada.
Em Java embora não seja tão simples também não existe complexidade, veja o exemplo:
... varInterna = request.getParameter("varTeste"); ... |
Basta utilizar o método getParameter() do escopo da requisição, lembrando que a preocupação com segurança se faz necessária, assim como em PHP, nem pensar pegar esse valor como no exemplo e utilizar ele dentro de um SQL, por exemplo.
Leia mais:
Uma falha crÃtica do PHP foi liberada para o público por engano, onde normalmente primeiro os desenvolvedores do PHP resolvem a falha de segurança para depois publicá-la, desta vez a publicação veio antes do que a correção.
O caso atinge servidores que executam o PHP como CGI (como fastCGI a falha de segurança não ocorre), também não compreendo porque um servidor executando o PHP ainda o faz via CGI, já que é fortemente recomendado que tal prática não mais seja executada dando preferência por utilizá-lo como módulo do servidor, executar o PHP como CGI já é por si só uma falha de segurança.
Para quem utiliza o PHP como CGI a falha pode executar código malicioso, isso porque o PHP pode interpretar parâmetros enviados via URL, algo como http://www.seuservidor.com/arq.php?-s irá exibir o código-fonte do seu script ao invés do retorno de HTML processado, isso já é preocupante pois vários desenvolvedores desatentos gravam senhas dentro de seus scripts.
Utilizando a mesma lógica além de exibir o código-fonte do script é possÃvel executar código malicioso.
A correção liberada pelo time de desenvolvimento do PHP é mais um tapa buraco que não funciona muito bem e o ideal é que até a falha ser completamente resolvida o Apache seja configurado para não executar URL´s com o sinal -, para fazer isso basta configurar o arquivo .htacess da seguinte forma:
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC] RewriteRule ^(.*) $1? [L] |
Leia mais:
internet · PHP · segurança
Framework para desenvolvimento Web em PHP/JavaScript
2 comentários · Post por Petter Rafael em Dicas, JavaScript, JQuery, PHP, Webdesign
Durante o ano de 2010 esteve um planejamento e execução o projeto de um Framework para desenvolvimento Web utilizando PHP e JavaScript baseado nas seguintes premissas e necessidades:
- Deixar o layout livre para qualquer tipo de desenvolvimento (seja utilizando Tableless ou não);
- Não ser tão friendly-user como o WordPress, nosso usuário irá desenvolver código e não arrastar elementos em tela. Centrar-se no poder do desenvolvimento de código, deixar o desenvolvedor, nosso público-alvo, fazer a sua mágica em PHP;
- Centrar-se no uso da JQuery como framework JavaScript para suprir todas as necessidades de crossbrowser;
- Ser livre para o desenvolvedor alterar o código-fonte do projeto e sugerir novos recursos;
- Padronizar e formatar a persistência de dados;
- Permitir que programadores e desenvolvedores iniciantes em PHP produzam sites e sistemas Web complexos;
- Facilitar a manutenção e gestão do sistema;
- Ãrea administrava pronta, com elementos principais utilizados para gestão de sites.
Bem pessoal, está apresentado o framework iMais, que pelos testes permite reduzir em até 60% do tempo gasto no desenvolvimento de sites e sistemas Web.
Com o código-fonte aberto e livre é possÃvel utilizar o framework com os recursos existentes e expandi-lo através de desenvolvimento próprio, de forma fácil e flexÃvel. Mesmo utilizando o framework não existe a perda de performance, problema comumente encontra em frameworks de mercado.
Nos próximos dias estaremos liberando para download o conjunto básico, o que significa que no decorrer deste ano iremos investir tempo e recurso para que o framework cresça em termos de utilizadores e recursos, facilitando a criação de elementos Web ricos.
Vai desenvolver em PHP? Então utilize o iMais.
Leia mais:
dicas · JavaScript · JQuery · PHP · Webdesign
Eu me lembro de que antigamente era um parto de cavalo instalar o PHP como módulo no Apache, seja no Linux como no Windows, era preciso fazer o download do instalar (.exe) do Apache e depois instalamos, isso é simples e temos em questão de segundos um servidor Web funcionando.
Se quisemos ter o PHP era preciso fazer o donwload do PHP, descompactar para alguma pasta e depois editar o arquivo httpd.conf que é um arquivo texto que mantém todas as configurações do Apache, era preciso edita-lo manualmente para fazer o Apache subir o PHP como um módulo seu junto com o start do seu próprio serviço. Era uma coisa chata e muito propensa a erros, ainda mais se fosse executada por iniciantes.
Nota: nem vou citar alguns instaladores tudo em um (Apache e PHP juntos), como por exemplo, o Xamp, pois geralmente as configurações padrões tanto do Apache como do PHP são alterados e isso vai atrapalhar você quando for executar qualquer aplicação, pois o seu comportamento será diferente do habitual.
Voltando ao assunto, passados alguns anos o PHP agora também pode ser instalado a partir de um arquivo executável, que, aliás, no final da instalação o próprio instalador já adiciona as linhas necessárias no arquivo httpd.conf. Tudo muito lindo se funcionasse bem.
O instalador do PHP adiciona 3 linhas no final do arquivo httpd.conf (nem vou colocar as linhas aqui pois elas mudam devido a várias condições da instalação), mas posso afirmar que diversas vezes ocorrem erros.
O que fazer então?
Em primeiro lugar apague as 3 linhas que o instalador do PHP adicionou, depois você irá precisar editar o arquivo httpd.conf manualmente e para isso você precisa ser o administrador do sistema.
Agora adicione a seguinte linha no httpd.conf:
LoadModule php5_module "c:/PASTA_INSTALACAO_PHP/php5apache2_2.dll" |
Agora no trecho:
<IfModule dir_module/> DirectoryIndex index.html <IfModule/> |
Altere para:
<IfModule dir_module/> DirectoryIndex index.html index.php <IfModule/> |
E agora é só precisamos dar um stop e depois um start no monitor do Apache que tudo irá funcionar.
Nota 1: algumas pessoas simplesmente acionam o restart no monitor do Apache o que em teoria iria parar e subir o servidor novamente, já com as novas alterações, porém ao realizar esse procedimento o servidor continua com a configuração antiga, isso ocorre devido a uma questão que ocorre com o Apache e com outros servidores também, talvez alguma coisa relacionada ao seu sistema de cache, que o faz mesmo após o restart subir com as configurações antigas embora o seu arquivo de configurações esteja atualizado, por isso é recomendável parar o servidor no stop e após alguns seguintes volta-lo ao ar utilizando o start.
Esse problema no instalador ocorre somente na plataforma Windows (pelo menos eu nunca vi ocorrer no Linux), e se você for usuário de alguma distribuição Linux ela terá os pacotes prontos para instalação e configuração padrão automáticos no seu gestor de repositório (o famoso Synaptic para a galera do Ubuntu).
Nota 2: esse processo automático somente é interessante em ambientes de testes e desenvolvimento, onde o foco não é a configuração perfeita do servidor, para ambientes de produção é recomendável que somente profissionais qualificados e com amplo conhecimento da área para evitar futuras dores de cabeça, principalmente com a questão de segurança.
Leia mais:
Porque utilizar padrões em projetos de software
Sem comentários · Post por Petter Rafael em Java, Oracle, PHP
Algumas vezes quando estamos desenvolvendo algum software nos perguntamos o porque de ter tanto trabalho para obedecer padrões, seja qual for a linguagem utilizada (Java, PL/SQL, PHP, etc).
Vou dar um exemplo prático.
É uma recomendação, ou best pratice, como preferir, que todo inÃcio de script em PHP seja iniciado com:
<?php |
Porém, caso o seu php.ini esteja configurado para obter compatibilidade com a sintexe do ASP é possÃvel iniciar um script assim:
<? |
O problema aqui é que nas últimas versões do PHP a prática de compatibilidade com o ASP tem sido deixada de lado e você ao migrar seu servidor para uma versão mais nova do PHP terá problemas e vai ter que atualizar todos os seus scripts.
Notaram o porque da importância em seguir padrões? Principalmente se estes padrões foram incentivados pela própria desenvolvedora da ferramenta.
Um outro caso, agora falando em Java.
Por ser utilizado para projetos mais complexos, a obediência de padrões em Java deve ser seguida a risca senão a manutenção do seu código-fonte passa a ser uma tarefa impossÃvel.
Um caso clássico é o acesso a dados, mesmo que você não utilize um framework para isso é recomendado que ao utilizar JDBC seja utilizado também DAO (Data Acess Object) para facilitar a manutenção futura do seu projeto, senão será tanto SQL espalhado dentro do seu código que de orientado a objeto vai parecer orientado a string.
Leia mais:
Em determinado momento algum script PHP pode gerar um arquivo texto e fornecer um link para o usuário do sistema, nada mais normal e trivial de ser realizado a não ser por um pequeno detalhe:
Ao fornecer o link, se o usuário clicar com o mouse o servidor Web irá exibir o conteúdo do arquivo no browser, afinal essa é a atitude espera do servidor Web.
Mas você como bom desenvolvedor acredita que a solução de instruir o usuário a clicar com o botão direito do mouse e depois em “salvar como” é uma solução caseira demais e que depende unica e exclusivamente do usuário o que pode acarretar erros e transtornos.
Porém existe uma solução, basta alterar o seu script PHP e no seu inÃcio utilizar o seguinte:
header('Content-type: text/plain'); header('Content-Disposition: attachment; filename="arquivo.txt"'); |
A instrução acima tem a finalidade de “forçar” o browser a fazer o download do arquivo texto ao invés de exibir o conteúdo no browser.
Leia mais:
Eu já tinha falado sobre como ler arquivos texto linha a linha, agora chegou a vez de escrever um arquivo texto e deixa-lo disponÃvel no servidor para download utilizando o PHP.
Tudo é muito simples, o primeiro passo é criar (abrir o arquivo), para isso é utilizado o comando fopen() passando como argumentos o nome o arquivo e o modo de abertura dele.
Agora com o stream do arquivo aberto, basta utilizar o comando fwrite() para literalmente ir escrevendo linha a linha o conteúdo do nosso arquivo texto passando como argumento o stream do arquivo e o conteúdo.
Com tudo feito basta fechar o stream do arquivo com o comando fclose() para que o mesmo seja efetivamente criado. Nessa parte podemos ocasionalmente receber algumas mensagens de erro e a causa provável é a falta de permissão de escrita na pasta onde o arquivo será gerado.
P.S.: o arquivo exemplo está disponÃvel para download aqui.
