10 PHP Frameworks For Developers

PHP, known as the most popular server-side scripting language in the world, has evolved a lot since the first inline code snippets appeared in static HTML files. These days developers need to build complex websites and web apps, and above a certain complexity level it can take too much time and hassle to always start from scratch, hence came the need for a more structured natural way of development. PHP frameworks provide developers with an adequate solution for that.

In this post we carefully handpicked 10 popular PHP frameworks that can bestfacilitate and streamline the process of backend web development.

Why Use A PHP Framework

But first, let’s take a look at the top reasons why many developers like to use PHP frameworks and how these frameworks can level up your development process. Here’s what PHP frameworks do:

  • Make speed development possible
  • Provide well-organized, reusable and maintainable code
  • Let you grow over time as web apps running on frameworks are scalable
  • Spare you from the worries about low-level security of a site
  • Follow the MVC (Model-View-Controller) pattern that ensures the separation of presentation and logic
  • Promote modern web development practices such as object-oriented programming tools

1. Laravel

Although Laravel is a relatively new PHP framework (it was released in 2011), according to Sitepoint’s recent online survey it is the most popular framework among developers. Laravel has a huge ecosystem with an instant hosting and deployment platform, and its official website offers many screencast tutorials called Laracasts.

Laravel has many features that make rapid application development possible. Laravel has its own light-weight templating engine called “Blade”, elegant syntax that facilitates tasks you frequently need to do, such as authentication, sessions, queueing, caching and RESTful routing. Laravel also includes a local development environment called Homestead that is a packaged Vagrant box.

2. Symfony

The components of the Symfony 2 framework are used by many impressive projects such as the Drupal content management system, or the phpBB forum software, but Laravel – the framework listed above – also relies on it. Symfony has a wide developer community and many ardent fans.

Symfony Components are reusable PHP libraries that you can complete different tasks with, such as form creation, object configuration, routing, authentication, templating, and many others. You can install any of the Components with the Composer PHP dependency manager. The website of Symfony has a cool showcase section where you can take a peek at the projects developers accomplished with the help of this handy framework.

3. CodeIgniter

CodeIgniter is a lightweight PHP framework that is almost 10 years old (initially released in 2006). CodeIgniter has a very straightforward installation process that requires only a minimal configuration, so it can save you a lot of hassle. It’s also an ideal choice if you want to avoid PHP version conflict, as it works nicely on almost all shared and dedicated hosting platforms (currently requires only PHP 5.2.4).

CodeIgniter is not strictly based on the MVC development pattern. Using Controller classes is a must, but Models and Views are optional, and you can use your own coding and naming conventions, evidence that CodeIgniter gives great freedom to developers. If you download it, you’ll see it’s only about 2MB, so it’s a lean framework, but it allows you to add third-party plugins if you need more complicated functionalities.

4. Yii 2

If you choose the Yii framework you give a boost to the performance of your site as it’s faster than other PHP frameworks, because it extensively uses the lazy loading technique. Yii 2 is purely object-oriented, and it’s based on theDRY (Don’t Repeat Yourself) coding concept, so it provides you with a pretty clean and logical code base.

Yii 2 is integrated with jQuery, and it comes with a set of AJAX-enabled features, and it implements an easy-to-use skinning and theming mechanism, so it can be a great choice for someone who comes from a frontend background. It has also a powerful class code generator called Gii that facilitates object-oriented programming and rapid prototyping, and provides a web-based interface that allows you to interactively generate the code you need.

5. Phalcon

The Phalcon framework was released in 2012, and it quickly gained popularity among PHP developers. Phalcon is said to be fast as a falcon, because it waswritten in C and C++ to reach the highest level of performance optimization possible. Good news is that you don’t have to learn the C language, as the functionality is exposed as PHP classes that are ready to use for any application.

As Phalcon is delivered as a C-extension, its architecture is optimized at low levels which significantly reduces the overhead typical of MVC-based apps. Phalcon not only boosts execution speeds, but also decreases resource usage. Phalcon is also packed with many cool features such as a universal auto-loader, asset management, security, translation, caching, and many others. As it’s awell-documented and easy-to-use framework, it’s definitely worth a try.

6. CakePHP

CakePHP is already a decade old (the first version was released in 2005), but it’s still among the most popular PHP frameworks, as it has always managed to keep up with time. The latest version, CakePHP 3.0 enhanced session management,improved modularity by decoupling several components, and increased the ability of creating more standalone libraries.

CakePHP has a really remarkable showcase, it powers the websites of big brands such as BMW, Hyundai, and Express. It is an excellent tool for creating web apps that need high-level of security, as it has many built-in security features such as input validation, SQL injection prevention, XSS (cross-site scripting) prevention, CSRF (cross-site request forgery) protection, and many others.

7. Zend Framework

Zend is a robust and stable PHP framework packed with a lot of configuration options therefore it’s usually not recommended for smaller projects butexcellent for more complex ones. Zend has partners such as IBM, Microsoft, Google and Adobe. The coming major release, Zend Framework 3 will beoptimized for PHP 7 , but will still support PHP 5.5 onwards.

The current release, Zend Framework 2 also has many cool features such as cryptographic coding tools, an easy-to-use drag and drop editor with support for front-end technologies (HTML, CSS, JavaScript), instant online debugging and PHP Unit testing tools, and a connected Database Wizard. Zend Framework was created with the Agile methodology that facilitates delivering high-quality apps to enterprise clients.

8. Slim

Slim is a PHP micro framework that provides you with everything you need and nothing you don’t. Micro frameworks are minimalistic in design, they areexcellent for smaller apps where a full-stack framework would be an exaggeration. Slim’s creator was inspired by a Ruby micro framework calledSinatra.

