(41) 9225-6319
contato@felipemarques.com.br
27
jan

Alternativa para parse_ini_file com Zend Framework 1.12

Eu tive um sério problema para hospedar minha aplicação Zend Framework 1.12 que fiz recentemente para um de meus clientes.
A RedeHost possui um plano de hospedagem com uma péssima configuração para quem deseja rodar aplicações PHP. Pra começar a extensão parse_ini_file não está habilitada, o que fez com que eu escrevesse minha própria função para fazer o parse do arquivo de configuração da aplicação. Outro problema que encontrei foi a maldita restrição open_base_dir, do qual não permitia nem ao menos acessar a pasta root do meu próprio usuário, vou dar uma exemplo:

O document root da minha conta era:
E:\Domains\nome_do_meu_site.com.br\wwwroot\

Ou seja, eu poderia no maximo acessar:
E:\Domains\nome_do_meu_site.com.br\

Ok, como a própria arquitetura do Zend Framework permite, para aumentar a segurança dos arquivos de nossa aplicação, devemos deixar apenas a pasta com arquivos públicos acessível e dentro da wwwroot\.

Substitua a função no arquivo Library\Zend\Config\Ini.php.

/**
     * Load the INI file from disk using parse_ini_file(). Use a private error
     * handler to convert any loading errors into a Zend_Config_Exception
     *
     * @param string $filename
     * @throws Zend_Config_Exception
     * @return array
     */
    protected function _parseIniFile($filename)
    {
        set_error_handler(array($this, '_loadFileErrorHandler'));
        
		$fileContents = file_get_contents( $filename );

		// read lines
		$lines = explode("\n",$fileContents);
		
		$arrayConfig = array();
		$sectionName = "";
		$isItemArray = false;
		
		foreach($lines as $line){
		
			// filter the line
			$line = trim($line);
		
			// remove blank lines
			if(trim($line) == '' || preg_replace('/\s+/','',$line) == '') continue;
			
			// remove comments
			if(preg_match('/^[\;]/ismx',$line)) continue;
		
			// is section?
			if(preg_match('/^(\[(.*?)\])/ismx',$line)){
				$sectionName = str_replace(array('[',']'),'',$line);
				continue;
			}

			$keyValue = explode("=",$line);
			$key = trim($keyValue[0]);
			$value = trim($keyValue[1]);
			
			// verify if key is an array
			if(preg_match('/\[\]$/',$key)){
				$key = str_replace(array('[',']'),'',$key);
				$isItemArray = true;
			}else{
				$isItemArray = false;
			}
			
			// extract constants for $value
			$arrayValue = explode('"',$value);
			if(isset($arrayValue[0]) && isset($arrayValue[1])){
			
				$arrayValue[0] = trim($arrayValue[0]);
				$arrayValue[1] = trim($arrayValue[1]);
				
				if(defined($arrayValue[0]) && constant($arrayValue[0]) != null){
					$arrayValue[0] = constant($arrayValue[0]);
				}

				if(defined($arrayValue[1]) && constant($arrayValue[1]) != null){
					$arrayValue[1] = constant($arrayValue[1]);
				}
							
				$value = implode("",$arrayValue);
			}
			
			// assing the key and value on the array config
			if($isItemArray === true){
				$arrayConfig[$sectionName][$key][] = $value;
			}else{
				$arrayConfig[$sectionName][$key] = $value;
			}
		}
		
		$iniArray = $arrayConfig;
		//$iniArray = parse_ini_file($filename, true); // Warnings and errors are suppressed
       
		restore_error_handler();

        // Check if there was a error while loading file
        if ($this->_loadFileErrorStr !== null) {
            /**
             * @see Zend_Config_Exception
             */
            require_once 'Zend/Config/Exception.php';
            throw new Zend_Config_Exception($this->_loadFileErrorStr);
        }

        return $iniArray;
    }
	

O arquivo de configuração .ini que usei como exemplo foi, conforme abaixo:

[production]

	;; display errors config
	phpSettings.display_startup_errors = 0
	phpSettings.display_errors = 0
	resources.frontController.params.displayExceptions = 0
	
	includePaths.library = APPLICATION_PATH "/../library"
	
	bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
	bootstrap.class = "Bootstrap"
	appnamespace = "Application"
	
	;; Adiciona a library App que gerencia a view e layout
	autoloadernamespaces[] = "App"
	autoloadernamespaces[] = "App_"
	
	;; Bootstrap session resources
	resources.session.save_path = APPLICATION_ROOT "/data/sessions"
	resources.session.use_only_cookies = true
	resources.session.remember_me_seconds = 864000	
		
	;; Configuração do locale
	resources.locale.default = "pt_BR"
    resources.locale.force   = true
	
	;; Configurações do View
	resources.view.basePath        = APP_APPLICATION "/modules/default/views/"
    resources.view.doctype         = "XHTML1_STRICT"
    resources.view.contentLanguage = "en"
    resources.view.robots          = "noindex,nofollow"
    resources.view.encoding        = "UTF-8"
    resources.view.contentType     = "text/html; charset=UTF-8"
    resources.view.title 		   = "MeuSaber.com.br - Cursos Online"
	
	resources.modules[] = "admin"
	resources.modules[] = "default"
	resources.modules[] = "painel-entregas"
	
	;; CONTROLADOR FRONTAL
	resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/default/controllers"
	resources.frontController.defaultControllerName = "index"
	resources.frontController.defaultAction = "index"
	resources.frontController.defaultModule = "default"
	resources.frontController.params.displayExceptions = 0
	resources.frontController.params.prefixDefaultModule = "1"
	resources.frontController.baseUrl = "/www"
	resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
	
	;; LAYOUT
	resources.layout.layoutPath = APPLICATION_PATH "/modules/default/layouts/scripts/"
	
	
	;; BANCO DE DADOS
	resources.db.adapter = PDO_MYSQL
	resources.db.params.host = "mysql.felipemarques.com.br"
	resources.db.params.dbname = "felipemarques21"
	resources.db.params.username = "felipemarques21"
	resources.db.params.password = "t7g9y6"
	resources.db.params.port = 3306
	resources.db.isDefaultTableAdapter = true
	resources.db.params.charset = utf8
	resources.db.params.driver_options.1002 = "SET NAMES utf8"		
	
	resources.multidb.db1.adapter = PDO_MYSQL
	resources.multidb.db1.host = "host"
	resources.multidb.db1.username = "xxx"
	resources.multidb.db1.password = "xxx"
	resources.multidb.db1.dbname = "xxx"
	resources.multidb.db1.charset= "utf8"	
	
[staging : production]

[testing : production]
	phpSettings.display_startup_errors = 1
	phpSettings.display_errors = 1

[development : production]
	phpSettings.display_startup_errors = 1
	phpSettings.display_errors = 1
	resources.frontController.params.displayExceptions = 1
	
	resources.frontController.baseUrl = "/"
	
	;; BANCO DE DADOS
	resources.db.adapter = PDO_MYSQL
	resources.db.params.dbname = "irmaosabage_new"
	resources.db.params.username = "root"
	resources.db.params.password = ""
	resources.db.params.host = "localhost"
	resources.db.params.port = 3306
	resources.db.isDefaultTableAdapter = true
	resources.db.params.charset = utf8
	resources.db.params.driver_options.1002 = "SET NAMES utf8"		

	resources.multidb.db1.adapter = PDO_MYSQL
	resources.multidb.db1.host = "localhost"
	resources.multidb.db1.username = "root"
	resources.multidb.db1.password = ""
	resources.multidb.db1.dbname = "irmaosabage_new"
	resources.multidb.db1.charset= "utf8"
22
jan

Consultor de Suporte e Tecnologia – Dynamo

freela-dynamo

Consultor de Suporte e Tecnologia na Dynamo

Principais Atividades

Trabalho como Consultor de Suporte e Tecnologia para Dynamo Publicidade Online desde 2010. Dentre  as principais atividades que são exercidas por mim, estão:

  • Consultoria na Análise e Desenvolvimento de Sistemas e Ferramentas internas para a empresa utilizando PHP, Zend Framework, MySQL, jQuery, jQuery UI, Android.
  • Criação de Ferramentas e Sistemas de B.I (Business Inteligence).
  • Integração das plataformas, ferramentas e sistemas com as Ferramentas do Google Adwords, Google Adsense, Google Drive, Google Mail, dentre outras.
  • Implementação e Customização do software Vtiger para Controle de Relacionamento com os Clientes.
  • Implementação e Customização do software OsTicket para Controle de Chamados Técnicos.

Informações para Contato

(51)4063-8525 - Porto Alegre - RS - Brasil

zend-tool-passo-1
04
set

Configurando Zend Tool no Eclipse

Olá pessoal,Watch Full Movie Online Streaming Online and Download

Na empresa onde trabalho atualmente, escolhemos o Zend Framework como ferramenta principal para o desenvolmento dos projetos, e acabamos por encontrar uma certa dificuldade em encontrar tutoriais de como configurar o Zend Tool no Eclipse. Só para constar, que este tutorial é focado para usuários do Windows.

Configurar variáveis de ambiente do Sistema Operacional (Windows)

PATH = ;D:\xampp\php\;D:\ZendFramework-1.12.0\bin\

Telas de Configuração do Zend Tool no Eclipse

#gallery-7 {
margin: auto;
}
#gallery-7 .gallery-item {
float: left;
margin-top: 10px;
text-align: center;
width: 25%;
}
#gallery-7 img {
border: 2px solid #cfcfcf;
}
#gallery-7 .gallery-caption {
margin-left: 0;
}
/* see gallery_shortcode() in wp-includes/media.php */

Utilizando o Zend Tool

utilizando-zend-tool-eclipse

utilizando-zend-tool-eclipse

utilizando-zend-tool-eclipse-2

utilizando-zend-tool-eclipse-2

Vídeo Auxliar

Fontes:

http://blog.flashgen.com/php-development/adding-zend-tool-as-an-external-command-in-eclipse/
http://gtivideoaulas.com/introducao-ao-zend-framework-com-zend-tool
http://blog.madarco.net/263/using-zend_tool-in-eclipse/ 

Facebook Auto Publish Powered By : XYZScripts.com