CodeIgniter中使用base_url()时显示http://::1/ci/

Posted 寻觅beyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter中使用base_url()时显示http://::1/ci/

CodeIgniter base_url(), localhost 中的链接给了我实时服务器

CodeIgniter 3 base_url 函数返回错误的 url

使用 jQuery Mobile 的 Codeigniter 有时会返回错误的 base_url()

CodeIgniter 中的 base_url() 和 403 错误

PHP CodeIgniter动态base_url