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 ...
随机推荐
- dos命令获取系统时间与变量定义
1.获取系统时间及格式化 参考文章: 1.1 cmd下获取系统时间 1.2 获取系统时间的DOS命令 2.变量定义 https://www.jb51.net/article/49197.htm 3.使 ...
- JAVA StringUtils工具类
org.apache.commons.lang Class StringUtils java.lang.Object org.apache.commons.lang.StringUtils publi ...
- Python之路Day08
文件操作 open() -- 打开 open通过Python控制操作系统打开文件 f=open('文件路径',mode='r',encoding='utf-8') mode -- 不写就默认是r f ...
- [CF1304E] 1-Trees and Queries - LCA
由于可以走重边,所以任意一条路径长 + 2 仍然对应至少一条合法路径 很显然我们有 \(3\) 种基本路径 不经过 \((x,y)\) 经过 \(x \to y\) 经过 \(y \to x\) 假设 ...
- [CF1216C] White Sheet - 离散化,模拟
虽然分类讨论应该是比较推崇的解法,但是我就是喜欢暴力 #include <bits/stdc++.h> using namespace std; #define int long long ...
- BK: Data mining, Chapter 2 - getting to know your data
Why: real-world data are typically noisy, enormous in volume, and may originate from a hodgepodge of ...
- DataGrid 的DataSource重新加载数据
DataGrid 的DataSource重新加载数据,若直接重新给DataSource赋值是没有效果的,若只是修改原有数据中的单个值,此方法有效,但是针对完全不一样的数据直接重新赋值的方式是无效的,此 ...
- Selenium3+python自动化007-警告框
警告框 alert = driver.switch_to.alert alert.text() alert.accpet() alert.dismiss() # 导selenium包 from sel ...
- 18家大厂Java面试题整理了350道(分布式+微服务+高并发)
一.性能调优系列 1.Tomcat性能调优 JVM参数调优: -Xms 表示JVM初始化堆的大小, -Xmx表示JVM堆的最大值.这两个值的大小一般根据需要进行设置. 当应用程序需要的内存超出堆的最大 ...
- python 中 if __name__ == '__main__' 判断的作用
假设这样一个a.py文件 def fun1(): ........ def fun2(): ......... if __name__=='__main__': ......#执行的一些语句 当你执行 ...