සම්පූර්ණ URL එක PHP වලින් ලබා ගන්න


977

සම්පූර්ණ URL එක ලබා ගැනීමට මම මෙම කේතය භාවිතා කරමි:

$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

ගැටලුව වන්නේ මම මගේ වෙස් මුහුණු කිහිපයක් භාවිතා කිරීමයි .htaccess, එබැවින් අපි URL හි දකින දේ සෑම විටම ගොනුවේ සැබෑ මාර්ගය නොවේ.

මට අවශ්‍ය වන්නේ URL එක ලබා ගැනීමයි, URL හි ලියා ඇති දේ, ඊට වඩා වැඩි දෙයක් හා අඩු කිසිවක් නැත - සම්පූර්ණ URL ය.

වෙබ් බ්‍රව්සරයේ ඇති සංචාලන තීරුවේ එය දිස්වන ආකාරය මට ලබා ගැනීමට අවශ්‍යය, නමුත් සේවාදායකයේ ගොනුවේ සැබෑ මාර්ගය නොවේ.


24
බ්‍රේඩ් යූආර්එල් තීරුව පරිශීලක බ්‍රව්සරයේ ඇත, එබැවින් PHP ඒ සම්බන්ධයෙන් කිසියම් ක්‍රියාකාරීත්වයක් දක්වන්නේ ඇයි? PHP යනු සේවාදායක පැත්තයි.
eis

33
මාව විශ්වාස කරන්න, මෙය අවශ්‍ය වීමට ඕනෑ තරම් හේතු තිබේ. එකම අච්චුවක් භාවිතා කරන නමුත් වෙන වෙනම ලුහුබැඳිය යුතු පිටු ගොඩබෑම. යනාදිය සත්‍යය නම්, PHP (හෝ ඕනෑම සේවාදායක පාර්ශවීය භාෂාවක්) හට URL හි විවිධ කොටස් ආපසු ලබා දිය හැකි නමුත් කිසි විටෙකත් සම්පූර්ණ දේම එක පේළියකින් සපයන බවක් නොපෙනේ. . ඒක ගොළුයි වගේ.
බ්‍රේඩ්

12
එය කිසිසේත්ම සේවාදායක පාර්ශවයට යවනු නොලැබේ. එම බිඳුණු දේ මත රඳා පවතින ඕනෑම ක්‍රියාකාරීත්වයක් මම සලකමි. නමුත්, එය මගේ මතය පමණි.
eis

5
ස්වයං URL එකක අවශ්‍යතාවය සඳහා ඉහත මගේ උදාහරණය: PHP_SELF (මාර්ගය පමණි, සැන්ස් වසම ආදිය) ඒ සඳහා ප්‍රමාණවත් විය යුතු බැවින් “FORM ක්‍රියාකාරී URL පිරවීම” වැරදිය. නමුත් කැනොනිකල් ස්වයං URL සඳහා වන අනෙකුත් සියලුම අවශ්‍යතා අවලංගු බව එයින් අදහස් නොවේ. ඔවුන් සැබවින්ම එසේ නම්, ඒ මන්ද යන්න පිළිබඳ සවිස්තරාත්මක පැහැදිලි කිරීමක් දැකීම පුදුම සහගතය.
එස්.

4
වින්‍යාසය තුළ ඔබේ URL දෘඩ කේතනය නොකිරීමට එක් හේතුවක් වන්නේ ඔබේ ව්‍යාපෘතිය ස්ථාපනය කරන විවිධ වේදිකා ඇති විට (dev, Integration, production). ඒ සෑම එකක්ම ඔවුන්ගේ නිශ්චිත URL එකක් ඇති අතර, ඔබේ ව්‍යාපෘතිය ස්ථාපනය කර ඇති සේවාදායකය අනුව ඔබේ කේතය වෙනස් කිරීමට ඔබට අවශ්‍ය නැත.
ගුයිලූම් ෆේච්

Answers:


2101

බලන්න $_SERVER['REQUEST_URI'], එනම්

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

(ද්විත්ව උපුටා ගත් නූල් වාක්‍ය ඛණ්ඩය නිවැරදි බව සලකන්න )

ඔබට HTTP සහ HTTPS යන දෙකටම සහාය වීමට අවශ්‍ය නම්, ඔබට භාවිතා කළ හැකිය

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

සංස්කාරක සටහන: මෙම කේතය භාවිතා කිරීමෙන් ආරක්ෂක ඇඟවුම් ඇත. සේවාදායකයාට HTTP_HOST සහ REQUEST_URI අවශ්‍ය ඕනෑම අත්තනෝමතික අගයකට සැකසිය හැකිය.


136
ඔබ https සබැඳියක සිටී නම් කුමක් කළ යුතුද? HTTP_HOST ලබා ගත නොහැකි නම් හෝ සේවාදායකයාගේ පැත්තෙන් අවුල් වී ඇත්නම් කුමක් කළ යුතුද? මෙම පිළිතුර අසම්පූර්ණ හා විශ්වාස කළ නොහැකි බව පෙනේ.
මනචි

21
ඔබට ඒ පිළිබඳව බොහෝ දේ කළ නොහැකි අතර, අසන ලද ප්‍රශ්නය සඳහා සුදුසුම ක්‍රමය මෙයයි.
Mfoo

185
ඔබට HTTPS හි චෙක්පත එක් කළ හැකිය:'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
ivkremer

7
ඔබ URL එක බ්‍රව්සරයකට සබැඳියක් ලෙස ප්‍රතිදානය කරන්නේ නම්, http: off තබන්න. බලන්න: stackoverflow.com/questions/4978235
GameCharmer

6
@ax. ඔයා හිතනවද ඔයාට මට වඩා ටිකක් වැඩියි කියලා? lol ok pal. ඔබගේ පිළිතුර ආපසු හරවා යැවීමේදී ඔබ උපපරිපාලක වරු මෙවලම් අනිසි ලෙස භාවිතා කිරීමෙන් ඔබේ අහංකාරය ප්‍රබල ලෙස ප්‍රදර්ශනය නොවූයේ නම්, එය අනිවාර්යයෙන්ම මෙහි ප්‍රදර්ශනය වනු ඇත; මේ අනුව ඔබට පැවසීමට තිබූ අනෙක් සියල්ල අපකීර්තියට පත් කරයි. එසේම, මම කිසිවක් වරදවා වටහා නොගත්තෙමි (උපකල්පනය කිරීම ගැන ඔවුන් පවසන දේ ඔබ දන්නවා ...), ඔබ කරන්නේ කුමක්දැයි මම හරියටම දනිමි, එය හොඳ පුරුද්දක් නොවේ.
ඔව් බැරී

425

වෙබ් පිටුවක ප්‍රතිදානය සඳහා කෙටි අනුවාදය

$url =  "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";

$escaped_url = htmlspecialchars( $url, ENT_QUOTES, 'UTF-8' );
echo '<a href="' . $escaped_url . '">' . $escaped_url . '</a>';

//Example.com/path/ ආකෘතියේ ගැටළු සහ අද්දර අවස්ථා පිළිබඳ තවත් විස්තර මෙන්න

සම්පූර්ණ සංස්කරණය

function url_origin( $s, $use_forwarded_host = false )
{
    $ssl      = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
    $sp       = strtolower( $s['SERVER_PROTOCOL'] );
    $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' );
    $port     = $s['SERVER_PORT'];
    $port     = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port;
    $host     = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null );
    $host     = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
    return $protocol . '://' . $host;
}

function full_url( $s, $use_forwarded_host = false )
{
    return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
}

$absolute_url = full_url( $_SERVER );
echo $absolute_url;

