CodeIgniter中使用base_url()時顯示http://::1/ci/
URL 輔助函數文件包含了一些幫助你處理 URL 的函數。
加載輔助函數後,你可以使用base_url(),site_url(),current_url()等一些列函數,但是有時候你會遇到這種問題,就是你嘗試輸出這些函數的值的時候,你會得到http://::1/ci/等類似的結果,即期望的localhost/ci/或者127.0.0.1/ci/ 變成了 http://::1/ci/
我到處搜集信息,想知道為啥會出現這樣的結果,然後有人說這是ipv6的地址,需要關閉ipv6功能,我試了,結果當然是失敗了。
我們一般在引用其他路徑下的文件時才會用到base_url()函數,因為我們可以把他的結果連接上一個路徑的字符串,就可在文件中引用或包含所需的文件了,比如我要ci/style/test.css文件,那我在其他文件裏面可以用下面一行代碼實現
<?php $path = base_url()."style/test.css"; ?>
但是這是我們想當然,你會發現,$path當做路徑去訪問的時候,因為$path=http://::1/ci/style/test.css,訪問不了
查看網頁源代碼,發現代碼是這樣的
<link rel="stylesheet" href="http://::1/ci/style/test.css" />
然後我點了一下那個鏈接,跳轉到一個空的頁面,證明瀏覽器也沒找到。
這個時候,我上網百度,谷歌了不止一下下,大家都說要設置application/config/config.php中的$config[‘base_url‘]的值
$config[‘base_url‘] =‘‘;
要在這裏加內容,這裏的路徑值就是函數base_url()的值,但是我發現及時改成
$config[‘base_url‘]=‘localhost‘; //或者 //$config[‘base_url‘]=‘E:/phpstudy/www/ci/‘;
但是發現依舊不對,然後我將鼠標定位到該鏈接,然後看瀏覽器左下角的鏈接,顯示的是localhost/ci/localhost/ci//style/test.css
這個時候,我就將$config[‘base_url‘]的值清空,然後在引用文件的地方直接用style/test.css,居然成功了
但是,我並不知道為什麽。
於是我就去看了一下base_url()的源碼
base_url()在system/core/config.php中的.php函數中,源碼是這樣的
class CI_Config { var $config = array(); var $is_loaded = array(); var $_config_paths = array(APPPATH); function __construct(){ $this->config =& get_config(); log_message(‘debug‘, "Config Class Initialized"); // Set the base_url automatically if none was provided if ($this->config[‘base_url‘] == ‘‘){ if (isset($_SERVER[‘SERVER_ADDR‘])){ $base_url = (empty($_SERVER[‘HTTPS‘]) OR strtolower($_SERVER[‘HTTPS‘]) === ‘off‘) ? ‘http‘ : ‘https‘; $base_url .= ‘://‘.$_SERVER[‘SERVER_ADDR‘]; $base_url .= substr($_SERVER[‘SCRIPT_NAME‘], 0, strpos($_SERVER[‘SCRIPT_NAME‘], basename($_SERVER[‘SCRIPT_FILENAME‘]))); } else{ $base_url = ‘http://localhost/‘; } $this->set_item(‘base_url‘, $base_url); } }
然後我找到輸出http://::1的原因了,因為一個$_SERVER[‘SERVER_ADDR‘],其中,$_SERVER[‘SERVER_ADDR‘]的值就是::1/,難怪不得,我馬上把他改為$_SERVER[‘HTTP_HOST‘],然後依舊保持$config[‘base_url‘]為空,然後,成功了
在其他界面只需要
$path=base_url().‘style/test.css’;
然後就可以了
其實做到這裏,我還是有點疑惑,如果你看到這篇博客,如果你有什麽見解,請一定要留言,我會非常感謝的
CodeIgniter中使用base_url()時顯示http://::1/ci/