·设为首页收藏本站📧邮箱修改🎁免费下载专区🔐设置/修改密码👽群雄群聊
返回列表 发布新帖

PHP实用封装函数集一

557 8
发表于 2023-4-21 16:50:34 | 显示全部楼层 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
获取本周前的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
我要说一句 收起回复

评论8

IT618发布Lv.8 发表于 2023-4-21 16:50:55 | 显示全部楼层
//一次打印多个变量,方便调试。实用函数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);
我要说一句 收起回复
IT618发布Lv.8 发表于 2023-4-21 16:51:28 | 显示全部楼层
curl函数封装:
  1. function curl_($url, $post_data = array(), $timeout = 30, $ext = array())
  2. {
  3.     $ch = curl_init();
  4.     curl_setopt($ch, CURLOPT_URL, $url);
  5.     curl_setopt($ch, CURLOPT_HEADER, 0);
  6.     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //执行超时
  7.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); //连接超时
  8.     if (!empty($ext['referer'])) {
  9.         curl_setopt($ch, CURLOPT_REFERER, $ext['referer']);
  10.     }
  11.    $ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36';
  12.     if (!empty($ext['user_agent'])) {
  13.         $ua = $ext['user_agent'];
  14.     }
  15.     curl_setopt($ch, CURLOPT_USERAGENT, $ua);
  16.     if (!empty($ext['header'])) {
  17.         curl_setopt($ch, CURLOPT_HTTPHEADER, $ext['header']); //构造
  18.     }
  19.     if (!empty($post_data)) {
  20.         curl_setopt($ch, CURLOPT_POST, 1);
  21.         if (is_array($post_data)) {
  22.             $mydata = http_build_query($post_data);
  23.         } else {
  24.             $mydata = $post_data;
  25.         }
  26.         curl_setopt($ch, CURLOPT_POSTFIELDS, $mydata);
  27.     }
  28.     if (preg_match('~^https~i', $url)) {
  29.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  30.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  31.     }
  32.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  33.     $content = curl_exec($ch);
  34.     curl_close($ch);
  35.     return $content;
  36. }
复制代码
调用示例:
  1. $img_content = curl_($url, array(), 30, ['referer'=>$url]);
复制代码
我要说一句 收起回复
婷姐Lv.8 发表于 2023-4-21 16:52:18 | 显示全部楼层
  1. /**
  2. * 通用日志记录函数
  3. *
  4. * 此函数日志文件路径为:.\data\log\20180106_[$fileName|$level].log
  5. * @param string $msg 日志内容
  6. * @param string $level 日志级别 NORMAL:一般级别,默认。NOTICE:提醒,WARING:警告,ERR:错误
  7. * @param type $fileName 仅文件名称。默认为空时将按照默认方式(日期)提供文件名
  8. */
  9. function filelog($msg, $fileName = '', $level = 'NORMAL') {
  10.     $levels = array('NORMAL', 'NOTICE', 'WARING', 'ERR');
  11.     !in_array($level, $levels) && $level = 'NORMAL';
  12.     $discuz_root = dirname(__DIR__);
  13.     $dir = $discuz_root . './data/log/'; //DIRECTORY_SEPARATOR
  14.     if(!is_dir($dir)) mkdir($dir, 0755, true);
  15.     $destination = $dir . date('Ymd') . '_' .  (empty($fileName) ? (strtoupper($level) . ".log") : $fileName);
  16.     $now = date('Y-m-d H:i:s', time());
  17.     //检测日志文件大小,超过配置大小则备份日志文件重新生成
  18.     $log_size = 2 * 1024  * 1024;
  19.     if(is_file($destination) && floor($log_size) <= filesize($destination) )
  20.     {
  21.         rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
  22.     }
  23.     if (!is_file($destination)) {
  24.         touch($destination);
  25.         chmod($destination, 0775);
  26.     }
  27.     if(!is_string($msg)){
  28.         //$msg = print_r($msg, true);
  29.         $msg = var_export($msg, true);
  30.     }
  31.     error_log("[{$now}]_{$level}: {$msg}\r\n\n", 3, $destination);
  32. }
