zoukankan      html  css  js  c++  java
  • php常用函数

    #删除不为空的目录
    function rrmdir($dir) { 
       if (is_dir($dir)) { 
         $objects = scandir($dir); 
         foreach ($objects as $object) { 
           if ($object != "." && $object != "..") { 
             if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
            } 
         } 
         reset($objects); 
         rmdir($dir); 
       } 
     } 
    #批量创建目录function MakeDirectory($dir, $mode = 0755)
     {
        umask(0);
       if (is_dir($dir) || @mkdir($dir,$mode)) return TRUE;
       if (!MakeDirectory(dirname($dir),$mode)) return FALSE;
       return @mkdir($dir,$mode);
     }
    #批量创建目录
    function recursive_mkdir($path, $mode = 0777) {
         $dirs = explode(DIRECTORY_SEPARATOR , $path);
         $count = count($dirs);
         $path = substr($path, 0, 1) === DIRECTORY_SEPARATOR ?  DIRECTORY_SEPARATOR : '.';
       umask(0);
         for ($i = 0; $i < $count; ++$i) {
             $path .= DIRECTORY_SEPARATOR . $dirs[$i];
             
             if (!is_dir($path) && !mkdir($path, $mode)) {
                 return false;
             }
         }
         return true;
     }
    /**
     * 判断是否是合法整形 加强版
     * @param unknown_type $a
     * @return boolean
     */
    function is_intval($a) {
        return ((string)$a === (string)(int)$a);
    }
    // true for ("123", "0", "-1", 0, 11, 9011, 00, 0x12, true)
    // false for (" ", "", 1.1, "123.1", "00", "0x123", "123a", "ada", "--1", "999999999999999999999999999999999", false, null, '1 ')
    /**
     * 多进程同时写入一个文件 不支持NFS文件系统
     * @param string $filename
     * @param string $str
     */
    function write($filename, $str) {
        $f = fopen ( $filename, "a" );
        if (flock ( $f, LOCK_EX )) {
            fwrite ( $f, $str );
            //sleep(5);
            flock ( $f, LOCK_UN );
        }
        fclose ( $f );
    }
    write("/home/v_jksong/lock.data", "sjk");
    /**
     * 检测一维数组是否相等,如果(string)$v1 === (string)$v2 则为相等
     * @param unknown_type $a
     * @param unknown_type $b
     * @param unknown_type $assoc
     * @return boolean
     */
    function array_equal($a, $b, $assoc = true)
    {
        $func = 'array_diff';
        if($assoc === true)
        {
            $func = 'array_diff_assoc';
        }
        
        $diff_a_b = $func($a, $b);
        $diff_b_a = $func($b, $a);
        
        if(empty($diff_a_b) && empty($diff_b_a))
        {
            return true;
        }
        
        return false;
    }
    //解析 js中escap编码的字符串 
    function js_unescape($str)
    {
        $ret = '';
        $len = strlen($str);
        for ($i = 0; $i < $len; $i++) {
            if ($str[$i] == '%' && $str[$i+1] == 'u') {
                $val = hexdec(substr($str, $i+2, 4));
                if ($val < 0x7f) $ret .= chr($val);
                else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
                $i += 5;
            } else if ($str[$i] == '%') {
                $ret .= urldecode(substr($str, $i, 3));
                $i += 2;
            } else $ret .= $str[$i];
        }
        return $ret;
    }
    
    echo js_unescape('%u4E03%u5915%u628A%u59B9%u5FC5%u5907%20%u56DB%u6B3ESUV%u6700%u9AD8%u964D6.5%u4E07_%u5927%u7CA4%u7F51_%u817E%u8BAF%u7F51');
    /**
     * 获取ip地址,注意服务器是双网卡的情况
     * @param unknown_type $dest
     * @param unknown_type $port
     * @return unknown
     */
    function my_ip($dest='64.0.0.0', $port=80)
    {
        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        socket_connect($socket, $dest, $port);
        socket_getsockname($socket, $addr, $port);
        socket_close($socket);
        return $addr;
    }
    /**
     * 用以取代file_get_contents函数,可以设置主机名以及超时时间等设置
     * @param $url 主机名
     * @param $path 路径
     * @param $port=80 端口
     * @param $timeout=10 超时设置,单位秒
     * @return integer/string -1:连接不上主机 -2:发送请求串失败
     */
    function get_file_contents($url,$path,$port=80,$timeout=10)
    {
        $errno=null;
        $errstr=null;
        $fp=fsockopen($url,$port);
        if(!$fp)
        {
            return -1;
        }
        $command='GET '.$path.' HTTP/1.1'."
    ";
        $command.='Accept: */*'."
    ";
        $command.='Accept-Language: zh-cn'."
    ";
        $command.='Host: '.$url."
    ";
        $command.='Connection: Close'."
    ";
        $command.="
    ";
        $flag=fwrite($fp,$command);
        if(!$flag)
        {
            fclose($fp);
            return -2;
        }
        stream_set_timeout($fp,$timeout);
        $tmp_ret_str="";
        $flag=false;
        while(!feof($fp))
        {
            $tmp_cur_line=fgets($fp,2048);
            if($flag)
            {
                $tmp_ret_str.=$tmp_cur_line;
            }
            if($tmp_cur_line=="
    ")
            {
                $flag=true;
            }
        }
        fclose($fp);
    
        return $tmp_ret_str;
    }
    /**
     * URL取得相应数据的函数
     *
     * @param string $url 完整URL
     * @param int $timeout 超时时间
     * @return string/errorno
     */
    function get_url_contents($url,$timeout=10)
    {
        $command='wget --timeout '.$timeout.' -q -O- "'.$url.'"';
        $tmp_ret_str='';
        $fp=popen($command,"r");
        if($fp==false)
        {
            return -1;
        }
        while(!feof($fp))
        {
            $tmp_ret_str.=fgets($fp);
        }
        pclose($fp);
        return $tmp_ret_str;
    }
    /**
     * 获取当前内存情况
    * @return string
    */
    function memory_usage($isEcho = 0)
    {
        $memUsage = memory_get_usage();
        $unitArr = array("B", "K", "M", "G");
    
        $used =  @round($memUsage/pow(1024, ($i=floor(log($memUsage, 1024)))), 2)."".($unitArr[$i]);
        if($isEcho)
        {
        ee($used);
        }
        return $used;
    }
    /**
     *  Unwind the error handler to the built-in error handler.
     */
    function unset_error_handler()
    {
        while (set_error_handler(create_function('$errno,$errstr', 'return false;'))) {
            // Unset the error handler we just set.
            restore_error_handler();
            // Unset the previous error handler.
            restore_error_handler();
        }
        // Restore the built-in error handler.
        restore_error_handler();
    }
    /**
     * 通过curl方式获取远程的数据
     * @param string $url @notice--查询字符串--请求远程地址 GET方式请求的数据必须把相关数据封装成数组
     * @param array  $params 请求时所需要的参数
     * @param string $method 请求的方法
     * @param string $timeout超时时间
     * @return 根据$json array string
     */
    function http_request($url, $params=array(), $method='GET',$json=TRUE, $timeout = 3, $host_ip = NULL)
    {
        global $_CONFIG;
    
        $ch = curl_init();
        $method = strtoupper($method);
    
        //Force Curl Request To Go To A Particular IP Address
        if (! is_null ( $host_ip )) {
            $urldata = parse_url ( $url );
        
            // Ensure we have the query too, if there is any...
            if (! empty ( $urldata ['query'] ))
                $urldata ['path'] .= "?" . $urldata ['query'];
                
            // Specify the host (name) we want to fetch...
            $headers = array (
                    "Host: " . $urldata ['host']
            );
            curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
        
            // create the connecting url (with the hostname replaced by IP)
            $url = $urldata ['scheme'] . "://" . $host_ip . $urldata ['path'];
        }
        
        switch ($method)
        {
            case 'GET':
                if(FALSE!==strpos($url,'?'))
                {
                    $str_add = '&';
                }else{
                    $str_add = '?';
                }
                $url .= $str_add.http_build_query($params);
                curl_setopt($ch, CURLOPT_URL, $url);
                break;
            case 'POST':
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
                break;
                 
            default:
                break;
        }
    
        if(defined('ISDEV') && ISDEV)
        {
            curl_setopt ( $ch, CURLOPT_PROXY, "{$_CONFIG['proxy']['web']['host']}:{$_CONFIG['proxy']['web']['port']}" );
        }
    
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $content = curl_exec($ch);
    
        curl_close($ch);
    
        if($json)
        {
            return json_decode($content, true);
        }
        else
        {
            return $content;
        }
    }
    /**
     * ping 
     * @param unknown $host
     * @param number $timeout
     * @return Ambigous <number, boolean>
     */
    function ping($host, $timeout = 1) {
        /* ICMP ping packet with a pre-calculated checksum */
        $package = "x08x00x7dx4bx00x00x00x00PingHost";
        $socket  = socket_create(AF_INET, SOCK_RAW, 1);
        socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
        socket_connect($socket, $host, null);
    
        $ts = microtime(true);
        socket_send($socket, $package, strLen($package), 0);
        if (socket_read($socket, 255))
            $result = microtime(true) - $ts;
        else    $result = false;
        socket_close($socket);
    
        return $result;
    }
     /**
      * 随机并保留key
     * http://php.net/manual/zh/function.shuffle.php
    */ function shuffle_assoc($list) { if (!is_array($list)) return $list; $keys = array_keys($list); shuffle($keys); $random = array(); foreach ($keys as $key) $random[$key] = $list[$key]; return $random; }
    function curl_file_get_contents( $url ,$timeout=60, $curlHost='', $cookie='', $post='',$head='',$postJson='',$send_ref='' )
    {
        $ch = curl_init($url) ;
        if( $timeout >= 1 )
        {
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        }
        elseif( $timeout > 0 && $timeout < 1 )
        {
            /**
     The problem is that on (Li|U)nix, when libcurl uses the standard name resolver, a SIGALRM is raised during name resolution which libcurl thinks is the timeout alarm.
     The solution is to disable signals using CURLOPT_NOSIGNAL.  Here's an example script that requests itself causing a 10-second delay so you can test timeouts:
    
    http://php.net/manual/zh/function.curl-setopt.php#104597
             */
            curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout*1000 );
        }
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if( !empty($curlHost) && is_array($curlHost) )
        {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHost) ;
        }
        if( strlen($cookie) > 10 )
        {
            curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        }
        if( is_array($post) && count($post) > 0 )
        {
            /**
             * 传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。 
             */
            
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    //         curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        }
        if( $head === 'yes' )
        {
            curl_setopt($ch, CURLOPT_HEADER, 1);
        }
        if( strlen($postJson) > 3 )
        {
    //         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postJson);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json',
                'Content-Length: ' . strlen($postJson)
            )
                );
        }
        if( strlen($send_ref) > 0 )
        {
            curl_setopt($ch, CURLOPT_REFERER, $send_ref);
        }
    
        $str = curl_exec($ch);
        $error = curl_errno($ch);
        ee("errno = {$error}");
        if( intval( $error ) != 0 )
        {
            $msg = "errno_{$error};url={$url}";
            ee($msg);
        }
        if ($str !== false)
        {
            curl_close($ch);
            return $str;
        }
        curl_close($ch);
        return "" ;
    }
    /**
     * 一种常用的hash算法
     * @param string $str
     * @return number
     */
    function hash33($str)
    {
        if(empty($str)) return 0;
    
        $hash = 0;
        $seed = 5;
        $len  = strlen($str);
        for ($i = 0; $i < $len; $i=$i+1)
        {
            $hash = ($hash << $seed) + $hash + ord($str{$i});
            $hash =  $hash & 0x7FFFFFFF;
        }
    
        return $hash;
    }
  • 相关阅读:
    uWSGI, Gunicorn, 啥玩意儿?
    Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理
    windows下python2和python3共存
    python3.5之输出HTML实体字符
    python3.5之string
    js获取本周、本月、本季、本年的第一天
    滚动加载图片(懒加载)实现原理
    构造函数模式实现拖拽效果
    图片轮播之面向过程写法
    适用grunt的注意点
  • 原文地址:https://www.cnblogs.com/siqi/p/3623630.html
Copyright © 2011-2022 走看看