পিএইচপি-তে সম্পূর্ণ URL পান


977

আমি সম্পূর্ণ ইউআরএল পেতে এই কোডটি ব্যবহার করি:

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

সমস্যাটি হ'ল আমি আমার মধ্যে কিছু মুখোশ ব্যবহার করি .htaccess, তাই আমরা ইউআরএলে যা দেখি তা সবসময় ফাইলের আসল পথ নয়।

আমার যা দরকার তা হল ইউআরএল পাওয়া, ইউআরএল-তে কী লেখা আছে, এর চেয়ে বেশি কিছুই নয় এবং কিছুই কম নয় — পুরো URL।

ওয়েব ব্রাউজারে নেভিগেশন বারে এটি কীভাবে প্রদর্শিত হবে তা আমার দরকার, এবং সার্ভারে থাকা ফাইলটির আসল পথ নয়।


24
@ ব্র্যাড ইউআরএল বার ব্যবহারকারী ব্রাউজারে রয়েছে, তবে পিএইচপি-র কেন সে সম্পর্কিত কোনও কার্যকারিতা থাকবে? পিএইচপি সার্ভার সাইড হয়।
eis

33
@ আইস আমাকে বিশ্বাস করুন, এটি পাওয়ার অনেক কারণ রয়েছে। ল্যান্ডিং পৃষ্ঠাগুলি যা একই টেম্পলেট ব্যবহার করে তবে পৃথকভাবে ট্র্যাক করা দরকার ইত্যাদি And । এটা ঠিক বোবা মনে হচ্ছে।
ব্র্যাড

12
পুরো জিনিসটি কখনই সার্ভারের কাছে প্রেরণ করা হয় না কারণ এটি কোনও বিষয় নয়, কারণ এটি সহজে কোথাও সহজলভ্য নয়। আমি এই ভাঙ্গা উপর নির্ভর করে যে কোনও কার্যকারিতা বিবেচনা করব। তবে, এটাই আমার মতামত।
eis

5
স্ব-ইউআরএল-এর প্রয়োজনীয়তার জন্য উপরের আমার উদাহরণ: "ফর্ম ফর্ম ইউআরএলগুলি পূরণ করা" ভুল হতে পারে, কারণ পিএইচপি_এসএলএফ (কেবল পথ, সেন্স ডোমেন ইত্যাদি) এর জন্য যথেষ্ট হওয়া উচিত। তবে এটির অগত্যা এর অর্থ এই নয় যে ক্যানোনিকাল সেলফ URL এর জন্য অন্যান্য সমস্ত প্রয়োজনীয়তা অবৈধ। যদি তারা প্রকৃতপক্ষে হয় তবে এটির বিশদ বিবরণটি দেখতে দুর্দান্ত লাগবে।
জেড

4
আপনার ইউআরএলটি কনফিগারেশনে হার্ডকোড না করার একটি কারণ হ'ল যখন আপনার বিভিন্ন প্ল্যাটফর্ম রয়েছে যেখানে আপনার প্রকল্পটি ইনস্টল করা হবে (দেব, সংহতকরণ, উত্পাদন)। তাদের প্রত্যেকেরই তাদের নির্দিষ্ট URL থাকবে এবং আপনার প্রকল্পটি কোন সার্ভারে ইনস্টল করা হয়েছে সে অনুযায়ী আপনার কোডটি পরিবর্তন করতে চান না।
গিলিয়াম ফ্যাচে

উত্তর:


2049

কটাক্ষপাত আছে $_SERVER['REQUEST_URI'], অর্থাত্

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

(নোট করুন যে ডাবল উদ্ধৃত স্ট্রিং সিনট্যাক্স পুরোপুরি সঠিক )

আপনি যদি এইচটিটিপি এবং এইচটিটিপিএস উভয়কেই সমর্থন করতে চান তবে আপনি ব্যবহার করতে পারেন

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

সম্পাদকের দ্রষ্টব্য: এই কোডটি ব্যবহার করাতে সুরক্ষা জড়িত রয়েছে । ক্লায়েন্ট HTTP_HOST এবং REQUEST_URI সেট করতে পারে যেকোন স্বেচ্ছাসেবী মানতে চায়।


134
আপনি যদি কোনও https লিঙ্কে আছেন? HTTP_HOST যদি না পাওয়া যায় বা ক্লায়েন্টের পক্ষ থেকে ছড়িয়ে পড়েছে তবে কী হবে? এই উত্তরটি অসম্পূর্ণ এবং বিশ্বাসযোগ্য নয় বলে মনে হচ্ছে।
মানাচি

