আমি পিএইচপি দিয়ে বেস ইউআরএল কিভাবে পেতে পারি?


139

আমি উইন্ডোজ ভিস্তার XAMPP ব্যবহার করছি । আমার বিকাশে, আমি আছে http://127.0.0.1/test_website/

আমি কীভাবে http://127.0.0.1/test_website/পিএইচপি করব?

আমি এই জাতীয় কিছু চেষ্টা করেছিলাম, কিন্তু তাদের কেউই কাজ করেনি।

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

1
তারা কীভাবে কাজ করল না? তারা কি ফিরে এসেছিল?
অ্যানিমুসন

6
@ অ্যানিমুসন এই ধ্রুবকগুলি ইউআরএল নয়, স্থানীয় ফাইল সিস্টেমের পাথ ফেরত দেয়।
সিজেজোজ

উত্তর:


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


2
এই ক্ষেত্রেগুলির পরিবর্তে চেক করা $_SERVER['HTTPS']এবং অদলবদল করা উচিত । https://http://
ceejayoz

2
আপনাকে ধন্যবাদ, আমি এই ফাংশন প্রয়োজন।
ব্রাইস ফ্যাভ্রে

2
$ _SERVER ['REQUEST_SCHEME'] সম্পর্কে কী? সহজ না?
হিমশীতল

