script print directorio current actual __file__ php

print - php get current script folder



Obtener el directorio base del script actual (10)

Cuando estaba implementando algunas de estas respuestas, encontré algunos problemas mientras utilizaba IIS y también quería una URL completa con el protocolo. PHP_SELF lugar de REQUEST_URI como dirname(''/do/'') da ''/'' (o ''/' ) en Windows, cuando quiere que ''/do/'' sea ​​devuelto.

if (empty($_SERVER[''HTTPS'']) || $_SERVER[''HTTPS''] === ''off'') { $protocol = ''http://''; } else { $protocol = ''https://''; } $base_url = $protocol . $_SERVER[''SERVER_NAME''] . dirname($_SERVER[''PHP_SELF'']);

Esta es la url de mi script: localhost/do/index.php

Quiero una variable o una función que devuelva localhost/do (algo como $_SERVER[''SERVER_NAME''].''/do'' )


Mi sugerencia:

const DELIMITER_URL = ''/''; $urlTop = explode(DELIMITER_URL, trim(input_filter(INPUT_SERVER,''REQUEST_URI''), DELIMITER_URL))[0]

Prueba:

const DELIMITER_URL = ''/''; $testURL = "/top-dir"; var_dump(explode(DELIMITER_URL, trim($testURL, DELIMITER_URL))[0]); $testURL = "/top-dir/"; var_dump(explode(DELIMITER_URL, trim($testURL, DELIMITER_URL))[0]); $testURL = "/top-dir/test"; var_dump(explode(DELIMITER_URL, trim($testURL, DELIMITER_URL))[0]); $testURL = "/top-dir/test/"; var_dump(explode(DELIMITER_URL, trim($testURL, DELIMITER_URL))[0]); $testURL = "/top-dir/test/this.html"; var_dump(explode(DELIMITER_URL, trim($testURL, DELIMITER_URL))[0]); $testURL = "/top-dir/test.html"; var_dump(explode(DELIMITER_URL, trim($testURL, DELIMITER_URL))[0]);

Salida de prueba:

string(7) "top-dir" string(7) "top-dir" string(7) "top-dir" string(7) "top-dir" string(7) "top-dir" string(7) "top-dir"


Si desea incluir el nombre del servidor, tal como lo entendí, entonces los siguientes fragmentos de código deberían hacer lo que solicita:

$result = $_SERVER[''SERVER_NAME''] . dirname(__FILE__); $result = $_SERVER[''SERVER_NAME''] . __DIR__; // PHP 5.3 $result = $_SERVER[''SERVER_NAME''] . ''/'' . dirname($_SERVER[''REQUEST_URI'']);


Sugiero no usar dirname() . Tuve varios problemas con múltiples barras y resultados inesperados en absoluto. Esa fue la razón por la que creé currentdir ():

function currentdir($url) { // note: anything without a scheme ("example.com", "example.com:80/", etc.) is a folder // remove query (protection against "?url=http://example.com/") if ($first_query = strpos($url, ''?'')) $url = substr($url, 0, $first_query); // remove fragment (protection against "#http://example.com/") if ($first_fragment = strpos($url, ''#'')) $url = substr($url, 0, $first_fragment); // folder only $last_slash = strrpos($url, ''/''); if (!$last_slash) { return ''/''; } // add ending slash to "http://example.com" if (($first_colon = strpos($url, ''://'')) !== false && $first_colon + 2 == $last_slash) { return $url . ''/''; } return substr($url, 0, $last_slash + 1); }

Por qué no debes usar dirname ()

Supongamos que tiene image.jpg ubicado en images/ y tiene el siguiente código:

<img src="<?php echo $url; ?>../image.jpg" />

Ahora asuma que $url podría contener diferentes valores:

  • http://example.com/index.php
  • http://example.com/images/
  • http://example.com/images//
  • http://example.com/
  • etc.

Independientemente de lo que contenga, necesitamos el directorio actual para producir un enlace de trabajo. Intenta dirname() y enfrentas los siguientes problemas:

1.) Diferentes resultados para archivos y directorios.

Archivo
dirname(''http://example.com/images/index.php'') devuelve http://example.com/images

Directorio
dirname(''http://example.com/images/'') devuelve http://example.com

Pero no hay problema. Podríamos cubrir esto por un truco:
dirname(''http://example.com/images/'' . ''&'') . ''/'' dirname(''http://example.com/images/'' . ''&'') . ''/'' devuelve http://example.com/images/

Ahora dirname() devuelve en ambos casos el directorio actual necesario. Pero tendremos otros problemas:

2.) Se eliminarán algunas barras múltiples
dirname(''http://example.com//images//index.php'') devuelve http://example.com//images

Por supuesto, esta URL no está bien formada, pero se producen varias barras diagonales y debemos actuar como navegadores, ya que los webmasters los usan para verificar su salida. Y tal vez se pregunte, pero las tres primeras imágenes del siguiente ejemplo están cargadas.

<img src="http://example.com/images//../image.jpg" /> <img src="http://example.com/images//image.jpg" /> <img src="http://example.com/images/image.jpg" /> <img src="http://example.com/images/../image.jpg" />

Esa es la razón por la que debe mantener múltiples barras diagonales. Como dirname() elimina solo algunas barras diagonales, abrí un ticket de error .

3.) La URL raíz no devuelve el directorio raíz
dirname(''http://example.com'') devuelve http:
dirname(''http://example.com/'') devuelve http:

4.) El directorio raíz devuelve la ruta relativa
dirname(''foo/bar'') devuelve .

Yo esperaría.

5.) URL codificadas incorrectas
dirname(''foo/bar?url=http://example.com'') devuelve foo/bar?url=http:

Todos los resultados de la prueba:
http://www.programmierer-forum.de/aktuelles-verzeichnis-alternative-zu-dirname-t350590.htm#4329444


Tratar:

$url = $_SERVER[''REQUEST_URI'']; //returns the current URL $parts = explode(''/'',$url); print_r($parts);

EDITAR:

$url = $_SERVER[''REQUEST_URI'']; //returns the current URL $parts = explode(''/'',$url); $dir = $_SERVER[''SERVER_NAME'']; for ($i = 0; $i < count($parts) - 1; $i++) { $dir .= $parts[$i] . "/"; } echo $dir;

Esto debería devolver localhost/do/


Una solución más corta (y correcta) que mantiene una barra diagonal:

$url = $_SERVER[''REQUEST_SCHEME''] . ''://'' . $_SERVER[''HTTP_HOST''] . $_SERVER[''REQUEST_URI'']; $url_dir = preg_replace(''/[^//]+/.php(/?.*)?$/i'', '''', $url); echo $url_dir;


la mejor manera es usar la función explotar / implosionar (PHP incorporado) como tal

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $parts = explode(''/'',$actual_link); $parts[count($parts) - 1] = ""; $actual_link = implode(''/'',$parts); echo $actual_link;


php tiene muchas funciones para el análisis de cadenas que se pueden realizar con fragmentos de una línea simples
dirname () (que pediste) y parse_url () (que necesitas) están entre ellos

<?php echo "Request uri is: ".$_SERVER[''REQUEST_URI'']; echo "<br>"; $curdir = dirname($_SERVER[''REQUEST_URI''])."/"; echo "Current dir is: ".$curdir; echo "<br>";

barra de direcciones en el navegador es

http://localhost/do/index.php

la salida es

Request uri is: /do/index.php Current dir is: /do/


dirname te dará la parte del directorio de una ruta de archivo. Por ejemplo:

echo dirname(''/path/to/file.txt''); // Outputs "/path/to"

Obtener la URL del script actual es un poco más complicado, pero $_SERVER[''REQUEST_URI''] le devolverá la parte después del nombre de dominio (es decir, le dará "/do/index.php").


$_SERVER[''SERVER_NAME''] . dirname($_SERVER[''REQUEST_URI'']);