Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Freitas Nobrega

[Resolvido] Url raiz

Recommended Posts

Pessoal Boa Noite!

Tenho a seguinte dúvida:

 

define( 'PATH_ROOT', dirname(__FILE__) );

O PATH_ROOT me exibe a saída: D:\webmaster\gemak

 

já o código:

$_SERVER['SERVER_NAME'];

Gera a saída: localhost

 

e:

$_SERVER['PHP_SELF'];

Gera a saída: gemak/index.php

 

Segue um exemplo:

Se o arquivo (pagina.php) estiver no directório: D:\webmaster\gemak\gemak2\gemak3 a url raiz deveria ser localhost\gemak\gemak2\gemak3.

 

A pergunta é: Existe alguma variável pré-definida ou alguma função em php que me forneça isso diretamente? Ou preciso utilizar expressões regulares (ereg) e concatenação entre FILE_SERVER e PHP_SELF?

 

Obs: Tentei parse_url(), mas obtive o mesmo de PHP_SELF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Andrey! Obrigado pelo post's, mas não é bem isso que preciso.

Seguinte, o que preciso é o caminho raiz até o arquivo mas em formato http -> http://localhost/pasta1/pasta2/pasta3

 

O caminho absolute físico D:\webmaster\pasta1\pasta2\pasta3 esta tudo certo, mas tenho que encontrar o mesmo através de URL para incluir no parâmetro src das minhas tags img. Se eu utilizar src="D:\webmaster\pasta1\pasta2\pasta3\images\qualquerimagem.jpg" não carrega a mesma. Preciso de src="http://localhost/pasta1/pasta2/pasta3/images/qualquerimagem.jpg".

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza , javascript ..

 

<script>
alert(window.location.href);
</script>

:lol:

 

cara , se não me falha a memoria .. da pra fazer isso com $_SERVER ..

achei interesante a pergunta e resolvi testar , cheguei a seguinte conclusão

<?php
if(!empty($_SERVER['HTTPS']))
{
   $url = "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ;
} else { 
   $url =  "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
}
echo $url;
?>

 

Minha saida foi

 

https://meu site/teste/teste.php

 

