zoukankan      html  css  js  c++  java
  • 处理Codeigniter CLI模式无法读取通过Apache写入的文件缓存

    运行环境: Ubuntu 16.04 + PHP 5.6.40 + Apache/2.4.18
    Codeigniter: 3.1.10


    Codeigniter 3.1.10,缓存驱动方式是文件方式

    遇到的问题是:通过浏览器访问控制器的方法可以写入缓存文件,当尝试通过CLI模式初始化文件缓存时,无法读取缓存,最终想到的是只能 通过 curl 请求,并判断是内网访问,才能执行这个方法

    A PHP Error was encountered
    
    Severity:    Warning
    Message:     file_get_contents(/var/www/html/codeigniter3/application/cache/cache_test): failed to open stream: Permission denied
    Filename:    /var/www/html/codeigniter3/system/libraries/Cache/drivers/Cache_file.php
    Line Number: 275
    

    尝试过给 cache 文件夹的拥有者设置为 Apache的www-data并给了755权限,在 CLI模式下执行,得到的依然是上面的错误

    解决方法:

    helpers 文件夹中放的 帮助文件,并在application/autoload.php中自动加载这个帮助文件

    if(!function_exists('get_real_ip')){
    	function get_real_ip(){  
    	    $ip=false;  
    	    if(!empty($_SERVER["HTTP_CLIENT_IP"])){  
    	        $ip = $_SERVER["HTTP_CLIENT_IP"];  
    	    }  
    	    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {  
    	        $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);  
    	    if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }  
    	        for ($i = 0; $i < count($ips); $i++) {  
    	        if (!preg_match ("^(10|172.16|192.168).", $ips[$i])) {
    	            $ip = $ips[$i];  
    	         break;  
    	        }  
    	    }  
    	    }  
    	    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);  
    	}	
    }
    

    控制器

    <?php
    
    /**
    * 每天凌晨需要初始化文件緩存
    */
    class Init_daily_cache extends CI_Controller {
    
    	public function index(){
    	    if(is_cli()){
    	        exit('can not Run at cli');
            }
            $ip =  get_real_ip();
            $intranet_ip = array('127.0.0.1','::1');
            //可以先调试在当前服务器的ip,然后再修改$intranet_ip 变量的值
            //echo $ip;exit();
            if(!in_array($ip, $intranet_ip)){
            	exit('不是内网访问,无须的请求');
            }
            //code
            $this->cache->file->save('cache_test', 'test',3600);
    	}
    }
    

    尝试执行:

    vagrant@vagrant:/var/www/html/codeigniter3$ curl http://localhost/codeigniter3/index.php/init_daily_cache
    ::1
    
  • 相关阅读:
    剑指offer-整数中1出现的次数
    剑指offer-连续子数组的最大和
    剑指offer-最小的k个数
    剑指offer-数组中超过一半的数字
    剑指offer-二叉搜索树与双向链表
    剑指offer-复杂链表的复制
    剑指offer-二叉树中和为某一值的路径
    剑指offer-二叉搜索树的后序遍历
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
  • 原文地址:https://www.cnblogs.com/fsong/p/11424293.html
Copyright © 2011-2022 走看看