Wow, que bien funcionar DIR

xcodex

Gamma
Verificación en dos pasos desactivada
Desde
8 Feb 2019
Mensajes
233
Crédito(s)
0
Puntos
660
Hola, hace años que vengo complicandome la vida y veo que es todo tan simple como aprender a usar la constante __DIR__
Esta nunca da problemas, ¿cierto?.
¿O quizás sirva mas utilizar $_SERVER['DOCUMENT_ROOT'] ya que siempre devuelve el mismo directorio?.

Viendo ahora, y para mi sorpresa, no se puede utilziar __DIR__ en un link.
 
Última edición:

osqar

Beta
Programador
Verificación en dos pasos desactivada
Desde
10 Nov 2015
Mensajes
129
Crédito(s)
1
Puntos
29
Que seria que no podes usarla en un link?. Por supuesto que si haces "hola__DIR__chau" ese dir no te va a expandir porque como sabe el interprete si que es un literal o que es una variable pero si la usas como "hola".__DIR__."chau" si te funciona. No se si te referis a eso.
 

xcodex

Gamma
Verificación en dos pasos desactivada
Desde
8 Feb 2019
Mensajes
233
Crédito(s)
0
Puntos
660
Que seria que no podes usarla en un link?. Por supuesto que si haces "hola__DIR__chau" ese dir no te va a expandir porque como sabe el interprete si que es un literal o que es una variable pero si la usas como "hola".__DIR__."chau" si te funciona. No se si te referis a eso.
Me refiero a en un haref, al momento de colocar el link:
PHP:
<script src="<?php echo $_SERVER['DOCUMENT_ROOT'].'/js/usuario.js';?>"></script>
no me funciona.

Lo raro es que en un script 100% php si funciona.
 
Última edición:

Stron

Épsilon
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
11 Oct 2015
Mensajes
930
Crédito(s)
1
Puntos
163
Me refiero a en un haref, al momento de colocar el link:
PHP:
<script src="<?php echo $_SERVER['DOCUMENT_ROOT'].'/js/usuario.js';?>"></script>
no me funciona.

Lo raro es que en un script 100% php si funciona.

No entiendo por que usar document root o dir en los enlaces, con solo agregar las rutas asi deberia funcionar.