Slim is used by many PHP developers for developing RESTful APIs and services. Slim comes with features such as URL routing, client-side HTTP caching, session- and cookie encryption, and it supports “flash” messages across HTTP requests as well. Its User Guide is an easy read, and if you are interested in the new features of the upcoming major release (already in beta), you can watch this primer video about Slim 3.

9. FuelPHP

FuelPHP is a flexible full-stack PHP framework that doesn’t only support the ordinary MVC pattern but also its evolved version, HMVC (Hierarchical Model-View-Controller) at the architecture level. FuelPHP adds an optional classcalled Presenter (formerly called ViewModel) between the Controller and View layers to hold the logic needed to generate Views.

FuelPHP is modular and extendable, takes care of security concerns by providing features such as input and URI filtering and output encoding, and it comes with its own authentication framework, with many other sophisticatedfeatures and a detailed documentation.

10. PHPixie

PHPixie is a quite new framework, it started in 2012 with the goal of creating a high-performance framework for read-only websites. PHPixie also implements the HMVC design pattern just like FuelPHP, and is built by using independentcomponents that can be used as well without the framework itself. The PHPixie components are 100% unit tested, and require minimum dependencies.

The official website has a tutorial that claims you can learn the framework in 30 minutes, and their blog also details many practical use cases. Among the features you can find the standard ORM (object-relational mapping), caching, input validation, authentication and authorization capabilities. PHPixie also allows you to use the HAML markup language, enables schema migration, and has a sophisticated routing system.

Fonte: 10 PHP Frameworks For Developers – Best Of – Hongkiat

PHP é a Quinta-Feira – HEADERs (parte 1)

PHP é a Quinta-Feira – HEADERs (parte 1)

Criado por Pedro Pinto em 17 de Novembro de 2011 | 12 comentários

Por Pedro Peixoto para o PPLWARE
Depois de umas longas “férias”, hoje é dia de mais um artigo sobre “Programação WEB”, mais precisamente sobre PHP.

Na outra semana um amigo perguntou-me como poderia forçar o download de uma imagem, uma vez que sempre que colocava um link, o browser abria a imagem em vez de aparecer a “janelinha de download” como nos restantes ficheiros. Isto acontece porque existem diversos tipos de ficheiros que o browser consegue interpretar, e nesse caso, o ficheiro é mostrado imediatamente em vez de ser perguntado ao utilizador onde quer guardar o ficheiro para posteriormente o visualizar. É possível contornar este “automatismo” forçando o browser a questionar o utilizador sobre a sua intenção, para isso recorremos a headers.

php_00

O header é um componente da mensagem http que possui os parâmetros que definem essa transacção, esta informação não é visível numa página mas contém informação útil para o browser saber como interpretar a mensagem. Por exemplo o título que aparece no browser quando abrimos uma página é fornecido através do header.

header_01

Mas como manipulamos o header em imagens? Esta era uma pergunta complicada caso não tivéssemos a simplicidade e flexibilidade do PHP ao dispôr.

A ideia é a seguinte: vamos utilizar um ficheiro PHP para incorporar a imagem, no fundo este ficheiro PHP vai ser a nossa imagem.

Criei um ficheiro index.php numa pasta juntamente com o logótipo do pplware, se abrir a imagem através do browser ela naturalmente aparece

header_03

Para tornar o nosso index.php uma “imagem” precisamos de duas coisas, temos de dizer ao browser que o que vai ler é uma imagem e de seguida dar-lhe o código da mesma.

Podemos dizer-lhe que o conteúdo é uma imagem através da função header:

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

header() é usado para adicionar mais uma linha ao header http.

Para ler e apresentar o código da imagem recorremos à função readfile:

int readfile ( string $nomedoarquivo [, bool $use_include_path [, resource $context ]] )

Lê um arquivo e escreve o seu conteúdo para o buffer de saída (output buffer).

Vamos então escrever o seguinte código no ficheiro index.php.

<?php
    $ficheiro = "logo_pplware.png"; //nome do ficheiro
    header("Content-Length: " . filesize($ficheiro)); //tamanho esperado do ficheiro
    header('Content-Type: image/png'); //dizer ao browser que o conteúdo é uma imagem
   //agora que já enviamos os headers necessários vamos fazer o output da imagem
   readfile($ficheiro); //ler o código da imagem e fazer o output
?>

E como esperado, se abrirmos a página vamos ver a imagem

header_04

O nosso “index.php” é, para o browser, uma imagem igual ao “logo_pplware.png”, este é um bom método para esconder o URL das imagens, e é também baseado neste método que a maior parte dos sites de downloads escondem o endereço real dos ficheiros, mas isto já poderia ser tema para um próximo artigo.

Nesta fase temos já a imagem a ser aberta através de um ficheiro PHP falta agora enviar mais um header que informe o browser para não interpretar directamente a imagem. Para isso basta adicionar mais uma linha ao nosso código.

header('Content-Disposition: attachment; filename=logo.png');

E aqui fica o código completo e devidamente comentado:

<?php
    $ficheiro = "logo_pplware.png"; //nome do ficheiro   header("Content-Length: " . filesize($ficheiro)); //tamanho esperado do ficheiro   header('Content-Type: image/png'); //dizer ao browser que o conteúdo é uma imagem   //informamos que o conteúdo deve ser interpretado em forma de anexo, e o nome que queremos dar ao mesmo
   header('Content-Disposition: attachment; filename=logo.png');   //agora que já enviamos os headers necessários vamos fazer o output da imagem   readfile($ficheiro); //ler o código da imagem e fazer o output
?>

Resta testar e comprovar que a imagem já não é apresentada no browser e é enviada para a barra de downloads.

