मुझे PHP के साथ आधार URL कैसे मिलेगा?


139

मैं Windows Vista पर XAMPP का उपयोग कर रहा हूं । मेरे विकास में, मेरे पास हैhttp://127.0.0.1/test_website/

मैं http://127.0.0.1/test_website/PHP के साथ कैसे प्राप्त करूं ?

मैंने ऐसा कुछ करने की कोशिश की, लेकिन उनमें से किसी ने भी काम नहीं किया।

echo dirname(__FILE__)
or
echo basename(__FILE__);
etc.

1
उन्होंने कैसे काम नहीं किया? वे क्या लौटा?
animuson

6
@ मानसून उन स्थिरांक को स्थानीय फाइलसिस्टम पथ देता है, URL नहीं।
सियजॉयज

जवाबों:


251

इसे इस्तेमाल करे:

<?php echo "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; ?>

$_SERVERपूर्वनिर्धारित चर के बारे में अधिक जानें ।

यदि आप https का उपयोग करने की योजना बना रहे हैं, तो आप इसका उपयोग कर सकते हैं:

function url(){
  return sprintf(
    "%s://%s%s",
    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
    $_SERVER['SERVER_NAME'],
    $_SERVER['REQUEST_URI']
  );
}

echo url();
#=> http://127.0.0.1/foo

प्रति इस जवाब , अपने अपाचे ठीक से कॉन्फ़िगर करने के लिए तो आप सुरक्षित रूप से इस पर निर्भर कर सकते हैं सुनिश्चित करें SERVER_NAME

<VirtualHost *>
    ServerName example.com
    UseCanonicalName on
</VirtualHost>

नोट : यदि आप HTTP_HOSTकुंजी पर निर्भर हैं (जिसमें उपयोगकर्ता इनपुट शामिल है), तो आपको अभी भी कुछ क्लीनअप करना होगा, रिक्त स्थान, अल्पविराम, गाड़ी वापसी, आदि। कुछ भी जो एक डोमेन के लिए एक वैध चरित्र नहीं है। उदाहरण के लिए PHP अंतर्निहित parse_url फ़ंक्शन की जाँच करें ।


2
उन मामलों के बजाय जांच $_SERVER['HTTPS']और अदला-बदली करनी चाहिए । https://http://
सियजियोज़

2
आपके लिए धन्यवाद, मुझे इस फ़ंक्शन की आवश्यकता थी।
ब्राइस फेवरे

2
$ _SERVER ['REQUEST_SCHEME'] के बारे में क्या? इतना आसान नहीं है?
१४:५२ पर शीतदंश

2
अगर आप 80 से :( एक बंदरगाह अलग प्रयोग कर रहे हैं काम नहीं करता है
M'sieur Toph '

1
@admdrew धन्यवाद मैंने डबल-चेक किया जिसमें REQUEST_URIपहले से ही एक शामिल है /; ऐसा होता है। अन्य लोगों के उत्तरों को संपादित करते समय @swarnendu कृपया अधिक सावधान रहें। इसके बजाय एक टिप्पणी होनी चाहिए।
maček

28

चेतावनियों के बिना निष्पादित करने के लिए समायोजित कार्य:

function url(){
    if(isset($_SERVER['HTTPS'])){
        $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
    }
    else{
        $protocol = 'http';
    }
    return $protocol . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

1
मुझे पता था कि मैंने यह किया है इससे पहले कि वह किसी कारण से याद नहीं कर सकता। धन्यवाद!
काइल कोट

मुझे हेडर इमेज में होम यूआरएल सेट करने की आवश्यकता है। जब उपयोगकर्ता घर के अलावा किसी अन्य पेज पर होता है, तो उसे हेडर इमेज पर क्लिक करके होमपेज पर रीडायरेक्ट किया जाना चाहिए। मैं उसे कैसे कर सकता हूँ?
जॉय

21

मज़ा 'base_url' स्निपेट!

if (!function_exists('base_url')) {
    function base_url($atRoot=FALSE, $atCore=FALSE, $parse=FALSE){
        if (isset($_SERVER['HTTP_HOST'])) {
            $http = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
            $hostname = $_SERVER['HTTP_HOST'];
            $dir =  str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);

            $core = preg_split('@/@', str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(dirname(__FILE__))), NULL, PREG_SPLIT_NO_EMPTY);
            $core = $core[0];

            $tmplt = $atRoot ? ($atCore ? "%s://%s/%s/" : "%s://%s/") : ($atCore ? "%s://%s/%s/" : "%s://%s%s");
            $end = $atRoot ? ($atCore ? $core : $hostname) : ($atCore ? $core : $dir);
            $base_url = sprintf( $tmplt, $http, $hostname, $end );
        }
        else $base_url = 'http://localhost/';

        if ($parse) {
            $base_url = parse_url($base_url);
            if (isset($base_url['path'])) if ($base_url['path'] == '/') $base_url['path'] = '';
        }

        return $base_url;
    }
}