复制代码
我要说一句 收起回复
独家记忆Lv.8 发表于 2023-4-21 16:52:37 | 显示全部楼层
  1. /**
  2. * 发送HTTP状态
  3. * @param integer $code 状态码
  4. * @return void
  5. */
  6. function send_http_status($code, $exit=false)
  7. {
  8.     if($code == 404  || $code == 500)
  9.     {
  10.         $msg = GROUP_NAME . '/' . MODULE_NAME . '/' . ACTION_NAME . ':不存在!';
  11.         if(GROUP_NAME == 'GROUP_NAME'){
  12.             $msg = $_SERVER['REQUEST_URI'] . '?' . ($_SERVER['QUERY_STRING'] ?? '');
  13.         }
  14.         $ip  = GetRealIp();//获取IP地址
  15.         $str = date_() . ' _ ['.$ip.']['.($_SERVER['REQUEST_METHOD'] ?? '').']' . $msg;
  16.         $filefullpath = C('LOG_PATH') . '/'. date('Y-m-d').'.error.log';
  17.         filelog($filefullpath, $str);
  18.     }
  19.     static $_status = array(
  20.         // Informational 1xx
  21.         100 => 'Continue',
  22.         101 => 'Switching Protocols',
  23.         // Success 2xx
  24.         200 => 'OK',
  25.         201 => 'Created',
  26.         202 => 'Accepted',
  27.         203 => 'Non-Authoritative Information',
  28.         204 => 'No Content',
  29.         205 => 'Reset Content',
  30.         206 => 'Partial Content',
  31.         // Redirection 3xx
  32.         300 => 'Multiple Choices',
  33.         301 => 'Moved Permanently',
  34.         302 => 'Moved Temporarily ', // 1.1
  35.         303 => 'See Other',
  36.         304 => 'Not Modified',
  37.         305 => 'Use Proxy',
  38.         // 306 is deprecated but reserved
  39.         307 => 'Temporary Redirect',
  40.         // Client Error 4xx
  41.         400 => 'Bad Request',
  42.         401 => 'Unauthorized',
  43.         402 => 'Payment Required',
  44.         403 => 'Forbidden',
  45.         404 => 'Not Found',
  46.         405 => 'Method Not Allowed',
  47.         406 => 'Not Acceptable',
  48.         407 => 'Proxy Authentication Required',
  49.         408 => 'Request Timeout',
  50.         409 => 'Conflict',
  51.         410 => 'Gone',
  52.         411 => 'Length Required',
  53.         412 => 'Precondition Failed',
  54.         413 => 'Request Entity Too Large',
  55.         414 => 'Request-URI Too Long',
  56.         415 => 'Unsupported Media Type',
  57.         416 => 'Requested Range Not Satisfiable',
  58.         417 => 'Expectation Failed',
  59.         // Server Error 5xx
  60.         500 => 'Internal Server Error',
  61.         501 => 'Not Implemented',
  62.         502 => 'Bad Gateway',
  63.         503 => 'Service Unavailable',
  64.         504 => 'Gateway Timeout',
  65.         505 => 'HTTP Version Not Supported',
  66.         509 => 'Bandwidth Limit Exceeded'
  67.     );
  68.     if (isset($_status[$code])) {
  69.         header('HTTP/1.1 ' . $code . ' ' . $_status[$code]);
  70.         // 确保FastCGI模式下正常
  71.         header('Status:' . $code . ' ' . $_status[$code]);
  72.     }
  73.     if($exit){
  74.         exit;
  75.     }
  76. }