header_05

É igualmente possível apresentar outros tipos de ficheiro através de um ficheiro PHP, bastando alterar o campo “Content-type” do header:

"pdf": "application/pdf"
"exe": "application/octet-stream"
"zip": "application/zip"
"xls": "application/vnd.ms-excel"
"ppt": "application/vnd.ms-powerpoint"
"gif": "image/gif"
"png": "image/png"
"jpg": "image/jpg"
"mp3": "audio/mpeg"
"mp3": "audio/mp3"
"wav": "audio/x-wav"
"mpe": "video/mpeg"
"mov": "video/quicktime"
"avi": "video/x-msvideo"

Além disso existem muitos mais campos de header que podem ser manipulados de forma a obter do browser um tratamento mais apropriado a cada tarefa específica.

Nos próximos artigos vou explicar como é possível tirar partido do header para outras finalidades e como possibilitar o download de um ficheiro durante apenas uns minutos, ao estilo dos sites de download.

PHP e Javascript – Parte III

PHP e Javascript – Parte III

Criado por Pedro Pinto em 16 de Junho de 2011 | 22 comentários

PHP e Javascript Parte III

por Pedro Peixoto

Como vimos nos dois últimos artigos, o Javascript vem trazer às nossas aplicações WEB a interacção e flexibilidade que uma linguagem server-side como o PHP não consegue oferecer. Nesse sentido, decidimos mudar o nome da rubrica “PHP é a quinta-feira” para “Programação WEB é à Quinta-feira! “. Esta semana continuamos a explorar esta linguagem que se tem assumido como a principal linguagem WEB, para além de aumentar um pouco o grau de complexidade da nossa programação vamos também perceber como fazer a integração do JS com o PHP.

web_01

No último artigo aprendemos o que são eventos, funções e os conceitos básicos da programação com JS. O Javascript ao contrário do que muita gente pensa, é uma linguagem muito completa, para além das funções básicas que todas as linguagens de programação “tem” de oferecer, existem funções para tratamento de strings, cálculos matemáticos, arrays, entre muitas outras. Além disso, existem inúmeras bibliotecas que facilitam e expandem o uso do Javascript. Não há limites, é dar asas à imaginação, a interacção e personalização podem ser levadas ao extremo!

Hoje vamos fazer um pequeno exemplo prático onde usaremos eventos, funções, estruturas de controlo, variáveis, inputs e outputs. Será um pouco de tudo o que é necessário para qualquer funcionalidade JS. Vamos então aprender a apresentar conteúdo diferente nos nossos formulários após uma escolha do utilizador.

Antes de mais vamos criar a página HTML com os componentes necessários.

<html>
	<head>
	</head>
	<body
		Que sistema usa?</br>
		<select>
			<option value="1">iPhone</option>
			<option value="2">Android</option>
			<option value="3">Windows Mobile</option>
			<option value="4">Outro</option>
		</select>
		<span id="comentario"></span>
	</body>
</html>

Colocámos um elemento <select> que permite ao utilizador efectuar uma escolha entre as diferentes opções, de seguida inserimos um <span> que vai permitir apresentar conteúdo de acordo com a escolha do utilizador. Falta agora o código Javascript. A estratégia é usar o evento onChange (accionado quando o utilizador altera o valor do select) para chamar uma função passando o valor seleccionado. Dentro da função colocaremos um switch/case, que dependendo da escolha coloca conteúdo diferente no <span>.

<html>
	<head>
		
			function apresentaConteudo(escolha)
			{
				var elemento=document.getElementById('comentario');
				switch(escolha)
				{   case '1': elemento.innerHTML='Viva a Apple!'; break;
					case '2': elemento.innerHTML='Bem-vindo google fan!'; break;
					case '3': elemento.innerHTML='Wiiinnnndddowwwssss!!!'; break;
					case '4': elemento.innerHTML='Qual?'; break;   }
			}
		
	</head>
	<body
		Que sistema usa?</br>
		<select onChange="apresentaConteudo(this.value)" id=”dispositivo”>
			<option value="1">iPhone</option>
			<option value="2">Android</option>
			<option value="3">Windows Mobile</option>
			<option value="4">Outro</option>
		</select>
		<span id="comentario"></span>
	</body>
</html>

O resultado é o esperado:

clip_image002

Podemos ainda mudar a função de maneira a apresentar mais um elemento <select> no caso do utilizador escolher “Outro”:

function apresentaConteudo(escolha)
{
var elemento=document.getElementById('comentario');
	switch(escolha)
		{
		case '1': elemento.innerHTML='Viva a Apple!'; break;
		case '2': elemento.innerHTML='Bem-vindo google fan!'; break;
		case '3': elemento.innerHTML='Wiiinnnndddowwwssss!!!'; break;
		case '4': elemento.innerHTML='Qual?
<br />
<select><option selected>Bada</option><option>Symbian</option></select>'; break;
	}
}

clip_image004

Poderíamos também ter obtido o valor seleccionado dentro da própria função para isso teríamos de usar:

“document.getElementById(‘dispositivo’).value”

Como facilmente se conclui, o atributo innerHTML permite aceder ao código HTML que está dentro do elemento, por sua vez, o atribuo value permite aceder ao valor se um componente. Existem inúmeraspropriedades que nos possibilitam interagir totalmente com os elementos de uma página HTM, por sua vez os elementos também podem ser acedidos querem directamente (através do ID, classe), quer indirectamente usando a estrutura DOM.

