未来往事
你不需要完美,你需要的是行动与完成。 [2017年 第50周/共52周]

TP5 save遍历更新,过滤相邻重复字段,问题汇总

  TP5中在model中使用save方法遍历更新字段,会自动过滤掉相邻且值重复的字段,在TP5开发手册中也没有提到这一茬,虽然官方有给遍历更新的例子,但是普通的写法程序也不会报错,可能几千条数据中会过滤一两个字段,让开发者很难察觉到错误。而且也实在想不通过滤掉重复的字段的意义在哪里,测试内容如下:

测试准备工作如下:

1.建立一张数据表如下

2.控制器代码如下:    

  1. public function save(){
  2. $model = model('Foo');
  3. for($i=1;$i<=20;$i++){
  4. $data['Hname'] = $i;
  5. $data['Hid'] = $i;
  6. $model->saveDatas($i,$data);
  7. }
  8. echo '遍历更新'.($i-1).'条数据';
  9. }

3.model代码如下:

+阅读全文

PHP垃圾回收与内存管理基本原理

内存管理机制了解:

var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存
$a = “http://fity.cn“;
var_dump(memory_get_usage());
unset($a);
var_dump(memory_get_usage());
输出:
int 368752
int 368920
int 368752

可以直观的看出定义变量之后,内存增加,清除变量之后,内存恢复(有些可能不会恢复和以前一样),好像定义变量时申请了一次内存,其实不是这样的,php会预先申请一块内存,不会每次定义变量就申请内存。PHP不像C语言那样,只有你显示的调用内存分配相关API才会有内存的分配。也就是说, 在PHP中,有很多我们看不到的内存分配过程。隐式的内存分配点就有:
1.为变量名分配内存,存入符号表
2.为变量值分配内存
所以, 不能只看表象。别怀疑,PHP的unset确实会释放内存,但这个释放不是C编程意义上的释放,不是交回给OS。当我们调用内存分配相关API申请内存的时候,PHP并不是简单的向OS要内存,而是会像OS要一个大块的内存,然后把其中的一块分配给申请者,这样当再有逻辑来申请内存的时候,就不再需要向OS申请内存了, 避免了频繁的系统调用。详细推荐参考《深入理解PHP内存管理之谁动了我的内存

垃圾回收机制(Garbage Collector 简称GC):
+阅读全文

html无损截取_保留html标签

  1. /**
  2. * 字符串切割
  3. * 功能:截取字符串(支持中文),如果字符串中包括html标签,截取的字符串则会保留完整的html标签
  4. * @param string $string 输入字符串
  5. * @param unknown $length 截取长度
......
+阅读全文

php/java网页快照(网页截屏)

网页生成快照、网页截屏、网页转图片、网页转pdf——本文基于wkhtmltopdf工具编写。

服务器端
为实现网页快照或截图的程序须借助服务器端程序:wkhtmltopdf,可将网页转换为pdf或者图片,32和64位有区别,找个适合自己服务器的版本,安装过程很简单:解压后找个合适的路径放下,windows下需要运行安装程序。

命令调用示例:
网页转图片:
linux下:/opt/wkhtmltopdf/wkHtmlToImage fity.cn fity.cn.png
windows下:D:\Program Files\wkhtmltopdf\bin>wkhtmltoimage.exe fity.cn fity.cn.
......
+阅读全文

tp5 Excel表格导入_tp5导出Excel

thinkphp5使用PHPExcel导入Excel、csv表格,thinkphp5表格导入导出

tp5使用PHPExcel导入Excel表格文件:

  1. PS:将PHPExcel扩展包放到vendor目录下  
  2. /vendor/PHPExcel.php  
  3. /vendor/PHPExcel  
  4.   
  5. public function uploadUser(){  
......
+阅读全文

tp5分页 搜索条件不保留/失效处理方法

thinkphp5.0分页 搜索条件不保留/失效解决

一般写法:分页跳转不包含搜索条件的
  1. $where = array();  
  2. $regionId = input('regionId/d');  
  3. $regionId && 
......
+阅读全文

tp5上传文件自定义名称

thinkphp5上传文件自定义名称
$file->move($path,自定义的名称); //指定名称
$file->validate(['size'=>1048576,'ext'=>'jpeg,jpg'])->rule('uniqid')->move($path); //唯一命名,validate为验证

tp5附件上传示例
  1. public function uploadPic(){  
  2.    &nbs
......
+阅读全文

tp5 save遍历新增数据第二次变为update问题处理

......
+阅读全文

php图片添加水印/图片合成/水印平铺

php图片加水印,php文字水印,php平铺水印,php图片水印,php图片添加图文 平铺水印。

图片添加文字水印

  1. $bigImgPath = '08.jpg';  
  2. $img = imagecreatefromstring(file_get_contents($bigImgPath));  
......
+阅读全文

URL数字安全码随机拼组生成及校验

URL数字随机重组校验,URL地址id随机加密生成及逆向校验 URL加密解密
PHP版本:
  1. echo geturl(888);  
  2. //输出结果:http://fity.cn/post/984-1186-187-2698712709009 //每次刷新数值都会全部改变。  
  3. //实现原理:对数字888重组后为999,然后999+187=1186。可应用到一些防刷、防采页面,如投票防刷(id数字不公开全在服务端处理好)。  
  4.   
  5. /** 地址拼组 */  
  6. function geturl($a){  
  7.   return $href = "http://fity.cn/post/".renum($a);  
  8. }  
  9. /** 数字重组  未来往事博客:http://fity.cn */  
  10. function renum($a){  
  11.   $n = numScaler($a);  
  12.   $c = SetRandNum(strlen($a));  
  13.   $d = SetRandNum(strlen($a));  
  14.   $n = intval($n) + intval($d);  
  15.   $b = getMillisecond();  
  16.   $b = numScaler($b);  
  17.   return $c."-".$n."-".$d."-".$b;  
  18. }  
  19. /** 数字换算 */  
  20. function numScaler($a){  
  21.   $str=str_split((string)$a);  
  22.   $b="";  
  23.   foreach($str as $key => $val){  
  24.     switch($val){  
  25.       case "0":$b .="0";break;  
  26.       case "1":$b .="2";break;  
  27.       case "2":$b .="5";break;  
  28.       case "3":$b .="8";break;  
  29.       case "4":$b .="6";break;  
  30.       case "5":$b .="1";break;  
  31.       case "6":$b .="3";break;  
  32.       case "7":$b .="4";break;  
  33.       case "8":$b .="9";break;  
  34.       case "9":$b .="7";break;  
  35.     }  
  36.   }  
  37.   return $b;  
  38. }  
  39. /** 随机值生成  未来往事博客:http://fity.cn */  
  40. function SetRandNum($n){  
  41.   $a="";  
  42.   for($i=0;$i<$n;$i++){  
  43.     $a .= floor(random()*10);  
  44.   }  
  45.   return $a;  
  46. }  
  47. /** 0.0-1.0随机值生成 */  
  48. function random(){  
  49.     return mt_rand() / (mt_getrandmax() + 1);  
  50. }  
  51. /** 获取当前时间戳,精确到毫秒 */  
  52. function getMillisecond() {  
  53.   list($t1$t2) = explode(' ', microtime());       
  54.   return (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);  
  55. }  

