Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Francispansa

[Resolvido] Trabalhar com Zend Framework no mesmo nível da pasta

Recommended Posts

Pessoal, desenvolvi meu primeiro projeto com o Zend Framework.

Consegui desenvolver ele normalmente localmente, mas quando coloquei ele no ar deixei somente os arquivos da pasta public dentro da pasta www ou public_html, e o restante deixei no mesmo nivel da public_html, ou seja

 

-application

-library

-public_html

---css

---imagens

---js

---index.php

 

Após isso configurei os caminhos certinho e me retorna o seguinte erro.:

 

Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'parse_ini_file(/configs/application.ini) [<a href='function.parse-ini-file'>function.parse-ini-file</a>]: failed to open stream: No such file or directory'

 

Eu sei que o erro está falando que não consegue encontrar o arquivo application.ini, já tentei praticamente todos os tipos de caminhos, então minha pergunta é a seguinte.

 

Eu preciso fazer alguma configuração ou ativar algum módulo do PHP para poder acessar as pastas que estão abaixo do diretório public_html?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o seu arquivo index.php está errado. Poste o conteúdo dele, pois a forma que você colocou é a forma correta e indicada, não sendo necessário nenhuma configuração especial no PHP.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conteúdo da index.php

 

<?php

// Define path to application directory
defined('APPLICATION_PATH')
   || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '../../application'));

// Define application environment
defined('APPLICATION_ENV')
   || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'desenvolvimento'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
   realpath(APPLICATION_PATH . '../../library'),
   get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
   APPLICATION_ENV,
   APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
           ->run();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está voltando um diretório a mais na hora de definir o APPLICATION_PATH e na hora de incluir a pasta library no include_path.

 

// Define path to application directory
defined('APPLICATION_PATH')
   || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
   realpath(APPLICATION_PATH . '/../library'),
   get_include_path(),
)));

 

Deve funcionar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é claro amigo.

 

Não foi possível encontrar o arquivo .INI que está usando. Como o path dele depende do path definido na constante APPLICATION_PATH, quem está errada é ela.

 

Com o que você disse, deu a entender que a árvore da aplicação está um diretório acima do normal recomendado pelos tutoriais afora, sendo assim, posso imaginar que você deva retirar UM ../ do path dessa constante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está voltando um diretório a mais na hora de definir o APPLICATION_PATH e na hora de incluir a pasta library no include_path.

 

// Define path to application directory
defined('APPLICATION_PATH')
   || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
   realpath(APPLICATION_PATH . '/../library'),
   get_include_path(),
)));

 

Deve funcionar.

 

Carlos Eduardo

 

Ai o erro que me é apresentado é o seguinte:

 

Warning: require_once(Zend/Application.php) [function.require-once]: failed to open stream: No such file or directory in..
Fatal error: require_once() [function.require]: Failed opening required 'Zend/Application.php' (include_path=':.:/usr/share/pear') ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você copiou a pasta do Zend para dentro da pasta library? Se copiou, confira se o nome da pasta raiz do Zend está como Zend mesmo e se o arquivo Application.php existe nela, pois o PHP não está encontrando este arquivo para incluir.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você copiou a pasta do Zend para dentro da pasta library? Se copiou, confira se o nome da pasta raiz do Zend está como Zend mesmo e se o arquivo Application.php existe nela, pois o PHP não está encontrando este arquivo para incluir.

 

Sim, o arquivo está certinho lá (library > Zend > Application.php).

Por isso que achava que tinha que configurar mais alguma coisa, porque não estava conseguindo acessar tanto a pasta Zend quando a Config que contem o application.ini

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias e Bruno, obrigado pela força. Consegui resolver colocando o caminho absoluto no meu index.php, acredito que não tenha problemas pra aplicação não é?

 

Só não sei o porque com o

realpath(dirname(__FILE__) . '../application'));
realpath(dirname(__FILE__) . '../library'));
// e com
realpath(dirname(__FILE__) . '/../application'));
realpath(dirname(__FILE__) . '/../library'));

 

Eu não consegui acessar as pastas, quando conseguia acessar uma dava erro na outra, bom de qualquer forma muito obrigado pela ajuda.

 

Abrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas é o recomendado, você usar caminhos absolutos, daí é menos trabalho pro servidor transformar o relativo em absoluto e depois dar o include...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uhn... acho que sei o que.

 

(include_path=':.:/usr/share/pear')

 

Veja que, pelo menos ao que parece, ele não setou o include_path corretamente. Parece que o dirname, realpath ou o __FILE__ não está retornando o que deveria. Já vi isto acontecer uma vez, mas não lembro como contornei o problema.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com o mesmo problema! Joguei a aplicação no ar... vi varios tópicos pra isso mas nenhum bem explicadinho creio eu(ou não entendi eles)

 

minha aplicação ficou assim:

 

joguei tudo dentro do public_html, porém, tenho este arquivo .htacces:

 

