Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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á
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?
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).
Entendi...qual a diferença de usar define ou setar uma variavel tipo:
$url = 'http://www.site.com.br/';
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á.
Entendi...consegui fazer aqui. muito obrigado pela ajuda
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.
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.
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.
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'))
)
)
Já no config.php:
/www/public_html/config/require.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:
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.