Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]URI z pominięciem ścieżki do aplikacji
Forum PHP.pl > Forum > Przedszkole
czychacz
Poniższy kod zwraca mi
/param1/val1/param2/val2/param3/param4/z
dla url
http://localhost/f/param1/val1/param2/val2/param3///param4/z
gdzie DOCUMENT_ROOT to
c:\htdocs\f
  1. $documentRoot = $_SERVER['DOCUMENT_ROOT'];
  2. $documentRootPath = explode('/', $documentRoot);
  3.  
  4. $dir = explode(DIRECTORY_SEPARATOR, __DIR__);
  5. array_pop($dir);
  6.  
  7. do {
  8. $l = array_shift($documentRootPath);
  9. $r = array_shift($dir);
  10. } while ($l === $r && (count($documentRootPath) > 0) || (count($dir) > 0));
  11.  
  12. if (empty($r) === false) {
  13. $dir = array_merge([$r], $dir);
  14. }
  15.  
  16. $requestURI = $_SERVER['REQUEST_URI'];
  17. $requestURIExpl = array_filter(explode('/', $requestURI), function ($val) {
  18. return empty($val) === false;
  19. });
  20.  
  21. do {
  22. $l = array_shift($requestURIExpl);
  23. $r = array_shift($dir);
  24. } while ($l === $r && (count($requestURIExpl) > 0 || empty($l) === false));
  25. if (empty($l) === false) {
  26. $requestURIExpl = array_merge([$l], $requestURIExpl);
  27. }
  28.  
  29. return '/' . implode('/', $requestURIExpl);