के रूप में सरल का उपयोग करें:

//  url like: http://stackoverflow.com/questions/2820723/how-to-get-base-url-with-php

echo base_url();    //  will produce something like: http://stackoverflow.com/questions/2820723/
echo base_url(TRUE);    //  will produce something like: http://stackoverflow.com/
echo base_url(TRUE, TRUE); || echo base_url(NULL, TRUE);    //  will produce something like: http://stackoverflow.com/questions/
//  and finally
echo base_url(NULL, NULL, TRUE);
//  will produce something like: 
//      array(3) {
//          ["scheme"]=>
//          string(4) "http"
//          ["host"]=>
//          string(12) "stackoverflow.com"
//          ["path"]=>
//          string(35) "/questions/2820723/"
//      }

15
   $base_url="http://".$_SERVER['SERVER_NAME'].dirname($_SERVER["REQUEST_URI"].'?').'/';

उपयोग:

print "<script src='{$base_url}js/jquery.min.js'/>";

13
$modifyUrl = parse_url($url);
print_r($modifyUrl)


आउटपुट का उपयोग करने के लिए यह सरल है :

Array
(
    [scheme] => http
    [host] => aaa.bbb.com
    [path] => /
)

1
यह बेस यूआरएल प्राप्त करने का सबसे अच्छा तरीका नहीं है।
अंजनी बर्णवाल

@AnjaniBarnwal क्या आप समझा सकते हैं कि क्यों? मुझे लगता है कि यह सबसे अच्छा तरीका है यदि आपके पास एक यूआरएल के साथ एक स्ट्रिंग है और बेस यूआरएल को इस तरह https://example.comसे प्राप्त करना चाहता है https://example.com/category2/page2.html?q=2#lorem-ipsum- जिसका आपके वर्तमान पृष्ठ से कोई लेना-देना नहीं है।
OZZIE

7

मुझे लगता है कि $_SERVERसुपरग्लोबल में वह जानकारी है जिसकी आपको तलाश है। यह कुछ इस तरह हो सकता है:

echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']

आप प्रासंगिक PHP प्रलेखन यहाँ देख सकते हैं ।


यह उसी पृष्ठ उपयोगकर्ता पर पुनर्निर्देशित करता है जो अभी है। मैं इसे होम पेज पर रीडायरेक्ट कैसे कर सकता हूं? Im अपाचे पर, लोकलहोस्ट। php7
जॉय

5

निम्नलिखित कोड का प्रयास करें:

$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
echo $config['base_url'];

4

निम्नलिखित कोड प्रोटोकॉल की जांच करने के लिए समस्या को कम करेगा। $ _SERVER ['APP_URL'] प्रोटोकॉल के साथ डोमेन नाम प्रदर्शित करेगा

$ _SERVER ['APP_URL'] प्रोटोकॉल लौटाएगा : // डोमेन (जैसे: - http: // localhost )

