分类目录归档:PHP基础

快速了解Composer

PHP依赖管理工具Composer早有耳闻,但是一直没有了解过。最近研究定时任务调度,发现Laravel框架自带定时任务管理功能,处于好奇就想去看看。

之前完全没有接触学习过Laravel, 按照习惯,先下载安装让框架代码跑起来。打开文档发现需要用Composer安装,那就先了解下Composer呗。进入Composer官网发现又是一堆文档,目测10分钟是看不完了。

我的目标是快速安装好Laravel,一边调试一边看任务调度的逻辑,结果第一步就被拖住了,我多么希望有一个简单的极致的说明和用法介绍,于是稍微花费了一些功夫有了下面的整理,希望10分钟内你就能明白。
继续阅读

CSRF跨站请求伪造

上篇文章总结了遇到过的一个XSS漏洞问题,这次顺便写写自己了解的CSRF。

一、简介

CSRF是Cross-site request forgery的缩写,中文的世界一般说法是跨站请求伪造。简单地说,就是黑客伪造了一个目标网站的地址,欺骗用户去点击用浏览器打开这个地址,如果用户登陆了这个网站,就可以绕过后台用户身份验证,执行一些操作。
继续阅读

PHP导出CSV文件及问题总结

第一部分:生成CSV文件,导出/下载文件

0、什么是CSV文件。
CSV(Comma-Separated Values),即逗号分隔值(有时也称为字符分隔值,因为分隔字符也可以不是逗号)。CSV文件是以CSV格式存储表格数据的纯文本文件。
注:Excel可以直接打开CSV文件, 可以另存为Excel文件扩展名xls(Excel 03之前的版本), xlsx(Excel 07之后的版本)。所以一般导出Excel数据的需求,直接导出CSV比较快捷。
继续阅读

PHP二维数组合并排重的两种方式

业务中需要统计一段时间投票独立的用户数,涉及到数组的排重,用传统array_unique()发现,当数据量达到百万级后, 设置的1G内存都耗尽了,仍然没有统计完。而用array_flip()发现不仅可以统计出来,而且更快。

之前这两种方式没有比较过,数据量小的时候也没有遇到问题,发现差异,一直混用。特记录下两种方式。
继续阅读

PHP输出缓冲(output buffer)初级理解和应用

声明:不同的PHP版本,操作系统环境,Webserver, 参数默认值及配置可能会有差异。本文基于的环境如下:
PHP version: 7.2.8; Nginx version 1.14.0
Mac OS version: 10.10.5; Chrome version: 69.0;
Safari version: 8.0.8

第一部分 基础概念

计算机缓冲区(buffer)
计算机中暂时存放输出或输入信息的内存区域。缓和高速部件和低速部件之间通信速度不匹配的矛盾。缓冲(buffer)和缓存(cache)之间还是有本质区别的【点击查看区别】。
继续阅读

PHP使用include(require)原则

一个类有几千行,拆分其中的一部分封装成一个单独的类(这里一个类一个文件),通过引入这个类文件,减少原代码的行数,增加代码可读性和可维护性。

这里有两个疑虑:
一、引入外部的类文件,用PHP那个方法include, require?
二、引入外部类,然后再实例化,性能损耗如何?

重要说明:包含外部文件路径设置,以及include_path是如何起作用可见鸟哥博客风雪之隅:深入理解PHP之require/include顺序

设置include_path
php.ini中可参考手册这里

include_path=".:/php/includes"

php-fpm.conf中

php_admin_value[include_path] = ".:/usr/local/sinasrv2/lib/php"

PHP代码中参考手册这里

set_include_path('/usr/lib/pear');

// 或使用 ini_set
ini_set('include_path', '/usr/lib/pear');

一、引入外部文件用那个方法

我们知道PHP包含并运行外部文件有4个语句结构,include、require、include_once、require_once。include(require)_once直接忽视,就当不存在,原因可见文末的使用原则。
继续阅读

投票类应用防刷总结


(图片来之维基百科:日本投票箱

这里说的投票是网络投票,有句话说网络投票比的就是刷票,可见防刷票一直都是一个难题。虽然不能完全防止,但是我们是可以增加一些逻辑限制。

接触到一些投票性质的场景,比如微博投票投票产品、知乎投票、投票活动、抽奖活动、加油、应援、明星打榜等。
继续阅读