php一些实用的自制方法
时间戳转多久之前
function mdate($time = NULL) {
$text = '';
$time = $time === NULL || $time > time() ? time() : intval($time);
$t = time() - $time; //时间差 (秒)
$y = date('Y', $time)-date('Y', time());//是否跨年
switch($t){
case $t == 0:
$text = '刚刚';
break;
case $t < 60:
$text = $t . '秒前'; // 一分钟内
break;
case $t < 60 * 60:
$text = floor($t / 60) . '分钟前'; //一小时内
break;
case $t < 60 * 60 * 24:
$text = floor($t / (60 * 60)) . '小时前'; // 一天内
break;
case $t < 60 * 60 * 24 * 3:
$text = floor($time/(60*60*24)) ==1 ?'昨天 ' . date('H:i', $time) : '前天 ' . date('H:i', $time) ; //昨天和前天
break;
case $t < 60 * 60 * 24 * 30:
$text = date('m月d日 H:i', $time); //一个月内
break;
case $t < 60 * 60 * 24 * 365&&$y==0:
$text = date('m月d日', $time); //一年内
break;
default:
$text = date('Y年m月d日', $time); //一年以前
break;
} return $text;
}
//json乱码转中文
function decodeUnicode($str){
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}
//时间戳转日期
function MyDate($time){
return date("Y-m-d H:i:s",$time);
}
//获取真实ip
function getClientIP(){
global $ip;
if(getenv("HTTP_CLIENT_IP")){
$ip = getenv("HTTP_CLIENT_IP");
}else if(getenv("HTTP_X_FORWARDED_FOR")){
$ip = getenv("HTTP_X_FORWARDED_FOR");
}else if(getenv("REMOTE_ADDR")){
$ip = getenv("REMOTE_ADDR");
}else{
$ip = "NULL";
}
return $ip;
}
curl爬虫
function _grab($curl,$postInfo='',$cookie='',$referer='',$userAgent=''){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $curl);
//不输出头
curl_setopt($ch, CURLOPT_HEADER, 0);
//以字符串返回获取的信息,不直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//如果是https链接,不验证证书
if(preg_match('/https/i', $curl)){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
//POST
if($postInfo){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postInfo);
}
//加入cookie
if($cookie){
curl_setopt($ch,CURLOPT_COOKIE,$cookie);
}
//模拟来路
if($referer){
curl_setopt($ch, CURLOPT_REFERER, $referer);
}
//模拟环境
if($userAgent){
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
}
//执行
$content = curl_exec($ch);
//错误处理
if ($content === false) {
return "网络请求出错: " . curl_error($ch);
exit();
}
curl_close($ch);
return $content;
}
//输入二维数组,输出二维数组的全部可能,用于生成sku
//$data = ['颜色'=>['红','黄','蓝'],'内存'=>['4G','8G']];
//得到:Array ( [0] => Array ( [颜色] => 红 [内存] => 4G ) [1] => Array ( [颜色] => 红 [内存] => 8G ) [2] => Array ( [颜色] => 黄 [内存] => 4G ) [3] => Array ( [颜色] => 黄 [内存] => 8G ) [4] => Array ( [颜色] => 蓝 [内存] => 4G ) [5] => Array ( [颜色] => 蓝 [内存] => 8G ) )
public function getSkus($data){
/* $data = ['颜色'=>['红','黄','蓝'],'内存'=>['4G','8G']];*/
//用来装key
$index = [];
foreach ($data as $key => $value) {
//key的集合
$index[] = $key;
} //data数组元素的个数
$count = count($index);
//newData 用于装结果
$newData = []; //第一种可能
if($count==1){
//此时 $index[0]就是$data的第一个key
$data_1 = $data[$index[0]];
//如果只有一位,for循环只有一层
for($x = 0;$x<count($data_1);$x++){
//$index[0]是索引
$newData[] = [$index[0]=>$data_1[$x]];
}
} elseif($count==2){
$data_1 = $data[$index[0]];
$data_2 = $data[$index[1]];
for($x = 0; $x<count($data_1);$x++){
for($y = 0; $y <count($data_2); $y++){
//index[0] , 和 ,$index[1]分别是索引
$newData[] = [$index[0] => $data_1[$x],$index[1] => $data_2[$y]];
}
}
} elseif($count==3){
$data_1 = $data[$index[0]];
$data_2 = $data[$index[1]];
$data_3 = $data[$index[2]];
for($x = 0; $x<count($data_1);$x++){
for($y = 0; $y <count($data_2); $y++){
for($z = 0; $z <count($data_3) ; $z++){
//index[0] , 和 ,$index[1] ,$index[2] 分别是索引
$newData[] = [$index[0] => $data_1[$x],$index[1] => $data_2[$y],$index[2] => $data_3[$z]];
}
}
}
} elseif($count==4){
$data_1 = $data[$index[0]];
$data_2 = $data[$index[1]];
$data_3 = $data[$index[2]];
$data_4 = $data[$index[3]];
for($x = 0; $x<count($data_1);$x++){
for($y = 0; $y <count($data_2); $y++){
for($z = 0; $z <count($data_3) ; $z++){
for($a = 0; $a <count($data_4) ; $a++){
//index[0] , 和 ,$index[1] ,$index[2] 分别是索引
$newData[] = [$index[0] => $data_1[$x],$index[1] => $data_2[$y],$index[2] => $data_3[$z],$index[3] => $data_4[$a]];
}
}
}
}
} else{
return false;
}
return $newData;
}
//写入日志date('m_d')
function my_log($data){
$log_file = date('m_txt__d__',time()).'.txt';
/* $content =var_export($data,TRUE);*/
$data .= "\r\n";
file_put_contents($log_file,$data, FILE_APPEND);
}
//从txt一行一行读取成数组
function readKeyword(){ $data = [];
$f= fopen("danci.txt","r");
$count = 0;
while (!feof($f))
{
$line = fgets($f);
$line = substr($line, 0,6);
$data[] = $line;
}
fclose($f);
return $data;
}
编码 header("Content-Type:text/html;charset=utf-8"); //时区
date_default_timezone_set("PRC"); ignore_user_abort(); //关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0); // 通过set_time_limit(0)可以让程序无限制的执行下去 ob_flush(); //输出缓冲
flush();
//网络图片转换本地图片
function jpgChangeLocal($pic){ //获取文件
$file = _request($pic);
$end = rand(1000,9999).'_'.time().'.jpg';
$dir_path = 'd:/image';
if(!is_dir($dir_path)){
mkdir($dir_path);
} $filename = $dir_path.'/'.$end;
//打开写入流
$resource = fopen($filename, 'a');
//写入
fwrite($resource, $file);
//关闭资源
fclose($resource); return '@'.dirname(__FILE__).'/'.$filename;
}
php一些实用的自制方法的更多相关文章
- ORA-01033: ORACLE initialization or shutdown in progress 实用的处理方法
ORA-01033: ORACLE initialization or shutdown in progress 实用的处理方法,此问题通常是由于电脑非正常关机造成的,我们可以用下面的方法查找出是那个 ...
- jquery实用的一些方法
做个购物车功能,需要修改下前端页面 有些实用的方法总结一下 当你想实现最基本的加减法的时候,对于转换number实用Number(str)即可 首先明确下页面的每一行是动态的,这个时候绑定事件的时候不 ...
- Pycharm注册码最新版本2019激活码activation code + 最实用的激活方法(亲测有效)
同时适用于jetbrains全系列可用例:IDEA.WebStorm.phpstor 由于想趁着这个寒假多学习下python,所以这些实用小技巧分享给大家,拿走不谢~ 这里为大家提供了两种最实用的激活 ...
- [转]VS2005/2008过期之后简单实用的升级方法
网络上有不少key,但是用了之后没效果,发现了一个好方法可以解决. 把\vs\setup\下面的 setup.sdb文件用文本编辑器打开,然后改动其最后的一行([Product Key] 下面的一行 ...
- 一些比较实用的javascript方法收集,留着有用
动态加载javascript文件 <script type="text/javascript"> //<!-- /*动态加载方法*/ function loadS ...
- 修改html很实用的insertAdjacentHTML方法
添加HTML内容与文本内容以前用的是innerHTML与innerText方法, 最近发现还有insertAdjacentHTML和 insertAdjacentText方法, 这两个方法更灵活,可以 ...
- phpcms代码读取文章的内容 实用可行的方法
在使用phpcms做网站的时候经常遇到读取网站的内容作为推荐,而不是描述.这里使用可行的方法交你如何读取内容推荐.方法有两个,第一种执行的效率低,第二个效率高些. 1. {pc:get sql=&qu ...
- Parallel.For 你可能忽视的一个非常实用的重载方法
说起Parallel.For大家都不会陌生,很简单,不就是一个提供并行功能的for循环吗? 或许大家平时使用到的差不多就是其中最简单的那个重载方法,而真实情况 下Parallel.For里面有14个重 ...
- MSIL实用指南-创建方法和定义参数
本篇讲解实现创建方法.指定参数的名称.实现参数加out和ref修饰符.以及参数加默认值. 创建方法 创建方法用类TypeAttributes的 DefineMethod(string name, Me ...
随机推荐
- 线段树(lazy标记)-- 模板
], lazy[MAXN << ]; void PushUp(int rt) { ans[rt] = ans[rt << ] + ans[rt << | ]; } ...
- MySQL的操作数据库SQL语法
MySQL的操作数据库SQL语法 顺序:操作数据库 > 操作数据库中的表 > 操作数据库中的表的数据 MySQL不区分大小写字母 1. 操作数据库 1.创建数据库 2.删除数据库 3.使用 ...
- vjudge 最大公约数GCD 直接求最大共约束和最小公倍数的指令
原题链接https://vjudge.net/contest/331993#problem/C 输入2个正整数A,B,求A与B的最大公约数. Input2个数A,B,中间用空格隔开.(1<= A ...
- C语言 continue
C语言 continue 在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句. 案例 #include<stdio.h> int main() { ...
- linux中Jenkins启动/重启/停止命令
简要记录一下Linux 中Jenkins启动/重启/停止命令 启动service jenkins start1重启service jenkins restart1停止service jenkins s ...
- Oracle忘记用户名和密码
Microsoft Windows [版本 10.0.16299.192](c) 2017 Microsoft Corporation.保留所有权利. C:\WINDOWS\system32>e ...
- CodeForce 377 A mazes(dfs+连通性问题)
Pavel 喜欢网格迷宫.一个网格迷宫是一个 n × m 的长方形迷宫,其中每个单元格要么是空白的,要么是墙体.您可以从一个单元格走到另一个单元格,只要两个单元格均是空白的,且拥有一条公共的边. Pa ...
- docker安装elasticsearch和head插件
使用 Docker 拉取ElasticSearch镜像 docker pull elasticsearch:7.0.0 查看镜像 ID docker images 运行 docker run -e E ...
- Codeforces Round #601 (Div. 2) A Changing Volume
好吧,其实我拿到这个题的时候,首先想到了bfs,写完之后,开开森森的去交代码,却在第二个数据就TEL,然后优化半天,还是不行. 最终,我盯着1,2,5发呆半天,wc,然后直接贪心 #include&l ...
- PHP 把秒数转为时分秒格式
PHP函数 1.gmdate $seconds = 174940;$hours = intval($seconds/); $time1 = $hours."小时".gmdate(' ...