PHP – DevHouse Internet Software Development House http://localhost:8080 Desenvolvimento de Sistemas para Internet e Mobile Tue, 23 Jun 2026 08:58:43 +0000 pt-BR hourly 1 https://wordpress.org/?v=4.8.14 Acessar dbAdapter ou outra resource do bootstrap de qualquer lugar da aplicação [Zend Framework 1] http://localhost:8080/acessar-dbadapter-ou-outra-resource-do-bootstrap-de-qualquer-lugar-da-aplicacao-zend-framework-1/ http://localhost:8080/acessar-dbadapter-ou-outra-resource-do-bootstrap-de-qualquer-lugar-da-aplicacao-zend-framework-1/#respond Tue, 30 Sep 2014 12:27:24 +0000 http://www.devhouse.com.br/?p=757 $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap'); $resource = $bootstrap->getPluginResource('db'); $adapter = $resource->getDbAdapter();

 

]]>
http://localhost:8080/acessar-dbadapter-ou-outra-resource-do-bootstrap-de-qualquer-lugar-da-aplicacao-zend-framework-1/feed/ 0
Habilitando Syntax Highlighting no Nano http://localhost:8080/habilitando-syntax-highlighting-no-nano/ http://localhost:8080/habilitando-syntax-highlighting-no-nano/#respond Mon, 29 Sep 2014 18:29:06 +0000 http://www.devhouse.com.br/?p=750 Estou desenvolvendo um software em PHP e testando algumas modificações direto no servidor. Para editar os arquivos php eu uso o nano (não me acostumei ao vi). Então senti falta de cores no código para facilitar a compreensão e tirar um pouco a monotonia do monocromático. E funciona via ssh!

Veja se os arquivos de highlight estão no diretório /usr/share/nano/

$ ls /usr/share/nano/
asm.nanorc     fortran.nanorc   man.nanorc     ocaml.nanorc   ruby.nanorc
awk.nanorc     gentoo.nanorc    mgp.nanorc     patch.nanorc   sh.nanorc
c.nanorc       groff.nanorc     mutt.nanorc    perl.nanorc    tcl.nanorc
cmake.nanorc   html.nanorc      nano-menu.xpm  php.nanorc     tex.nanorc
css.nanorc     java.nanorc      nanorc.nanorc  pov.nanorc     xml.nanorc
debian.nanorc  makefile.nanorc  objc.nanorc    python.nanorc

No meu caso todos os arquivos estavam lá exceto o php.nanorc. Justo o que eu precisava. Então peguei da net. Segue ele na íntegra:

## PHP Syntax Highlighting
syntax "php" "\.php[2345s~]?$"
color white start="<\?(php|=)?" end="\?>"
# Functions
color brightblue "([a-zA-Z0-9_-]*)\("
# Constructs
color brightblue "(class|extends|goto) ([a-zA-Z0-9_]*)"
color green "[^a-z0-9_-]{1}(var|class|function|echo|case|break|default|exit|switch|if|else|elseif|endif|foreach|endforeach|@|while|public|private|protected|return|true|false|null|TRUE|FALSE|NULL|const|static|extends|as|array|require|include|require_once|include_once|define|do|continue|declare|goto|print|in)[^a-z0-9_-]{1}"
color brightblue "[a-zA-Z0-9]+:"
# Variables
color white "\$[a-zA-Z_0-9$]*|[=!<>]"
color white "\->[a-zA-Z_0-9$]*|[=!<>]"
# Special Characters
color yellow "[.,{}();]"
color yellow "\["
color yellow "\]"
color yellow "[=][^>]"
# Numbers
color magenta "[+-]*([0-9]\.)*[0-9]+([eE][+-]?([0-9]\.)*[0-9])*"
color magenta "0x[0-9a-zA-Z]*"
# Special Variables
color brightblue "(\$this|parent::|self::|\$this-\>)"
# Bitwise Operations
color magenta "(\;|\||\^){1}"
# And/Or/SRO/etc
color green "(\;\;|\|\||::|=>|->)"
# Online Comments
color brightyellow "(#.*|//.*)$"
# STRINGS!
color red "('[^']*?')|(\"[^\"]*?\")"
# Inline Variables
color white "\{\$[^}]*\}"
# PHP Tags
color red "(<\?(php)?|\?>)"
# General HTML
color red start="\?>" end="<\?(php|=)?"
# trailing whitespace
color ,green "[^[:space:]]{1}[[:space:]]+$"
# multi-line comments
color brightyellow start="/\*" end="\*/"

