
PHP
Tim_PHPer
学海无涯,兴趣作舟。
展开
-
分享Laravel拖拉排序功能的实现
概述:最近公司的后台管理新需求是做一个某列表的拖拉排序功能,本来认为这个功能实现也挺简单的,但实际做起来,其实也会遇到一些问题。因此,我决定写篇文章来给大家分享一下。准备:1、排序的数据存储实现分析:既然是排序,那么就是要求每行数据要有明确的前后区分,也就是要求排序的字段有唯一性,唯一性当然会想起表主键id,但是我们不可能对主键进行修改的,这样会导致一些根据主键关联的可能会出现问题。那我们只能创建一个新的字段decimal(11,4)类型的sort,并且建立唯一索引,来区分这个排序了。这里为什么是原创 2020-12-11 18:03:29 · 1212 阅读 · 1 评论 -
Laravel如何实现操作表日志(观察者模式)
前言:最近工作项目都比较忙,难得稍微有点时间,我来分享一下最近解决的一个账号登录方面的安全问题。概述:说到账号登录接口方面的安全问题,大概是分为以下几种:SQL注入暴力爆破伪造响应服务器我们开发目前防止这些情况出现,最常见的方案就是明文加密,各种各样的验证码、手机短信验证、特殊字符戳过滤、ip白名单、ip黑名单,密文传输等等问题介绍:这个项目是一个表单报名项目,前后端分离,前端用的是VUE,后端用的是TP5,流程是用户进行填写会议的密码和验证码,然后如果验证成功就会进入到表单报名的页面原创 2020-08-03 15:38:20 · 1571 阅读 · 0 评论 -
关于账号登录接口安全方面的简单见解
前言:最近工作项目都比较忙,难得稍微有点时间,我来分享一下最近解决的一个账号登录方面的安全问题。概述:说到账号登录接口方面的安全问题,大概是分为以下几种:SQL注入暴力爆破伪造响应服务器我们开发目前防止这些情况出现,最常见的方案就是明文加密,各种各样的验证码、手机短信验证、特殊字符戳过滤、ip白名单、ip黑名单等等问题解决方案:1、java版本的domo用PHP重写其实这澳...原创 2019-12-09 17:18:02 · 730 阅读 · 1 评论 -
PHP设计12306.cn (转载)
在知乎上看到的问题与答案,觉得非常值得学习与思考,在此记录一下: 值得注意的是原答主忽略了一种购票逻辑,我咨询后,答主也同意我的想法。 原答案:举例说明,用PHP+MySQL实现12306购票和退票以及余票查询逻辑. 普通商品的库存之间没有关联性,库存量都是确定的. 火车票跟普通商品不同,同一车次不同路段的车票的库存可能会相互影响. 所以数据库中不应存储某个车次某个路段的余票数量,而应存储转载 2017-12-01 09:50:08 · 1046 阅读 · 0 评论 -
聊一聊laravel query builder 使用子查询
概述:项目当中经常用到复杂SQL带有子查询,而Laravel的查询构造器并没有直接提供转化成子查询的方法,或者说尽管提供了方法,可是给出来的例子却不太具体,对刚上手的新手来说非常不友好,本文章主要是聊一聊Laravel如何构造各种带有子查询的SQL。 准备:首先,Laravel一般实现子查询的两种方式:1、toSql()+getQuery()+raw()方法:toSql()方法的作用是为了获取不带原创 2017-11-22 17:39:06 · 18466 阅读 · 4 评论 -
再谈PHP错误与异常处理(转载)
博客好久没有更新了,实在惭愧,最近在忙人生大事,哈哈!这段时间没有看什么新的东西,结合项目中遇到的PHP异常处理问题,我又重新梳理了之前模糊的概念,希望对大家理解PHP异常处理有所帮助。 请一定要注意,没有特殊说明:本例 PHP Version < 7 说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PH...转载 2018-02-09 12:27:10 · 707 阅读 · 0 评论 -
PHP百万级数据导出方案(多csv文件压缩)
概述:最近公司项目要求把数据除了页面输出也希望有导出功能,虽然之前也做过几个导出功能,但这次数据量相对比较大,差不多一天数据就20W条,要求导7天或者30天,那么数据量就轻松破百万了甚至破千万,因此开发的过程中发现了一些大数据导出的坑,在此跟大家分享一下,互相学习。准备:1、PHP设置坑:set_time_limit – 设置脚本最大执行时间: 此配置一般PHP默认是30秒,如果你是数据小的,可原创 2017-08-25 16:49:36 · 32358 阅读 · 30 评论 -
解决支付宝多次执行回调问题的思路分享
最近在做一个新的项目,有调用到支付宝接口,生成订单流水等一系列操作本地很正常,但到了准生产环境就发现经常出现一次性生成好几条记录,写日志才发现原来是支付宝多次回调支付成功的接口。其实,解决方案也很简单,只需要对订单号和流水进行校验就行,对于支付宝返回的order_no校验校验是否已操作过,如果是则直接跳过生成订单和流水等一系列支付成功的数据库操作。...原创 2018-08-20 18:34:09 · 3809 阅读 · 0 评论 -
解决微信emjoy特殊符号插入数据库出错
概述:最近一个项目中调用同事封装的一个微信获取信息接口并处理字段存入数据库处理的功能接口,功能测试阶段发现关注公众号信息并没有成功返回,而且情况是一些账号是正常的,一些人却是有问题的,针对有问题的用户查看日志发现微信官方返回的关注状态与同事接口返回的内容不符合,也就是说没有正常更新到。日志记录相关SQL,插入数据库才发现是微信的emjoy符号导致出现问题。mysql报错内容: “`...原创 2018-09-03 16:49:48 · 2593 阅读 · 1 评论 -
PHP百万级数据导出方案(生成器直接输出单个CSV)
概述:之前写过一篇文章叫`PHP百万级数据导出方案(多csv文件压缩),发现很多朋友都很感兴趣,但是当时用的方法比较不方便,可能不太符合很多人的需求。后来想了一下如何优化时,了解到能用生成器来处理内存溢出更方便,所以当时文章中也补充分享了一下这想法。然而,发现更多朋友对如何结合生成器导出数据感兴趣,因此这篇文章,我来填下坑。准备:1、PHP设置坑:set_time_limit – 设置脚...原创 2019-01-25 17:41:12 · 6716 阅读 · 1 评论 -
简单记录一下xunsearch的小坑
概述:最近做一个项目是类似博客系统的,前台要求标题和内容的搜索,自然就想到全文检索,于是想试一试xunsearch这个开源全文检索引擎。然而调试过程中不算很顺利,这篇文章记录一下遇到的坑。问题列表:Missing field of type ID $xs = new \XS('article');这个报错是来自于上面这行代码创建xunsearch对象时报错的,其实查看源码可以知道,官...原创 2019-03-20 10:52:13 · 3657 阅读 · 0 评论 -
谈谈TP5防渗透攻击的一些经验
概述:TP5是优秀的轻量级PHP开发框架,为我们的开发提供了很多便捷。但是有时候TP5一些默认配置很容易忽视,不然会导致渗透攻击,本文我来分享一下我的一些小经验问题列表:1、关闭调试模式调试模式为我们开发人员发现错误,查找错误提供了非常友好且便捷的显示方式。但是也为渗透攻击提供了方便,因此我们需要除了测试环境下,其他环境必须关闭该模式。具体位置为config/app.php(根据你的项目...原创 2019-04-23 17:27:13 · 3420 阅读 · 1 评论 -
PHP 对接ICBC支付的经验分享
概述:最近在做一个澳门的商城项目,其中需要跟当地的工商银行对接支付,其中的提交支付时,工商银行的加密有自己加密程序,然而他们只提供了JAVA和C 语言的DEMO,并没有PHP的DEMO,甚至连PHP的扩展也说没有,一时让我陷入了困境,不知道怎解决,于是我在百度 谷歌上寻找解决方法。问题解决方案:1、java版本的domo用PHP重写其实这澳门提供的接口的加密方式跟国内大陆的一致,也是用in...原创 2019-07-16 12:25:19 · 1759 阅读 · 2 评论 -
php ip2long 出现负数原因及解决方法
php提供了ip2long与long2ip方法对ip地址处理。1.ip2long — 将一个IPV4的字符串互联网协议转换成数字格式int ip2long ( string $ip_address )1参数: ip_address 一个标准格式的地址。返回值: 返回IP地址转换后的数字 或 FALSE 如果 ip_address 是无效的。 2.long转载 2017-09-08 10:30:06 · 1101 阅读 · 0 评论 -
图文并茂手把手教你添加swoole扩展
概述:要想PHP实现异步、并行、高性能网络通信,我们可以添加Swoole扩展,然而官方提供的安装方法并不算详细,在此我分享一下我的小白安装经历。准备:1、Swoole是有环境的依赖的,我就直接从官方复制过来:仅支持Linux,FreeBSD,MacOS,3类操作系统Linux内核版本2.3.32以上PHP5.3.10以上版本,包括PHP7gcc4.4以上版本或者clangcmake2.4+原创 2017-03-30 15:21:45 · 3690 阅读 · 0 评论 -
PHP 购物车 session(非框架)
这是我的一次面试中的面试题,简单写商城的购物车功能,要求是:1、自己写简单的前台2、用户登录前能用购物车3、不可以用cookie该购物车的主要逻辑是,用session来实现识别不同的用户各自的购物车,以便用户登录后保存的是自己的购物车。流程图如下: 各文件的代码如下: shop_list.php<?php/* shop_cart.php原创 2016-05-03 10:10:56 · 11135 阅读 · 6 评论 -
laravel视图blade模板使用集合
{{ $var }} - 打印内容{{ $var or 'default' }} - 打印内容并带一个默认值{{{ $var }}} - 打印转义内容{{-- Comment --}} - 注释@extends('layout') - 继承模板‘layout’@if(condition) - if开始@else - else不带条件@else原创 2016-05-22 23:39:27 · 7067 阅读 · 0 评论 -
如何理解面向对象(POO)?
在PHP面试的时候,总会很经常被提问到“如何理解面向对象(POO)?”在此我说出自己答案,希望有不足之处,大家能提出来。我的思路是: 回答时从面向对象的三大特征回答,以及面向对象非常重要的一个概念——抽象。 面向对象的三个特征是:继承、封装、多态。 类的继承性是指一个类通过继承(extends)已有的一个类来成为其子类,子类具有了父类的所有特征(变量、常量、函数方法),同时,子类也可以有新的特性原创 2016-08-31 15:02:17 · 1000 阅读 · 0 评论 -
SQL注入防御之一——伪静态(PHP)
伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息。或者还想运用动态脚本解决一些问题。不能用静态的方式来展示网站内容。但是这就损失了对搜索引擎的友好面。怎么样在两者之间找个中间方法呢,这就产生了伪静态技术。就是展示出来的是以html一类的静态页面形式,但其实是用PHP一类的动态脚本来处理的。。概述 众所周知,web安全防御一直原创 2016-08-22 15:56:02 · 2955 阅读 · 0 评论 -
SQL注入防御之二——注入关键词过滤(PHP)
SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。概述 欢迎来到本人的SQL注入防御系列的第二篇文章,上一篇文章我们讲到了伪静态的技术来防止SQL注入,但是正如我们总结的,不能完全依赖于伪静态就能达到防止SQL注入的目的,因为伪静态,主要是为了隐藏传递的参数名,伪静态只是一种URL重写的手段,既然能接受原创 2016-08-23 10:51:00 · 11792 阅读 · 0 评论 -
SQL注入防御之三——SQL语句预处理(PHP)
这篇文章将会告诉你,PHP怎么使用SQL语句预处理,预处理语句有什么优点,以及分析预处理语句如何防止SQL注入原创 2016-08-26 11:17:16 · 8284 阅读 · 0 评论 -
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
最近在研究微信开发,当中PHP处理处理接口最经常用的一个函数是 curl_setopt()转载 2016-10-12 10:44:54 · 682 阅读 · 0 评论 -
php自义定对二维数组进行排序
概述:当我们处理数据的时候,经常会遇到对数据的排序,当然如果是直接用数据库读出数据,直接用order by 会非常方便,但是有时我们会遇到固定的数据而不是直接读数据库的情况。那么我们需要一个方法去对二维数组进行排序。准备:在开始之前,我们先来了解一下PHP自带的对多个数组或多维数组进行排序的函数: array_multisort(array1,sorting order, sorting typ原创 2016-10-26 16:53:17 · 545 阅读 · 0 评论 -
PHP自定义概率的方法(原创)
概述:经历一周赶项目,终于项目上线之后就闲下来。突然今天回想起之前一次面试的有趣的面试题——“你处理转盘抽奖自定义概率有什么好的思路?”当年太年轻了,只是说到公倍数,含含糊糊的回答让面试官不太满意。如今,想起了,理清思路发现也不困难,在此分享一下做法。准备:主要的抽奖逻辑是抽取随机数来进行抽奖,同时用区间的不同来代表不同的奖项。该注释的地方都注释了,如果还是看不懂的读者可以私下问我。分析:主要代码:原创 2016-10-27 14:18:45 · 1257 阅读 · 0 评论 -
JS或PHP判断是否来自微信浏览器访问
概述:在微信公众平台的开发过程中,有时候要求访问者是来自微信浏览器而不允许其他浏览器的,本文将介绍如何处理。准备:一、$_SERVER数组 $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些。 (PS:具体更多的$原创 2016-12-06 10:45:29 · 2416 阅读 · 0 评论 -
浅析PHP7新功能及语法变化总结(转载)
这篇文章主要介绍了浅析PHP7新功能及语法变化总结的相关资料,需要的朋友可以参考下标量类型声明有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。在旧版中,函数的参数声明只能是(Array arr)、(CLassNamearr)、(CLassName转载 2016-11-24 16:52:47 · 644 阅读 · 0 评论 -
PHP缓存锁原理及利用
概述:项目当中经常要考虑数据高并发的情况,为了避免并发导致出现一些资源重复请求的问题,可以使用缓存加锁机制。 例如取微信access_token不加锁可能会导致非常严重的后果。准备:缓存锁,顾名思义,当然离不开缓存,这篇文章用到的redis缓存,可以根据自己的需要要选择合适缓存。 缓存锁的原理是在进行操作A之前,先在缓存中存放一个唯一的key,然后就进行对应操作A,而如果同时有其他一样的操作B并原创 2017-02-09 17:19:24 · 2770 阅读 · 0 评论 -
使用PHP+Swoole实现的网页即时聊天工具:PHPWebIM(转)
使用PHP+Swoole实现的网页即时聊天工具全异步非阻塞Server,可以同时支持数百万TCP连接在线同时支持websocket+comet2种兼容协议,可用于所有种类的浏览器包括IE拥有完整的UI界面支持单聊/群聊/组聊等功能支持发送表情支持永久保存聊天记录基于Server PUSH的即时内容更新,登录/登出/状态变更/消息等会内容即时更新 最新的版本已经可以原生支持IE系列浏览器了,基于转载 2017-03-29 15:37:59 · 11640 阅读 · 0 评论 -
从根本解决“Call to undefined function Think\imagecreate()”
“Call to undefined function Think\imagecreate()的根本解决方法”原创 2016-03-26 16:51:44 · 17480 阅读 · 0 评论