找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 408|回复: 8

[基础] PHP实用封装函数集一

  [复制链接]
匿名
匿名  发表于 2023-2-9 17:12 |阅读模式
获取本周前的12周开始时间与结束时间

在统计中,会经常遇到“统计本月前的12个月的数据”,这个非常好计算,一年12个月,好计算。如果说,要“统计本周前的12周的数据”,这还真是第一次碰到这种需求。

好吧,看招:

//本周前的前12周以及对应开始日期、结束日期
function get_12_week()
{
    $now         = time();
    $curr_week_1 = date('Y-m-d', strtotime('-' . (date("w",$now)-1).' days', $now));//得到本周星期一
    $i           = 0;
    while(true)
    {
        $i += 1;
        $before_week_1 = date('Y-m-d', strtotime('-7 days', strtotime($curr_week_1)));
        $before_week_7 = date('Y-m-d', strtotime('+6 days', strtotime($before_week_1)));
        $week[$i] = [
            'format_time_start' => $before_week_1,
            'format_time_end'   => $before_week_7,
            'time_start'        => strtotime($before_week_1),
            'time_end'          => strtotime($before_week_7.' 23:59:59')];
 
        $curr_week_1   = $before_week_1;
        if($i >= 12)
        {
            break;
        }
    }
    $week = array_reverse($week);
    return $week;
}
 

 

 

获取本周一,周未的时间: $today  = date('Y-m-d');
$curr   = strtotime($today);
$i      = date('N');
$diff   = $i - 1;
$monday = strtotime('-'.$diff.' days');
$begin = date('Y-m-d', $monday);
$end   = date('Y-m-d 23:59:59', strtotime('+6 days', $monday));
echo $begin, "\n", $end; //输出:
2021-01-11
2021-01-17 23:59:59
匿名
匿名  发表于 2023-2-9 17:14

php一次打印多个变量,方便调试:dd

//一次打印多个变量,方便调试。实用函数dd,仿var_dump,但比var_dump美观

if(!function_exists('dd')){
    function dd(){
        header('Content-type:text/html;charset=utf-8');
        $ua      = $_SERVER['HTTP_USER_AGENT'];
        $b       = 0;
        if(stripos($ua, 'Gecko') !== false) $b = 1;

        //得到传入的参数:
        $trace = debug_backtrace();
        $param = $trace[0]['args'];
        $fileline = '文件:'. $trace[0]['file'] . '___' . '行:'. $trace[0]['line'];
        echo '<p>',$fileline, '</p>';
        for ($i = 0; $i < count($param); $i++) {
            $tips = (is_array($param[$i]) || is_object($param[$i])) ? '数组'.($i+1) : '变量'. ($i+1);
            echo $b ? ('<fieldset><legend>变量:'.($tips).',值为:</legend>') : ('变量:$'.($tips).',值为:');
            echo $b ? '<pre>' : '';
            empty($param[$i]) ? var_dump($param[$i]) : print_r($param[$i]) ;
            echo $b ? '</pre>' : '';
            echo $b ? '</fieldset>' : PHP_EOL;
        }
        exit;
    }
}

调用示例:dd($var1, $var2, $var3, $var4, $var5); 

 楼主| 发表于 2023-2-20 11:31 | 显示全部楼层

curl函数封装函数

curl函数封装: 

function curl_($url, $post_data = array(), $timeout = 30, $ext = array())
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //执行超时
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); //连接超时

    if (!empty($ext['referer'])) {
        curl_setopt($ch, CURLOPT_REFERER, $ext['referer']);
    }
   $ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36';
    if (!empty($ext['user_agent'])) {
        $ua = $ext['user_agent'];
    }
    curl_setopt($ch, CURLOPT_USERAGENT, $ua);
    if (!empty($ext['header'])) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $ext['header']); //构造
    }

    if (!empty($post_data)) {
        curl_setopt($ch, CURLOPT_POST, 1);
        if (is_array($post_data)) {
            $mydata = http_build_query($post_data);
        } else {
            $mydata = $post_data;
        }
        curl_setopt($ch, CURLOPT_POSTFIELDS, $mydata);
    }
    if (preg_match('~^https~i', $url)) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

调用示例: 

$img_content = curl_($url, array(), 30, ['referer'=>$url]);
 楼主| 发表于 2023-2-20 11:36 | 显示全部楼层

通用日志记录函数:filelog

/**
 * 通用日志记录函数
 *
 * 此函数日志文件路径为:.\data\log\20180106_[$fileName|$level].log
 * @param string $msg 日志内容
 * @param string $level 日志级别 NORMAL:一般级别,默认。NOTICE:提醒,WARING:警告,ERR:错误
 * @param type $fileName 仅文件名称。默认为空时将按照默认方式(日期)提供文件名
 */
