1. 程式人生 > >CodeIgniter中使用base_url()時顯示http://::1/ci/

CodeIgniter中使用base_url()時顯示http://::1/ci/

call 上網百度 current style cti 其他 上一個 實現 文件

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/