RewriteEngine On 
RewriteRule ^\.htaccess$ - [F] 
RewriteCond %{REQUEST_URI} ="" 
RewriteRule ^.*$ /public/index.php [NC,L] 
RewriteCond %{REQUEST_URI} !^/public/.*$ 
RewriteRule ^(.*)$ /public/$1 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^public/.*$ /public/index.php [NC,L] 

 

que esta setando a pasta PUBLIC dentro de public_html como principal.

Quando acesso www.site.com.br caiu direto nesta PUBLIC

 

Dentro de public_html tem:

application

data

docs

library

public

tests

.htaccess

 

Dentro do public tem:

 

pasta-css

pasta-imagens

pasta-midias

pasta-scripts

.htacces

index.php

 

o conteudo do .htacces DENTRO de public é:

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

 

e do INDEX.PHP:

 

<?php

// Define path to application directory
defined('APPLICATION_PATH')
   || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
   || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
   realpath(APPLICATION_PATH . '/../library'),
   get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
   APPLICATION_ENV,
   APPLICATION_PATH . '../configs/application.ini'
);

$application->bootstrap()
           ->run();

 

E quando acesso a página recebo este erro:

 

Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'parse_ini_file(/home/ampolcom/public_html/application../configs/application.ini) [<a href='function.parse-ini-file'>function.parse-ini-file</a>]: failed to open stream: No such file or directory' in /home/ampolcom/public_html/library/Zend/Config/Ini.php:182 Stack trace: #0 /home/ampolcom/public_html/library/Zend/Config/Ini.php(202): Zend_Config_Ini->_parseIniFile('/home/ampolcom/...') #1 /home/ampolcom/public_html/library/Zend/Config/Ini.php(126): Zend_Config_Ini->_loadIniFile('/home/ampolcom/...') #2 /home/ampolcom/public_html/library/Zend/Application.php(386): Zend_Config_Ini->__construct('/home/ampolcom/...', 'production') #3 /home/ampolcom/public_html/library/Zend/Application.php(85): Zend_Application->_loadConfig('/home/ampolcom/...') #4 /home/ampolcom/public_html/public/index.php(24): Zend_Application->__construct('production', '/home/ampolcom/...') #5 {main} thrown in /home/ampolcom/public_html/library/Zend/Config/Ini.php on line 182

 

Eu ja joguei a pasta libery/Zend/........

 

Tentei de tudo antes de vir pedir ajuda novamente mas ta complicado...

 

Prentendo comprar esta semana ainda o curso de orientação a objetos que achei aqui na iMasters para ter uma visão diferente para desenvolver as aplicações.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar deser um erro básico de programação, nem sempre é tão fácil enxergar o motivo.

 

Coloque:

 

var_dump( APPLICATION_PATH, realpath(dirname(__FILE__) . '/../application') );

Logo abaixo do define() que cria essa constante.

 

Se você ver um FALSE veja o motivo de realpath() estar te retornando isso.

 

Se você vir um path que não reflita com a ierarquia de diretórios, corrija os pontos duplos.

 

OU, se já quiser resolver essa parada de uma vez, não use mais realpath() e trabalhe com caminhos absolutos.

 

Sua estrutura está um tanto quanto complicada. No passado usei o ZF e me lembro bem que não precise de tudo isso.

 

/
.htaccess
index.php
---- application
-------- admin
------------ controllers
------------ models
----------- views
-------- portal
------------ controllers
------------ models
------------ views
---- libraries
---- public
-------- css
-------- jscripts
-------- images

E nunca tive problemas.

 

Detalhe importante é que eu ajustava meu path para que o ZF ficasse FORA de libraries, assim um rebuild na IDE ficava mais rápido.

 

Tendo meu index.php no mesmo nível que o diretório application, bastava:

 

defined('APPLICATION_PATH')
   || define('APPLICATION_PATH', getcwd() . DIRECTORY_SEPARATOR . 'application' );

E mais nada. Veja se ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente a parte que o Bruno falou está correta, mas aqui você tem um erro:

 

$application = new Zend_Application(
   APPLICATION_ENV,
   APPLICATION_PATH . '../configs/application.ini'
);

A pasta configs está dentro da pasta application, certo? Se sim, este ../ não está correto. Remova o .. e tente executar novamente que deve funcionar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei de tudo aqui mas o erro continua...

 

com a linha que voce mandou eu colocar apareceu isto

 

string(38) "/home/ampolcom/public_html/application" string(38) "/home/ampolcom/public_html/application"

 

Creio que o caminho esta certo não? application den tro de public_html e public com o index.php

 

 