21
আপনি এটি সম্পর্কে বেশি কিছু করতে পারবেন না, এটি জিজ্ঞাসিত প্রশ্নের সঠিক পদ্ধতি।
এমফু

183
আপনি কেবল এইচটিটিপিএসের চেক যোগ করতে পারেন:'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
ivkremer

7
আপনি যদি কোনও ব্রাউজারে কোনও লিঙ্ক হিসাবে URL আউটপুট করে থাকেন তবে কেবল http: বন্ধ রেখে দিন off দেখুন: stackoverflow.com/questions/4978235
GameCharmer

5
@ax। আর তুমি কি ভাবছো আমার চেয়ে কিছু বেশি আছে? লোল ওকে পাল আপনার উত্তরটি পিছনে ঘুরিয়ে দেওয়ার জন্য যদি মডারেটর সরঞ্জামগুলির অপব্যবহারের মাধ্যমে আপনার অহঙ্কারটি দৃ strongly়তার সাথে প্রদর্শিত না হয়, তবে এটি অবশ্যই এখানে যথেষ্ট প্রদর্শিত হয়েছিল; এইভাবে আপনাকে যা বলার ছিল তা সবই খারাপ করে দিচ্ছে। এছাড়াও, আমি কোনও কিছু ভুল বুঝি নি (তারা ধরে নেওয়ার বিষয়ে তারা কী বলে তা আপনি জানেন ...), আপনি ঠিক কী করছেন তা আমি জানি এবং এটি ভাল অনুশীলন নয়।
হ্যাঁ ব্যারি

416

একটি ওয়েবপৃষ্ঠায় লিঙ্ক আউটপুট সংক্ষিপ্ত সংস্করণ

$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

ইউআরএল কাঠামো:

প্রকল্প: // ব্যবহারকারীর নাম: পাসওয়ার্ড @domain: পোর্ট / পাথ QUERY_STRING # fragment_id

সাহসী অংশগুলি ফাংশন দ্বারা অন্তর্ভুক্ত করা হবে না

মন্তব্য:

  • এই ফাংশনটিতে username:passwordএকটি সম্পূর্ণ URL বা টুকরা (হ্যাশ) অন্তর্ভুক্ত নয়।
  • এটি HTTP- র জন্য ডিফল্ট পোর্ট 80 এবং এইচটিটিপিএসের জন্য 443 পোর্ট প্রদর্শন করবে না।
  • কেবলমাত্র http এবং https স্কিমগুলির সাথে পরীক্ষিত।
  • #fragment_idক্লায়েন্ট (ব্রাউজার) দ্বারা সার্ভারে পাঠানো হয় না এবং সম্পূর্ণ URL এ যোগ করা হবে।
  • $_GETশুধুমাত্র foo=bar2একটি ইউআরএল জন্য থাকবে /example?foo=bar1&foo=bar2
  • কিছু সিএমএস এবং পরিবেশ পুনরায় লিখবে $_SERVER['REQUEST_URI']এবং এই ক্ষেত্রে /example?foo=bar2যেমন /example?foo=bar1&foo=bar2ব্যবহার করবে এমন URL এর জন্য ফিরে আসবে $_SERVER['QUERY_STRING']
  • মনে রাখবেন যে একটি ইউআরআই = URL + URNতবে জনপ্রিয় ব্যবহারের কারণে, ইউআরএল এর অর্থ এখন ইউআরআই এবং ইউআরএল উভয়ই।
  • আপনি HTTP_X_FORWARDED_HOSTযদি প্রক্সি বা ব্যালেন্সার ব্যবহার করার পরিকল্পনা না করেন তবে আপনার অপসারণ করা উচিত ।
  • বৈশিষ্ট বলছেন যে Hostহেডার পোর্ট নম্বর থাকা আবশ্যক, যদি না এটি ডিফল্ট সংখ্যা।

ক্লায়েন্ট (ব্রাউজার) নিয়ন্ত্রিত চলক:

  • $_SERVER['REQUEST_URI']। কোনও অসমর্থিত অক্ষর প্রেরণের আগে ব্রাউজার দ্বারা এনকোড করা হয়।
  • $_SERVER['HTTP_HOST']এবং পিএইচপি ম্যানুয়ালটিতে মন্তব্য অনুসারে সর্বদা উপলব্ধ থাকে না: http://php.net/manual/en/reided.variables.php
  • $_SERVER['HTTP_X_FORWARDED_HOST']ভারসাম্যকারীদের দ্বারা সেট হয়ে $_SERVERযায় এবং পিএইচপি ম্যানুয়ালটিতে ভেরিয়েবলের তালিকায় উল্লেখ করা হয় না ।

