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’;
    

    然后就可以了

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

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/-beyond/p/7624366.html
Copyright © 2011-2022 走看看