මෙය දැඩි ලෙස වෙනස් කරන ලද අනුවාදයකි http://snipplr.com/view.php?codeview&id=2734.

URL ව්‍යුහය:

යෝජනා ක්රමය: // පරිශීලක නාමය: මුරපදය @domain: වරාය / path query_string # fragment_id

තද අකුරින් ඇති කොටස් ශ්‍රිතයට ඇතුළත් නොවේ

සටහන්:

  • මෙම ශ්‍රිතයට username:passwordසම්පූර්ණ URL එකකින් හෝ කැබැල්ලකින් (හැෂ්) ඇතුළත් නොවේ.
  • එය HTTP සඳහා පෙරනිමි වරාය 80 සහ HTTPS සඳහා 443 වරාය පෙන්වන්නේ නැත.
  • Http සහ https යෝජනා ක්‍රම සමඟ පමණක් පරීක්ෂා කර ඇත.
  • මෙම #fragment_idසේවාදායකයාගේ (බ්රවුසරය) විසින් සේවාදායකය වෙත යවා නොමැති අතර සම්පූර්ණ URL එකතු කළ නොහැකි වනු ඇත.
  • $_GETfoo=bar2වැනි URL සඳහා පමණක් අඩංගු වේ /example?foo=bar1&foo=bar2.
  • සමහර CMS සහ පරිසරයන් මෙම අවස්ථාවේ දී භාවිතා කිරීම වැනි URL යක් නැවත ලිවීමට $_SERVER['REQUEST_URI']සහ ආපසු එනු ඇත ./example?foo=bar2/example?foo=bar1&foo=bar2$_SERVER['QUERY_STRING']
  • URI = URL + URN, නමුත් ජනප්‍රිය භාවිතය නිසා URL යන්නෙන් අදහස් කරන්නේ URI සහ URL යන දෙකම බව මතක තබා ගන්න .
  • ඔබ HTTP_X_FORWARDED_HOSTප්‍රොක්සි හෝ බැලන්සර් භාවිතා කිරීමට අදහස් නොකරන්නේ නම් ඔබ ඉවත් කළ යුතුය .
  • මෙම පිරිවිතර බව පවසයි Hostඑය පෙරනිමි අංකය නම් ශීර්ෂ වරාය සංඛ්යාව අඩංගු විය යුතුය.

සේවාලාභී (බ්‍රව්සර්) පාලිත විචල්‍යයන්:

  • $_SERVER['REQUEST_URI']. සහාය නොදක්වන ඕනෑම අක්ෂර යැවීමට පෙර බ්‍රව්සරය විසින් කේතනය කර ඇත.
  • $_SERVER['HTTP_HOST']සහ PHP අත්පොතේ අදහස් අනුව සැමවිටම ලබාගත නොහැක: http://php.net/manual/en/reserved.variables.php
  • $_SERVER['HTTP_X_FORWARDED_HOST']ශේෂයන් මගින් සකසා $_SERVERඇති අතර PHP අත්පොතේ විචල්‍ය ලැයිස්තුවේ සඳහන් නොවේ .

සේවාදායක පාලිත විචල්‍යයන්:

  • $_SERVER['HTTPS']. සේවාදායකයා මෙය භාවිතා කිරීමට තෝරා ගනී, නමුත් සේවාදායකයා හිස් හෝ "සක්‍රිය" වල සත්‍ය වටිනාකම ලබා දෙයි.
  • $_SERVER['SERVER_PORT']. සේවාදායකයා පිළිගන්නේ අවසර ලත් අංක වරාය ලෙස පමණි.
  • $_SERVER['SERVER_PROTOCOL']. සේවාදායකයා පිළිගන්නේ ඇතැම් ප්‍රොටෝකෝල පමණි.
  • $_SERVER['SERVER_NAME']. එය සේවාදායක වින්‍යාසය තුළ අතින් සකසා ඇති අතර kralyk අනුව IPv6 සඳහා ලබා ගත නොහැක .

ආශ්‍රිත:

HTTP_HOST එදිරිව SERVER_NAME
HTTP “ධාරක” ශීර්ෂ පරාමිතිය තුළ වරාය අංකය අවශ්‍යද?
https://stackoverflow.com/a/28049503/175071


14
IPv6 IP ලිපිනය මඟින් සේවාදායකය ලබා දෙන්නේ නම් මෙම කේතය අසාර්ථක වනු ඇත. එය නිවැරදි කිරීමට, SERVER_NAME වෙනුවට HTTP_HOST ආදේශ කරන්න.
kralyk

1
සටහන: url සඳහා $_SERVER['REQUEST_URI']පෙන්වනු /example?foo=bar2ඇත/example?foo=bar1&foo=bar2
Timo Huovinen

2
# ට පසුව අර්ථ දක්වා ඇති කිසිවක් මෙහි අඩංගු නොවනු ඇත, ඒවා සේවාදායකයට
විලියම් කිං

1
එය ආරක්ෂිත අවදානමක් නොවේදැයි මට විශ්වාස නැත. ඔබගේ උදාහරණයේ දී ඔබට නිවැරදි පිටුවට ලඟාවීමට ධාරක ශීර්ෂය යැවිය හැකි නමුත් HTTP_X_FORWARDED_HOST ශීර්ෂකය භාවිතා කර එය වෙනත් සත්කාරක සමාගමක් හරහා කැඳවනු ඇතැයි සිතීමට පිටුවට ඉඩ දිය හැකිය. යෙදුම මෙම තොරතුරු භාවිතා කරන විට (කුමක් සඳහා වුවද) එය සැබවින්ම ආරක්ෂක ගැටළුවක් විය හැකි බැවින් එය එසේ නොවන දේ පොරොන්දු වීමට ඉඩ සලසයි.
hek2mgl

1
@ Matt3o12 වරායේ වටිනාකම කෙලින්ම Hostශීර්ෂයෙන් ලබාගෙන ඇත , එය එලෙස සකසා ඇති බවක් දැක නැත, එය සඳහන් කිරීම ගැන ස්තූතියි, එය වෙනස් කිරීමක් ලෙස එකතු කරනු ඇත
Timo Huovinen

232

උදාහරණ: https://(www.)example.com/subFolder/myfile.php?var=blabla#555

// ======= PATHINFO ====== //
$x = pathinfo($url);
$x['dirname']      🡺 https://example.com/subFolder
$x['basename']     🡺                               myfile.php?var=blabla#555 // Unsecure! 
$x['extension']    🡺                                      php?var=blabla#555 // Unsecure! 
$x['filename']     🡺                               myfile

// ======= PARSE_URL ====== //
$x = parse_url($url);
$x['scheme']       🡺 https
$x['host']         🡺         example.com
$x['path']         🡺                    /subFolder/myfile.php
$x['query']        🡺                                          var=blabla
$x['fragment']     🡺                                                     555

//=================================================== //
//========== self-defined SERVER variables ========== //
//=================================================== //
$_SERVER["DOCUMENT_ROOT"]  🡺 /home/user/public_html
$_SERVER["SERVER_ADDR"]    🡺 143.34.112.23
$_SERVER["SERVER_PORT"]    🡺 80(or 443 etc..)
$_SERVER["REQUEST_SCHEME"] 🡺 https                                         //similar: $_SERVER["SERVER_PROTOCOL"] 
$_SERVER['HTTP_HOST']      🡺         example.com (or with WWW)             //similar: $_SERVER["ERVER_NAME"]
$_SERVER["REQUEST_URI"]    🡺                       /subFolder/myfile.php?var=blabla
$_SERVER["QUERY_STRING"]   🡺                                             var=blabla
__FILE__                   🡺 /home/user/public_html/subFolder/myfile.php
__DIR__                    🡺 /home/user/public_html/subFolder              //same: dirname(__FILE__)
$_SERVER["REQUEST_URI"]    🡺                       /subFolder/myfile.php?var=blabla
parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)🡺  /subFolder/myfile.php 
$_SERVER["PHP_SELF"]       🡺                       /subFolder/myfile.php