সার্ভার নিয়ন্ত্রিত ভেরিয়েবল:

  • $_SERVER['HTTPS']। ক্লায়েন্ট এটি ব্যবহার করতে পছন্দ করে তবে সার্ভার খালি বা "চালু" এর প্রকৃত মান প্রদান করে।
  • $_SERVER['SERVER_PORT']। সার্ভার কেবল বন্দর হিসাবে অনুমোদিত সংখ্যা গ্রহণ করে as
  • $_SERVER['SERVER_PROTOCOL']। সার্ভারটি নির্দিষ্ট কিছু প্রোটোকল গ্রহণ করে।
  • $_SERVER['SERVER_NAME']। এটি সার্ভার কনফিগারেশনে ম্যানুয়ালি সেট করা আছে এবং ক্রেলিক অনুযায়ী আইপিভি 6 এর জন্য উপলব্ধ নয় ।

সম্পর্কিত:

HTTP_HOST বনাম SERVER_NAME
কি এইচটিটিপি "হোস্ট" শিরোনাম প্যারামিটারে পোর্ট নম্বর প্রয়োজন?
https://stackoverflow.com/a/28049503/175071


14
এই কোডটি ব্যর্থ হবে যদি সার্ভারটি IPv6 আইপি ঠিকানা দ্বারা দেওয়া হয়। এটি ঠিক করতে, SERVER_NAME কে HTTP_HOST দিয়ে প্রতিস্থাপন করুন।
kralyk

1
দ্রষ্টব্য: url এর মতো $_SERVER['REQUEST_URI']দেখানো হবে/example?foo=bar2/example?foo=bar1&foo=bar2
টিমো হুভিনেন

2
এতে কোনও # এর পরে সংজ্ঞায়িত কিছু থাকবে না, সেগুলি সার্ভারের মাধ্যমে দেওয়া হবে না
উইলিয়াম কিং

1
আমি নিশ্চিত না যে এটি কোনও সুরক্ষা ঝুঁকি না হলে। আপনার উদাহরণে আপনি সঠিক পৃষ্ঠায় পৌঁছানোর জন্য হোস্ট শিরোনাম প্রেরণ করতে পারেন তবে HTTP_X_FORWARDED_HOST শিরোলেখ ব্যবহার করে অন্য হোস্টের মাধ্যমে পৃষ্ঠাটি এটি কল করা উচিত বলে মনে করতে পারে। অ্যাপ্লিকেশন যখন এই তথ্যটি ব্যবহার করে (যাই হোক না কেন) এটি প্রকৃতপক্ষে একটি সুরক্ষা সমস্যা হতে পারে কারণ এটি আপনাকে এমন কিছু প্রতিশ্রুতি দেওয়ার অনুমতি দেয় যা ঘটনাটি নয়।
hek2mgl

1
@ ম্যাট 3o12 বন্দরের মান সরাসরি Hostশিরোনাম থেকে নেওয়া হয়েছে , এটি সেট করে দেখেনি, এটি উল্লেখ করার জন্য ধন্যবাদ, এটি একটি টুইট হিসাবে যুক্ত করবে
টিমো হুভিনেন

226

উদাহরণস্বরূপ: 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/  

# অংশটি কোথায়, সার্ভারের পাশে # পরে অংশটি অ্যাক্সেস করার কোনও উপায় নেই?
রোহিত খাতরী

@ রোহিতখাত্রি এই অংশটি কেবল ব্রাউজারে অ্যাক্সেসযোগ্য এবং সার্ভারে প্রেরণ করা হয়নি
beppe9000

কোয়েরি স্ট্রিং সহ ইউআরএল পেতে ওয়ার্ডপ্রেস ফাংশনটি কী?
beppe9000

64

কোডটি ন্যূনতম রেখে, একটি ত্রৈমাসিক স্টেটমেন্ট ব্যবহার করে একটি সমাধান এখানে দেওয়া হয়েছে :

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

এটি করার সবচেয়ে ছোট এবং সহজতম উপায় এটি ধরে নিয়ে যে কোনও একটি ওয়েব সার্ভার এইচটিটিপিএসের জন্য স্ট্যান্ডার্ড পোর্ট 443 ব্যবহার করছে ।