复制代码
我要说一句 收起回复
拾光Lv.8 发表于 2023-4-21 16:53:18 | 显示全部楼层
  1. /**
  2. * 获取用户的真实ip,仅适用于cgi运行方式,cli运行方式请不要使用
  3. * @return string,IP十五位字符,
  4. */
  5. function GetRealIp(){
  6.     static $_map = array();
  7.     if(isset($_map['ip']))
  8.         $ip = $_map['ip'];
  9.     else{
  10.         if(isset($_SERVER["HTTP_X_CONNECTING_IP"])) {
  11.             $ip = trim($_SERVER["HTTP_X_CONNECTING_IP"]);
  12.         }else if(isset($_SERVER["HTTP_FW_ADDR"])) {
  13.             $ip = trim($_SERVER["HTTP_FW_ADDR"]);
  14.         }else if(isset($_SERVER["HTTP_CDN_SRC_IP"])){
  15.             $ip = trim($_SERVER["HTTP_CDN_SRC_IP"]);
  16.         }else if(getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" ) ) {
  17.             $ip = trim(getenv("REMOTE_ADDR"));
  18.         }else if (isset ( $_SERVER ['REMOTE_ADDR'] ) && $_SERVER ['REMOTE_ADDR'] && strcasecmp ( $_SERVER ['REMOTE_ADDR'], "unknown" )){
  19.             $ip = trim($_SERVER ['REMOTE_ADDR']);
  20.         }else if(getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" )) {
  21.             $ip = getenv ( "HTTP_X_FORWARDED_FOR" );
  22.             $ip = explode ( ',', $ip );
  23.             $len = count($ip);
  24.             $tmp = trim($_SERVER['REMOTE_ADDR']);
  25.             for($i=0;$i<$len;$i++){
  26.                 $t = trim($ip[$i]);
  27.                 if($t!="127.0.0.1"){
  28.                     $tmp = $t;
  29.                 }
  30.             }
  31.             $ip = $tmp;
  32.         }else
  33.             $ip = "127.0.0.1";
  34.         $_map['ip'] = $ip;
  35.     }
  36.    
  37.     return $ip;
  38. }
复制代码
我要说一句 收起回复
浅生Lv.8 发表于 2023-4-21 16:53:42 | 显示全部楼层
  1. /**
  2. * Cookie 设置、获取、删除
  3. * @param string $name cookie名称
  4. * @param mixed $value cookie值
  5. * @param mixed $options cookie参数
  6. * @return mixed
  7. */
  8. function cookie($name, $value = '', $option = null)
  9. {
  10.     // 默认设置
  11.     $config = array(
  12.         'prefix' => C('COOKIE_PREFIX'), // cookie 名称前缀
  13.         'expire' => C('COOKIE_EXPIRE'), // cookie 保存时间
  14.         'path' => C('COOKIE_PATH'), // cookie 保存路径
  15.         'domain' => C('COOKIE_DOMAIN'), // cookie 有效域名
  16.     );
  17.     // 参数设置(会覆盖黙认设置)
  18.     if (!is_null($option)) {
  19.         if (is_numeric($option))
  20.             $option = array('expire' => $option);
  21.         elseif (is_string($option))
  22.             parse_str($option, $option);
  23.         $config = array_merge($config, array_change_key_case($option));
  24.     }
  25.     // 清除指定前缀的所有cookie
  26.     if (is_null($name)) {
  27.         if (empty($_COOKIE))
  28.             return;
  29.         // 要删除的cookie前缀,不指定则删除config设置的指定前缀
  30.         $prefix = empty($value) ? $config['prefix'] : $value;
  31.         if (!empty($prefix)) {// 如果前缀为空字符串将不作处理直接返回
  32.             foreach ($_COOKIE as $key => $val) {
  33.                 if (0 === stripos($key, $prefix)) {
  34.                     setcookie($key, '', time() - 3600, $config['path'], $config['domain']);
  35.                     unset($_COOKIE[$key]);
  36.                 }
  37.             }
  38.         }
  39.         return;
  40.     }
  41.     $name = $config['prefix'] . $name;
  42.     if ('' === $value) {
  43.         if (isset($_COOKIE[$name])) {
  44.             $value = $_COOKIE[$name];
  45.             if (0 === strpos($value, 'think:')) {
  46.                 $value = substr($value, 6);
  47.                 return array_map('urldecode', json_decode(MAGIC_QUOTES_GPC ? stripslashes($value) : $value, true));
  48.             } else {
  49.                 return $value;
  50.             }
  51.         } else {
  52.             return null;
  53.         }
  54.     } else {
  55.         if (is_null($value)) {
  56.             setcookie($name, '', time() - 3600, $config['path'], $config['domain']);
  57.             unset($_COOKIE[$name]); // 删除指定cookie
  58.         } else {
  59.             // 设置cookie
  60.             if (is_array($value)) {
  61.                 $value = 'think:' . json_encode(array_map('urlencode', $value));
  62.             }
  63.             $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0;
  64.             setcookie($name, $value, $expire, $config['path'], $config['domain']);
  65.             $_COOKIE[$name] = $value;
  66.         }
  67.     }
  68. }