Pomijam problem z tym, że nie zwraca mi dwóch parametrów, które są puste.
Czy da się to zapisać krócej, bez używania takiego kolosa? Chodzi o to, żeby zwrócony URI pozbawiony był początkowej ścieżki do katalogu aplikacji.
nospor
print_r($_SERVER);
tam masz to czego szukasz
czychacz
Obawiam się, że tam nie znajdę tego, czego szukam tongue.gif
Wydumpowałem sobie właśnie $_SERVER i tam są ścieżki, ale każda posiada nazwę katalogu, a ja potrzebuję kodu, który wytnie mi tą nazwę katalogu.
nospor
Pokaz co zwraca ci ten print_r i powiedz czego z tej sciezki nie chcesz bo nadal nie kumam
Puszy
Ustaw vhosta?
czychacz
Cytat(nospor @ 7.10.2016, 12:54:25 ) *
Pokaz co zwraca ci ten print_r i powiedz czego z tej sciezki nie chcesz bo nadal nie kumam

  1. (
  2. [MIBDIRS] => C:/xampp/php/extras/mibs
  3. [MYSQL_HOME] => \xampp\mysql\bin
  4. [OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
  5. [PHP_PEAR_SYSCONF_DIR] => \xampp\php
  6. [PHPRC] => \xampp\php
  7. [TMP] => \xampp\tmp
  8. [HTTP_HOST] => localhost
  9. [HTTP_CONNECTION] => keep-alive
  10. [HTTP_CACHE_CONTROL] => max-age=0
  11. [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
  12. [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
  13. [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  14.   [HTTP_ACCEPT_ENCODING] => gzip, deflate, sdch
  15.   [HTTP_ACCEPT_LANGUAGE] => pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
  16.   [PATH] => C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\Sy
    stem32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\xampp\php;C:\ProgramData\ComposerSetup\bin;C:\Progra
    m Files\Git\cmd;
  17.   [SystemRoot] => C:\Windows
  18.   [COMSPEC] => C:\Windows\system32\cmd.exe
  19.   [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  20.   [WINDIR] => C:\Windows
  21.   [SERVER_SIGNATURE] =>
  22. Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9 Server at localhost Port 80
  23.  
  24.  
  25.   [SERVER_SOFTWARE] => Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9
  26.   [SERVER_NAME] => localhost
  27.   [SERVER_ADDR] => ::1
  28.   [SERVER_PORT] => 80
  29.   [REMOTE_ADDR] => ::1
  30.   [DOCUMENT_ROOT] => C:/xampp/htdocs
  31.   [REQUEST_SCHEME] => http
  32.   [CONTEXT_PREFIX] =>
  33.   [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
  34.   [SERVER_ADMIN] => postmaster@localhost
  35.   [SCRIPT_FILENAME] => C:/xampp/htdocs/redbox/index.php
  36.   [REMOTE_PORT] => 62886
  37.   [GATEWAY_INTERFACE] => CGI/1.1
  38.   [SERVER_PROTOCOL] => HTTP/1.1
  39.   [REQUEST_METHOD] => GET
  40.   [QUERY_STRING] =>
  41.   [REQUEST_URI] => /redbox/
  42.   [SCRIPT_NAME] => /redbox/index.php
  43.   [PHP_SELF] => /redbox/index.php
  44.   [REQUEST_TIME_FLOAT] => 1476724893.845
  45.   [REQUEST_TIME] => 1476724893
  46. )


A potrzebuję zwrotki w stylu:
  1. /


Pominąłem parametry, bo i tak chodzi mi o basedir
Tomplus
Może o taką funkcję Ci chodzi?

  1. basename($_SERVER['DOCUMENT_ROOT]);
czychacz
Cytat(Tomplus @ 17.10.2016, 20:50:45 ) *
Może o taką funkcję Ci chodzi?

  1. basename($_SERVER['DOCUMENT_ROOT]);

to mi zwraca
  1. string(6) "htdocs"
viking
A dirname(__DIR__)?
TotalnyLajkonik
Nie kumam, jakim cudem mając DOCUMENT_ROOT ustawiony na c:\htdocs\f dostajesz się przez http://localhost/f/ przecież powinno wystarczyć http://localhost/.
czychacz
Cytat(czychacz @ 17.10.2016, 19:23:57 ) *
  1. (
  2. [MIBDIRS] => C:/xampp/php/extras/mibs
  3. [MYSQL_HOME] => \xampp\mysql\bin
  4. [OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
  5. [PHP_PEAR_SYSCONF_DIR] => \xampp\php
  6. [PHPRC] => \xampp\php
  7. [TMP] => \xampp\tmp
  8. [HTTP_HOST] => localhost
  9. [HTTP_CONNECTION] => keep-alive
  10. [HTTP_CACHE_CONTROL] => max-age=0
  11. [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
  12. [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
  13. [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  14.   [HTTP_ACCEPT_ENCODING] => gzip, deflate, sdch
  15.   [HTTP_ACCEPT_LANGUAGE] => pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
  16.   [PATH] => C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\Sy
    stem32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\xampp\php;C:\ProgramData\ComposerSetup\bin;C:\Progra
    m Files\Git\cmd;
  17.   [SystemRoot] => C:\Windows
  18.   [COMSPEC] => C:\Windows\system32\cmd.exe
  19.   [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  20.   [WINDIR] => C:\Windows
  21.   [SERVER_SIGNATURE] =>
  22. Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9 Server at localhost Port 80
  23.  
  24.  
  25.   [SERVER_SOFTWARE] => Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9
  26.   [SERVER_NAME] => localhost
  27.   [SERVER_ADDR] => ::1
  28.   [SERVER_PORT] => 80
  29.   [REMOTE_ADDR] => ::1
  30.   [DOCUMENT_ROOT] => C:/xampp/htdocs
  31.   [REQUEST_SCHEME] => http
  32.   [CONTEXT_PREFIX] =>
  33.   [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
  34.   [SERVER_ADMIN] => postmaster@localhost
  35.   [SCRIPT_FILENAME] => C:/xampp/htdocs/redbox/index.php
  36.   [REMOTE_PORT] => 62886
  37.   [GATEWAY_INTERFACE] => CGI/1.1
  38.   [SERVER_PROTOCOL] => HTTP/1.1
  39.   [REQUEST_METHOD] => GET
  40.   [QUERY_STRING] =>
  41.   [REQUEST_URI] => /redbox/
  42.   [SCRIPT_NAME] => /redbox/index.php
  43.   [PHP_SELF] => /redbox/index.php
  44.   [REQUEST_TIME_FLOAT] => 1476724893.845
  45.   [REQUEST_TIME] => 1476724893
  46. )


A potrzebuję zwrotki w stylu:
  1. /


Pominąłem parametry, bo i tak chodzi mi o basedir


Zwrotka:
  1. /

dotyczy przypadku bez parametrów. Chodzi o to, że jeśli na hoscie mam adres http://www.test.org/app/, to potrzebuję tylko '/'. Jeśli coś za tym slashem się pojawi, chcę traktować to jako parametry.

//edit: @up: w zrzucie z $_SERVER jest info, że document root nie jest ustawione na podkatalog - źle się wyraziłem - to był katalog aplikacji. teraz jest to /redbox/ - miałem awarię dysków i wszystko stawiałem od nowa :/
TotalnyLajkonik
W _SERVER[PHP_SELF] wszystko od index.php to Twoje parametry.
czychacz
Cytat(TotalnyLajkonik @ 18.10.2016, 10:18:59 ) *
W _SERVER[PHP_SELF] wszystko od index.php to Twoje parametry.


dla
  1. http://localhost/redbox/param1/value1/param2/value2/param3//param4

PHP_SELF przyjmuje wartość:
  1. /redbox/index.php

więc to na pewno nie to.

nie odbiegajmy od tematu. chcę w najprostszy sposób pozbyć się ścieżki do aplikacji z url/uri i przetworzyć wszystko poza nią.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.