Ambiente de Desenvolvimento PHP com o Docker Compose

Docker

Docker Compose é uma ferramenta para execução de aplicativos docker multi-containers o que nos ajuda muito a iniciar um ambiente inteiro com um comando somente.

Neste post vamos utilizar o Docker Compose para configurar um ambiente de desenvolvimento básico, com o PHP, Apache e MySQL.Vamos utilizar dois containers Docker, um para o PHP e Apache e outro para o banco de dados MySQL. Vamos utilizar imagens oficias do Docker Hub.

Primeiramente vamos criar o container para o servidor WEB. Para isso dentro de uma pasta vamos criar um arquivo chamado Dockerfile contendo as seguintes linhas:


Nos utilizamos uma imagem do repositório oficial, este vem com o PHP 5.6 e o apache. Além disso utilizamos um comando para executar (RUN) a instalação da extensão mysqli. Por hora vamos instalar somente esta extensão, caso queira instalar mais extensões de uma olhada na documentação da imagem que foi utilizada.

O próximo passo é criar um arquivo chamado docker-compose.yml onde teremos as configurações de nossos dois containers. Vamos inserir as seguintes linhas nele:

O próximo passo agora é criar a pasta www/ e um arquivo com o nome index.php dentro da pasta www/ com o seguinte código:

Agora vamos colocar para rodar com o comando docker-compose up. Com este comando será mostrado em um modo verbose, ou seja, cuspindo todas as informações no terminal. Caso queira rodar em segundo plano bastar utilizar o seguinte comando: docker-compose up -d

Este post é o basico do que se pode fazer com o docker, mais com esse básico já podemos ter nosso ambiente de desenvolvimento rodando rapidamente e totalmente independente de nossa maquina.

Fazendo deploy com Deployer

deployer

 

Deployer é um pacote em PHP que tem como características realizar o deploy de aplicações e como principal vantagem a economia de tempo, melhor desempenho e desenvolvimento.

Neste post vamos desde do primeiro passo a instalação ate a execução do deploy em um servidor, tudo em um ambiente linux, no meu caso a distribuição Debian. Primeiramente precisamos baixar o arquivo .phar disponível no site do projeto.

Download do deployer.phar

Depois de realizado o download vamos move-lo e para a pasta /usr/local/bin e conceder permissão de execução com o seguinte comando:

$ mv deployer.phar /usr/local/bin/dep
$ chmod +x /usr/local/bin/dep

Depois deste passo teste o comando dep no terminal e veja se aparece mais ou menos como a tela abaixo.

Comando dep

O próximo passo é a criação do arquivo deploy.php onde setaremos algumas configurações para que possamos executar nosso delpoy da melhor maneira. No nosso casso vamos realizar o acesso via identityFile a um servidor e passar os arquivos de uma branch especifica de um repositório git.

<?php require 'recipe/symfony.php'; 
server('prod', '10.10.10.213')->user('byteslv')
->identityFile('/home/btllv/.ssh/id_rsa.pub', '/home/btllv/.ssh/id_rsa')
->env('deploy_path', '/var/www/html')
->stage('production');
 
set('repository', 'git@github.com:usuario/tests.git');
env('branch', 'master');
 
task('deploy:vendors', function () {
});
 
task('deploy:assetic:dump', function () {
});
 
task('deploy:cache:warmup', function () {
});

Pronto agora podemos executar nosso comando pra realizar o deploy na nossa maquina de production. Para rodar basta utilizar o seguinte comando:

$ dep deploy production

O processo começara, e tudo dando certo aparecerá  uma tela mais ou menos como esta abaixo.

dep

Processo realizado com sucesso!

É possível ir bem alem do que mostrei aqui. Entre no site do projeto e veja sua documentação e veja como o que mais pode se fazer com o Deployer.

http://deployer.org/

 

Instalando o XAMPP no linux

O XAMPP simplificando, é um servidor web contendo o Apache, Mysql, PHP, Perl e outros. Para instalar, primeiramente temos que realizar o download do arquivo no site do projeto https://www.apachefriends.org/download.html.

Depois de realizado o download entre no terminal e digite os seguintes códigos:

$ cd Downloads
$ su
 
# chmod 755 xampp-linux-x64-1.8.2-6-installer.run
# ./xampp-linux-x64-1.8.2-6-installer.run

Iniciará uma tela de instalação, clique em Next verificando se deseja a configuração apresentada.

xampp1

Depois de finalizado coloque o servidor para iniciar com o seguinte comando:

#sudo  /opt/lampp/lampp start

Para reniciar ou parar os serviços utilize os seguintes comandos:

#sudo  /opt/lampp/lampp restart
 
#sudo  /opt/lampp/lampp stop

Busca palavras repetidas em arquivo com PHP

Para saber se dentro de algum arquivo existem palavras repetidas, basta fazer uma busca utilizando um foreach, depois de separar as palavras com outro foreach. Veja o código abaixo:

$file = "dados.txt";
$contents = preg_split("/[\s,]+/", implode("", file($file)));
 
foreach ($contents as $palavra) {
  $ar[$palavra]++;
}
echo "Palavras duplicadas
 
 
";
 
foreach ($ar as $palavra =&gt; $c_palavra) {
  if($c_palavra &gt; 1){
    print "Palavra: $palavra 
";
    print "Numero de ocorrencias: $c_palavra 
";
  }
}

Verifica se Arquivo permite leitura, escrita e existe com PHP

Algumas vezes precisamos verificar se um arquivo permite somente leitura, ou somente escrita, ou simplesmente se ele existe. Para isto usamos algumas funções no PHP, que são elas a: is_readable, is_writable e file_exists. Veja os exemplos abaixo:

// Verifica se o arquivo permite leitura.
$file = "arquivo.php";
if (is_readable($file)) {
  echo "Arquivo permite leitura";
}
else {
  echo "Arquivo não permite leitura";
}
 
// Verifica se arquivo permite escrita.
$file = "arquivo.php";
if (is_writable($file)) {
  echo "O arquivo permite escrita";
}
else {
  echo "O arquivo não permite escrita";
}
 
 
// Verifica se Arquivo existe.
$file = "arquivo.php";
if (file_exists($file)) {
  echo "O arquivo existe";
}
else {
  echo "o arquivo não existe";
}

Gerenciando dependências com o Composer

Gerenciador de Composer
Gerenciador de Dependência

Neste post não vou abordar o que é o Composer, mais sim como instalar e utilizar ele no seu projeto para gerenciar suas dependências.

Primeiro passo é instalar o Composer, existe algumas formas de instalar o mesmo, qualquer dúvida só acessar o site do projeto aqui.

 

NO LINUX

No meu caso utilizei o comando abaixo para instalar o Composer:

1
php -r "readfile('https://getcomposer.org/installer');" | php

Será realizado o download do arquivo composer.phar.

1
2
3
4
5
All settings correct for using Composer
Downloading...
 
Composer successfully installed to: ./composer.phar
Use it: php composer.phar

No meu caso eu instalei ele para que eu pudesse utiliza-lo em qualquer projeto, numa forma global. Para isso utilizei esse comando (Para plataforma UNIX):

1
# sudo mv composer.phar /usr/local/bin/composer

Pronto o composer agora está instalado.

NO OS X

Para instalar no OS X é mais simples, basta fazer o download do Composer :

1
curl -sS https://getcomposer.org/installer | php

depois de realizado o download, mova o arquivo para a pasta /usr/bin com o seguinte comando:

1
sudo mv composer.phar /usr/bin/

No meu caso gosto de deixar no modo universal, para poder trabalhar com o composer em qualquer projeto, para isto basta criar um alias, utilizando o VIM para acessar o arquivo e inserir uma linha.
Para acessar o arquivo digite o seguinte comando:

1
vim ~/.bash_profile

Depois acrescente a seguinte linha:

1
alias composer="php /usr/bin/composer.phar"

Pronto agora o composer está  instalado.

Caso o procedimento acima não funcionar utilize este comando:

1
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Este último comando realiza todo o processo dito anteriormente.

UTILIZANDO

Para utiliza-lo basta criar um arquivo composer.json no seu projeto contendo quais dependências você deseja utilizar, no nosso exemplo utilizei o silex e o doctrine :

1
2
3
4
5
6
7
{
    "require": {
        "silex/silex": "1.0.*",
        "doctrine/dbal": "2.2.*"
    },
    "minimum-stability": "dev"
}

Para baixar as dependencias acesse pelo terminal a pasta de seu projeto e execute o seguinte comando:

1
composer install

Pronto agora basta esperar terminar de baixar os pacotes e utiliza-los.

Instalndo e ativando o Curl PHP 5 no Debian

Quando ativamos o PHP no nosso sistema, ele não vem com alguns pacotes. Para habilitarmos estes pacotes precisamos realizar alguns passos.

Primeiro vamos baixar o pacote do php-curl, utilizando o seguinte comando:

1
# sudo apt-get install php5-curl

Depois de instalado, so basta da um restart no apache com o comando abaixo:

1
# sudo /etc/init.d/apache2  restart

Pronto!

Data por extenso PHP

Existem várias formas de se realizar esta tarefa no PHP, usando Switch, Ifs e muitas outras formas. Mais a forma que é a mais simples é:

1
2
3
4
5
6
7
8
<?php
header( 'Content-Type: text/html; charset=iso-8859-1' );
setlocale( LC_ALL, 'pt_BR', 'pt_BR.iso-8859-1', 'pt_BR.utf-8', 'portuguese' );
date_default_timezone_set( 'America/Belem' );
$data =  strftime( '%A, %d de %B de %Y', strtotime( date( 'Y-m-d' ) ) );
 
echo $data;
?>

Muito simples né pessoal. Até mais.

Uploads de arquivos grandes – PHP

Por padrão do PHP o limite de upload de um arquivo é 8MB (Megabits), mais como fazer para realizar um upload via POST maior que este valor?

Simples, precisamos adicionar algumas linhas de código no arquivo .htaccess. Estou considerando que você não tenha acesso ao arquivo php.ini no seu servidor.

As linha que se deve adicionar são:

1
2
3
4
5
php_value memory_limit 400M
php_value post_max_size 100M
php_value upload_max_filesize 120M
php_value max_execution_time 1800
php_value session.gc_maxlifetime 3600

O parâmetro: memory_limit, aumentamos o valor máximo de memória em bytes que um script pode alocar para “400MB”. O valor padrão é “128MB”, caso precise de mais espaço é só aumentar o valor.

O parâmetro: post_max_size, aumentamos o tamanho máximo de dados a ser enviados via POST. O valor padrão e “8MB”, no nosso script aumentamos para “100MB”.

O parâmetro: upload_max_filesize, aumentamos o tamanho máximo do arquivo que faremos o upload para “120MB”. O padrão é “2MB”.

O parâmetro: max_execution_time, aumentamos a quantidade de segundos de execução do script para 30 minutos. O padrão e 30 segundos.

O parâmetro: session.gc_maxlifetime, aumentamos em segundo o tempo de vida de sessão para uma hora. O padrão e 24 minutos.