$ _SERVER ['REQUEST_URI'] यूआरएल के शेष भागों के लिए जैसे / निर्देशिका / उपनिर्देशिका / कुछ और

 $url = $_SERVER['APP_URL'].$_SERVER['REQUEST_URI'];

आउटपुट इस तरह होगा

http: // localhost / directory / उपनिर्देशिका / कुछ / कुछ और


1
कोड के एक यादृच्छिक गुच्छा को चिपकाने के बजाय, यह बताएं कि आपने क्या किया और क्यों किया। इस तरह, एक ही समस्या वाले ओपी और भविष्य के पाठक वास्तव में आपके उत्तर से कुछ सीख सकते हैं, न कि केवल इसे कॉपी / पेस्ट करने और कल फिर से वही प्रश्न पूछने के लिए।
ओल्डस्कूल

3

मुझे यह http://webcheatsheet.com/php/get_current_page_url.php पर मिला

एक पृष्ठ पर निम्नलिखित कोड जोड़ें:

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

अब आप लाइन का उपयोग करके वर्तमान पृष्ठ URL प्राप्त कर सकते हैं:

<?php
  echo curPageURL();
?>

कभी-कभी केवल पृष्ठ नाम प्राप्त करने की आवश्यकता होती है। निम्न उदाहरण दिखाता है कि यह कैसे करना है:

<?php
function curPageName() {
 return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
}

echo "The current page name is ".curPageName();
?>


2

इसे इस्तेमाल करे। इससे मेरा काम बनता है।

/*url.php file*/

trait URL {
    private $url = '';
    private $current_url = '';
    public $get = '';

    function __construct()
    {
        $this->url = $_SERVER['SERVER_NAME'];
        $this->current_url = $_SERVER['REQUEST_URI'];

        $clean_server = str_replace('', $this->url, $this->current_url);
        $clean_server = explode('/', $clean_server);

        $this->get = array('base_url' => "/".$clean_server[1]);
    }
}

इस तरह का उपयोग करें:

<?php
/*
Test file

Tested for links:

http://localhost/index.php
http://localhost/
http://localhost/index.php/
http://localhost/url/index.php    
http://localhost/url/index.php/  
http://localhost/url/ab
http://localhost/url/ab/c
*/

require_once 'sys/url.php';

class Home
{
    use URL;
}

$h = new Home();

?>

<a href="<?=$h->get['base_url']?>">Base</a>

2

सरल और आसान ट्रिक:

$host  = $_SERVER['HTTP_HOST'];
$host_upper = strtoupper($host);
$path   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$baseurl = "http://" . $host . $path . "/";

URL इस तरह दिखता है: http://example.com/folder/


2

आप इसे इस तरह से कर सकते हैं, लेकिन माफ करना मेरी अंग्रेजी अच्छी नहीं है।

सबसे पहले, इस सरल कोड के साथ होम बेस यूआरएल प्राप्त करें।

मैंने अपने स्थानीय सर्वर और सार्वजनिक पर इस कोड का परीक्षण किया है और परिणाम अच्छा है।

<?php

function home_base_url(){   

// first get http protocol if http or https

$base_url = (isset($_SERVER['HTTPS']) &&

$_SERVER['HTTPS']!='off') ? 'https://' : 'http://';

// get default website root directory

$tmpURL = dirname(__FILE__);

// when use dirname(__FILE__) will return value like this "C:\xampp\htdocs\my_website",

//convert value to http url use string replace, 

// replace any backslashes to slash in this case use chr value "92"

$tmpURL = str_replace(chr(92),'/',$tmpURL);

// now replace any same string in $tmpURL value to null or ''

// and will return value like /localhost/my_website/ or just /my_website/

$tmpURL = str_replace($_SERVER['DOCUMENT_ROOT'],'',$tmpURL);

// delete any slash character in first and last of value

$tmpURL = ltrim($tmpURL,'/');

$tmpURL = rtrim($tmpURL, '/');


// check again if we find any slash string in value then we can assume its local machine

    if (strpos($tmpURL,'/')){

// explode that value and take only first value

       $tmpURL = explode('/',$tmpURL);

       $tmpURL = $tmpURL[0];

      }

// now last steps

// assign protocol in first value

   if ($tmpURL !== $_SERVER['HTTP_HOST'])

// if protocol its http then like this

      $base_url .= $_SERVER['HTTP_HOST'].'/'.$tmpURL.'/';

    else

// else if protocol is https

      $base_url .= $tmpURL.'/';

// give return value

return $base_url; 

}