function filelog($msg, $fileName = '', $level = 'NORMAL') {
    $levels = array('NORMAL', 'NOTICE', 'WARING', 'ERR');
    !in_array($level, $levels) && $level = 'NORMAL';

    $discuz_root = dirname(__DIR__);
    $dir = $discuz_root . './data/log/'; //DIRECTORY_SEPARATOR

    if(!is_dir($dir)) mkdir($dir, 0755, true);

    $destination = $dir . date('Ymd') . '_' .  (empty($fileName) ? (strtoupper($level) . ".log") : $fileName);

    $now = date('Y-m-d H:i:s', time());

    //检测日志文件大小,超过配置大小则备份日志文件重新生成
    $log_size = 2 * 1024  * 1024;
    if(is_file($destination) && floor($log_size) <= filesize($destination) )
    {
        rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
    }

    if (!is_file($destination)) {
        touch($destination);
        chmod($destination, 0775);
    }
    if(!is_string($msg)){
        //$msg = print_r($msg, true);
        $msg = var_export($msg, true);
    }
    error_log("[{$now}]_{$level}: {$msg}\r\n\n", 3, $destination);
}
 楼主| 发表于 2023-3-1 10:14 | 显示全部楼层

发送HTTP状态函数:send_http_status

/**
 * 发送HTTP状态
 * @param integer $code 状态码
 * @return void
 */
function send_http_status($code, $exit=false)
{
    if($code == 404  || $code == 500)
    {
        $msg = GROUP_NAME . '/' . MODULE_NAME . '/' . ACTION_NAME . ':不存在!';
        if(GROUP_NAME == 'GROUP_NAME'){
            $msg = $_SERVER['REQUEST_URI'] . '?' . ($_SERVER['QUERY_STRING'] ?? '');
        }
        $ip  = GetRealIp();//获取IP地址
        $str = date_() . ' _ ['.$ip.']['.($_SERVER['REQUEST_METHOD'] ?? '').']' . $msg;
        $filefullpath = C('LOG_PATH') . '/'. date('Y-m-d').'.error.log';
        filelog($filefullpath, $str);
    }
    static $_status = array(
        // Informational 1xx
        100 => 'Continue',
        101 => 'Switching Protocols',
        // Success 2xx
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        203 => 'Non-Authoritative Information',
        204 => 'No Content',
        205 => 'Reset Content',
        206 => 'Partial Content',
        // Redirection 3xx
        300 => 'Multiple Choices',
        301 => 'Moved Permanently',
        302 => 'Moved Temporarily ', // 1.1
        303 => 'See Other',
        304 => 'Not Modified',
        305 => 'Use Proxy',
        // 306 is deprecated but reserved
        307 => 'Temporary Redirect',
        // Client Error 4xx
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        406 => 'Not Acceptable',
        407 => 'Proxy Authentication Required',
        408 => 'Request Timeout',
        409 => 'Conflict',
        410 => 'Gone',
        411 => 'Length Required',
        412 => 'Precondition Failed',
        413 => 'Request Entity Too Large',
        414 => 'Request-URI Too Long',
        415 => 'Unsupported Media Type',
        416 => 'Requested Range Not Satisfiable',
        417 => 'Expectation Failed',
        // Server Error 5xx
        500 => 'Internal Server Error',
        501 => 'Not Implemented',
        502 => 'Bad Gateway',
        503 => 'Service Unavailable',
        504 => 'Gateway Timeout',
        505 => 'HTTP Version Not Supported',
        509 => 'Bandwidth Limit Exceeded'
    );
    if (isset($_status[$code])) {
        header('HTTP/1.1 ' . $code . ' ' . $_status[$code]);
        // 确保FastCGI模式下正常
        header('Status:' . $code . ' ' . $_status[$code]);
    }
    if($exit){
        exit;
    }
}
 楼主| 发表于 2023-3-1 10:22 | 显示全部楼层

获取用户真实IP函数:GetRealIp()


/**
 * 获取用户的真实ip,仅适用于cgi运行方式,cli运行方式请不要使用
 * @return string,IP十五位字符,
 */