Por último, vamos aprender como integrar PHP e Javascript, é um processo muito rápido. No fundo o PHP, corrido no servidor, cria dinamicamente ou de forma estática o código Javascript. Para tal, é necessário que o nosso ficheiro tenha extensão PHP e seja aberto no servidor (para poder ser interpretado). O código JS é construído como qualquer outro código HTML, vulgarmente usando o comando “echo” do PHP.

<?php
	echo ‘Ano: <select onChange=”alert(\’Mudei!\’)”><option>’ . date(‘Y’) . ’</option><option>’ . (date(‘Y’)-1) . ’</option></select>’;
?>

No exemplo de cima podemos ver que quando escrevemos JS com PHP, no caso de estarmos a recorrer às plicas ou aspas para delimitar a string PHP, temos que usar a \ para de seguida podermos usar a plica ou aspa respectivamente.

Poderemos ainda usar PHP para popular elementos HTML usando JAVASCRIPT, sem ser necessário recarregar a página. De facto cada vez mais encontramos páginas onde as acções parecem instantâneas, como se a página estivesse em constante comunicação com o servidor. Para isso usamos AJAX que no fundo permite que a página, através de Javascript, faça um pedido http (que pode ser uma página gerada em PHP) sem ser recarregada. O AJAX assume por isso cada vez mais importância nas aplicações WEB PHP, no entanto devido à complexidade inútil do uso directo do AJAX, não avançaremos para esta fase sem a ajuda de bibliotecas que simplificam este processo.

Em conclusão, o Javascript é uma linguagem flexível, e corresponde às exigências vulgares de uma página WEB, é bastante completa no entanto, quando pretendemos fazer coisas mais elaboradas, principalmente ao nível de efeitos gráficos ou tratamento elaborado de dados, temos muito código para escrever sendo que o JS poderia e deveria ter funções que correspondessem directamente às necessidades mais comuns e particulares da programação WEB. Podemos “contornar” este problema recorrendo a bibliotecas. Desta forma vamos no próximo artigo aprender a fazer mais escrevendo menos, para tal recorremos ao jQuery. Esta biblioteca JS permitirá com simples linhas de código efectuar grande parte das tarefas comuns de uma página de Internet.

PHP é a quinta-feira – Introdução ao JavaScript (Parte II)

PHP é a quinta-feira – Introdução ao JavaScript (Parte II)

Criado por Pedro Pinto em 9 de Junho de 2011 | 16 comentários

Por Pedro Peixoto para o PPLWARE
Tal como prometido na última semana, hoje vamos perceber como pode uma aplicação ou um website desenvolvido em PHP tornar-se mais interactivo recorrendo ao Javascript, a linguagem clientside mais usada em ambientes web. O objectivo será, daqui a algumas rubricas, perceber a fórmula explosiva da união do PHP com jQuery, uma livraria indispensável a qualquer programador WEB. Mas como tudo tem que começar por baixo, vamos então, ver na prática como podemos usar o Javascript nos nossos websites/webapps.
php_java
Mas antes de começar, vamos “separar as águas”:

  • O javascript é incorporado nas páginas HTML e interpretado pelo browser do cliente que acede à nossa página, sendo uma linguagem orientada a eventos.
  • O PHP corre do lado do servidor, sendo que o cliente recebe uma página HTML que foi gerada através da programação PHP.

Assim, vulgarmente, nas nossas aplicações usamos o PHP para gerar conteúdo dinamicamente, ligar à base de dados e realizar operações pesadas ou que devem ocorrer num ambiente controlado. Já o Javascript pode ser usado para melhorar graficamente elementos HTML, criar efeitos agradáveis, melhorar a interacção do utilizador, etc…

Incorporar Javascript numa página HTML

Podemos colocar o nosso JS na própria página HTML ou então num ficheiro separado que depois será referenciado na página HTML. Por uma questão de facilidade, vamos começar por escrever o código JS na própria página HTLM. Para tal, comecem por criar um ficheiro vazio na pasta do servidor e alterar a extensão para .php por exemplo js.php.

Seguidamente abrimos o ficheiro num editor de texto (ex.: notepad ou notepad++), e criamos uma estrutura HTML:

<html>
<head>
</head>
<body>
</body>
</html>

O código JS pode colocar-se em qualquer parte, e escreve-se entre as tags .


Para vermos algum resultado vamos aprender desde já a mostrar uma Mensagem ao utilizador, para isso chamamos a função alert();.

<html>
<head>

alert("Ola PPLWARE!!!");

</head>
<body>
</body>
</html>

Se abrirmos a página no browser a mensagem surge normalmente:

clip_image002

Também podemos adicionar código javascript a eventos que disparam quando o utilizador realiza determinadas acções. Cada elemento javascript possui uma séria de eventos, como por exemplo:

  • onLoad – Dispara quando o utilizador abre a página
  • onUnload – Dispara quando o utilizador fecha a página
  • onFocus – Dispara quando o elemento é selecionado, por exemplo quando se coloca o cursor numa caixa de texto.
  • onBlur – Dispara quando o elemento deixa de estar selecionado.
  • onChange – Dispara quando o utilizador muda o valor do elemento
  • onMouseOver – Dispara quando o utilizador passa o cursor do rato por cima do elemento.
  • onMouseOut – Dispara quando o cursor do rato sai de cima do elemento
  • onClick – Dispara quando o utilizador clica no elemento.
  • E muitos mais…

Vamos de seguida criar um botão que emita um aviso em alguns destes eventos.

<html>
<head>

alert("Ola PPLWARE!!!");

</head>
<body onLoad="alert('Bem-vindo!');" onUnload="alert('Até já');"> <input type="button" value="Botao de teste de eventos" onClick="alert('clicaram-me');" onMouseOver="alert('rato em cima de mim');" onMouseOut="alert('rato saiu de cima de mim');"/>
</body>
</html>