// ==================================================================//
//if "myfile.php" is included in "PARENTFILE.php" , and you visit  "PARENTFILE.PHP?abc":
$_SERVER["SCRIPT_FILENAME"]🡺 /home/user/public_html/parentfile.php
$_SERVER["PHP_SELF"]       🡺                       /parentfile.php
$_SERVER["REQUEST_URI"]    🡺                       /parentfile.php?var=blabla
__FILE__                   🡺 /home/user/public_html/subFolder/myfile.php

// =================================================== //
// ================= handy variables ================= //
// =================================================== //
//If site uses HTTPS:
$HTTP_or_HTTPS = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') || $_SERVER['SERVER_PORT']==443) ? 'https://':'http://' );            //in some cases, you need to add this condition too: if ('https'==$_SERVER['HTTP_X_FORWARDED_PROTO'])  ...

//To trim values to filename, i.e. 
basename($url)             🡺 myfile.php

//excellent solution to find origin
$debug_files = debug_backtrace();       
$caller_file = count($debug_files) ? $debug_files[count($debug_files) - 1]['file'] : __FILE__;

සැලකිල්ලට ගන්න! ! !

  • #ඉහත උදාහරණයේ හැෂ් ටැග් කොටස් අතින් භාවිතා කර ඇත්තේ නිදර්ශන අරමුණු සඳහා පමණි, කෙසේ වෙතත්, සේවාදායක පාර්ශවීය භාෂාවන්ට (ඇතුළුව php) ඒවා ස්වදේශීයව හඳුනාගත නොහැක (හැෂ් ටැගය browser/client sideක්‍රියාකාරීත්වය පමණක් බැවින් එය කළ හැක්කේ ජාවාස්ක්‍රිප්ට් පමණි ).
  • DIRECTORY_SEPARATOR\වෙනුවට වින්ඩෝස් වර්ගයේ සත්කාරක සඳහා ප්‍රතිලාභ /.


වර්ඩ්ප්‍රෙස් සඳහා

//(let's say, if wordpress is installed in subdirectory:  http://example.com/wpdir/)
home_url()                      🡺 http://example.com/wpdir/        //if is_ssl() is true, then it will be "https"
get_stylesheet_directory_uri()  🡺 http://example.com/wpdir/wp-content/themes/THEME_NAME  [same: get_bloginfo('template_url') ]
get_stylesheet_directory()      🡺 /home/user/public_html/wpdir/wp-content/themes/THEME_NAME
plugin_dir_url(__FILE__)        🡺 http://example.com/wpdir/wp-content/themes/PLUGIN_NAME
plugin_dir_path(__FILE__)       🡺 /home/user/public_html/wpdir/wp-content/plugins/PLUGIN_NAME/  

# කොටස කොහේද, සේවාදායක පැත්තේ # ට පසුව අපට ප්‍රවේශ විය හැකි ක්‍රමයක් නැද්ද?
රෝහිත් ඛත්‍රි

Oh රෝහිත් ඛත්‍රි එම කොටස බ්‍රව්සරයට පමණක් ප්‍රවේශ විය හැකි අතර එය සේවාදායකයට යවනු නොලැබේ
beppe9000

විමසුම් දාම සමඟ යූආර්එල් ලබා ගැනීම සඳහා වර්ඩ්ප්‍රෙස් ශ්‍රිතය කුමක්ද?
beppe9000

64

කේතය අවම මට්ටමක තබා ගනිමින් ත්‍රිමාණ ප්‍රකාශයක් භාවිතා කරමින් විසඳුමක් මෙන්න :

$url = "http" . (($_SERVER['SERVER_PORT'] == 443) ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

මෙය කළ හැකි කුඩාම හා පහසුම ක්‍රමය මෙයයි, යමෙකුගේ වෙබ් සේවාදායකය HTTPS සඳහා සම්මත වරාය 443 භාවිතා කරයි යැයි උපකල්පනය කරමු .


18
නැතහොත් $_SERVER["HTTPS"] == "on"SSL සක්‍රීයදැයි පරීක්ෂා කිරීමට භාවිතා කරන්න.
Dzhuneyt

15
ඔබ භාවිතා කළ යුත්තේ $ _SERVER ["HTTPS"] මන්ද 443 වරාය පෙරනිමි SSL වරාය මිස SSL දර්ශකයක් නොවේ.
ඇලෙක්ස් බාර්කර්

4
Lex ඇලෙක්ස්බාර්කර් - ඒ නිසයි මම කිව්වේ "යමෙකුගේ වෙබ් සේවාදායකය HTTPS සඳහා සම්මත පෝට් 443 භාවිතා කරයි යැයි උපකල්පනය කරන්න."
honyovk

45

වත්මන් URL එක සොයා ගැනීම සඳහා මගේ ප්‍රියතම හරස් වේදිකා ක්‍රමය:

$url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

7
වසන්න, නමුත් මට මෙය වෙනස් කිරීමට අවශ්‍ය විය: et url = ((isset ($ _ SERVER ['HTTPS']) && $ _SERVER ['HTTPS']! == 'off')? "Https": "http") . ": // $ _ සර්වර් [HTTP_HOST] $ _SERVER [REQUEST_URI]";
එරික් ඇලන්

35

සරලව භාවිතා කරන්න:

$uri = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']

1
මට මෙය භාවිතා කිරීමට අවශ්‍ය තරමට එය IIS හි ක්‍රියා නොකරයි. stackoverflow.com/questions/18008135/…
එරික් ඇලන්

එය ප්‍රතිදානය කරන්නේ කුමක්ද?
HappyCoder

5
PHP දැන්වීම: නිර්වචනය නොකළ දර්ශකය: REQUEST_SCHEME
එරික් ඇලන්

මම මේ විසඳුමට කැමතියි! නමුත් ඔබට එය nginx සඳහා වැඩ කළ හැකිද?
cowboysaif

1
http://example.com :8080 /request.phpඅසමත්. මෙම පිළිතුරු හේතුවක් සඳහා සංකීර්ණ වේ.
ඩේවිඩ් රෙෆෝවා

21
function full_path()
{
    $s = &$_SERVER;
    $ssl = (!empty($s['HTTPS']) && $s['HTTPS'] == 'on') ? true:false;
    $sp = strtolower($s['SERVER_PROTOCOL']);
    $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : '');
    $port = $s['SERVER_PORT'];
    $port = ((!$ssl && $port=='80') || ($ssl && $port=='443')) ? '' : ':'.$port;
    $host = isset($s['HTTP_X_FORWARDED_HOST']) ? $s['HTTP_X_FORWARDED_HOST'] : (isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null);
    $host = isset($host) ? $host : $s['SERVER_NAME'] . $port;
    $uri = $protocol . '://' . $host . $s['REQUEST_URI'];
    $segments = explode('?', $uri, 2);
    $url = $segments[0];
    return $url;
}

සටහන: මම දැන් ටිමෝ හුවොවිනන්ගේ කේතයට යාවත්කාලීන කිරීමක් කළෙමි , එබැවින් ඔබට URL හි කිසිදු GET පරාමිතියක් නොලැබෙනු ඇත. මෙම URL සරල වන අතර වැනි දේ ඉවත් කරයි ?hi=i&am=a&get.