?>

// and test it

echo home_base_url();

आउटपुट इस तरह होगा:

local machine : http://localhost/my_website/ or https://myhost/my_website 

public : http://www.my_website.com/ or https://www.my_website.com/

home_base_urlसमारोह का उपयोग करेंindex.phpअपनी वेबसाइट करें और इसे परिभाषित करें

और फिर आप इस फ़ंक्शन का उपयोग url जैसे स्क्रिप्ट, सीएसएस और सामग्री लोड करने के लिए कर सकते हैं

<?php

echo '<script type="text/javascript" src="'.home_base_url().'js/script.js"></script>'."\n";

?>

इस तरह उत्पादन होगा:

<script type="text/javascript" src="http://www.my_website.com/js/script.js"></script>

और अगर यह स्क्रिप्ट ठीक काम करता है ,,!


2
कृपया अपने जवाब में अपनी वेबसाइटों के लिंक शामिल नहीं है
ChrisF

1

यहाँ एक मैं सिर्फ एक साथ रखा है जो मेरे लिए काम करता है। यह 2 तत्वों के साथ एक सरणी लौटाएगा। पहला तत्व से पहले सब कुछ है? और दूसरा एक ऐरे है जिसमें सभी प्रकार के क्वेरी स्ट्रिंग वैरिएबल एक सहयोगी सरणी में होते हैं।

function disectURL()
{
    $arr = array();
    $a = explode('?',sprintf(
        "%s://%s%s",
        isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
        $_SERVER['SERVER_NAME'],
        $_SERVER['REQUEST_URI']
    ));

    $arr['base_url']     = $a[0];
    $arr['query_string'] = [];

    if(sizeof($a) == 2)
    {
        $b = explode('&', $a[1]);
        $qs = array();

        foreach ($b as $c)
        {
            $d = explode('=', $c);
            $qs[$d[0]] = $d[1];
        }
        $arr['query_string'] = (count($qs)) ? $qs : '';
    }

    return $arr;

}

नोट: यह ऊपर दिए गए maček द्वारा दिए गए उत्तर का विस्तार है। (जो प्रशंसा का पात्र है, उसकी प्रशंसा करें।)


1

सर्वर पोर्ट शामिल करने के लिए @ user3832931 के उत्तर पर संपादित किया गया।

URL बनाने के लिए जैसे ' https: // localhost: 8000 / folder / '

$base_url="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($_SERVER["REQUEST_URI"].'?').'/';