function GetRealIp(){
    static $_map = array();
    if(isset($_map['ip']))
        $ip = $_map['ip'];
    else{
        if(isset($_SERVER["HTTP_X_CONNECTING_IP"])) {
            $ip = trim($_SERVER["HTTP_X_CONNECTING_IP"]);
        }else if(isset($_SERVER["HTTP_FW_ADDR"])) {
            $ip = trim($_SERVER["HTTP_FW_ADDR"]);
        }else if(isset($_SERVER["HTTP_CDN_SRC_IP"])){
            $ip = trim($_SERVER["HTTP_CDN_SRC_IP"]);
        }else if(getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" ) ) {
            $ip = trim(getenv("REMOTE_ADDR"));
        }else if (isset ( $_SERVER ['REMOTE_ADDR'] ) && $_SERVER ['REMOTE_ADDR'] && strcasecmp ( $_SERVER ['REMOTE_ADDR'], "unknown" )){
            $ip = trim($_SERVER ['REMOTE_ADDR']);
        }else if(getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" )) {
            $ip = getenv ( "HTTP_X_FORWARDED_FOR" );
            $ip = explode ( ',', $ip );
            $len = count($ip);
            $tmp = trim($_SERVER['REMOTE_ADDR']);
            for($i=0;$i<$len;$i++){
                $t = trim($ip[$i]);
                if($t!="127.0.0.1"){
                    $tmp = $t;
                }
            }
            $ip = $tmp;
        }else
            $ip = "127.0.0.1";
        $_map['ip'] = $ip;
    }
    
    return $ip;
}
 楼主| 发表于 2023-3-1 10:24 | 显示全部楼层

thinkphp获取cookie方法:cookie


/**
 * Cookie 设置、获取、删除
 * @param string $name cookie名称
 * @param mixed $value cookie值
 * @param mixed $options cookie参数
 * @return mixed
 */
function cookie($name, $value = '', $option = null)
{
    // 默认设置
    $config = array(
        'prefix' => C('COOKIE_PREFIX'), // cookie 名称前缀
        'expire' => C('COOKIE_EXPIRE'), // cookie 保存时间
        'path' => C('COOKIE_PATH'), // cookie 保存路径
        'domain' => C('COOKIE_DOMAIN'), // cookie 有效域名
    );
    // 参数设置(会覆盖黙认设置)
    if (!is_null($option)) {
        if (is_numeric($option))
            $option = array('expire' => $option);
        elseif (is_string($option))
            parse_str($option, $option);
        $config = array_merge($config, array_change_key_case($option));
    }
    // 清除指定前缀的所有cookie
    if (is_null($name)) {
        if (empty($_COOKIE))
            return;
        // 要删除的cookie前缀,不指定则删除config设置的指定前缀
        $prefix = empty($value) ? $config['prefix'] : $value;
        if (!empty($prefix)) {// 如果前缀为空字符串将不作处理直接返回
            foreach ($_COOKIE as $key => $val) {
                if (0 === stripos($key, $prefix)) {
                    setcookie($key, '', time() - 3600, $config['path'], $config['domain']);
                    unset($_COOKIE[$key]);
                }
            }
        }
        return;
    }
    $name = $config['prefix'] . $name;
    if ('' === $value) {
        if (isset($_COOKIE[$name])) {
            $value = $_COOKIE[$name];
            if (0 === strpos($value, 'think:')) {
                $value = substr($value, 6);
                return array_map('urldecode', json_decode(MAGIC_QUOTES_GPC ? stripslashes($value) : $value, true));
            } else {
                return $value;
            }
        } else {
            return null;
        }
    } else {
        if (is_null($value)) {
            setcookie($name, '', time() - 3600, $config['path'], $config['domain']);
            unset($_COOKIE[$name]); // 删除指定cookie
        } else {
            // 设置cookie
            if (is_array($value)) {
                $value = 'think:' . json_encode(array_map('urlencode', $value));
            }
            $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0;
            setcookie($name, $value, $expire, $config['path'], $config['domain']);
            $_COOKIE[$name] = $value;
        }
    }
}
 楼主| 发表于 2023-3-1 10:24 | 显示全部楼层

thinkphp获取session函数:session

//注:稍微将此函数里获取配置的地方改动一下,即可拿到其它框架使用
/**
 * session管理函数
 * @param string|array $name session名称 如果为数组则表示进行session设置
 * @param mixed $value session值
 * @param boolean      $isPrefix
 * @return mixed
 */
