ฉันใช้XAMPPบน Windows Vista http://127.0.0.1/test_website/
ในการพัฒนาของฉันฉันมี
ฉันจะhttp://127.0.0.1/test_website/
ใช้ PHP ได้อย่างไร
ฉันลองทำสิ่งเหล่านี้แล้ว แต่ก็ไม่ได้ผล
echo dirname(__FILE__)
or
echo basename(__FILE__);
etc.
ฉันใช้XAMPPบน Windows Vista http://127.0.0.1/test_website/
ในการพัฒนาของฉันฉันมี
ฉันจะhttp://127.0.0.1/test_website/
ใช้ PHP ได้อย่างไร
ฉันลองทำสิ่งเหล่านี้แล้ว แต่ก็ไม่ได้ผล
echo dirname(__FILE__)
or
echo basename(__FILE__);
etc.
คำตอบ:
ลองสิ่งนี้:
<?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
ต่อคำตอบนี้โปรดให้แน่ใจว่าการกำหนดค่าของ Apache SERVER_NAME
ถูกต้องเพื่อให้คุณได้อย่างปลอดภัยสามารถขึ้นอยู่กับ
<VirtualHost *>
ServerName example.com
UseCanonicalName on
</VirtualHost>
หมายเหตุ : หากคุณขึ้นอยู่กับHTTP_HOST
คีย์ (ซึ่งมีอินพุตของผู้ใช้) คุณยังคงต้องทำการล้างบางอย่างลบช่องว่างเครื่องหมายจุลภาคการคืนค่าขนส่ง ฯลฯ สิ่งใดก็ตามที่ไม่ใช่อักขระที่ถูกต้องสำหรับโดเมน ตรวจสอบฟังก์ชันPHP builtin parse_urlสำหรับตัวอย่าง
$_SERVER['HTTPS']
และเปลี่ยนhttps://
แทนhttp://
ในกรณีดังกล่าว
REQUEST_URI
มี/
; มันทำ @swarnenduโปรดระมัดระวังมากขึ้นเมื่อแก้ไขคำตอบของผู้อื่น นั่นควรเป็นความคิดเห็นแทน
ฟังก์ชันที่ปรับให้ดำเนินการโดยไม่มีคำเตือน:
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'];
}
ข้อมูลโค้ด '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/"
// }
$base_url="http://".$_SERVER['SERVER_NAME'].dirname($_SERVER["REQUEST_URI"].'?').'/';
การใช้งาน:
print "<script src='{$base_url}js/jquery.min.js'/>";
$modifyUrl = parse_url($url);
print_r($modifyUrl)
ใช้งานง่ายเพียงแค่
เอาท์พุท:
Array
(
[scheme] => http
[host] => aaa.bbb.com
[path] => /
)
https://example.com
จากhttps://example.com/category2/page2.html?q=2#lorem-ipsum
- ซึ่งไม่มีส่วนเกี่ยวข้องกับเพจปัจจุบันที่คุณอยู่
ลองใช้รหัสต่อไปนี้:
$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'];
รหัสต่อไปนี้จะช่วยลดปัญหาในการตรวจสอบโปรโตคอล $ _SERVER ['APP_URL'] จะแสดงชื่อโดเมนด้วยโปรโตคอล
$ _SERVER ['APP_URL'] จะส่งคืนโปรโตคอล: // โดเมน (เช่น: - http: // localhost )
$ _SERVER ['REQUEST_URI'] สำหรับส่วนที่เหลือของ url เช่น/ directory / subdirectory / something / else
$url = $_SERVER['APP_URL'].$_SERVER['REQUEST_URI'];
ผลลัพธ์จะเป็นแบบนี้
http: // localhost / ไดเร็กทอรี / ไดเร็กทอรีย่อย / something / else
ฉันพบสิ่งนี้ใน 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();
?>
$http = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? "https://" : "http://";
$url = $http . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI'];
ลองทำตามนี้ มันใช้ได้กับฉัน
/*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>
เคล็ดลับง่ายๆง่ายๆ:
$host = $_SERVER['HTTP_HOST'];
$host_upper = strtoupper($host);
$path = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$baseurl = "http://" . $host . $path . "/";
URL มีลักษณะดังนี้: http://example.com/folder/
คุณสามารถทำเช่นนี้ได้ แต่ขออภัยภาษาอังกฤษของฉันไม่ดีพอ
ขั้นแรกรับ 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
เว็บไซต์ของคุณและกำหนด
จากนั้นคุณสามารถใช้ฟังก์ชันนี้เพื่อโหลดสคริปต์ css และเนื้อหาผ่าน 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 องค์ประกอบ องค์ประกอบแรกคือทุกอย่างก่อน? และที่สองคืออาร์เรย์ที่มีตัวแปรสตริงคิวรีทั้งหมดในอาร์เรย์ที่เชื่อมโยงกัน
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;
}
หมายเหตุ: นี่เป็นการขยายคำตอบจาก maek ด้านบน (เครดิตที่ครบกำหนดเครดิต)
แก้ไขที่คำตอบของ @ user3832931 เพื่อรวมพอร์ตเซิร์ฟเวอร์ ..
เพื่อสร้าง URL เช่น ' https: // localhost: 8000 / folder / '
$base_url="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($_SERVER["REQUEST_URI"].'?').'/';
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;
}
ลองใช้: $_SERVER['SERVER_NAME'];
ฉันใช้มันเพื่อสะท้อน URL ฐานของไซต์ของฉันเพื่อเชื่อมโยง css ของฉัน
<link href="//<?php echo $_SERVER['SERVER_NAME']; ?>/assets/css/your-stylesheet.css" rel="stylesheet" type="text/css">
หวังว่านี่จะช่วยได้!
ฉันมีคำถามเดียวกันกับ OP แต่อาจมีข้อกำหนดที่แตกต่างออกไป ฉันสร้างฟังก์ชั่นนี้ ...
/**
* 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 ที่สมบูรณ์ที่ควรใช้สำหรับการเปลี่ยนเส้นทาง
$some_variable = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['REQUEST_URI'], "/")+1);
และคุณจะได้รับสิ่งที่ชอบ
lalala/tralala/something/
เพียงแค่ทดสอบและรับผล
// 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']."/";
ในกรณีของฉันฉันต้องการ URL พื้นฐานที่คล้ายกับที่RewriteBase
มีอยู่ใน.htaccess
ไฟล์
น่าเสียดายที่การดึงไฟล์RewriteBase
จาก.htaccess
ไฟล์เป็นไปไม่ได้ด้วย PHP แต่เป็นไปได้ที่จะตั้งค่าตัวแปรสภาพแวดล้อมในไฟล์. htaccess จากนั้นดึงตัวแปรนั้นใน PHP เพียงตรวจสอบบิตของโค้ดเหล่านี้ออก:
.htaccess
SetEnv BASE_PATH /
index.php
ตอนนี้ฉันใช้สิ่งนี้ในแท็กฐานของเทมเพลต (ในส่วนหัวของหน้า):
<base href="<?php echo ! empty( getenv( 'BASE_PATH' ) ) ? getenv( 'BASE_PATH' ) : '/'; ?>"/>
ดังนั้นหากตัวแปรไม่ว่างเราก็ใช้มัน มิฉะนั้นทางเลือก/
เป็นเส้นทางพื้นฐานเริ่มต้น
ตามสภาพแวดล้อม url พื้นฐานจะถูกต้องเสมอ ฉันใช้/
เป็น URL ฐานบนเว็บไซต์ท้องถิ่นและเว็บไซต์ที่ใช้งานจริง แต่/foldername/
สำหรับสภาพแวดล้อมการแสดงละคร
พวกเขาทั้งหมดมีของตัวเอง.htaccess
ตั้งแต่แรกเพราะ RewriteBase นั้นแตกต่างกัน วิธีนี้ใช้ได้กับฉัน
ดูที่ $ _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]";
สิ่งนี้ได้ผลสำหรับฉัน ฉันหวังว่านี่จะช่วยคุณได้เช่นกัน ขอบคุณที่ถามคำถามนี้