Gravei o arquivo php.nanorc em uma pasta do meu usuario mesmo. Depois precisei criar um arquivo .nanorc e incluir o caminho para os arquivos de sintaxe:

$ nano ~/.nanorc
include /usr/share/nano/sh.nanorc
inclue ~/php.nanorc

E pronto, é só editar um arquivo php:

nano-syntax-highlight

Nano com Syntax Highlight

]]>
http://localhost:8080/habilitando-syntax-highlighting-no-nano/feed/ 0
Impedir que um Script PHP seja executado ao mesmo tempo no Cron http://localhost:8080/impedir-que-um-script-php-seja-executado-ao-mesmo-tempo-no-cron/ http://localhost:8080/impedir-que-um-script-php-seja-executado-ao-mesmo-tempo-no-cron/#respond Mon, 29 Sep 2014 18:11:53 +0000 http://www.devhouse.com.br/?p=748 Estou construindo um script de sincronia de banco de dados que deve rodar de 5 em 5 minutos na cron do linux. O problema é que ele pode acabar durando mais do que cinco minutos então pesquisando uma forma de evitar que o script seja executado novamente antes que o anterior termine encontrei a solução no link abaixo e coloco aqui com pequenas alterações:

http://abhinavsingh.com/blog/2009/12/how-to-use-locks-in-php-cron-jobs-to-avoid-cron-overlaps/

Crie um arquivo chamado CronHelper.php e adicione o código abaixo (eu coloquei na mesma pasta do meu script cron):

<?php
define('LOCK_DIR', __DIR__ . '/');
define('LOCK_SUFFIX', '.lock');

class CronHelper {
    private static $pid;

    function __construct() {
        
    }

    function __clone() {
        
    }

    private static function isrunning() {
        $pids = explode(PHP_EOL, `ps -e | awk '{print $1}'`);
        if (in_array(self::$pid, $pids)) {
            return TRUE;
        }
        return FALSE;
    }

    public static function lock() {
        global $argv;
        
        $path_parts = pathinfo($argv[0]);

        $lock_file = LOCK_DIR . $path_parts['basename'] . LOCK_SUFFIX;

        if (file_exists($lock_file)) {
            //return FALSE;
            // Is running?
            self::$pid = file_get_contents($lock_file);
            if (self::isrunning()) {
                error_log("==" . self::$pid . "== Já está em progresso...");
                return FALSE;
            } else {
                error_log("==" . self::$pid . "== O job anterior foi interrompido abruptamente...");
            }
        }

        self::$pid = getmypid();
        file_put_contents($lock_file, self::$pid);
        error_log("==" . self::$pid . "== Trava adquirida, processando o job...");
        return self::$pid;
    }

    public static function unlock() {
        global $argv;

        $lock_file = LOCK_DIR . $argv[0] . LOCK_SUFFIX;

        if (file_exists($lock_file)) {
            unlink($lock_file);
        }

        error_log("==" . self::$pid . "== Soltando a trava...");
        return TRUE;
    }

}

Para utilizado coloque todo o código do cron dentro do if:

<?php
require 'CronHelper.php';

if(($pid = cronHelper::lock()) !== FALSE) {
    /*
     * O código do seu cron job vai aqui!
     */

    cronHelper::unlock();
}