0
function server_url(){
    $server ="";

    if(isset($_SERVER['SERVER_NAME'])){
        $server = sprintf("%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_NAME'], '/');
    }
    else{
        $server = sprintf("%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_ADDR'], '/');
    }
    print $server;

}

0

प्रयोग करके देखें: $_SERVER['SERVER_NAME'];

मैंने अपनी सीएसएस लिंक करने के लिए अपनी साइट के बेस यूआरएल को प्रतिध्वनित करने के लिए इसका इस्तेमाल किया।

<link href="https://stackoverflow.com//<?php echo $_SERVER['SERVER_NAME']; ?>/assets/css/your-stylesheet.css" rel="stylesheet" type="text/css">

उम्मीद है की यह मदद करेगा!


0

मैं ओपी के रूप में एक ही सवाल था, लेकिन शायद एक अलग आवश्यकता। मैंने यह फ़ंक्शन बनाया ...

/**
 * Get the base URL of the current page. For example, if the current page URL is
 * "https://example.com/dir/example.php?whatever" this function will return
 * "https://example.com/dir/" .
 *
 * @return string The base URL of the current page.
 */
function get_base_url() {

    $protocol = filter_input(INPUT_SERVER, 'HTTPS');
    if (empty($protocol)) {
        $protocol = "http";
    }

    $host = filter_input(INPUT_SERVER, 'HTTP_HOST');

    $request_uri_full = filter_input(INPUT_SERVER, 'REQUEST_URI');
    $last_slash_pos = strrpos($request_uri_full, "/");
    if ($last_slash_pos === FALSE) {
        $request_uri_sub = $request_uri_full;
    }
    else {
        $request_uri_sub = substr($request_uri_full, 0, $last_slash_pos + 1);
    }

    return $protocol . "://" . $host . $request_uri_sub;

}

... जो संयोगवश, मैं पूर्ण URL बनाने में मदद करने के लिए उपयोग करता हूं, जिनका उपयोग पुनर्निर्देशन के लिए किया जाना चाहिए।


0
$some_variable =  substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['REQUEST_URI'], "/")+1);

और आपको कुछ मिलता है

lalala/tralala/something/

इस Q & A प्रविष्टि पर बहुत कोड है जो खतरे के क्षेत्र में है, यह विशेष रूप से PHP_SELF के उपयोग के कारण है।
हकेर

0

बस परीक्षण करें और परिणाम प्राप्त करें।

// output: /myproject/index.php
$currentPath = $_SERVER['PHP_SELF'];
// output: Array ( [dirname] => /myproject [basename] => index.php [extension] => php [filename] => index ) 
$pathInfo = pathinfo($currentPath);
// output: localhost
$hostName = $_SERVER['HTTP_HOST'];
// output: http://
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
// return: http://localhost/myproject/
echo $protocol.$hostName.$pathInfo['dirname']."/";

0

मेरे मामले में मुझे RewriteBaseइसमें निहित आधार URL की आवश्यकता थी.htaccess फ़ाइल ।

दुर्भाग्य से बस फ़ाइल RewriteBaseसे पुनर्प्राप्त .htaccessकरना PHP के साथ असंभव है। लेकिन .htaccess फ़ाइल में पर्यावरण चर को सेट करना और फिर PHP में उस चर को पुनः प्राप्त करना संभव है। बस कोड के इन बिट्स की जाँच करें:

.htaccess

SetEnv BASE_PATH /

index.php

अब मैं इसका उपयोग टेम्प्लेट के बेस टैग में (पृष्ठ के मुख्य भाग में) करता हूं:

<base href="<?php echo ! empty( getenv( 'BASE_PATH' ) ) ? getenv( 'BASE_PATH' ) : '/'; ?>"/>

इसलिए यदि चर खाली नहीं था, तो हम इसका उपयोग करते हैं। नहीं तो कमबैक/ मूलभूत आधार पथ के रूप में ।

पर्यावरण के आधार पर बेस यूआरएल हमेशा सही रहेगा। मैं /स्थानीय और उत्पादन वेबसाइटों पर बेस यूआरएल के रूप में उपयोग करता हूं । परंतु/foldername/ मंचन के माहौल के लिए।

.htaccessपहली बार में उन सभी का अपना था क्योंकि रिवाइटबेस अलग था। तो यह समाधान मेरे लिए काम करता है।


0

$ _SERVER ['REQUEST_URI'] पर एक नज़र डालें, अर्थात

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

यदि आप HTTP और HTTPS दोनों का समर्थन करना चाहते हैं, तो आप इस समाधान का उपयोग कर सकते हैं

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

इसने मेरे लिए काम किया। मुझे उम्मीद है, यह आपकी मदद भी करेगा। यह सवाल पूछने के लिए धन्यवाद।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.