zoukankan      html  css  js  c++  java
  • 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’;
    

    然后就可以了

    其实做到这里,我还是有点疑惑,如果你看到这篇博客,如果你有什么见解,请一定要留言,我会非常感谢的

  • 相关阅读:
    Servlet页面跳转实现方法的区别
    谈JSP与XML的交互
    xml可以用做什么?
    Struts1.2入门知识
    做java web 开发的简单项目必须具备的知识
    Web工程师必备的18款工具
    css的四种调用方式
    jQuery Utilities
    历年考研数学常考题型考试必备
    。net思维导图
  • 原文地址:https://www.cnblogs.com/-beyond/p/7624366.html
Copyright © 2011-2022 走看看