Ir para conteúdo

Arquivado

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

Thiago Moraes

Definir caminho dos arquivos

Recommended Posts

Tenho o arquivo config.php em que gostaria de definir variaveis com o caminho de arquivos/diretórios para usar nas funções do site, mas não estou tendo sucesso.

 

Como posso definir o caminho absoluto para o arquivo/diretório, para poder usar em qualquer função, seja para redirecionar com header(), carregar um xml, fazer upload de arquivos etc?

 

Grato pela ajuda desde já

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para funções de filesystem, pode usar o script abaixo para definir um root:

ini_set('include_path',
    implode(
        PATH_SEPARATOR, 
        array_merge(
            array(dirname( __FILE__ )),
            explode(PATH_SEPARATOR , ini_get('include_path'))
        ) 
    )
);

Todos os filepaths serão baseados à partir desse root. Normalmente é adicionado ao arquivo index.php.

Como por exemplo:

/www/public_html/config/config.php
/www/public_html/config/require.php
/www/public_html/index.php //aqui foi adicionado o código acima de include.

- No index, eu irei incluir o require.php;
- No require.php eu irei incluir o config.php

Os códigos ficariam assim:
/www/public_html/index.php

<?php
ini_set('include_path',
    implode(
        PATH_SEPARATOR, 
        array_merge(
            array(dirname( __FILE__ )),
            explode(PATH_SEPARATOR , ini_get('include_path'))
        ) 
    )
);

include_once('config/require.php');

Já no config.php:

/www/public_html/config/require.php

<?php

include('config/config.php');

Já, para o que se refere a URL (redirect, caminhos no HTML: javascript, css, imagem), você terá que possuir uma variável ou classe. O tipo de informação e disponibilidade vai depender dos escopos, os quais, você gostaria de utilizar a informação.

 

Se formos pensar em constantes:

<?php

define('CANONICAL_PATH' , 'http://www.site.com.br/');

Quando for utilizar, basta chamar a constante CANONICAL_PATH.

 

Ou, crie um repositório de configuração e adicione um ponto de acesso global pra ele (Singleton, Registry). Entretanto, com Singleton, você fica preso a uma única configuração, sem poder mudar entre, por exemplo, produção, homologação, desenvolvimento.

 

O que eu recomendo é um gerenciador parametrizável para as configurações, pois, normalmente são obtidas de fontes externas (.ini, .xml, database, outro arquivo php, etc...). Adicione ela no Registry. Use-a e seja feliz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar achar a opção mais simples dessas que vc passou pois sou feijão com arroz no PHP :D

 

Eu tenho uma função que faz upload de imagens, mas ela só salva quando eu defino o diretório a partir da pasta que é executado o script..não teria uma forma bem simplificada de fazer com que salve usando o caminho completo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar uma configuração global do root path, poderá fazer exatamente como o exemplo do CANONICAL_PATH. É a mesma lógica.

 

Por outro lado, se você usar o primeiro script, de include, o move_uploaded_file vai seguir a mesma lógica do include/require (todas as funções baseadas em filesystem vão seguir essa lógica).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi...qual a diferença de usar define ou setar uma variavel tipo:

$url = 'http://www.site.com.br/';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por causa do escopo. Uma variável é pertencente a um escopo, ela não existirá em outro.

 

Se toda a sua programação for no escopo global, não tem problema algum. Mas no momento que mudar, ela não existirá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Gabriel,

Gostei da sua dica, entendi a lógica que usou na função ini_set() porém não entendi como aplicar isso por exemplo para link de css. Quando defino uma constante HOME no meu config.ini para linkar um css uso desta forma:

<link rel="stylesheet" href="<?= HOME ?>/Library/font-awesome/css/font-awesome.min.css">
Agora com a sua lógica não entendi muito bem como fazer.

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu tentei explicar, é que são coisas distintas. Uma é o file system e file path. Que é usado apenas no PHP (include, require, streams, etc..). Outra, bem diferente, são as URIs (URL é um tipo de URI). Que nesse caso são usadas para carregar CSS, JavaScript, Images, etc... Ou seja, tudo o que o HTML acessa é baseado em URI.

O modo que você utiliza é o mesmo que eu indiquei no final com o nome CANONICAL_PATH.

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.