Colocar os ficheiros PHP fora do directório de publicação

Alguns casos nos que colocar ficheiros fora do directório de publicação faz sentido.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 26/7/04
Valorize este artigo:
O primeiro que temos de assinalar é que tudo o que pusermos fora do directório de publicação não poderá ser acedido através do navegador. Isto é, se criamos um directório que se chame funcoes_php ao mesmo nível que o directório de publicação (fora do directório de publicação) não poderemos aceder com o explorador aos ficheiros que coloquemos dentro de nenhuma maneira. Isto é assim porque a URL de inicio do nosso alojamento corresponde com esse directório e não podemos mover-nos para baixo nesse directório com as URLs, que são a maneira de especificar ao navegador os recursos aos que se quere aceder.

Referência: Já se explicou o que era o directório de publicação no capítulo anterior sobre Subir ficheiros PHP ao servidor.

Não seria possível sair do directório de publicação com uma URL como esta, por muito que utilizemos o operador .. (que serve para aceder ao directório pai).

http://www.meudominio.com/../funcoes_php/ficheiro_inalcancavel.php

De todos modos, colocar alguns ficheiros fora do directório de publicação pode ser muito útil. Por exemplo, poderíamos colocar ali copias de segurança de alguns ficheiros ou documentos que simplesmente queremos guardar no servidor para aceder a eles desde qualquer parte e com o nosso programa de FTP.

Há outra utilidade mais interessante sobre colocar ficheiros fora do directório de publicação. Muitas vezes utilizamos nos nossos programas bocados de código repetidamente, por exemplo, para abrir e fechar bases de dados, para mostrar o cabeçalho do nosso portal, para verificar que um e-mail escrito num formulário é correcto, etc. É muito útil separar estes bocados de código num ficheiro à parte e chamar este ficheiro com as funções PHP include() ou require(). Deste modo, se um dia modificamos o cabeçalho do nosso portal, só temos que modificar um ficheiro ou se muda a base de dados que utilizamos só teríamos que modificar o ficheiro que faz a ligação à base de dados em vez de ir alterando todas as páginas PHP que faziam uma apertura da base de dados.

Estes ficheiros não são páginas independentes, mas sim fragmentos. Provavelmente se os executamos por separado não mostrariam nenhum resultado válido, inclusive poderiam dar mensagens de erro. Por esta razão vale a pena coloca-los num lugar onde ninguém pudesse ter acesso: fora do directório de publicação. Com PHP poderemos aceder a este directório para incluir estes ficheiros. Somente deveríamos utilizar as funções PHP include() ou require() indicando o path para aceder aos ficheiros.

No caso de ter uma página chamada ola.php no directório de publicação e um ficheiro, que chama abre_base_dados.php, no directório funcoes_php, que está fora do directório de publicação, se quiséssemos aceder (desde ola.php) ao ficheiro que abre a base de dados fazíamo-lo da seguinte maneira:

include("../funcoes_php/abre_base_dados.php")

Desde PHP sim podemos aceder aos ficheiros que se encontram fora do directório de publicação. Para isso especificamos o path adequado, na que utilizamos o operador .. para descer ao directório pai.

Não há nada mais a dizer sobre a colocação dos ficheiros: uma vez situados no directório de publicação poderá-se aceder aos ficheiros com o nosso navegador e deveria-se poder executar perfeitamente. Temos de ter em conta que, tanto PHP como o servidor onde trabalhamos, podem ter configurações diferentes e pode que algum detalhe de programação das nossas páginas não funcione correctamente.

Por exemplo, o nosso PHP pode declarar ou não automaticamente as variáveis que chegam através dum formulário. Se em local estava configurado para fazer isso e em remoto não, deveríamos localizar os lugares onde recolhemos as variáveis e utilizar as variáveis correctas (ver artigo sobre Processar variáveis em formulários e os comentários para saber mais sobre esta possível fonte de erros).

Mesmo não sendo um caso habitual, podemos nos por em contacto com o nosso provedor de alojamento para ver se pode ajudar-nos com a configuração do sistema ou se pode indicar-nos os passos a seguir para resolver o assunto nos nossos scripts.

Comentário: O seguinte script calcula o nível de directório dos scripts que queremos incluir na página actual.

// Achamos o nível do directório onde se encontra a página
1. Contamos os caracteres que contem o nome do script actual.
-
$Chars = count_chars($PHP_SELF,1);
-
2. Exploramos a tabela dos caracteres retornados procurando o carácter ('/' Código 47 ) de directório (pasta) que retorna Apache.
-
foreach ($Chars as $Char=>$nChars){
   if ($Char==47) {$n=$nChars;break;}
}
-
3. Geramos uma cadeia de n-1 vezes com a subcadeia "../" que nos da o nível de directório no que se encontra o script.
-
if ($n==0)
   $PathString="";
else
   $PathString=str_pad("",($n-1)*3,"../");






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato