Ontem estava aplicando algumas ideias encontrada no excelente Super Awesome Advanced CakePHP Tips e me deparei com um erro que ocorria na minha aplicação.
PROBLEMA:
Ao tentar usar a função file_exists do PHP dentro do arquivo config/bootstrap.php para incluir um outro arquivo do mesmo diretório sempre recebia como resposta o valor FALSE
SOLUÇÃO:
Descobri que ao usar o file_exists o PHP estava tomando como diretório corrente o webroot/ e não o diretório do bootstrap.php (arquivo atual), então tive de acrescentar o prefixo ‘../config/’ para encontrar o arquivo que procurava.
Após usar o file_exists, iria dar um include no arquivo, neste caso o comportamento é diferente: ele considera o diretório corrente como sendo o diretório do arquivo que está chamando a função ( no meu caso o config/), portanto não é preciso adicionar prefixo nenhum.
Ainda não consegui descobrir o motivo desses dois comportamentos no mesmo ambiente, porém imagino que o comportamento do file_exists está ligado ao arquivo .htaccess do CakePHP que seta para o Apache o diretório webroot/ como sendo a raiz do domínio.
Se souber a resposta deixe-a no comentário que eu atualizo o post.
Até a próxima.
———————————–
Atualizando conforme combinado – 27/01/2010
———————————–
O Társis deu uma boa dica para evitar esse tipo de problema: utilizar as constantes do CakePHP, no caso da dica do post, a constante utilizada seria CONFIGS, ela contém o caminho completo para o diretório /config.
A chamada da função ficaria assim:
if( file_exists(CONFIGS . 'arquivo.php') ) include( CONFIGS . 'arquivo.php');
Além da constante CONFIGS temos algumas outras, como a WWW_ROOT e IMAGES que seguem o mesmo princípio, mas para apontar o caminho completo do diretório /webroot e /webroot/img respectivamente.
Veja a lista completa de constantes em http://book.cakephp.org/view/122/Core-Definition-Constants
2 respostas em “Dica rápida”
Meu caro,
É verdade, o .htaccess define qual será a raiz da aplicação. No entanto, acho que o que você deseja é na verdade constante CONFIGS.
No próprio arquivo bootstrap.php, faça o seguinte: echo CONFIGS;
Valeu Társis, essa é uma saída melhor =]
Mas ainda quero entender porque o file_exists tem comportamento alterado pelo .htaccess enquanto o include continua operando normalmente.
Abraço.