18
অথবা $_SERVER["HTTPS"] == "on"এসএসএল চালু আছে কিনা তা পরীক্ষা করতে ব্যবহার করুন।
ডিজনেয়েট

15
আপনার $ _SERVER ["HTTPS"] ব্যবহার করা উচিত কারণ পোর্ট 443 কেবলমাত্র ডিফল্ট এসএসএল পোর্ট, কোনও এসএসএল সূচক নয়।
অ্যালেক্স বার্কার

4
@ অ্যালেক্সবার্কার - এজন্যই আমি বলেছিলাম "ধরে নিলাম যে কারও ওয়েব সার্ভার এইচটিটিপিএসের জন্য স্ট্যান্ডার্ড পোর্ট 443 ব্যবহার করছে।"
honyovk

44

বর্তমান ইউআরএল সন্ধানের জন্য আমার প্রিয় ক্রস প্ল্যাটফর্ম পদ্ধতিটি হ'ল:

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

7
বন্ধ করুন, তবে আমার এটিতে এটি পরিবর্তন করার দরকার ছিল: $ url = ((isset ($ _ সার্ভার ['HTTPS'])) && $ _SERVER ['HTTPS']! == 'বন্ধ')? "Https": "http") । ": // $: _ সার্ভার [HTTP_HOST], $ _SERVER [REQUEST_URI]";
এরিক অ্যালেন

34

সহজভাবে ব্যবহার করুন:

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

1
আমি এটি যতটা ব্যবহার করতে চাই, এটি আইআইএস-তে কাজ করে না। stackoverflow.com/questions/18008135/…
এরিক অ্যালেন

এটি আউটপুট কি করে?
হ্যাপি কোডার

5
পিএইচপি বিজ্ঞপ্তি: অপরিজ্ঞাত সূচি: REQUEST_SCHEME
এরিক অ্যালেন

আমি এই সমাধান ভালোবাসি! তবে আপনি কি এটিকে এনজিনেক্সের জন্য কাজ করতে পারেন?
কাউবয়েসাইফ

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;
}

দ্রষ্টব্য: আমি টিমো হুভিনেনের কোডটিতে সবেমাত্র একটি আপডেট করেছি , যাতে আপনি ইউআরএলে কোনও জিইটি প্যারামিটার পাবেন না। এই ইউআরএলটি সরল এবং এর মতো জিনিসগুলি সরিয়ে দেয়?hi=i&am=a&get

উদাহরণ:

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

হিসাবে প্রদর্শিত হবে:

http://www.example.com/index

আপনি কিছু নির্দিষ্ট বিষয়বস্তু সংজ্ঞায়িত করতে জিইটি পরামিতি ব্যবহার না করা হলে এটি ঠিক আছে, আপনার ক্ষেত্রে তার কোডটি ব্যবহার করা উচিত! :-)


ওহে, খুব সুন্দর :) আপনি কোনও হ্যাশ "#" (ইউআরএল টুকরা) পরে কিছুটা স্খলিত হলে কোনও কিছু সরিয়ে ফেলতে পারবেন
টিমো হুভিনেন

আসলেই নয়, কারণ আপনি যদি "বিস্ফোরিত ('#', $ বিভাগ [0])" সেট করেন তবে এটি ত্রুটি হিসাবে গণ্য হবে, কারণ "#" চিহ্নটি ইউআরএল ভঙ্গ করে, এবং কেবল জাভাস্ক্রিপ্ট দ্বারা পড়তে পারে। তবে আপনি যা নিশ্চিত করতে পারেন তা হ'ল আপনি "রিটার্ন ট্রিম ($ ইউআরএল, '#');" দিয়ে "রিটার্ন $ ইউআরএল;" এর রিমেক করতে পারেন, কারণ তখন আপনি এটি সরিয়ে ফেলবেন, যদি সেখানে থাকে তবে । তবে এটি নীচের সামগ্রীটি সরাবে না। আপনি চাইলে "পার্সে_আরল" পড়তে পারেন। :-)
অ্যালেক্স ওয়েস্টারগার্ড

17

সমস্ত ওয়েবসাইটের (অ্যাপাচি, এনগিনেক্স, আইআইএস, ...) কাজ করে কোড সাফ করুন:

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

11

এখানে আমার সমাধান - কোড ট্রেসি ডিবাগার দ্বারা অনুপ্রাণিত । এটি বিভিন্ন সার্ভার পোর্ট সমর্থনের জন্য পরিবর্তন করা হয়েছিল। আপনি পুরো $_SERVER['REQUEST_URI']বুনিয়াদি URL সহ বা কেবলমাত্র প্রাথমিক সার্ভারের 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 অবশ্যই উদ্ধৃতিতে থাকতে হবে, অন্যথায় এটি পিএইচপি 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