?>
]]>
http://localhost:8080/impedir-que-um-script-php-seja-executado-ao-mesmo-tempo-no-cron/feed/ 0
Enviando via GMail com PHPMailer http://localhost:8080/enviando-via-gmail-com-phpmailer/ http://localhost:8080/enviando-via-gmail-com-phpmailer/#respond Mon, 29 Sep 2014 17:30:08 +0000 http://www.devhouse.com.br/?p=742 A biblioteca PHPMailer é bem completa e de uso muito comum entre programadores PHP. Então a dica é como configurá-la para enviar emails usando o SMTP do GMail.

require_once 'PHPMailer/PHPMailerAutoload.php';
    
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587; 
$mail->Username = "envio@email.com.br";  
$mail->Password = "********";           
$mail->SetFrom("envio@email.com.br", "CronJob");
$mail->Subject = "Uma excecao ocorreu.";
$mail->Body = $text;
$mail->AddAddress($to);
if(!$mail->Send()) {
    echo 'Mail error: '.$mail->ErrorInfo; 
    return false;
} else {
    echo 'Message sent!';
    return true;
}
]]>
http://localhost:8080/enviando-via-gmail-com-phpmailer/feed/ 0
eXtplorer, um gerenciador de arquivos em PHP http://localhost:8080/extplorer-um-gerenciador-de-arquivos-em-php/ http://localhost:8080/extplorer-um-gerenciador-de-arquivos-em-php/#comments Sun, 03 Jun 2012 10:24:04 +0000 http://www.devhouse.com.br/?p=252 eXtplorer Logo

Muitas vezes é preciso fazer pequenas alterações em arquivos ou corrigir permissões e ter a possibilidade de fazer isso através do browser, sem ter que instalar e configurar um cliente ftp, é ótimo!

O eXtplorer é um ótimo gerenciador de arquivos escrito em PHP com frontend ajax criado usando o EXTJS*. Possui alguns bugs aqui e ali mas considerando que é gratuito não importa. Em falar nisso sua licensa pode ser tanto Mozilla Public License (MPL 1.1) ou GNU General Public License (GNU/GPL) com um pequeno detalhe: se você escolher distribuir um software, com o extplorer incluso, sob a MPL você não poderá incluir o ExtJS. Ou seja, terá que criar outra interface.

Deixando o papo chato de licensa de lado, suas principais características são:

  • Copiar e mover arquivos e diretórios usando Drag & Drop
  • Árvore de diretórios dinâmica com carregamento sob demanda de subdiretórios
  • Edição de arquivos (com destaque de sintaxe graças ao EditArea)
  • Renomear, apagar ou criar novos arquivos e diretórios
  • Acesso de arquivos usando FTP ou diretamente (PHP) para sobrepor problemas de permissão de arquivos
  • Upload e Download de arquivos
  • Compactação de Descompactação de arquivos (Zip, Tar, Tar/GZ, Tar/BZ)
  • Gerenciamento de usuários com diferentes níveis de permissão como “somente leitura”, “edição” e “admin”
  • Facil instalação

Eu uso o eXtplorer em sites Joomla a mais de cinco anos e desde então este software tem me ajudado muito em tarefas rápidas em arquivos de sites remotos. Inclusive o eXtplorer tem um plugin para o WordPress, chamado wp-eXtplorer, que a princípio serviria como um wrapper para o eXtplorer dentro do WordPress mas o mesmo não instalou na versão 3.3.2. O plugin nem completou a instalação e foi exibida a mensagem:

Fazendo o download do pacote de instalação de http://downloads.wordpress.org/plugin/wp-extplorer.zip...

Descompactando o pacote...

Instalando o plugin...

O pacote não pôde ser instalado. Nenhum plugin válido foi encontrado.

A instalação do plugin falhou.

Veja os screenshots abaixo:

Instalação do wp-eXtplorer

Erro na instalação do wp-eXtplorer