උදාහරණයක්:

http://www.example.com/index?get=information

පහත පරිදි පෙන්වනු ඇත:

http://www.example.com/index

කිසියම් නිශ්චිත අන්තර්ගතයක් නිර්වචනය කිරීමට ඔබ GET පරාමිති භාවිතා නොකරන්නේ නම් මෙය හොඳයි, එවැනි අවස්ථාවකදී ඔබ ඔහුගේ කේතය භාවිතා කළ යුතුය! :-)


හේයි, ලස්සනයි :) ඔබට කෙසේ හෝ ලිස්සා
ගියහොත්

ඇත්ත වශයෙන්ම නොවේ, මන්ද ඔබ "පුපුරා යන්න ('#', $ කොටස [0])" ලෙස සකසා ඇත්නම්, එය දෝෂයක් ලෙස ගණන් ගනු ඇත, මන්ද "#" සංකේතය URL එක කැඩී ඇති අතර එය කියවිය හැක්කේ ජාවාස්ක්‍රිප්ට් මඟින් පමණි. නමුත් ඔබට කළ හැකි දෙය නම්, ඔබට “ආපසු $ url;” “ආපසු ටිම් ($ url, '#');” සමඟ ප්‍රතිනිර්මාණය කළ හැකි බැවිනි, මන්ද එය එසේ වුවහොත් ඔබ එය ඉවත් කරනු ඇත. . නමුත් එය පහත අන්තර්ගතය ඉවත් නොකරනු ඇත. ඔබට අවශ්‍ය නම් "Parse_url" හි කියවිය හැකිය. :-)
ඇලෙක්ස් වෙස්ටර්ගාඩ්

17

කේතය හිස් කරන්න, සියලුම වෙබ් සේවාදායකවල වැඩ කරයි (Apache, nginx, IIS, ...):

$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

11

මෙන්න මගේ විසඳුම - කේතය ට්‍රේසි ඩීබගර් විසින් දේවානුභාවයෙන් . විවිධ සේවාදායක වරායන් සඳහා සහය දැක්වීම සඳහා එය වෙනස් කරන ලදි. $_SERVER['REQUEST_URI']මූලික සේවාදායක URL ද ඇතුළුව ඔබට සම්පූර්ණ වත්මන් URL ලබා ගත හැකිය . මගේ කාර්යය පරීක්ෂා කරන්න:

function getCurrentUrl($full = true) {
    if (isset($_SERVER['REQUEST_URI'])) {
        $parse = parse_url(
            (isset($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'off') ? 'https://' : 'http://') .
            (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '')) . (($full) ? $_SERVER['REQUEST_URI'] : null)
        );
        $parse['port'] = $_SERVER["SERVER_PORT"]; // Setup protocol for sure (80 is default)
        return http_build_url('', $parse);
    }
}

පරීක්ෂණ කේතය මෙන්න:

// Follow $_SERVER variables was set only for test
$_SERVER['HTTPS'] = 'off'; // on
$_SERVER['SERVER_PORT'] = '9999'; // Setup
$_SERVER['HTTP_HOST'] = 'some.crazy.server.5.name:8088'; // Port is optional there
$_SERVER['REQUEST_URI'] = '/150/tail/single/normal?get=param';

echo getCurrentUrl();
// http://some.crazy.server.5.name:9999/150/tail/single/normal?get=param

echo getCurrentUrl(false);
// http://some.crazy.server.5.name:9999/

දැනුම්දීම: http_build_urlpecl_http ස්ථාපනය කිරීම අවශ්‍යයි
මොරන්

11

HTTP_HOST සහ REQUEST_URI මිල ගණන් වල තිබිය යුතුය, එසේ නොමැතිනම් එය PHP 7.2 හි දෝෂයක් ඇති කරයි

භාවිත:

$actual_link = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

ඔබට HTTP සහ HTTPS යන දෙකටම සහය දැක්වීමට අවශ්‍ය නම්:

$actual_link = (isset($_SERVER['HTTPS']) ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

9

පිළිගත් පිළිතුර ලෙස එකම තාක්‍ෂණය, නමුත් HTTPS සහාය ඇතිව සහ වඩාත් කියවිය හැකි:

$current_url = sprintf(
    '%s://%s/%s',
    isset($_SERVER['HTTPS']) ? 'https' : 'http',
    $_SERVER['HTTP_HOST'],
    $_SERVER['REQUEST_URI']
);

9

URL එක හැසිරවීමට මම මෙම ක්‍රියාව කර ඇත:

 <?php
     function curPageURL()
     {
         $pageURL = 'http';
         if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
         $pageURL .= "://";
         if ($_SERVER["SERVER_PORT"] != "80") {
             $pageURL .=
             $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
         }
         else {
             $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
         }
         return $pageURL;
     }
 ?>

7

මව් ෆෝල්ඩරයේ URL සොයා ගැනීමට මෙම එක්-ලයිනර් භාවිතා කරන්න (ඔබට pecl_http සමඟ එන http_build_url () වෙත ප්‍රවේශයක් නොමැති නම්):

$url = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://').$_SERVER['SERVER_NAME'].str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname(dirname(__FILE__)));

5
ඔබ url මිශ්‍ර කර නිරපේක්ෂ ස්ථානය තැටියේ ගොනු කරන්න
sd1sd1

6

ඔබගේ Apache පරිසර විචල්‍යයන් සමඟ මෙය කිරීම පහසුය. මෙය ක්‍රියාත්මක වන්නේ ඔබ භාවිතා කරන බව උපකල්පනය කරන Apache 2 සමඟ පමණි.

පහත දැක්වෙන PHP කේතය භාවිතා කරන්න:

<?php
    $request_url = apache_getenv("HTTP_HOST") . apache_getenv("REQUEST_URI");
    echo $request_url;
?>

මම මෙය උත්සාහ කළේ $ real_link = 'http'. (isset (S _ SERVER ['HTTPS'])? 's': ''). ': //'. "{$ _SERVER ['HTTP_HOST']} {$ _ සේවාදායකයා ['REQUEST_URI']}";
රෝහිත් කෞෂික්

6

මේක උත්සාහ කරන්න:

print_r($_SERVER);

$_SERVERයනු ශීර්ෂයන්, මාර්ග සහ ස්ක්‍රිප්ට් ස්ථාන වැනි තොරතුරු අඩංගු අරාවකි. මෙම අරාවෙහි ඇතුළත් කිරීම් වෙබ් සේවාදායකයා විසින් නිර්මාණය කර ඇත. සෑම වෙබ් සේවාදායකයෙක්ම මේ කිසිවක් සපයනු ඇති බවට කිසිදු සහතිකයක් නොමැත; සේවාදායකයන් සමහරක් මඟ හැරිය හැක, නැතහොත් මෙහි ලැයිස්තුගත කර නොමැති අනෙක් ඒවා සපයයි. එයින් කියැවෙන්නේ, මෙම විචල්‍යයන්ගෙන් විශාල සංඛ්‍යාවක් »CGI / 1.1 පිරිවිතරයට ගණනය කර ඇති බැවින් ඔබට ඒවා අපේක්ෂා කළ හැකි විය යුතුය.

$HTTP_SERVER_VARSඑකම ආරම්භක තොරතුරු අඩංගු නමුත් එය සුපිරි ග්ලෝබල් නොවේ. (සටහන බව $HTTP_SERVER_VARSහා $_SERVERවෙනස් විචල්යයන්, හා PHP වැනි ඒවා හසුරුවන බව)


6

වත්මන් පිටුවේ සම්පූර්ණ URL ලබා ගැනීම සඳහා ඔබට කිසිදු තර්කයක් නොමැතිව http_build_url භාවිතා කළ හැකිය :

$url = http_build_url();

5
Http_build_url () යනු PECL ශ්‍රිතයක් පමණක් බව සලකන්න: (PECL pecl_http> = 0.21.0)
Volomike

5

මගේ යූආර්අයි හැසිරවීමට මම මෙම පන්තිය සාදා ඇත

<?php
/** -------------------------------------------------------------------------------------------------------------------
 * URI CLASS
 * URI management class
 *
 * @author Sandu Liviu Catalin
 * @email slc(dot)universe(at)gmail(dot)com
 * @license Public Domain
**/
abstract class _URI
{
    /** ---------------------------------------------------------------------------------------------------------------
     *  - BASE PARAMETERS
     * $_Script_Hidden - Hide the script name from the returned URI
     * $_Public_Path - Location where public resources are stored
     * $_Public_Relative - Return the relative path version of public location
     * $_Public_Skin - Is the skin directory located in the public directory
     * $_Skin_Path - Location where skins are stored
     * $_Skin_Relative - Return the relative path version of skin location
     * $_Skin_Default - Use this as the default system skin
     * $_Fallback_Base - Use this base URL if you can't extract the current URL
     * $_Fallback_Scheme - Use this scheme if you can't find it automatically
     * $_Fallback_User - Use this user name if you can't find it automatically
     * $_Fallback_Passwd - Use this password if you can't find it automatically
     * $_Fallback_Host - Use this host if you can't find it automatically
     * $_Fallback_Port - Use this port number if you can't find it automatically
     * $_Fallback_Script - Use this script name if you can't find it automatically
     * $_Separator_Scheme - Use this to separate the scheme from the rest of the url
     * $_Separator_Credentials - Use this to separate the user name from the password
     * $_Separator_Auth - Use this to separate the user name and password from host
     * $_Separator_Port - Use this to separate the port number from host
     * $_Separator_Query - Use this to separate the query data from base URL
     * $_Separator_Fragment - Use this to separate the fragment data from query data
    */
    protected static $_Script_Hidden;
    protected static $_Public_Path;
    protected static $_Public_Relative;
    protected static $_Public_Skin;
    protected static $_Skin_Path;
    protected static $_Skin_Relative;
    protected static $_Skin_Default;
    protected static $_Fallback_Base;
    protected static $_Fallback_Scheme;
    protected static $_Fallback_User;
    protected static $_Fallback_Passwd;
    protected static $_Fallback_Host;
    protected static $_Fallback_Port;
    protected static $_Fallback_Script;
    protected static $_Separator_Scheme;
    protected static $_Separator_Credentials;
    protected static $_Separator_Auth;
    protected static $_Separator_Port;
    protected static $_Separator_Query;
    protected static $_Separator_Fragment;

    /** ----------------------------------------------------------------------------------------------------------------
     * CACHED BASES
     * Precompiled common URLs for quick retrieval
    */
    protected static $Base_Host;
    protected static $Base_App;
    protected static $Base_Script;
    protected static $Base_Current;
    protected static $Base_Public;
    protected static $Base_Skin;

    /** ----------------------------------------------------------------------------------------------------------------
     * DATA CONTAINERS
     * Raw URI segments saved from extracted data
    */
    protected static $__Segments = array(
        'SCHEME' => '',
        'USER' => '',
        'PASSWD' => '',
        'HOST' => '',
        'PORT' => '',
        'PATH' => '',
        'SCRIPT' => '',
        'INFO' => '',
        'QUERY' => '',
    );

    /** ----------------------------------------------------------------------------------------------------------------
     * PARSER KEYWORDS
     * URI data asigned to specific keywords.
    */
    protected static $__Parsers;

    /** ----------------------------------------------------------------------------------------------------------------
     * CLASS INITIALIZER
     * Initialize the class
     *
     * @access public
     * @param $Params [array] - An associative array of supported parrameters
     * @return void
    */
    public static function __Init($Params=array())
    {
        // Configure the class
        self::$_Script_Hidden = (isset($Params['Script_Hidden'])) ? $Params['Script_Hidden'] : FALSE;
        self::$_Public_Path = (isset($Params['Public_Path'])) ? $Params['Public_Path'] : 'public';
        self::$_Public_Relative = (isset($Params['Public_Relative'])) ? $Params['Public_Relative'] : TRUE;
        self::$_Public_Skin = (isset($Params['Public_Skin'])) ? $Params['Public_Skin'] : TRUE;
        self::$_Skin_Path = (isset($Params['Skin_Path'])) ? $Params['Skin_Path'] : 'themes';
        self::$_Skin_Relative = (isset($Params['Skin_Relative'])) ? $Params['Skin_Relative'] : TRUE;
        self::$_Skin_Default = (isset($Params['Skin_Default'])) ? $Params['Skin_Default'] : 'default';
        self::$_Fallback_Base = (isset($Params['Fallback_Base'])) ? $Params['Fallback_Base'] : '127.0.0.1';
        self::$_Fallback_Scheme = (isset($Params['Fallback_Scheme'])) ? $Params['Fallback_Scheme'] : 'http';
        self::$_Fallback_User = (isset($Params['Fallback_User'])) ? $Params['Fallback_User'] : '';
        self::$_Fallback_Passwd = (isset($Params['Fallback_Passwd'])) ? $Params['Fallback_Passwd'] : '';
        self::$_Fallback_Host = (isset($Params['Fallback_Host'])) ? $Params['Fallback_Host'] : '127.0.0.1';
        self::$_Fallback_Port = (isset($Params['Fallback_Port'])) ? $Params['Fallback_Port'] : '';
        self::$_Fallback_Script = (isset($Params['Fallback_Script'])) ? $Params['Fallback_Script'] : 'index.php';
        self::$_Separator_Scheme = (isset($Params['Separator_Scheme'])) ? $Params['Separator_Scheme'] : '://';
        self::$_Separator_Credentials = (isset($Params['Separator_Credentials'])) ? $Params['Separator_Credentials'] : ':';
        self::$_Separator_Auth = (isset($Params['Separator_Auth'])) ? $Params['Separator_Auth'] : '@';
        self::$_Separator_Port = (isset($Params['Separator_Port'])) ? $Params['Separator_Port'] : ':';
        self::$_Separator_Query = (isset($Params['Separator_Query'])) ? $Params['Separator_Query'] : '?';
        self::$_Separator_Fragment = (isset($Params['Separator_Fragment'])) ? $Params['Separator_Fragment'] : '#';
        // Do some clean up of the configurations
        self::$_Public_Path = implode('/', explode('/', str_replace(array('/', '\\'), '/', self::$_Public_Path)));
        self::$_Skin_Path = implode('/', explode('/', str_replace(array('/', '\\'), '/', self::$_Skin_Path)));
        // Extract the URL information
        self::Extract();
        // Precompile common bases
        self::$Base_Host = self::Compile('HOST');
        self::$Base_App = self::Compile('PATH');
        self::$Base_Script = self::$Base_App.(self::$_Script_Hidden ? '' : '/'.self::$__Segments['SCRIPT']);
        self::$Base_Current = self::$Base_Script.(empty(self::$__Segments['INFO']) ? '' : '/'.self::$__Segments['INFO']);
        self::$Base_Public = self::$_Public_Relative ? self::$_Public_Path : self::$Base_App.'/'.self::$_Public_Path;
        self::$Base_Skin = self::$_Skin_Relative ? self::$_Skin_Path : self::$Base_Public.'/'.self::$_Skin_Path;
        self::$Base_Skin .= '/'.self::$_Skin_Default;
        // Setup the parsers
        self::$__Parsers['SR_Key'][] = '%HostBase%';
        self::$__Parsers['SR_Data'][] =& self::$Base_Host;
        self::$__Parsers['SR_Key'][] = '%AppBase%';
        self::$__Parsers['SR_Data'][] =& self::$Base_App;
        self::$__Parsers['SR_Key'][] = '%ScriptBase%';
        self::$__Parsers['SR_Data'][] =& self::$Base_Script;
        self::$__Parsers['SR_Key'][] = '%CurrentBase%';
        self::$__Parsers['SR_Data'][] =& self::$Base_Current;
        self::$__Parsers['SR_Key'][] = '%PublicBase%';
        self::$__Parsers['SR_Data'][] =& self::$Base_Public;
        self::$__Parsers['SR_Key'][] = '%SkinBase%';
        self::$__Parsers['SR_Data'][] =& self::$Base_Skin;
        self::$__Parsers['SR_Data'][] =& self::$__Segments['SCHEME'];
        self::$__Parsers['SR_Key'][] = '%UserSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['USER'];
        self::$__Parsers['SR_Key'][] = '%PasswdSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['PASSWD'];
        self::$__Parsers['SR_Key'][] = '%HostSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['HOST'];
        self::$__Parsers['SR_Key'][] = '%PortSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['PORT'];
        self::$__Parsers['SR_Key'][] = '%PathSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['PATH'];
        self::$__Parsers['SR_Key'][] = '%ScriptSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['SCRIPT'];
        self::$__Parsers['SR_Key'][] = '%InfoSegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['INFO'];
        self::$__Parsers['SR_Key'][] = '%QuerySegment%';
        self::$__Parsers['SR_Data'][] =& self::$__Segments['QUERY'];
        self::$__Parsers['SR_Key'][] = '%PublicPath%';
        self::$__Parsers['SR_Data'][] =& self::$_Public_Path;
        self::$__Parsers['SR_Key'][] = '%SkinPath%';
        self::$__Parsers['SR_Data'][] =& self::$_Skin_Path;
        self::$__Parsers['SR_Key'][] = '%DefaultSkin%';
        self::$__Parsers['SR_Data'][] =& self::$_Skin_Default;
        // Everything OK so far
    }

    /** ----------------------------------------------------------------------------------------------------------------
     * URI EXTRACTOR
     * Try every posibility to obtain all the segments of the current URL
     *
     * @access public
     * @return array
    */
    public static function Extract()
    {
        // No point in executing twice to get the same result
        if (!empty(self::$__Segments['HOST'])) return self::$__Segments;
        // Let's try to have a falback for most basic data
        $Script_URI = (isset($_SERVER['SCRIPT_URI'])) ? parse_url($_SERVER['SCRIPT_URI']) : array();
        if (empty($Script_URI)) {
            $Script_URI = parse_url(self::$_Fallback_Base);
        }
        // Try ever possibility to obtain the data that surounds the script name
        if (isset($_SERVER['PHP_SELF'])) {
            $Script_Path = $_SERVER['PHP_SELF'];
        } elseif (isset($_SERVER['REQUEST_URI'])) {
            $Script_Path = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
        } elseif (isset($Script_URI['path'])) {
            $Script_Path = $Script_URI['path'];
        } elseif (isset($_SERVER['SCRIPT_NAME'])) {
            $Script_Path = isset($_SERVER['SCRIPT_NAME']).(isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '');
        } elseif (isset($_SERVER['DOCUMENT_ROOT']) && isset($_SERVER['SCRIPT_FILENAME'])) {
            $Script_Path = substr($_SERVER['SCRIPT_FILENAME'], strlen($_SERVER['DOCUMENT_ROOT']),
                                    (strlen($_SERVER['SCRIPT_FILENAME'])-strlen($_SERVER['DOCUMENT_ROOT'])));
            $Script_Path .= (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '');
        } else {
            $Script_Path = '';
        }
        // Explode the previously extracted data
        if (strlen($Script_Path) > 0) {
            $Script_Path = preg_split('/[\/]/', $Script_Path, -1, PREG_SPLIT_NO_EMPTY);
        } else {
            $Script_Path = array();
        }
        // Try to obtain the name of the currently executed script
        if (isset($_SERVER['SCRIPT_FILENAME'])) {
            $Script_Name = basename($_SERVER['SCRIPT_FILENAME']);
        } elseif (isset($_SERVER['SCRIPT_NAME'])) {
            $Script_Name = basename($_SERVER['SCRIPT_NAME']);
        } else {
            $Script_Name = self::$_Fallback_Script;
        }
        // Try to find the name of the script in the script path
        $Script_Split = (is_string($Script_Name)) ? array_search($Script_Name, $Script_Path, TRUE) : NULL;
        // Try to obtain the request scheme
        if (isset($_SERVER['REQUEST_SCHEME'])) {
            self::$__Segments['SCHEME'] = $_SERVER['REQUEST_SCHEME'];
        } elseif (isset($_SERVER['SERVER_PROTOCOL'])) {
            self::$__Segments['SCHEME'] = strtolower($_SERVER['SERVER_PROTOCOL']);
            self::$__Segments['SCHEME'] = substr(self::$__Segments['SCHEME'], 0, strpos(self::$__Segments['SCHEME'], '/'));
            self::$__Segments['SCHEME'] .= (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') ? 's' : '';
        } elseif (isset($Script_URI['scheme'])) {
            self::$__Segments['SCHEME'] = $Script_URI['scheme'];
        } else {
            self::$__Segments['SCHEME'] = self::$_Fallback_Scheme;
        }
        // Try to obtain the user name (if one was used)
        if (isset($_SERVER['PHP_AUTH_USER'])) {
            self::$__Segments['USER'] = $_SERVER['PHP_AUTH_USER'];
        } elseif (isset($Script_URI['user'])) {
            self::$__Segments['USER'] = $Script_URI['user'];
        } else {
            self::$__Segments['USER'] = self::$_Fallback_User;
        }
        // Try to obtain the user password (if one was used)
        if (isset($_SERVER['PHP_AUTH_PW'])) {
            self::$__Segments['PASSWD'] = $_SERVER['PHP_AUTH_PW'];
        } elseif (isset($Script_URI['pass'])) {
            self::$__Segments['PASSWD'] = $Script_URI['pass'];
        } else {
            self::$__Segments['PASSWD'] = self::$_Fallback_Passwd;
        }
        // Try to obtai the host name
        if (isset($_SERVER['SERVER_NAME'])) {
            self::$__Segments['HOST'] = $_SERVER['SERVER_NAME'];
        } elseif (isset($_SERVER['HTTP_HOST'])) {
            self::$__Segments['HOST'] = $_SERVER['HTTP_HOST'];
        } elseif (isset($Script_URI['host'])) {
            self::$__Segments['HOST'] = $Script_URI['host'];
        } else {
            self::$__Segments['HOST'] = self::$_Fallback_Host;
        }
        // Try to obtain the port number (if one was used)
        if (isset($Script_URI['port'])) {
            self::$__Segments['PORT'] = $Script_URI['port'];
        } else {
            self::$__Segments['PORT'] = self::$_Fallback_Port;
        }
        // Try to obtain the path to the script
        if (is_numeric($Script_Split)) {
            self::$__Segments['PATH'] = implode('/', array_slice($Script_Path, 0, $Script_Split, TRUE));
        } else {
            self::$__Segments['PATH'] = '';
        }
        // Try to obtain the Script name
        if (is_string($Script_Name)) {
            self::$__Segments['SCRIPT'] = $Script_Name;
        } else {
            self::$__Segments['SCRIPT'] = '';
        }
        // Try to obtain any passed info
        if (isset($_SERVER['PATH_INFO'])) {
            self::$__Segments['INFO'] = implode('/', preg_split('/[\/]/', $_SERVER['PATH_INFO'], -1, PREG_SPLIT_NO_EMPTY));
        } elseif (is_numeric($Script_Split)) {
            self::$__Segments['INFO'] = implode('/', array_slice($Script_Path, $Script_Split+1));
        } else {
            self::$__Segments['INFO'] = '';
        }
        // -----Pending Feature: Try to also extract the query string

        // Return the extracted URI segments
        return self::$__Segments;

    }

    /** ----------------------------------------------------------------------------------------------------------------
     * URI COMPILER
     * Compile raw URI segments into a usable URL
     *
     * @access public
     * @param $Until [string] - The name of the segment where compilation should stop and return
     * @return string
    */
    public static function Compile($Until=NULL)
    {
        $URI= '';
        $Until = (is_string($Until)) ? strtoupper($Until) : $Until;
        if ($Until === 'SCHEME') {
            return $URI .= (self::$__Segments['SCHEME'] !== '') ? self::$__Segments['SCHEME'].self::$_Separator_Scheme : '';
        } else {
            $URI .= (self::$__Segments['SCHEME'] !== '') ? self::$__Segments['SCHEME'].self::$_Separator_Scheme : '';
        }
        if ($Until === 'USER') {
            return $URI .= (self::$__Segments['USER'] !== '') ? self::$__Segments['USER'].self::$_Separator_Credentials : '';
        } else {
            $URI .= (self::$__Segments['USER'] !== '') ? self::$__Segments['USER'] : '';
        }
        $URI .= (self::$__Segments['USER'] !== '' || self::$__Segments['PASSWD'] !== '') ? self::$_Separator_Credentials : '';
        if ($Until === 'PASSWD') {
            return $URI .= (self::$__Segments['PASSWD'] !== '') ? self::$__Segments['PASSWD'].self::$_Separator_Auth : '';
        } else {
            $URI .= (self::$__Segments['PASSWD'] !== '') ? self::$__Segments['PASSWD'] : '';
        }
        $URI .= (self::$__Segments['USER'] !== '' || self::$__Segments['PASSWD'] !== '') ? self::$_Separator_Auth : '';
        if ($Until === 'HOST') {
            return $URI .= (self::$__Segments['HOST'] !== '') ? self::$__Segments['HOST'] : '';
        } else {
            $URI .= (self::$__Segments['HOST'] !== '') ? self::$__Segments['HOST'] : '';
        }
        if ($Until === 'PORT') {
            return $URI .= (self::$__Segments['PORT'] !== '') ? self::$_Separator_Port.self::$__Segments['PORT'] : '';
        } else {
            $URI .= (self::$__Segments['PORT'] !== '') ? self::$_Separator_Port.self::$__Segments['PORT'] : '';
        }
        if ($Until === 'PATH') {
            return $URI .= (self::$__Segments['PATH'] !== '') ? '/'.self::$__Segments['PATH'] : '';
        } else {
            $URI .= (self::$__Segments['PATH'] !== '') ? '/'.self::$__Segments['PATH'] : '';
        }
        if ($Until === 'SCRIPT') {
            return $URI .= (self::$__Segments['SCRIPT'] !== '') ? '/'.self::$__Segments['SCRIPT'] : '';
        } else {
            $URI .= (self::$__Segments['SCRIPT'] !== '') ? '/'.self::$__Segments['SCRIPT'] : '';
        }
        if ($Until === 'INFO') {
            return $URI .= (self::$__Segments['INFO'] !== '') ? '/'.self::$__Segments['INFO'] : '';
        } else {
            $URI .= (self::$__Segments['INFO'] !== '') ? '/'.self::$__Segments['INFO'] : '';
        }
        return $URI;
    }

    /** ----------------------------------------------------------------------------------------------------------------
     * SEGMENT RETRIEVER
     * Return a specific URI segment
     *
     * @access public
     * @param $Name [string] - The name of the segment you want
     * @return string (on success) bool (on failure)
    */
    public static function Segment($Name)
    {
        if (isset(self::$__Segments[$Name])) {
            return self::$__Segments[$Name];
        } return FALSE;
    }

    /** ----------------------------------------------------------------------------------------------------------------
     * BASE RETRIEVER
     * Return a specific precompiled base
     *
     * @access public
     * @param $Name [string] - The name of the base you want
     * @return mixed (on success) boolean (on failure)
    */
    public static function Base($Name)
    {
        switch ($Name) {
            case 'Host':
            case 'Domain':
                return self::$Base_Host;
            break;
            case 'App':
            case 'Base':
                return self::$Base_App;
            break;
            case 'Script':
            case 'Index':
                return self::$Base_Script;
            break;
            case 'Current':
            case 'This':
                return self::$Base_Current;
            break;
            case 'Public':
            case 'Web':
                return self::$Base_Public;
            break;
            case 'Skin':
            case 'Theme':
                return self::$Base_Skin;
            break;
            case 'All':
                return array(
                    'Host'=>self::$Base_Host,
                    'App'=>self::$Base_App,
                    'Script'=>self::$Base_Script,
                    'Current'=>self::$Base_Current,
                    'Public'=>self::$Base_Public,
                    'Skin'=>self::$Base_Skin,
                );
            break;
        } return FALSE;
    }

    /** ----------------------------------------------------------------------------------------------------------------
     * STRING PARSER
     * Replace known keywords in the specified string with current URI data
     *
     * @access public
     * @param $String [string] - A string that you want to parse
     * @return void
    */
    public static function Parse($String)
    {
        if (is_string($String)) {
            return str_replace(self::$__Parsers['SR_Key'], self::$__Parsers['SR_Data'], $String);
        } elseif (is_array($String)) {
            foreach ($String as $K => $V) {
                $Parsed[$K] = self::$replace($V);
            } return $Parsed;
        } return FALSE;
    }
}
if (isset($_URI_Params)) {
    _URI::__Init($_URI_Params);
} else {
    _URI::__Init();
} 

ඇත්ත වශයෙන්ම ඔබ එය ඔබගේ අවශ්‍යතා හා පද්ධතියට අනුවර්තනය කළ යුතුය!?!

<?php
// Change a few parameters before loading the class.
$_URI_Params = array(
    'Public_Relative' => FALSE,
    'Skin_Relative' => FALSE,
    'Skin_Default' => 'classic',
    // etc.
);
// Get the URI class
require('uri.php');
// Output all extracted URI segments
echo '<pre>';
var_dump(_URI::Extract());
echo '</pre>';
// Output extracted segments individually
echo 'Scheme: '._URI::Segment('SCHEME').'<br/>';
echo 'User: '._URI::Segment('USER').'<br/>';
echo 'Password: '._URI::Segment('PASSWD').'<br/>';
echo 'Host: '._URI::Segment('HOST').'<br/>';
echo 'Port: '._URI::Segment('PORT').'<br/>';
echo 'Path: '._URI::Segment('PATH').'<br/>';
echo 'Script: '._URI::Segment('SCRIPT').'<br/>';
echo 'Info: '._URI::Segment('INFO').'<br/>';
// Compile extracted segments into a usable URL
echo '<br/>';
echo 'Full Compiled URI: '._URI::Compile().'<br/>';
echo '<br/>';
// Output precompiled common bases for a faster result and better performance
echo 'Host Base: '._URI::Base('Host').'<br/>';
echo 'Application Base: '._URI::Base('App').'<br/>';
echo 'Running Script: '._URI::Base('Script').'<br/>';
echo 'Current URI Base: '._URI::Base('Current').'<br/>';
echo 'Public Folder Base: '._URI::Base('Public').'<br/>';
echo 'Skin Folder Base: '._URI::Base('Skin').'<br/>';
// Get all the precompiled bases in an associative array
echo '<pre>';
var_dump(_URI::Base('All'));
echo '</pre>';
// Parse an example string and replace known keys with actual URI data.
echo _URI::Parse('This is my current domain: %HostBase%
And the current application is here: %AppBase%
I load my skins form: %SkinBase%
etc.
'); 

එය තවමත් පරිපූර්ණ කළ යුතු නමුත් එය මධ්‍යගත යූආර්අයි පද්ධතියක් සඳහා දෙවියන්ගේ විසඳුමකි: ඩී


4

ඔබේ ගැටලුවට විසඳුම මෙයයි:

//Fetch page URL by this

$url = $_SERVER['REQUEST_URI'];
echo "$url<br />";

//It will print
//fetch host by this

$host=$_SERVER['HTTP_HOST'];
echo "$host<br />";

//You can fetch the full URL by this

$fullurl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $fullurl;

3

මම මෙම ප්‍රකාශය භාවිතා කළෙමි.

$base = "http://$_SERVER[SERVER_NAME]:$_SERVER[SERVER_PORT]$my_web_base_path";
$url = $base . "/" . dirname(dirname(__FILE__));

මෙය ඔබට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි.


3
    public static function getCurrentUrl($withQuery = true)
    {
        $protocol = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off')
        or (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https')
        or (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off')
        or (isset($_SERVER['SERVER_PORT']) && intval($_SERVER['SERVER_PORT']) === 443) ? 'https' : 'http';

        $uri = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

        return $withQuery ? $uri : str_replace('?' . $_SERVER['QUERY_STRING'], '', $uri);
    }

2

මම පහත කේතය භාවිතා කර ඇති අතර, එය අවස්ථා දෙකේදීම, HTTP සහ HTTPS සඳහා හොඳින් ක්‍රියාත්මක වේ.

function curPageURL() {
  if(isset($_SERVER["HTTPS"]) && !empty($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] != 'on' )) {
        $url = 'https://'.$_SERVER["SERVER_NAME"];//https url
  }  else {
    $url =  'http://'.$_SERVER["SERVER_NAME"];//http url
  }
  if(( $_SERVER["SERVER_PORT"] != 80 )) {
     $url .= $_SERVER["SERVER_PORT"];
  }
  $url .= $_SERVER["REQUEST_URI"];
  return $url;
}

echo curPageURL();

නිරූපණය


http සහ https අතර හුවමාරු ස්ථානය.
ෂ්වේට්

මා වරදවා වටහා නොගත්තොත්, $_SERVER['HTTPS'] = 'off'HTTPS මාර්ගය අවුලුවනු ඇත. එය නිවැරදි යැයි නොපෙනේ. අනෙක් අතට, මුල් තර්කනය නිවැරදි යැයි මම නොසිතමි.
Nisse Engström

2
$base_dir = __DIR__; // Absolute path to your installation, ex: /var/www/mywebsite
$doc_root = preg_replace("!{$_SERVER['SCRIPT_NAME']}$!", '', $_SERVER['SCRIPT_FILENAME']); # ex: /var/www
$base_url = preg_replace("!^{$doc_root}!", '', $base_dir); # ex: '' or '/mywebsite'
$base_url = str_replace('\\', '/', $base_url);//On Windows
$base_url = str_replace($doc_root, '', $base_url);//On Windows
$protocol = empty($_SERVER['HTTPS']) ? 'http' : 'https';
$port = $_SERVER['SERVER_PORT'];
$disp_port = ($protocol == 'http' && $port == 80 || $protocol == 'https' && $port == 443) ? '' : ":$port";
$domain = $_SERVER['SERVER_NAME'];
$full_url = "$protocol://{$domain}{$disp_port}{$base_url}"; # Ex: 'http://example.com', 'https://example.com/mywebsite', etc. 

මූලාශ්‍රය: http://blog.lavoie.sl/2013/02/php-document-root-path-and-url-detection.html


2

PHP හි filter_input ශ්‍රිතය භාවිතා කරමින් පිළිගත් පිළිතුරේ වඩාත් ආරක්‍ෂිත අනුවාදයක පදනම මෙන්න , එහි විභව lack නතාවයටද මෙය හේතු වේ $_SERVER['REQUEST_URI']:

$protocol_https = filter_input(INPUT_SERVER, 'HTTPS', FILTER_SANITIZE_STRING);
$host = filter_input(INPUT_SERVER, 'HTTP_HOST', FILTER_SANITIZE_URL);
$request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);
if(strlen($request_uri) == 0)
{
    $request_uri = filter_input(INPUT_SERVER, 'SCRIPT_NAME', FILTER_SANITIZE_URL);
    $query_string = filter_input(INPUT_SERVER, 'QUERY_STRING', FILTER_SANITIZE_URL);
    if($query_string)
    {
        $request_uri .= '?' . $query_string;
    }
}
$full_url = ($protocol_https ? 'https' : 'http') . '://' . $host . $request_uri;

ඔබේ අභිමතය පරිදි එය වෙනස් කිරීමට ඔබට විවිධ පෙරහන් කිහිපයක් භාවිතා කළ හැකිය .


1

HTTP_ORIGINපහත දැක්වෙන ස්නිපටයේ දක්වා ඇති පරිදි ඔබට භාවිතා කළ හැකිය :

if ( ! array_key_exists( 'HTTP_ORIGIN', $_SERVER ) ) {
    $this->referer = $_SERVER['SERVER_NAME'];
} else {
    $this->referer = $_SERVER['HTTP_ORIGIN'];
}

1

ඉතා සරල භාවිතය:

function current_url() {
    $current_url  = ( $_SERVER["HTTPS"] != 'on' ) ? 'http://'.$_SERVER["SERVER_NAME"] :  'https://'.$_SERVER["SERVER_NAME"];
    $current_url .= ( $_SERVER["SERVER_PORT"] != 80 ) ? ":".$_SERVER["SERVER_PORT"] : "";
    $current_url .= $_SERVER["REQUEST_URI"];

    return $current_url;
}

2
හායි, මේ පිටුවේ දැනටමත් පිළිතුරු කීයක් තිබේද, මෙය අනෙක් ඒවාට වඩා හොඳ වන්නේ ඇයිද යන්න හෝ එය වෙනස් ආකාරයකින් කරන්නේ කුමක්ද යන්න පිළිබඳව ඔබට පැහැදිලි කිරීමක් කළ හැකිද?
IMSoP

0

මම හිතන්නේ මේ ක්‍රමය හොඳයි .. උත්සාහ කරන්න

if($_SERVER['HTTP_HOST'] == "localhost"){
    define('SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
    define('SITEPATH', $_SERVER['DOCUMENT_ROOT']);
    define('CSS', $_SERVER['DOCUMENT_ROOT'] . '/css/');
    define('IMAGES', $_SERVER['DOCUMENT_ROOT'] . '/images/');
}
else{
    define('SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
    define('SITEPATH', $_SERVER['DOCUMENT_ROOT']);
    define('TEMPLATE', $_SERVER['DOCUMENT_ROOT'] . '/incs/template/');
    define('CSS', $_SERVER['DOCUMENT_ROOT'] . '/css/');
    define('IMAGES', $_SERVER['DOCUMENT_ROOT'] . '/images/');
}


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.