复制代码
我要说一句 收起回复
IT618发布Lv.8 发表于 2023-4-21 16:54:35 | 显示全部楼层
  1. //注:稍微将此函数里获取配置的地方改动一下,即可拿到其它框架使用
  2. /**
  3. * session管理函数
  4. * @param string|array $name session名称 如果为数组则表示进行session设置
  5. * @param mixed $value session值
  6. * @param boolean      $isPrefix
  7. * @return mixed
  8. */
  9. function session($name, $value = '')
  10. {
  11.     $prefix = [color=#e74c3c]C('SESSION_PREFIX')[/color];
  12.     if (is_array($name)) { // session初始化 在session_start 之前调用
  13.         if (isset($name['prefix'])) [color=#e74c3c]C('SESSION_PREFIX'[/color], $name['prefix']);
  14.         if (C('VAR_SESSION_ID') && isset($_REQUEST[[color=#e74c3c]C('VAR_SESSION_ID')[/color]])) {
  15.             session_id($_REQUEST[C('VAR_SESSION_ID')]);
  16.         } elseif (isset($name['id'])) {
  17.             session_id($name['id']);
  18.         }
  19.         ini_set('session.auto_start', 0);
  20.         if (isset($name['name'])) session_name($name['name']);
  21.         if (isset($name['path'])) session_save_path($name['path']);
  22.         if (isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']);
  23.         if (isset($name['expire'])) ini_set('session.gc_maxlifetime', $name['expire']);
  24.         if (isset($name['use_trans_sid'])) ini_set('session.use_trans_sid', $name['use_trans_sid'] ? 1 : 0);
  25.         if (isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies'] ? 1 : 0);
  26.         if (isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']);
  27.         if (isset($name['cache_expire'])) session_cache_expire($name['cache_expire']);
  28.         if (isset($name['type'])) [color=#e74c3c]C('SESSION_TYPE'[/color], $name['type']);
  29.         if ([color=#e74c3c]C('SESSION_TYPE')[/color]) { // 读取session驱动
  30.             $class = 'Session' . ucwords(strtolower(C('SESSION_TYPE')));
  31.             // 检查驱动类
  32.             if (require_cache(EXTEND_PATH . 'Driver/Session/' . $class . '.class.php')) {
  33.                 $hander = new $class();
  34.                 $hander->execute();
  35.             } else {
  36.                 // 类没有定义
  37.                 throw_exception(L('_CLASS_NOT_EXIST_') . ': ' . $class);
  38.             }
  39.         }
  40.         // 启动session
  41.         if ([color=#e74c3c]C('SESSION_AUTO_START')[/color]) session_start();
  42.     } else {
  43.         // 启动session
  44.         if (!isset($_SESSION)) session_start();
  45.         if ('' === $value) {
  46.             if (0 === strpos($name, '[')) { // session 操作
  47.                 if ('[pause]' == $name) { // 暂停session
  48.                     session_write_close();
  49.                 } elseif ('[start]' == $name) { // 启动session
  50.                     session_start();
  51.                 } elseif ('[destroy]' == $name) { // 销毁session
  52.                     $_SESSION = array();
  53.                     session_unset();
  54.                     session_destroy();
  55.                 } elseif ('[regenerate]' == $name) { // 重新生成id
  56.                     session_regenerate_id();
  57.                 }
  58.             } elseif (0 === strpos($name, '?')) { // 检查session
  59.                 $name = substr($name, 1);
  60.                 if (strpos($name, '.')) { // 支持数组
  61.                     list($name1, $name2) = explode('.', $name);
  62.                     return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]);
  63.                 } else {
  64.                     return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]);
  65.                 }
  66.             } elseif (is_null($name)) { // 清空session
  67.                 if ($prefix) {
  68.                     unset($_SESSION[$prefix]);
  69.                 } else {
  70.                     $_SESSION = array();
  71.                 }
  72.             } elseif ($prefix) { // 获取session
  73.                 if (strpos($name, '.')) {
  74.                     list($name1, $name2) = explode('.', $name);
  75.                     return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;
  76.                 } else {
  77.                     return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;
  78.                 }
  79.             } else {
  80.                 if (strpos($name, '.')) {
  81.                     list($name1, $name2) = explode('.', $name);
  82.                     return isset($_SESSION[$name1][$name2]) ? $_SESSION[$name1][$name2] : null;
  83.                 } else {
  84.                     return isset($_SESSION[$name]) ? $_SESSION[$name] : null;
  85.                 }
  86.             }
  87.         } elseif (is_null($value)) { // 删除session
  88.             if ($prefix) {
  89.                 unset($_SESSION[$prefix][$name]);
  90.             } else {
  91.                 unset($_SESSION[$name]);
  92.             }
  93.         } else { // 设置session
  94.             if ($prefix) {
  95.                 if (!is_array($_SESSION[$prefix])) {
  96.                     $_SESSION[$prefix] = array();
  97.                 }
  98.                 $_SESSION[$prefix][$name] = $value;
  99.             } else {
  100.                 // 如果没有支持两级以上的数组会出现值覆盖的情况
  101.                 if (strpos($name, '.')) {
  102.                     list($name1, $name2) = explode('.', $name);
  103.                     $_SESSION[$name1][$name2] = $value;
  104.                 } else {
  105.                     $_SESSION[$name] = $value;
  106.                 }
  107.             }
  108.         }
  109.     }
  110. }
复制代码
我要说一句 收起回复
IT618发布Lv.8 发表于 2023-4-21 16:55:10 | 显示全部楼层
  1. //一次打印多个变量,方便调试,将信息输出到console.log里
  2. if(!function_exists('consolelog')){
  3.     function consolelog(){
  4.         header('Content-type:text/html;charset=utf-8');
  5.         $ua      = $_SERVER['HTTP_USER_AGENT'];
  6.         if(stripos($ua, 'Gecko') !== false) return ;
  7.         
  8.         //得到传入的参数:
  9.         $trace = debug_backtrace();
  10.         $param = $trace[0]['args'];
  11.         echo '<script>';
  12.         $fileline = '文件:'. $trace[0]['file'] . '___' . '行:'. $trace[0]['line'];
  13.         echo 'console.log("',$fileline, '");';
  14.         for ($i = 0; $i < count($param); $i++) {
  15.             $tips = (is_array($param[$i]) || is_object($param[$i])) ? '数组'.($i+1) : '变量'. ($i+1);
  16.             echo 'console.log("'.$tips.'="'.(empty($param[$i]) ? var_dump($param[$i]) : print_r($param[$i])).');';
  17.         }
  18.         echo '</script>';
  19.     }
  20. }
复制代码
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图

您的IP:3.138.174.95,58.222.20.70,GMT+8, 2024-4-27 00:53 , Processed in 0.244059 second(s), 139 queries , Gzip On, Redis On.

Based on Discuz! W1.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表