O plugin para o Joomla funciona bem pois é desenvolvido pelos próprios desenvolvedores do eXtplorer.

Alguns screenshots:


Formulario de Login

Login do Extplorer

Extplorer

Extplorer

menu de contexto

Menu de contexto

editor de texto

Editor de Texto

Compressão de Arquivo

Compressão de Arquivo


Instalação:


Conforme mencionado na lista de features do software ele possui 3 tipos de instalação. Vamos cobrir aqui apenas as instalações manual e com pacote Debian. Sendo que não aconselho a utilização do pacote debian pois o mesmo não tem necessidade e vem com o arquivo de usuários zerado. Acredito até que vem zerado pois o eXtplorer vem com o usuário admin e senha admin em hard code no arquivo .htusers.php o que representa uma falha de segurança para o sistema.
Inclusive é de extrema importância a troca da senha após o primeiro logon no eXtplorer.

Instalação Manual

  1. Faça o download do arquivo compactado neste link.
  2. Descompacte o arquivo no seu computador.
  3. Envie os arquivos via ftp para o seu servidor web ou copie na pasta /var/www local.
  4. Ajuste as permissões.
    • Caso o servidor seja remoto você precisa dar permissão de leitura e escrita para o usuario do apache na pasta extplorer/ftp_tmp. Por exemplo:
      $ chmod 777 ./explorer/ftp_tmp
    • Caso a instalação seja no seu servidor local de desenvolvimento você verá a seguinte mensagem ao tentar executar o software:
      Warning: require_once(/var/www/extplorer/libraries/standalone.php): failed to open stream: Permission denied in /var/www/extplorer/index.php on line 44 Fatal error: require_once(): Failed opening required '/var/www/extplorer/libraries/standalone.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/extplorer/index.php on line 44

      Para corrigir digite o seguinte comando no shell:

      $ sudo chown -R www-data /var/www/extplorer/
  5. Aponte o browser para http://<SERVIDOR>/extplorer e use login: admin e senha: admin.
    Troque a senha imediatamente!

Instalação via pacote Debian


Como disse anteriormente não recomendo esta instalação e estou colocando aqui apenas a título de curiosidade. Este teste foi feito no Linux Mint Debian Edition.

  1. Entre no shell e digite o seguinte comando:
    $ sudo apt-get update
    $ sudo apt-get install extplorer
  2. Após o download e a instalação será preciso recriar o conteúdo do arquivo .htusers.php que se encontra no diretório /etc/extplorer.
    $ cd /etc/extplorer
    $ sudo nano .htusers.php

    O arquivo está vazio, portanto insira o seguinte código que foi extraido da versão 2.1.0 RC 5 em 03/06/2012.

    <?php
    /** @version $Id: .htusers.php 135 2009-01-27 21:57:15Z ryu_ms $ */
    /** ensure this file is being included by a parent file */
    if( !defined( '_JEXEC' ) && !defined( '_VALID_MOS' ) ) die( 'Restricted access' );
    
    $GLOBALS["users"]=array(
    array("admin","21232f297a57a5a743894a0e4a801fc3",empty($_SERVER['DOCUMENT_ROOT'])?realpath(dirname(__FILE__).'/..'):$_SERVER['DOCUMENT_ROOT'],"",1,"",7,1),
    ); ?>
  3. Por último crie um link simbólico para o eXtplorer dentro do diretório do www do apache:
    sudo ln -s /usr/share/extplorer/ extplorer
  4. Aponte o browser para http://<SERVIDOR>/extplorer e use login: admin e senha: admin.
    Troque a senha imediatamente!


É isso pessoal!

* EXTJS é uma ótima framework para criação de aplicativos ricos para internet (RIA). Uma boa opção de substituição ao Adobe Flex. Já desenvolvi algumas aplicações usando EXTJS e recomendo!

]]>
http://localhost:8080/extplorer-um-gerenciador-de-arquivos-em-php/feed/ 12