function session($name, $value = '')
{
    $prefix = C('SESSION_PREFIX');

    if (is_array($name)) { // session初始化 在session_start 之前调用
        if (isset($name['prefix'])) C('SESSION_PREFIX', $name['prefix']);
        if (C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])) {
            session_id($_REQUEST[C('VAR_SESSION_ID')]);
        } elseif (isset($name['id'])) {
            session_id($name['id']);
        }
        ini_set('session.auto_start', 0);
        if (isset($name['name'])) session_name($name['name']);
        if (isset($name['path'])) session_save_path($name['path']);
        if (isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']);
        if (isset($name['expire'])) ini_set('session.gc_maxlifetime', $name['expire']);
        if (isset($name['use_trans_sid'])) ini_set('session.use_trans_sid', $name['use_trans_sid'] ? 1 : 0);
        if (isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies'] ? 1 : 0);
        if (isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']);
        if (isset($name['cache_expire'])) session_cache_expire($name['cache_expire']);
        if (isset($name['type'])) C('SESSION_TYPE', $name['type']);
        if (C('SESSION_TYPE')) { // 读取session驱动
            $class = 'Session' . ucwords(strtolower(C('SESSION_TYPE')));
            // 检查驱动类
            if (require_cache(EXTEND_PATH . 'Driver/Session/' . $class . '.class.php')) {
                $hander = new $class();
                $hander->execute();
            } else {
                // 类没有定义
                throw_exception(L('_CLASS_NOT_EXIST_') . ': ' . $class);
            }
        }
        // 启动session
        if (C('SESSION_AUTO_START')) session_start();
    } else {
        // 启动session
        if (!isset($_SESSION)) session_start();

        if ('' === $value) {
            if (0 === strpos($name, '[')) { // session 操作
                if ('[pause]' == $name) { // 暂停session
                    session_write_close();
                } elseif ('[start]' == $name) { // 启动session
                    session_start();
                } elseif ('[destroy]' == $name) { // 销毁session
                    $_SESSION = array();
                    session_unset();
                    session_destroy();
                } elseif ('[regenerate]' == $name) { // 重新生成id
                    session_regenerate_id();
                }
            } elseif (0 === strpos($name, '?')) { // 检查session
                $name = substr($name, 1);
                if (strpos($name, '.')) { // 支持数组
                    list($name1, $name2) = explode('.', $name);
                    return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]);
                } else {
                    return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]);
                }
            } elseif (is_null($name)) { // 清空session
                if ($prefix) {
                    unset($_SESSION[$prefix]);
                } else {
                    $_SESSION = array();
                }
            } elseif ($prefix) { // 获取session
                if (strpos($name, '.')) {
                    list($name1, $name2) = explode('.', $name);
                    return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;
                } else {
                    return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;
                }
            } else {
                if (strpos($name, '.')) {
                    list($name1, $name2) = explode('.', $name);
                    return isset($_SESSION[$name1][$name2]) ? $_SESSION[$name1][$name2] : null;
                } else {
                    return isset($_SESSION[$name]) ? $_SESSION[$name] : null;
                }
            }
        } elseif (is_null($value)) { // 删除session
            if ($prefix) {
                unset($_SESSION[$prefix][$name]);
            } else {
                unset($_SESSION[$name]);
            }
        } else { // 设置session
            if ($prefix) {
                if (!is_array($_SESSION[$prefix])) {
                    $_SESSION[$prefix] = array();
                }
                $_SESSION[$prefix][$name] = $value;
            } else {
                // 如果没有支持两级以上的数组会出现值覆盖的情况
                if (strpos($name, '.')) {
                    list($name1, $name2) = explode('.', $name);
                    $_SESSION[$name1][$name2] = $value;
                } else {
                    $_SESSION[$name] = $value;
                }
            }
        }
    }
}
 楼主| 发表于 2023-3-3 11:38 | 显示全部楼层

php将变量输出到console:consolelog()

//一次打印多个变量,方便调试,将信息输出到console.log里
if(!function_exists('consolelog')){
    function consolelog(){
        header('Content-type:text/html;charset=utf-8');
        $ua      = $_SERVER['HTTP_USER_AGENT'];
        if(stripos($ua, 'Gecko') !== false) return ;
        
        //得到传入的参数:
        $trace = debug_backtrace();
        $param = $trace[0]['args'];
        echo '<script>';
        $fileline = '文件:'. $trace[0]['file'] . '___' . '行:'. $trace[0]['line'];
        echo 'console.log("',$fileline, '");';
        for ($i = 0; $i < count($param); $i++) {
            $tips = (is_array($param[$i]) || is_object($param[$i])) ? '数组'.($i+1) : '变量'. ($i+1);
            echo 'console.log("'.$tips.'="'.(empty($param[$i]) ? var_dump($param[$i]) : print_r($param[$i])).');';
        }
        echo '</script>';
    }
}


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-4-27 13:19 , Processed in 0.035014 second(s), 14 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表