আমি ইউআরএল হ্যান্ডেল করতে এই ফাংশন তৈরি করেছি:

 <?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

প্যারেন্ট ফোল্ডার ইউআরএল খুঁজে পেতে এই ওয়ান-লাইনারটি ব্যবহার করুন (যদি আপনার পিএইসিএল_এইচটিপি সহ আসে এমন http_build_url () তে অ্যাক্সেস না থাকে):

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

5
আপনি url মিশিয়ে ডিস্কে নিখুঁত অবস্থান ফাইল করেন
sd1sd1

6

এটি আপনার অ্যাপাচি পরিবেশের ভেরিয়েবলগুলির সাথে করা বেশ সহজ। এটি কেবল অ্যাপাচি 2 এর সাথেই কাজ করে যা আমি ধরে নিয়েছি আপনি ব্যবহার করছেন।

কেবল নিম্নলিখিত পিএইচপি কোড ব্যবহার করুন:

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

6

এটা চেষ্টা কর:

print_r($_SERVER);

$_SERVERশিরোনাম, পাথ এবং স্ক্রিপ্টের অবস্থানের মতো তথ্য সম্বলিত একটি অ্যারে। এই অ্যারেতে থাকা এন্ট্রিগুলি ওয়েব সার্ভার দ্বারা তৈরি করা হয়। এখানে কোনও গ্যারান্টি নেই যে প্রতিটি ওয়েব সার্ভার এগুলির কোনও সরবরাহ করবে; সার্ভারগুলি কিছু বাদ দিতে পারে বা অন্যকে এখানে তালিকাভুক্ত নয় provide এটি বলেছিল যে এই ভেরিয়েবলগুলির একটি বড় সংখ্যা »সিজিআই / ১.১ স্পেসিফিকেশন হিসাবে গণ্য হয়, সুতরাং আপনার সেগুলি আশা করতে সক্ষম হওয়া উচিত।

$HTTP_SERVER_VARSএকই প্রাথমিক তথ্য রয়েছে তবে এটি সুপারগ্লোবাল নয়। (দ্রষ্টব্য $HTTP_SERVER_VARSএবং $_SERVERপৃথক ভেরিয়েবল এবং পিএইচপি তাদের এগুলি পরিচালনা করে)


6

আপনি বর্তমান পৃষ্ঠার সম্পূর্ণ URL পেতে কোনও যুক্তি ছাড়াই http_build_url ব্যবহার করতে পারেন :

$url = http_build_url();

5
দ্রষ্টব্য যে http_build_url () কেবলমাত্র একটি PECL ফাংশন: (PECL pecl_http> = 0.21.0)
ভলমাইক

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.
'); 

এটি এখনও নিখুঁত হওয়া দরকার তবে এটি একটি কেন্দ্রীভূত ইউআরআই সিস্টেমের জন্য godশ্বরের সমাধান: ডি


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 = stripos($_SERVER['SERVER_PROTOCOL'], 'https') === false ? 'http' : 'https';
    $uri = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

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

2

আমি নীচের কোডটি ব্যবহার করেছি এবং এটি আমার জন্য এইচটিটিপি এবং এইচটিটিপিএস উভয় ক্ষেত্রেই ঠিক কাজ করছে।

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'হলে এইচটিটিপিএস পথটি ট্রিগার করবে। এটা ঠিক মনে হচ্ছে না। অন্যদিকে, আমি মনে করি না যে মূল যুক্তিটি সঠিক ছিল।
নিস এনজিস্ট্রমে

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-docament-root-path-and-url-detection.html


2

এখানে পিএইচপি'র ফিল্টার_ইনপুট ফাংশনটি ব্যবহার করে গ্রহণযোগ্য উত্তরের আরও সুরক্ষিত সংস্করণের ভিত্তি রয়েছে যা এর সম্ভাব্য অভাবটিও পূরণ করে $_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
হাই, এই পৃষ্ঠায় ইতিমধ্যে কয়টি উত্তর রয়েছে তা প্রদত্ত, আপনি কেন এটি অন্যদের চেয়ে ভাল, বা এটি আলাদাভাবে কী করে সে সম্পর্কে কিছুটা ব্যাখ্যা যোগ করতে পারেন?
আইএমএসওপি

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/');
}


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.