Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]URI z pominięciem ścieżki do aplikacji
czychacz
post
Post #1





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




print_r($_SERVER);
tam masz to czego szukasz
Go to the top of the page
+Quote Post
czychacz
post
Post #3





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Obawiam się, że tam nie znajdę tego, czego szukam (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pokaz co zwraca ci ten print_r i powiedz czego z tej sciezki nie chcesz bo nadal nie kumam
Go to the top of the page
+Quote Post
Puszy
post
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Ustaw vhosta?
Go to the top of the page
+Quote Post
czychacz
post
Post #6





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Tomplus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 883
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Może o taką funkcję Ci chodzi?

  1. basename($_SERVER['DOCUMENT_ROOT]);
Go to the top of the page
+Quote Post
czychacz
post
Post #8





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A dirname(__DIR__)?
Go to the top of the page
+Quote Post
TotalnyLajkonik
post
Post #10





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.04.2015

Ostrzeżenie: (0%)
-----


Nie kumam, jakim cudem mając DOCUMENT_ROOT ustawiony na c:\htdocs\f dostajesz się przez http://localhost/f/ przecież powinno wystarczyć http://localhost/.
Go to the top of the page
+Quote Post
czychacz
post
Post #11





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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 :/

Ten post edytował czychacz 18.10.2016, 08:45:01
Go to the top of the page
+Quote Post
TotalnyLajkonik
post
Post #12





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.04.2015

Ostrzeżenie: (0%)
-----


W _SERVER[PHP_SELF] wszystko od index.php to Twoje parametry.
Go to the top of the page
+Quote Post
czychacz
post
Post #13





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 23:34