<script src="/js/usuario.js"></script>[
incluso creo que podrias hacer uso de http_host,
HTML:
<script src="<?php echo $_SERVER["HTTP_HOST"] ?>/js/usuario.js"></script>
 

kj2

Iota
Verificación en dos pasos activada
Desde
1 Abr 2011
Mensajes
2.054
Crédito(s)
1
Puntos
821
No es que no se pueda usar, es que lo estás usando mal.

__DIR__ Te dará una ruta absoluta desde la raíz del server hasta el directorio del archivo PHP (no es lo mismo que $_SERVER['DOCUMENT_ROOT']).

Lo que tu esas intentando es generar una URL de ruta absoluta en el dominio, por lo que debes considerar que la raíz de la ruta aquí no inicia el la raíz del server, inicia en la raíz de tu dominio.

PD: El código que te coloca Henry00jj95 solo te funcionará si el script lo tienes instalado en la raíz del dominio, si lo instalas en una subcarpeta el código te fallará.

kj
 
Última edición:

xcodex

Gamma
Verificación en dos pasos desactivada
Desde
8 Feb 2019
Mensajes
233
Crédito(s)
0
Puntos
660
¿Cual sería entonces la mejor manera de permitir que un usuario cambie la URL en una variable o constante en lugar de cambiarla cada vez que hace referencia a ella?.
 

kj2

Iota
Verificación en dos pasos activada
Desde
1 Abr 2011
Mensajes
2.054
Crédito(s)
1
Puntos
821
¿Cual sería entonces la mejor manera de permitir que un usuario cambie la URL en una variable o constante en lugar de cambiarla cada vez que hace referencia a ella?.
No hay una sola manera de hacer las cosas y siempre puede ser A mejor que B según las circunstancia.

Wordpress por ej., guarda en la base de datos (y permite definir lo también por una constante) la ruta de instalación, aunque cabe mencionar que el instalador la detecta la ruta automáticamente.

Si lo haces usando una constante, por lo general se la suele definir el el archivo de configuración o en uno que inicialice todo, luego como se hace, es otra cosa, pero por ej. suponiendo que el archivo en cuestión está en la raíz de la instalación del script (no confundir con raíz del dominio, ni raíz del server), una posible solución sería esta:

PHP:
define('SCRIPT_ROOT', '://'.$_SERVER["HTTP_HOST"].str_replace($_SERVER['DOCUMENT_ROOT'],'/', __DIR__.'/'));
Nótese que en ese código he colocado "://" para usar el protocolo de manera relativa (así daigual si usa http o https), pero igual puedes hacer que lo detecte y agregue de esta manera:

PHP:
define('SCRIPT_ROOT',
       (empty($_SERVER['HTTPS']) ? 'http': 'https')
       .'://'.$_SERVER["HTTP_HOST"].
       str_replace($_SERVER['DOCUMENT_ROOT'],'/', __DIR__.'/'));
A cada problema, lo mejor siempre es comprender bien lo que usas, comprender bien el problema y luego buscar la solución (resolución logaritmos, lo primero que llevas en la Universidad), ya que picar código y aprender a tropezones, si bien consigue que a la larga se aprenda, no deja de ser menos óptimo a la larga (ojo, a la larga, porque a la corta en lo personal considero que tiene ciertos beneficios, sobre todo cuando uno recién comienza).

PD: Si hay algo que no comprendes de un código pregunta, el copy/paste siempre cobra su peaje.

kj
 
Última edición:

xcodex

Gamma
Verificación en dos pasos desactivada
Desde
8 Feb 2019
Mensajes
233
Crédito(s)
0
Puntos
660
No hay una sola manera de hacer las cosas y siempre puede ser A mejor que B según las circunstancia.

Wordpress por ej., guarda en la base de datos (y permite definir lo también por una constante) la ruta de instalación, aunque cabe mencionar que el instalador la detecta la ruta automáticamente.

Si lo haces usando una constante, por lo general se la suele definir el el archivo de configuración o en uno que inicialice todo, luego como se hace, es otra cosa, pero por ej. suponiendo que el archivo en cuestión está en la raíz de la instalación del script (no confundir con raíz del dominio, ni raíz del server), una posible solución sería esta:

PHP:
define('SCRIPT_ROOT', '://'.$_SERVER["HTTP_HOST"].str_replace($_SERVER['DOCUMENT_ROOT'],'/', __DIR__.'/'));
Nótese que en ese código he colocado "://" para usar el protocolo de manera relativa (así daigual si usa http o https), pero igual puedes hacer que lo detecte y agregue de esta manera:

PHP:
define('SCRIPT_ROOT',
       (empty($_SERVER['HTTPS']) ? 'http': 'https')
       .'://'.$_SERVER["HTTP_HOST"].
       str_replace($_SERVER['DOCUMENT_ROOT'],'/', __DIR__.'/'));
A cada problema, lo mejor siempre es comprender bien lo que usas, comprender bien el problema y luego buscar la solución (resolución logaritmos, lo primero que llevas en la Universidad), ya que picar código y aprender a tropezones, si bien consigue que a la larga se aprenda, no deja de ser menos óptimo a la larga (ojo, a la larga, porque a la corta en lo personal considero que tiene ciertos beneficios, sobre todo cuando uno recién comienza).

PD: Si hay algo que no comprendes de un código pregunta, el copy/paste siempre cobra su peaje.

kj
Muchas gracias.
Ya tengo las cosas algo mas claras. :cool:
 

Andres128

Iota
Programador
Verificación en dos pasos activada
Desde
17 Feb 2012
Mensajes
2.254
Crédito(s)
1
Puntos
1.990
jajaj yo me lié bastante con este tema casi no logro comprenderlo a la final decidí para los enlaces, así:

define('SITIO_WEB', 'https://misitio.com');
define('SLASH', '/');

Ya el resto lo llamo donde lo necesito específicamente para enlaces, estilos y otros, pero todo depende del caso por ejemplo:

PHP:
echo '<a href="'. SITIO_WEB . SLASH .'">Test</a>'
Bueno todo es según el caso yo lo solucione así puede que no sea la mejor manera pero bueno lo necesitaba de esa manera.
 

Arriba