o HTTPS , eu usei porque tenho conexção SSL ( https:// )

mais , ele pega a do HTTP normal :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então amigo para exibir essa saída que postou bastava utilizar:

 

parse_url( $_SERVER['HTTP_REFERER'] );

 

ou simplesmente

 

 $_SERVER['HTTP_REFERER'] 

 

de qualquer forma HTTP_REFERER não é confiável! Porém o que desejo realizar é essa saída (utilizando seu exemplo):

 

https://meu site/teste/

 

Mas realizar isso através de PHP e se possível através de uma função nativa, caso exista. Essa é a dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a URL, eliminando apenas o arquivo (index.php ou pagina.php) caso tenha.

 

<?php
var_dump( $_SERVER[ 'REQUEST_URI' ] );

 

Se quiser remover o index.php, basta utilizar dirname()

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, mas desse jeito ele não vai ter uma URL e sim um path.

 

Eu trabalho dessa forma:

 

/**
* Get Base URL
* Base URL is the union of: HTTP Scheme (HTTP, HTTPS, FTP...), HTTP Host and Base Path
*
* @return  string
*/
public function getBaseUrl() {

   $parts   = parse_url( $this -> getRequestUri() );

   $scheme  = ( isset( $parts['scheme'] ) ? $parts['scheme'] : self::SCHEME_HTTP );

   return sprintf( '%s://%s/%s', $scheme, $_SERVER['HTTP_HOST'], $this -> basepath );
}

A saber, getRequestUri() é um método de tratamento sobre $_SERVER['REQUEST_URI'] e a propriedade basepath, por padrão é, é o basename do diretório onde o index.php está, já que toda requisição é direcionada para ele.

 

SCHEME_HTTP é uma constante com o valor http.

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, mas desse jeito ele não vai ter uma URL e sim um path.

 

Sim, justamente o path q ele precisa.

 

Com isso, basta que ele montar o restante:

 

<?php
$burl = sprintf( 'http%s://%s%s' , isset( $_SERVER[ 'HTTPS' ] ) ? 's' : null , $_SERVER[ 'HTTP_HOST' ] , dirname( $_SERVER[ 'REQUEST_URI' ] ) );

var_dump( $burl );

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, mas desse jeito ele não vai ter uma URL e sim um path.

 

Sim, justamente o path q ele precisa.

 

Com isso, basta que ele montar o restante:

 

<?php
$burl = sprintf( 'http%s://%s%s' , isset( $_SERVER[ 'HTTPS' ] ) ? 's' : null , $_SERVER[ 'HTTP_HOST' ] , dirname( $_SERVER[ 'REQUEST_URI' ] ) );

var_dump( $burl );

 

beleza João deu certo! Quando acessado http://localhost/gemak/index.php'>http://localhost/gemak/index.php o retorno é http://localhost/gemak. Mas quando acesso http://localhost/gemak/ o retorno é http://localhost\ e gostaria que fosse http://localhost/gemak/. Saberia me dizer o pq acontece isso, sendo que o arquivo acessado continua sendo index.php nos dois casos??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz uma verificação se o endereço aponta para um arquivo ou para uma pasta.

Se for um arquivo, pega o nome da pasta dele com o dirname, se não, retorna o endereço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz uma verificação se o endereço aponta para um arquivo ou para uma pasta.

Se for um arquivo, pega o nome da pasta dele com o dirname, se não, retorna o endereço.

 

Poderia me dar um exemplo???

Compartilhar este post


Link para o post
Compartilhar em outros sites

estava acompanhando este tópico desde o início

 

não poderia fazer isso apenas no html usando caminho relativo ou absoluto ?

 

 

apontará para o diretório raíz do site

/path1/path2/imagems.gif

ficaria assim

http:// localhost/path1/path2/imagems.gif

 

 

sem a barra no inicio, apontará para o diretório corrente como raíz

path1/path2/imagems.gif

ficaria assim

http:// localhost/folder_de_onde_estah_o_html/path1/path2/imagems.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

estava acompanhando este tópico desde o início

 

não poderia fazer isso apenas no html usando caminho relativo ou absoluto ?

 

 

apontará para o diretório raíz do site

/path1/path2/imagems.gif

ficaria assim

http:// localhost/path1/path2/imagems.gif

 

 

sem a barra no inicio, apontará para o diretório corrente como raíz

path1/path2/imagems.gif

ficaria assim

http:// localhost/folder_de_onde_estah_o_html/path1/path2/imagems.gif

 

O sistema é todo dinâmico. A idéia é não mexer no html, pois poderá estar em vários endereços/directorios diferentes, seria inviável alterar todos os scripts a mão para dar funcionalidade. Por isso, o próprio script deve-se localizar dentro dos directórios e criar suas próprios PATHs e URLs de acesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não há necessidade em fazer dessa forma, independente do sistema ser "dinâmico" ou não.

 

basta definir por exemplo, uma constante contendo o caminho da url base, outro para o dominio, outro para indicar se está em http ou https e o restante é apenas obter o caminho relativo da imagem e fazer a concatenação.

 

outra questão,

pense também, que por ventura, o sistema tenha que utilizar as imagens num host diferente, por motivos de volume de tráfego.

 

enfim, tudo bem a forma como quer fazer.. há meios e meios, conselhos e conselhos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não há necessidade em fazer dessa forma, independente do sistema ser "dinâmico" ou não.

 

basta definir por exemplo, uma constante contendo o caminho da url base, outro para o dominio, outro para indicar se está em http ou https e o restante é apenas obter o caminho relativo da imagem e fazer a concatenação.

 

outra questão,

pense também, que por ventura, o sistema tenha que utilizar as imagens num host diferente, por motivos de volume de tráfego.

 

enfim, tudo bem a forma como quer fazer.. há meios e meios, conselhos e conselhos.

 

Desculpe hinom, poderia dar um exemplo, não estou conseguindo entender sua linha de raciocínio. Agradeço e obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou desconectando agora, portando tentarei explicar de forma prática, breve e simples

 

<?php

/*
supondo que a url seja: http://localhost/site

a nomenclatura abaixo é apenas exemplo
*/
define( 'URL_PROTOCOL', 'http://' );
define( 'URL_BASE', 'localhost/' );
define( 'URL_FOLDER', 'site/' );
define( 'PUBLIC_IMAGES_FOLDER', 'images/' );

function foo( $path ){
   return URL_PROTOCOL . URL_BASE . URL_FOLDER . PUBLIC_IMAGES_FOLDER . $path;
}
?>

<img src="<?php echo foo( 'news/2011/03/64565556756.jpg' );?>">
<br /><img src="<?php echo foo( 'news/2011/03/64565556454.jpg' );?>">

 

 

A idéia é reduzir processamento desnecessário e tornar os templates flexíveis e portáteis.

Do modo como está pretendendo fazer, é funcional, mas cria uma redundância de processos, além de cair no problema da falta de flexibilidade.

Se os paths base serão sempre os mesmos, defina-os como constantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou desconectando agora, portando tentarei explicar de forma prática, breve e simples

 

<?php

/*
supondo que a url seja: http://localhost/site

a nomenclatura abaixo é apenas exemplo
*/
define( 'URL_PROTOCOL', 'http://' );
define( 'URL_BASE', 'localhost/' );
define( 'URL_FOLDER', 'site/' );
define( 'PUBLIC_IMAGES_FOLDER', 'images/' );

function foo( $path ){
   return URL_PROTOCOL . URL_BASE . URL_FOLDER . PUBLIC_IMAGES_FOLDER . $path;
}
?>

<img src="<?php echo foo( 'news/2011/03/64565556756.jpg' );?>">
<br /><img src="<?php echo foo( 'news/2011/03/64565556454.jpg' );?>">

 

 

A idéia é reduzir processamento desnecessário e tornar os templates flexíveis e portáteis.

Do modo como está pretendendo fazer, é funcional, mas cria uma redundância de processos, além de cair no problema da falta de flexibilidade.

Se os paths base serão sempre os mesmos, defina-os como constantes.

 

O problema esta neste trecho aqui:

define( 'URL_FOLDER', 'site/' ); 

 

Pois não sei qual será. Poderá ser qualquer nome!

Por isso estou tentando fazer dinâmico, pois indiferente da pasta que esteja o sistema funcionará corretamente sem ter que alterar nenhuma linha no código. Acredito que daria certo se o sistema possuir uma tela de instalação, onde fosse criado um arquivo config com as constantes, mas não gostaria de fazer isso, já que se o usuário alterasse o nome da pasta no servidor teria que abrir o arquivo de configuração e alterar o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, vou dar uma dica, assim como eu uso hoje...

 

public function getUrl(){
    return $this->root = "sua URL raiz";
}

 

quando voce chamar ela, é só dar um

 

<?php echo $suaVariavel->getUrl() ?>

 

Abrçs

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.