2
আপনি যদি 80 এর থেকে পৃথক কোনও বন্দর ব্যবহার করেন তবে এটি কাজ করে না: :(
এমসিয়ের তোফ '

1
ধন্যবাদ অ্যাডএমড্রু আমি ডাবল-চেক করেছি যে REQUEST_URIইতিমধ্যে একটি অন্তর্ভুক্ত /; এটা করে. @ স্বর্ণেন্দু দয়া করে অন্যান্য লোকের উত্তর সম্পাদনা করার সময় আরও সতর্ক হন। পরিবর্তে এটি একটি মন্তব্য করা উচিত ছিল।
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
আমি জানতাম আমি এই কাজটি করার আগে আগে কোনও কারণে কীভাবে স্মরণ করতে পারি না। ধন্যবাদ!
কাইল কুটস

আমাকে হেডার ইমেজে হোম url সেট করতে হবে। যখন ব্যবহারকারী হোম ছাড়া অন্য কোনও পৃষ্ঠায় থাকে, তখন তাকে হেডির ছবিতে ক্লিক করে হোমপেজে পুনর্নির্দেশ করা উচিত। আমি এটা কিভাবে করবো?
জো

21

মজাদার 'বেস_আরল' স্নিপেট!

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
বেস ইউআরএল পাওয়ার সেরা উপায় নয়।
অঞ্জানী বারনওয়াল

@ অজানী বার্নওয়াল আপনি কেন ব্যাখ্যা করতে পারেন? আমি মনে করি আপনি যদি কোনও ইউআরএল সহ স্ট্রিং রাখেন এবং বেস ইউআরএল https://example.comথেকে পছন্দ করতে চান তবে এটিই সেরা উপায় https://example.com/category2/page2.html?q=2#lorem-ipsumthat এতে আপনার বর্তমান পৃষ্ঠার কোনও সম্পর্ক নেই।
ওজজিআইই

7

আমি মনে করি $_SERVERসুপারগ্লোবালটির কাছে আপনি যে তথ্যটি খুঁজছেন তা রয়েছে। এটি এমন কিছু হতে পারে:

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

আপনি এখানে সম্পর্কিত পিএইচপি ডকুমেন্টেশন দেখতে পারেন ।


এটি একই পৃষ্ঠা ব্যবহারকারীকে পুনঃনির্দেশ করা এখনই রয়েছে। হোম পৃষ্ঠায় পুনর্নির্দেশ করতে আমি কীভাবে এটি ঠিক করতে পারি? আমি অ্যাপাচি, লোকালহোস্ট। পিএইচপি 7
জো

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'] প্রোটোকলের সাহায্যে ডোমেন নামটি প্রদর্শন করবে

_S _SERVER ['APP_URL'] প্রোটোকল: // ডোমেন (যেমন: - http: // লোকালহোস্ট ) ফিরিয়ে দেবে

Url- র অবশিষ্ট অংশ যেমন / ডিরেক্টরি / উপ-ডিরেক্টরি / অন্য কোনও কিছুর জন্য _S _SERVER ['REQUEST_URI']

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

আউটপুট এই মত হবে

HTTP: // স্থানীয় হোস্ট / ডিরেক্টরি / সাব / কিছু / অন্য


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 . "/";

ইউআরএল এটির মতো দেখাচ্ছে: http://example.com/folder/


2

আপনি এটি এর মতো করতে পারেন তবে দুঃখিত, আমার ইংরেজি যথেষ্ট ভাল নয়।

প্রথমে, এই সাধারণ কোডটি সহ হোম বেস url পান ..

আমি আমার স্থানীয় সার্ভার এবং সর্বজনীন এই কোডটি পরীক্ষা করেছি এবং ফলাফল ভাল।

<?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 এর মাধ্যমে স্ক্রিপ্টগুলি, CSS এবং সামগ্রী লোড করতে এই ফাংশনটি ব্যবহার করতে পারেন

<?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
আপনার উত্তরগুলিতে আপনার ওয়েবসাইটগুলির লিঙ্কগুলি অন্তর্ভুক্ত করবেন না
ক্রিসএফ

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

সার্ভার পোর্ট অন্তর্ভুক্ত করার জন্য @ ব্যবহারকারী 3832931 এর উত্তরে সম্পাদিত ..

' https: // লোকালহোস্ট: 8000 / ফোল্ডার / ' এর মতো ইউআরএল তৈরি করতে

$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'];

আমি এটি আমার সিএসএসের সাথে লিঙ্ক করতে আমার সাইটের বেস url প্রতিধ্বনিত করতে ব্যবহার করেছি।

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

এই প্রশ্নোত্তর এন্ট্রিতে এমন অনেক কোড রয়েছে যা বিপদ অঞ্চলে অন্তর্ভুক্ত, এটি বিশেষত পিএইচপিএসএসএলএফ ব্যবহারের কারণে।
হ্যাক্রে

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মধ্যে থাকা অনুরূপ বেস ইউআরএল প্রয়োজন .htaccess

দুর্ভাগ্যক্রমে পিএইচপি দিয়ে ফাইলটি RewriteBaseথেকে পুনরুদ্ধার .htaccessকরা অসম্ভব। তবে .htaccess ফাইলে একটি পরিবেশের পরিবর্তনশীল সেট করা এবং তারপরে পিএইচপিতে সেই পরিবর্তনশীলটি পুনরুদ্ধার করা সম্ভব । কোডের এই বিটগুলি কেবল পরীক্ষা করে দেখুন:

.htaccess

SetEnv BASE_PATH /

index.php

এখন আমি এটি টেমপ্লেটের বেস ট্যাগটিতে ব্যবহার করছি (পৃষ্ঠার শিরোনামে):

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

সুতরাং যদি ভেরিয়েবলটি খালি না থাকে, আমরা এটি ব্যবহার করি। অন্যথায় /ডিফল্ট বেস পাথ হিসাবে ফ্যালব্যাক ।

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

.htaccessরাইরাইটবেস আলাদা ছিল বলে তাদের সবার প্রথমে নিজস্ব জায়গা ছিল। সুতরাং এই সমাধানটি আমার পক্ষে কাজ করে।


0

A _SERVER ['REQUEST_URI'], অর্থাৎ দেখুন

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

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

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

এটি আমার পক্ষে কাজ করেছে। আমি আশা করি, এটি আপনাকেও সহায়তা করবে। এই প্রশ্ন জিজ্ঞাসা করার জন্য ধন্যবাদ।

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