Nesse artigo, vou mostrar como rodar seus scripts PHP com PSGI/Plack e vou mostrar como configurar os Frameworks CodeIgniter e CakePHP para serem executado com PSGI/Plack. O requisito para acompanhar o artigo é ter Perl e PHP instalado em sua maquina. Não vou abordar a instalação dos mesmos porque já existem excelentes artigos na internet.
Sobre PSGI/Plack
O PSGI é uma interface de aplicações web entre Perl e servidores web. O Plack é um módulo Perl e um kit de ferramentas que contém PSGI middleware. PSGI e Plack foi inspirados no WSGI do Python e Rack do Ruby. O PSGI/Plack já é usado pelos principais Frameworks em Perl e também por pequenas aplicações em Perl. PSGI/Plack aumenta o desempenho e segurança de nossas aplicações.
Instalação dos módulos Perl
Primeiro, vamos instalar o módulo App::cpanminus(cpanm) para instalar os módulos mais rápido. Acesse o terminal e digite:
cpan App::cpanminus
Instalar o módulo Plack::App::PHPCGI digite:
cpanm Plack::App::PHPCGI
Instalar o módulo Starman, para execução da aplicação:
cpanm Starman
Configurando nosso arquivo PSGI/Plack para executar nosso primeiro exemplo
Crie um arquivo chamado suaapp.psgi e coloque esse código:
use Plack::App::PHPCGI; my $app = Plack::App::PHPCGI->new( script => '/caminho_do_diretorio/exemplo.php' );
Crie um arquivo PHP chamado ‘exemplo.php’ e coloque qualquer código, exemplo:
<?php echo "Amo Perl :)"; ?>
Agora vamos rodar nosso primeiro exemplo; abra o terminal e digite:
starman /caminho_do_diretorio/suaapp.psgi
<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Agora, para ver seu primeiro exemplo rodando, acesso o navegador de sua preferencia e digite o endereço:</span>
http://localhost:5000
Se tudo ocorreu certo, será imprimido no navegador Amo Perl.
Configurando nosso arquivo PSGI/Plack para executar script PHP, imagens, css e javascript.
Altere o arquivo suaapp.psgi e coloque esse código:
use Plack::App::PHPCGIFile; my $app = Plack::App::PHPCGIFile->new( root => '/caminho_do_diretorio' );
Execute novamente o comando no terminal:
starman /caminho_do_diretorio/suaapp.psgi
Agora abra seu navegador e digite:
http://localhost:5000/nome_do_arquivo
Exemplos:
http://localhost:5000/script.php http://localhost:5000/imagem.jpg http://localhost:5000/style.css http://localhost:5000/javascript.js
Configurando o Framework CodeIgniter para ser executado com PSGI/Plack
1. Acesse o site http://ellislab.com/codeigniter e faça download da ultima versão do CodeIgniter;
2. Depois de fazer o download, extrair os arquivos no diretório desejado;
3. Abra o arquivo ‘URI.php’, que esta no diretório ‘system/core’ do CodeIgniter, comente as linhas 186 a 193, assim:
/* if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0) { $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME'])); } elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0) { $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME']))); } */
4. Crie uma pasta chamada ‘public’ no diretório ‘application’ do CodeIgniter. Esta pasta, onde você colocará os arquivos de imagens, CSS e Javascript.
5. Vou mostrar duas formas de configurar o arquivo suaapp.psgi, usando os módulos Plack::Builder e Plack::App::URLMap:
Primeiro usando Plack::Builder:
use Plack::Builder; use Plack::App::PHPCGI; use Plack::App::PHPCGIFile; builder { mount "/" => Plack::App::PHPCGI->new( script => '/caminho_do_diretorio/codeigniter/index.php' ); mount "/public" => Plack::App::PHPCGIFile->new( root => '/caminho_do_diretorio/codeigniter/application/public' ); };
Segundo usando Plack::App::URLMap:
use Plack::App::URLMap; use Plack::App::PHPCGI; use Plack::App::PHPCGIFile; my $app1 = Plack::App::PHPCGI->new( script => '/caminho_do_diretorio/codeigniter/index.php' ); my $app2 = Plack::App::PHPCGIFile->new( root => '/caminho_do_diretorio/codeigniter/application/public' ); my $urlmap = Plack::App::URLMap->new; $urlmap->map("/" => $app1); $urlmap->map("/public" => $app2); my $app = $urlmap->to_app;
6. Acessando arquivos de public, exemplos:
<img src="/public/nome_do_arquivo" /> <img src="/public/imagens/nome_do_arquivo" /> <link href="/public/css/style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/public/js/arquivo.js"></script>
7. Agora, é só executar o comando no seu terminal:
starman /caminho_do_diretorio/suaapp.psgi
8. Para as demais configurações do CodeIgniter, leia o manual no endereço http://ellislab.com/codeigniter/user-guide/.
Pronto! O Framework CodeIgniter esta rodando com PSGI/Plack.
Configurando o Framework CakePHP para ser executado com PSGI/Plack
1. Acesse o site http://cakephp.org e faça download da versão 2.2.7;
2. Depois de fazer o download, extrair os arquivos no diretório desejado;
3. Abra o arquivo ‘core.php’, que esta no diretório ‘app/Config’ do CakePHP, altere os valores das chaves de ‘Security.salt’ e ‘Security.cipherSeed’, assim:
Configure::write('Security.salt', 'Coloque um outro valor aqui'); Configure::write('Security.cipherSeed', 'Coloque um outro valor aqui');
4. Abra o arquivo ‘bootstrap.php’, que esta no diretório ‘lib/Cake’ do CakePHP, altere os valores dos caminhos publico: ‘img/’ para ‘public/img/’, ‘css/’ para ‘public/css/’ e ‘js/’ para ‘public/js/’. Assim:
/** * Web path to the public images directory. */ if (!defined('IMAGES_URL')) { define('IMAGES_URL', 'public/img/'); } /** * Web path to the CSS files directory. */ if (!defined('CSS_URL')) { define('CSS_URL', 'public/css/'); } /** * Web path to the js files directory. */ if (!defined('JS_URL')) { define('JS_URL', 'public/js/'); }
5. Configurar o arquivo suaapp.psgi:
Com módulo Plack::Builder:
use Plack::Builder; use Plack::App::PHPCGI; use Plack::App::PHPCGIFile; builder { mount "/" => Plack::App::PHPCGI->new( script => '/caminho_do_diretorio/cakephp/app/webroot/index.php' ); mount "/public" => Plack::App::PHPCGIFile->new( root => '/caminho_do_diretorio/cakephp/app/webroot' ); };
Com módulo Plack::App::URLMap:
use Plack::App::URLMap; use Plack::App::PHPCGI; use Plack::App::PHPCGIFile; my $app1 = Plack::App::PHPCGI->new( script => '/caminho_do_diretorio/cakephp/app/webroot/index.php' ); my $app2 = Plack::App::PHPCGIFile->new( root => '/caminho_do_diretorio/cakephp/app/webroot' ); my $urlmap = Plack::App::URLMap->new; $urlmap->map("/" => $app1); $urlmap->map("/public" => $app2); my $app = $urlmap->to_app;
6. Agora é só executar o comando no seu terminal:
starman /caminho_do_diretorio/suaapp.psgi
7. Se aparecer uma mensagem ‘URL rewriting is not properly configured on your server’, dizendo que mod_rewrite não está configurado, pode ignorar essa mensagem.
Irá aparecer uma mensagem dizendo que o banco de dados não está configurado. Leia no manual CakePHP para conseguir configurar o mesmo. Se não quiser que apareça as mensagens, abra o arquivo ‘home.ctp’, que esta no diretório ‘app/View/Pages’ do CakePHP, e apague o código que nele esta.
8. Demais configurações do CakePHP, leia o manual no endereço http://book.cakephp.org/2.0/pt/index.html.
Pronto! O Framework CakePHP esta rodando com PSGI/Plack.
Conclusão
Este artigo foi criado para mostrar como executar scripts e alguns Frameworks PHP, demais configurações devem ser consultado nos manuais dos mesmo.