<?php 
 | 
  
 | 
/** 
 | 
 * PhalApi_Tool 工具集合类 
 | 
 * 只提供通用的工具类操作,目前提供的有: 
 | 
 * - IP地址获取 
 | 
 * - 随机字符串生成 
 | 
 * @package     PhalApi\Tool 
 | 
 * @license     http://www.phalapi.net/license GPL 协议 
 | 
 * @link        http://www.phalapi.net/ 
 | 
 * @author      dogstar <chanzonghuang@gmail.com> 2015-02-12 
 | 
 */ 
 | 
class PhalApi_Tool { 
 | 
  
 | 
    /** 
 | 
     * IP地址获取 
 | 
     * @return string 如:192.168.1.1 失败的情况下,返回空 
 | 
     */ 
 | 
    public static function getClientIp() { 
 | 
        $unknown = 'unknown'; 
 | 
  
 | 
        if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown)) { 
 | 
            $ip = getenv('HTTP_CLIENT_IP'); 
 | 
        } else if (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown)) { 
 | 
            $ip = getenv('HTTP_X_FORWARDED_FOR'); 
 | 
        } else if (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown)) { 
 | 
            $ip = getenv('REMOTE_ADDR'); 
 | 
        } else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) { 
 | 
            $ip = $_SERVER['REMOTE_ADDR']; 
 | 
        } else { 
 | 
            $ip = ''; 
 | 
        } 
 | 
  
 | 
        return $ip; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 随机字符串生成 
 | 
     * 
 | 
     * @param int    $len 需要随机的长度,不要太长 
 | 
     * @param string $chars 随机生成字符串的范围 
 | 
     * 
 | 
     * @return string 
 | 
     */ 
 | 
    public static function createRandStr($len, $chars = null) { 
 | 
        if (!$chars) { 
 | 
            $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
 | 
        } 
 | 
         
 | 
        return substr(str_shuffle(str_repeat($chars, rand(5, 8))), 0, $len); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取数组value值不存在时返回默认值 
 | 
     * 不建议在大循环中使用会有效率问题 
 | 
     * 
 | 
     * @param array      $arr     数组实例 
 | 
     * @param string|int $key     数据key值 
 | 
     * @param string     $default 默认值 
 | 
     * 
 | 
     * @return string 
 | 
     */ 
 | 
    public static function arrIndex($arr, $key, $default = '') { 
 | 
  
 | 
        return isset($arr[$key]) ? $arr[$key] : $default; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据路径创建目录或文件 
 | 
     * 
 | 
     * @param string $path 需要创建目录路径 
 | 
     * 
 | 
     * @throws PhalApi_Exception_BadRequest 
 | 
     */ 
 | 
    public static function createDir($path) { 
 | 
  
 | 
        $dir  = explode('/', $path); 
 | 
        $path = ''; 
 | 
        foreach ($dir as $element) { 
 | 
            $path .= $element . '/'; 
 | 
            if (!is_dir($path) && !mkdir($path)) { 
 | 
                throw new PhalApi_Exception_BadRequest( 
 | 
                    T('create file path Error: {filePath}', array('filepath' => $path)) 
 | 
                ); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除目录以及子目录等所有文件 
 | 
     * 
 | 
     * - 请注意不要删除重要目录! 
 | 
     * 
 | 
     * @param string $path 需要删除目录路径 
 | 
     */ 
 | 
    public static function deleteDir($path) { 
 | 
  
 | 
        $dir = opendir($path); 
 | 
        while (false !== ($file = readdir($dir))) { 
 | 
            if (($file != '.') && ($file != '..')) { 
 | 
                $full = $path . '/' . $file; 
 | 
                if (is_dir($full)) { 
 | 
                    PhalApi_Tool::deleteDir($full); 
 | 
                } else { 
 | 
                    unlink($full); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        closedir($dir); 
 | 
        rmdir($path); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 数组转XML格式 
 | 
     *  
 | 
     * @param array $arr 数组 
 | 
     * @param string $root 根节点名称 
 | 
     * @param int $num 回调次数 
 | 
     *  
 | 
     * @return string xml 
 | 
     */ 
 | 
    public function arrayToXml($arr, $root='xml', $num=0){ 
 | 
        $xml = ''; 
 | 
        if(!$num){ 
 | 
            $num += 1; 
 | 
            $xml .= '<?xml version="1.0" encoding="utf-8"?>'; 
 | 
        } 
 | 
        $xml .= "<$root>"; 
 | 
        foreach ($arr as $key=>$val){ 
 | 
            if(is_array($val)){ 
 | 
                $xml.=self::arrayToXml($val,"$key",$num); 
 | 
            } else { 
 | 
                $xml.="<".$key.">".$val."</".$key.">"; 
 | 
            } 
 | 
        } 
 | 
        $xml .="</$root>"; 
 | 
        return $xml; 
 | 
    } 
 | 
    /** 
 | 
     * XML格式转数组 
 | 
     * 
 | 
     * @param  string $xml 
 | 
     * 
 | 
     * @return mixed|array 
 | 
     */ 
 | 
    public function xmlToArray($xml){ 
 | 
        //禁止引用外部xml实体 
 | 
        libxml_disable_entity_loader(true); 
 | 
        $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
 | 
        $arr = json_decode(json_encode($xmlstring),true); 
 | 
        return $arr; 
 | 
    } 
 | 
    /** 
 | 
     * 去除字符串空格和回车 
 | 
     * 
 | 
     * @param  string $str 待处理字符串 
 | 
     * 
 | 
     * @return string 
 | 
     */ 
 | 
    public function trimSpaceInStr($str) 
 | 
    { 
 | 
        $pat = array(" ", " ", "\t", "\n", "\r"); 
 | 
        $string = array("", "", "", "", "", ); 
 | 
        return str_replace($pat, $string, $str); 
 | 
    } 
 | 
} 
 |