De notar que nos eventos não necessitamos de colocar as tags . Colocámos também código para os eventos onLoad e onUnload no body.

Depois de guardar e abrir a página no browser podem brincar um pouco com os eventos que criámos.

clip_image004

Agora, vamos aprender a ler valores dos elementos. É possível fazer isso de mil e uma maneiras mas, para já, a mais fácil é através do ID do elemento.

Em primeiro lugar vamos criar uma caixa de texto:


De seguida, vamos alterar o código do botão:


alert("Ola PPLWARE!!!"); </head>
<body onLoad="alert('Bem-vindo!');" onUnload="alert('Atá já');"> <input type="text" id="caixadetexto"/> <input type="button" value="Botao de teste de eventos" onClick="alert(document.getElementById('caixadetexto').value);" /> </body>
</html>

Assim, podemos aceder ao valor da textbox através da função “getElementById()” que recebe por parâmetro o id do elemento a acessar. De entre as propriedades disponíveis num elemento, a propriedade “value” indica o valor actual. Desta forma, quando o botão for pressionado surge uma mensagem com o valor actual da caixa de texto. Eis o resultado:

clip_image006

No entanto percebe-se que o código ficou um pouco confuso, e como tal vamos simplificar usando para tal as “funções”.

<html>
<head>

alert("Ola PPLWARE!!!");
function mensagem()
{
alert(document.getElementById('caixadetexto').value);
}

</head>
<body onLoad="alert('Bem-vindo!');" onUnload="alert('Atá já');"> <input type="text" id="caixadetexto"/>
<input type="button" value="Botao de teste de eventos" onClick="mensagem();" />
</body>
</html>

O resultado é exactamente o mesmo.

E esta semana ficamos por aqui, já sabemos fazer output, inputs, funções e usar os eventos. Na próxima semana vamos aprender a integrar PHP com Javascript, e começar a fazer coisas mais complexas. O que acharam? Demasiado básico? Muito rápido para tanta coisa? Aguardo pelos vossos comentários.

PHP é à quinta-feira – Trabalhar com Datas

PHP é à quinta-feira – Trabalhar com Datas

Criado por Pedro Pinto em 19 de Maio de 2011 | 11 comentários

Por Pedro Peixoto para o PPLWARE
É impensável viver num mundo em que não existissem datas, em que não tivéssemos um calendário como forma de organização diária, de facto, as datas estão presentes em quase tudo, e como tal é muito comum necessitarmos de as usar nas nossas aplicações PHP.

Sendo conhecido pela sua simplicidade e flexibilidade, o PHP torna muito fácil trabalhar com datas, bastando duas ou três funções para fazer preencher a maioria das necessidades dos programadores.

Esta semana vamos aprender algumas das funções mais simples e importantes para a manipulação de datas em PHP.

php1

Existe uma quantidade enorme de funções para o tratamento de datas em PHP, aqui, vamos aprender apenas as mais simples e importantes. Mais uma vez, o objectivo do artigo é introduzir o leitor num determinado tema PHP, para que depois ele próprio possa explorar e aprofundar os seus conhecimentos sobre esse mesmo tema.

Antes de começar, vamos apenas entender a diferença entre um formato de data legível pelos humanos e ounix timestamp. Convencionámos ao longo dos anos que determinados formatos de representação sugerem um determinado instante ou um dia, um mês, um ano. No entanto, esses formatos são de difícil tratamento, uma vez que obedece a uma estrutura complexa com meses com diferente número de dias, anos com mais ou menos um dia, etc…

Surgiu, assim a necessidade de simplificar a representação de datas, para podermos tratá-las informaticamente. O mais famoso é o Unix timestamp, vulgarmente chamado apenas timestamp, e é também muito fácil de entender, no fundo é um número com a contagem dos segundos desde o dia 1 de Janeiro de 1970 às 00:00:00 sendo este o timestamp 0. Assim se subtrairmos o timestamp de ontem ao 12:00:00 ao de hoje ao 12:00:00, iremos obter o número de segundos que passaram entre os dois instantes, neste caso 86400 (1 dia). Torna-se assim simples a manipulação e o tratamento de datas. De seguida vamos conhecer algumas funções que tornam possível estas manipulações:

Time

Talvez a função mais simples seja a função “time”, esta função não recebe parâmetros pois retorna apenas o timestamp, mas é sem dúvida muito útil, seja em conjunto com outras funções ou mesmo em casos onde necessitamos apenas do timestamp.

echo time(); //mostra o timestamp actual, ou seja os segundos que passaram até agora desde 1 de Janeiro de 1970
Strtotime

Esta função permite a conversão de inúmeros formatos de data em timestamp, assim, sempre que temos que tratar uma data (formato humano), esta função é uma grande ajuda. É uma função bastante versátil porque interpreta uma grande diversidade de formatos de data, o que a torna uma das minhas favoritas.

echo strtotime(“now”); //devolve o timestamp actual, equivalente a time();
echo strtotime(“2011-02-12 07:00:03″); //converte a data no seu timetamp, ou seja, nos segundos que passaram desde 1 de Janeiro de 1970 até ela.

Pode inclusive ser usada para pequenos cálculos:

echo strtotime("+1 day"); //devolve o timestamp de amanhã
echo strtotime("+1 week"); //devolve o timestamp da próxima semana
echo strtotime("next Thursday"); // devolve o timestamp da próxima quinta
echo strtotime("last Monday"); // devolve o timestamp da última segunda

Todos os cálculos são feitos relativamente à data actual, por isso quando pedimos “strtotime(“+1 day”);”, é-nos devolvida a data de amanhã. Contudo, esta função permite ainda que lhe seja passado um segundo parâmetro (timestamp) que serve como referência de partida para os cálculos, assim, por exemplo, para o dia 2011/05/12, vamos calcular o seu timestamp:

$timestp=strtotime(“2011/05/12”);

Agora já colocar este timestamp como referência de cálculo:

echo strtotime("+1 day" , $timestp); //devolve o timestamp de 2011/05/13
echo strtotime("+1 week" , $timestp); //devolve o timestamp da semana seguinte a 2011/05/12
echo strtotime("next Thursday" , $timestp); // devolve o timestamp quinta-feira seguinte ao 2011/05/12   echo strtotime("last Monday" , $timestp); // devolve o timestamp segunda-feira anterior a 2011/05/12

Podemos assim usar uma cadeia de “strtotime” de forma a realizar qualquer cálculo necessário. Esta é sem dúvida uma função poderosa.

Date

A função “date” é, em conceito, uma função de formatação de data, mas na prática é muito mais que isso, e em conjunto com as anteriores, torna todas as operações possíveis. Esta função é o contrário da “strtotime” já que permite converter um timestamp em data compreensível pelos humanos, assim:

echo date("Y-m-d H:i:s",strtotime("+1 day”) ); //Devolve a data de amanhã

O primeiro parâmetro indica o formato, enquanto que o segundo é o timestamp a converter. Existem inúmeros formatos que podem ser usados e que estão disponíveis na página da função. Se não for passado o segundo parâmetro, a função toma como referência o momento actual, vejamos:

echo date("l"); // “l” devolve o dia da semana->”Thursday”
echo date("d (l)"); // “d” devolve o dia, “l” devolve o dia da semana, ficaria “19 (Thursday)”
echo date("M y"); // “M” devolve a abreviatura do mês, “y” devolve o ano com dois dígitos, ficaria “May 11”
echo date("l \\t\h\e jS"); //o caracter “\” permite escrever texto pelo meio do formato, “j” devolve o dia do mês sem zeros, e o S devolve o sufixo ordinal (st, nd, rd or th), ficaria “Thursday the 3rd”.

Podemos facilmente fazer o echo de um rodapé de copyright recorrendo a esta função:

echo ’copyright &copy;’ . date("Y"); //copyright ©2011
Conclusão

Estas 2 últimas funções possibilitam praticamente todas as operações de datas que sejam necessárias em PHP, depois de um estudo aprofundado de cada uma delas e com um pouco de raciocínio é possível fazer cálculos impressionantes. No entanto existem muitas outras que também merecem atenção. Deixamos referenciadas a date_diff, date_add, mktime, microtime, entre outras também muito importantes.

Sem dúvida que este é um tema bastante abrangente mas as portas estão abertas…

PHP é à quinta-feira – Controlar uma porta COM

PHP é à quinta-feira – Controlar uma porta COM

Criado por Pedro Pinto em 12 de Maio de 2011 | 3 comentários

Por Pedro Peixoto para o PPLWARE

O PHP é usado mais frequentemente com o objectivo de construção de Websites ou aplicações WEB para manipular dados e geri-los de uma forma mais fácil e cómoda, mas também é famoso pela sua versatilidade, flexibilidade e simplicidade. O facto de ser uma linguagem muito popular facilita a obtenção de classes que estendem as suas funcionalidades aos mais diversos fins. Hoje vamos aprender como controlar facilmente uma porta COM usando PHP.

php1

Há uns tempos, durante a realização de projecto relacionado com a robótica, tive necessidade de enviar comandos para uma porta COM (local) usando a aplicação que estava a construir em PHP. O que poderia parecer difícil à primeira vista, veio a tornar-se simples, muito por culpa da classe disponibilizada por Rémy Sanchez. Existem muitas outras soluções, algumas delas tirando partido de funções nativas do PHP, tanto que a minha escolha acabou por ser outra, no entanto esta classe é bastante simples e eficaz para as tarefas mais necessárias, pelo que merecia destaque numa rubrica.

Vamos ao que interessa, em primeiro lugar necessitam de fazer download da classe e fazer o include da mesma:

require("php_serial.class.php");

Depois de incluída é preciso criar um novo objecto como em qualquer classe:

$serial = new phpSerial();

Agora que temos o objecto criado, vamos indicar a porta COM a controlar:

$serial->deviceSet("COM1");

De seguida necessitamos de indicar os parâmetros de ligação à porta:

$serial->confBaudRate(9600); //Taxa de transmissão
$serial->confParity("none");  //Paridade
$serial->confCharacterLength(8); //Comprimento   $serial->confStopBits(1);  //Bits de paragem
$serial->confFlowControl("none"); //Controlo

Agora que já temos a ligação configurada, vamos conectar:

$serial->deviceOpen();

E é tudo, podemos enviar as mensagens para a porta de destino, para exemplificar vamos enviar o comando “SR1”:

$serial->sendMessage("SR1\r");

Ao fim de enviar todos os comandos, temos de fechar a conexão:

$serial->deviceClose();

Para concluir, basta acrescentar que está ainda disponível a função readPort, para ler a porta COM mas apenas está implementada para servidores Linux.

Existem inúmeros dispositivos que funcionam ou estão preparados para funcionar como portas COM, esta classe vem assim possibilitar a exploração de inúmeras funcionalidades desses mesmos dispositivos, e, principalmente possibilitar a interação de aplicações WEB com mecanismos usados na robótica ou domótica. Já pensaram fazer uma aplicação WEB onde controlem as persianas/luzes da vossa casa? Até para a semana.

Últimos artigos sobre PHP

Download: php_serial.class.zip

PHP é a Quinta-Feira – Gráficos em PHP com pChart

PHP é a Quinta-Feira – Gráficos em PHP com pChart

Criado por Pedro Pinto em 14 de Abril de 2011 | 14 comentários

Por Pedro Peixoto para o PPLWARE

Nos dias correntes, e com a necessidade de melhorar o conteúdo das nossas páginas, é cada vez mais frequente apresentar dados na forma como melhor se entendem: em gráficos. Existem várias ferramentas que servem este propósito, umas pagas outras gratuitas, umas mais simples outras mais complexas, com animações ou sem animações. Hoje vamos conhecer o pChart, uma classe PHP que nos permite gerar gráficos de forma rápida, fácil e gratuita.

Para este exemplo vamos fazer um gráfico em pilha com dados fictícios das visitas do PPLWARE blog e PPLWARE fórum.

pchart_00

Preparação

Depois de fazer download da classe é necessário fazer os includes:

include("pChart/class/pData.class.php");
include("pChart/class/pDraw.class.php");
include("pChart/class/pImage.class.php");

De seguida vamos inicializar objecto que armazenará os dados:

MyData = new pData();

Para adicionar séries usa-se a função addPoints que recebe um array de dados e o nome da série:

$MyData->addPoints(array(7,8,15,20,18,12,8,19,9,16,20,8),"PPLWARE Blog");
$MyData->addPoints(array(19,0,8,8,8,12,19,10,5,12,20,8),"PPLWARE Forum");
$MyData->addPoints(array('JAN','FEB','MAR','ABR','MAI','JUN','JUL','AGO','SET','OUT','NOV','DEZ'),"Mes");

Como no nosso caso, queremos que uma das series seja o eixo das abcissas devemos indica-lo através da função setAbscissa:

$MyData->setAbscissa("Mes");

De seguida vamos indicar o texto a apresentar nos eixos, como uma das series vai ser o eixo dos xx, basta indicarmos o texto para o eixo dos yy, usamos a função setAxisName:

$MyData->setAxisName(0,"Visitantes únicos");

Uma vez que os dados que temos estão em milhares, vamos indicar a unidade usando a função setAxisUnit, no fundo esta função acrescenta à frente dos valores/eixos/legendas o texto indicado no segundo parâmetro, o primeiro parâmetro é o id do eixo, neste caso yy:

$MyData->setAxisUnit(0,”000″); ou $MyData->setAxisUnit(0,”k”);

Desenho

Agora que já temos os nossos dados preparados vamos desenhar o gráfico.

Em primeiro lugar temos de criar um objecto gráfico:

$myPicture = new pImage(1199,230,$MyData);

De seguida indicamos as dimensões usando a função setGraphArea:

$myPicture->setGraphArea(60,30,950,190);

Temos ainda de escolher a fonte a usar para a representação de texto através da função setFontProperties:

$myPicture->setFontProperties(array("FontName"=>"pChart/fonts/pf_arma_five.ttf","FontSize"=>6));

Falta apenas configurar a escala, neste capítulo há muitas opções disponíveis, neste caso queremos apenas uma escala simples com os yy entre 0 e 50, para isso usamos o drawScale.

$AxisBoundaries = array(0=>array("Min"=>0,"Max"=>50));
$myPicture->drawScale(array("Mode"=>SCALE_MODE_MANUAL,"ManualScale"=>$AxisBoundaries));

Estamos prontos para, finalmente, gerar o gráfico, como queremos um gráfico em pilha, usamos a funçãodrawStackedBarChart, mas esta classe oferece muitos outros. Vamos então gerar um gráfico em pilha, com valores nas próprias colunas, cor automática, efeito de cor gradiente e contorno:

$myPicture->drawStackedBarChart(array("DisplayValues"=>TRUE,"DisplayColor"=>DISPLAY_AUTO,"Gradient"=>TRUE,"Surrounding"=>60));

Podemos adicionalmente colocar uma legenda, que neste caso é muito útil, usando a função drawLegend, indicado a sua disposição:

$myPicture->drawLegend(570,212,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));

Por fim, temos de fazer o output. Esta classe possibilita que uma imagem seja guardada em ficheiro ou mostrada directamente na própria página que é o que vamos fazer usando a função stroke:

$myPicture->stroke();

Eis o resultado final:

php_00

Sandbox

Existe ainda uma ferramenta chamada sandbox para a construção de gráficos através de um interface gráfico, para o caso de o utilizador não querer estar a escrever código.

clip_image004

Conclusão

O pChart é uma classe poderosa para a construção de gráficos que tanto pode ser usada para a construção de simples gráficos, como para os gráficos mais complexos. Possui muitas opções, parâmetros e funções que nos permitem fazer qualquer gráfico imaginável, pelo que não podemos deixar de lhe dar algum destaque.

A inclusão de javascript permite ainda implementar algumas funcionalidades de interacção, embora o facto de trabalhar com imagens estáticas o limite um pouco neste capítulo.

O pChart é muito mais do que uma simples classe para gerar gráficos, podendo por exemplo:

– Gerar códigos de barra

php_01

– Diagramas, Esquemas ou até mesmo simples imagens.

php_02

php_03

php_04

Por tudo o pChart isto é uma classe bastante útil que pode ser útil em qualquer altura. A ferramenta “Sandbox” disponibiliza ainda uma forma mais fácil de gerar gráficos, tornando esta classe uma das melhores entre tantas outras semelhantes, e o melhor de tudo: é grátis!

PHP é à quinta-feira – Apresentação de imagens

PHP é à quinta-feira – Apresentação de imagens

Criado por Pedro Pinto em 28 de Abril de 2011 | 22 comentários

Por Pedro Peixoto para o PPLWARE
Como o último artigo despertou bastante interesse, apesar do seu grau de simplicidade, vamos, esta semana, continuar na mesma linha e aprender a trabalhar com o elemento <img>. Neste artigo poderemos ver como fazer output de imagens nas páginas geradas em PHP, armazenando os seu endereços na base de dados.

php1

Uma imagem tem dois atributos importantes:

  • Src – Url da imagem
  • Alt – Texto alternativo

São estes dois atributos que podemos armazenar numa tabela, e ao contrário do que muitos pensam, a imagem física não fica na própria base de dados mas sim no servidor, apenas o seu endereço é guardado.

Para este exercício vamos usar uma imagem chamada ‘pplware.png’.

clip_image002

Para apresentar a imagem através do PHP, podemos usar o seguinte código.

<?php   $src='pplware.png';   $alt='Logotipo PPLWARE';   echo '<img src="' . $src . '" alt="' . $alt . '"/>';   ?>

Ao abrir esta página teremos o seguinte resultado:

clip_image004

A informação das variáveis $alt e $src poderiam ser introduzidas numa base de dados como a da imagem seguinte:

clip_image006

Agora vamos modificar o código:

<

?php   //ligação DB   mysql_connect('localhost','root','mysql');   mysql_select_db('PPLWARE');   //consulta   $query="Select * from Galeria where ID=1";   $resultado=mysql_query($query);   $linha=mysql_fetch_array($resultado);   //output imagem   $src=$linha['URL'];   $alt=$linha['DESCRICAO'];   echo '<img src="' . $src . '" alt="' . $alt . '"/>';   ?>

O resultado é exactamente o mesmo:

clip_image008

Posto isto, e visto que o script já está completamente dinâmico, podemos incluir um ciclo while e fazer uma mini galeria para todas as imagens da base de dados (não esquecer de retirar a cláusula where da query:

<?php   mysql_connect('localhost','root','mysql');   mysql_select_db('PPLWARE');   $query="Select * from Galeria";   $resultado=mysql_query($query);   while($linha=mysql_fetch_array($resultado))   {   $src=$linha['URL'];   $alt=$linha['DESCRICAO'];   echo '<img src="' . $src . '" alt="' . $alt . '"/>';   }   ?>

Falta agora adicionar à base de dados mais imagens e não esquecer de as colocar fisicamente no servidor, este processo também poderia ser feito através do PHP, mas “upload de ficheiros” é um tema para um próximo artigo.

Como o campo URL é um caminho para uma imagem, também podemos colocar um caminho da WEB, é indiferente:

clip_image010

E o resultado final:

clip_image012

PHP é à quinta-feira – Endereço IPv4 ou IPv6?

PHP é à quinta-feira – Endereço IPv4 ou IPv6?

Criado por Pedro Pinto em 17 de Março de 2011 | 11 comentários

De volta à rubrica “PHP é à quinta-feira“, esperamos que os utilizadores contribuam com sugestões e estamos abertos para receber os vossos artigos , para posteriormente publicação, sobre esta super linguagem de scripting “server-side”.

Pois bem, ontem em conversa com um amigo ele questionava-me como colocar no seu site, a indicação se o cliente estava aceder via IPv4 ou IPv6. Vamos ver como fazer um pequeno script php para esta questão.

php_00

Como já referimos em vários artigos, o IPv6 é a nova versão do protocolo IP, e foi desenvolvido para suceder à actual versão (o IPv4). O que motivou o desenvolvimento desta nova versão foi a aproximação da exaustão do espaço de endereçamento e a necessidade de resolver algumas das limitações do IPv4, nomeadamente no que toca a segurança e mobilidade, e simplificar algumas das funcionalidades do protocolo IPv4.

Exemplo de um endereço IPv4 e IPv6

Endereço IPv4: 192.168.10.1

Endereço IPv6: 2000:490:23d0:6700:f82d:b871:ecb8:fbce

Como podemos ver, um endereço IPv6 tem uma representação hexadecimal de blocos de 16 bits, separados por dois pontos ‘:’, por exemplo:

x:x:x:x:x:x:x:x onde os “x” são números hexadecimais

Script em PHP para indicar se o cliente está aceder ao site com um endereço IPv4 ou IPv6.

Considerando que pretendemos apenas saber se o cliente está a aceder via IPv4 ou IPv6, basta apenas verificar o endereço IP do cliente é separado por ponto ‘.’ (IPv4) ou por ‘:’ (IPv6). Coisa simples não é?

ipv4_ipv6

Para a produção do script precisamos de 2 funções essenciais:

  • $_SERVER[‘REMOTE_ADDR’]; – que me permite obter o endereço do cliente
  • strstr – Encontra a primeira ocorrência de uma string (neste caso os dois pontos ‘:’

Script completo

<?php
 $ip=$_SERVER['REMOTE_ADDR'];
 if (strstr($ip, ":")) {
 echo "O seu endereço IPv6 é o: $ip";
 } else {
 echo "O seu endereço IPv4 é o: $ip";
 }   ?>

O script é relativamente simples e pode servir de base para serviços/páginas engraçadas. Lembram-se daqueles sites em que existia uma tartaruga que dançava quando o utilizador tinha um IPv6 (ver aqui)? Ou o bebé que chorava quando o IP do cliente ainda era IPv4? Através do script disponibilizado é simples fazer páginas desse tipo. Basta apenas incluir por exemplo um gif (ex. tartaruga parada) se o  cliente tiver um endereço IPv4 ou um gif animado se o cliente tiver um endereço IPv6.

Ficamos à espera que nos mostrem as vossas ideia :) . Boas programações! Alguém quer ajudar nesta rubrica?

Artigos relacionados

Download: script_ipv4_v6