string(38) "/home/ampolcom/public_html/application" string(38) "/home/ampolcom/public_html/application"

Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'parse_ini_file(/home/ampolcom/public_html/applicationconfigs/application.ini) [<a href='function.parse-ini-file'>function.parse-ini-file</a>]: failed to open stream: No such file or directory' in /home/ampolcom/public_html/library/Zend/Config/Ini.php:182 Stack trace: #0 /home/ampolcom/public_html/library/Zend/Config/Ini.php(202): Zend_Config_Ini->_parseIniFile('/home/ampolcom/...') #1 /home/ampolcom/public_html/library/Zend/Config/Ini.php(126): Zend_Config_Ini->_loadIniFile('/home/ampolcom/...') #2 /home/ampolcom/public_html/library/Zend/Application.php(386): Zend_Config_Ini->__construct('/home/ampolcom/...', 'production') #3 /home/ampolcom/public_html/library/Zend/Application.php(85): Zend_Application->_loadConfig('/home/ampolcom/...') #4 /home/ampolcom/public_html/public/index.php(25): Zend_Application->__construct('production', '/home/ampolcom/...') #5 {main} thrown in /home/ampolcom/public_html/library/Zend/Config/Ini.php on line 182

 

Como é dificil publicar este tipo de aplicação ... se tudo der certo acho que vou montar um videotutorial .. assim matamos as pessoas que tem o mesmo problema que eu!

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você removeu o ../ e era para remover só o .., deixando a /. Deveria ficar assim:

 

$application = new Zend_Application(
   APPLICATION_ENV,
   APPLICATION_PATH . '/configs/application.ini'
);

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu tinha retirado ele também mas tudo ficou branco agora não deu erro em nada.... estou vendo meus controllers pra ver se tem algo aind apra configurar ... nem no codigo fonte da pagina nao aparece nada de nada...

 

usei o comando echo para printar algo e ele printou ... crio que aqui esta tudo ok.

 

Axo que é as configurações do meu INI ... vou testar aqui e ja digo se deu certo.

 

 

OBS: Matias, gostaria de conversar com você... moro em curitiba e tenho uma proposta pra te fazer. Se possivel voce aceitar meus contatos no talk ou msn.

 

Fica meus contatos:

 

luiz.fernando@ampol.com.br - MSN

 

luiz.lidio90@gmail.com - TALK

 

Ou se preferir posso ligar no seu telefone que esta no seu site para conversarmos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique a questão de exibição de mensagens de erro.

 

http://matiasrezende.com.br/blog/zend-framework/trabalhando-com-ambientes-no-application-ini-do-zend-framework/

 

Aqui tem um exemplo de como definir os ambientes, para que, durante os testes de implantação, você veja os erros do projeto.

 

Qualquer dúvida, poste novamente.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm mesmo trocando algumas coisas do meu ini não da erro nem nada ... não tem nenhume acão ...

 

este é meu ini

[publicado]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
includePaths.models = APPLICATION_PATH "/models"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layout"
resources.translate.data = APPLICATION_PATH "/../data/locales"
resources.translate.scan = "directory"
resources.locale.default = "pt_BR"
resources.locale.force = true

resources.db.adapter = PDO_MYSQL
resources.db.isDefaultTableAdapter = true
resources.db.params.host = "localhost"
resources.db.params.username = "usuariodobd"
resources.db.params.password = "minhasenhaaqui"
resources.db.params.dbname = "meubancodedadosaquitb"
resources.db.params.persistence = true
resources.db.params.charset = "utf8"

 

Meu index.php

 

<?php

// Define path to application directory
defined('APPLICATION_PATH')
   || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
   || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'publicado'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
   realpath(APPLICATION_PATH . '/../library'),
   get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
   APPLICATION_ENV,
   APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap()
           ->run();

 

e meu bootstrap

 

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoload()
{
	$autoloader = new Zend_Application_Module_Autoloader(array(
           'basePath' => APPLICATION_PATH,
           'namespace' => ''
   ));
   return $autoloader;

   	// Iniciando o autoloader para recuperar dados do banco
 		$loader = Zend_Loader_Autoloader::getInstance();
       $loader->setFallbackAutoloader(true);
}
}

 

 

Quando acesso o site não tem NADA.. ele fica todo branco oO mexendo nos diretorios do INI pra ver se da erro mas não tem resposta

 

axo que não ta chamando os controllers ou algo assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Habilite a exibição dos erros. Você pode fazer de 2 formas, mas vamos fazer direto no arquivo mesmo.

 

phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0

resources.frontController.params.displayExceptions = 0

Troque por:

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

resources.frontController.params.displayExceptions = 1

 

Execute novamente. Devem aparecer os erros que estão acontecendo. Modifique também seu Bootstrap.

 

protected function _initAutoload()
       {
               $autoloader = new Zend_Application_Module_Autoloader(array(
           'basePath' => APPLICATION_PATH,
           'namespace' => ''
   ));
   return $autoloader;

       // Iniciando o autoloader para recuperar dados do banco
               $loader = Zend_Loader_Autoloader::getInstance();
       $loader->setFallbackAutoloader(true);
       }

Ao dar um return $autoloader, nada do que está abaixo dele está sendo executado, já que você já fez o retorno do método. Coloque o loader antes do return.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.