jquery版本:
+阅读全文

PHP CURL代理访问

php curl curl_setopt代理,PHP CURL使用代理访问WEB服务器

  1. $proxy = "118.69.202.160";  
  2. $proxyport = "3128";  
  3. $ch = curl_init("http://www.fity.cn/");&nbs
......
+阅读全文

CURL HTTP构造请求Header实现伪造来源IP的说明

CURL HTTP构造请求Header实现伪造来源IP的说明

伪造的只是X-FORWARDED-FOR和CLIENT-IP,REMOTE_ADDR伪造不了。
$_SERVER['REMOTE_ADDR']是由nginx传递给php的参数,就代表了与当前nginx直接通信的客户端的 IP(是不能伪造的)


PHP获取客户端IP,代理服务器IP,共有如下几类情况:
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:【Transparent Proxies】
REMOTE_ADDR = 最后一个代理服务器 IP
......
+阅读全文

php imagecreatefromjpeg return bool(false)

错误描述:
imagecreatefromjpeg返回bool(false)
imagecreatefromjpeg():xxx.jpg is not a valid JPEG file
imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error

PHP载入图像的函数:
imagecreatefromgif()
imagecreatefromjpeg()
imagecreatefrompng()
imagecreatefromwbmp()
imagecreatefromstring()
作用:由文件或URL或字符串中的图像流创建一个新图象,成功后返回图象资源,失败后返回FALSE。
PS:简单的理解其作用就是将要进行分割的图片临时读到内存里面。

错误注释:
错误信息翻译:图片不是一个有效的jpeg文件

......
+阅读全文

php获取目录下的所有文件并按时间排序

php获取目录下的所有文件并按文件创建时间进行排序,php按文件创建/修改时间排序.
  1. function getFile($dir=''){  
  2.   $num=1;    //用来记录目录下的文件个数  
  3.   $dirname=
......
+阅读全文

php分卷备份恢复mysql数据库

本文主要阐述在大数据量下通过php程序分卷备份恢复mysql数据库的方法,代码已合并为一个文件,即为php页面版MySQL大数据库分卷备份恢复工具。由于时间关系,代码未做整理,结构相对混乱,如果你在该结构基础上做了整理也欢迎你反馈给我~~~

工具实现功能:
1.支持MySQL数据库按指定大小分卷备份和恢复;
2.支持单文件备份及下载
3.分卷备份存储在服务器端,可以直接上传导入

操作过程截图:
输入mysql链接配置信息
点击在新窗口中浏览此图片
当前权限链接下的数据库表信息
点击在新窗口中浏览此图片
选择导出备份方式
点击在新窗口中浏览此图片
导出备份选项
+阅读全文