fsoooo Blog

内不欺己,外不欺人,上不欺天。君子所以慎独。

Php学习笔记 性能优化利器:生成器

如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生。 但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显。 但是,生成器功能的确非常有用。 ###优点 直接讲概念估计你听完还是一头雾水,所以我们先来说说优点,也许能勾起你的兴趣。 那么生成器有哪些优点,如下: 生成器会对PHP应用的性能有非常...

Php学习笔记 异常处理机制

最近在项目开发中,需要用到异常处理机制。 异常(Exception)是一种错误处理机制,用于在指定的错误发生时改变脚本的正常流程。 当异常被触发时,当前代码状态被保存,代码执行被切换到预定义的异常处理器函数(如果有),根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本。 ###异常的基本使用 当异常被抛出时,其后的代码不会继续执...

Php学习笔记 常见的php漏洞

PHP是弱类型语言,所以内置的很多函数,在进行转换和比较的时候,会有各种漏洞需要我们重点关注。 ###MD5加密漏洞 比较哈希字符串的时候,php程序把每一个以“0x”开头的哈希值都解释为科学计数法0的多少次方,恒为0。 所以如果两个不同的密码经过哈希以后,其哈希值都是以“0e”开头的,那么php将会认为他们相同。 另外md5加密是有几率两个字符串不同,但是加密后的值是...

Php学习笔记 巧用数组函数

##前言 PHP 的数组是一种很强大的数据类型,与此同时 PHP 内置了一系列与数组相关的函数可以很轻易的实现日常开发的功能。 善用 PHP 内置函数能极大的提高开发效率和运行效率(内置函数都是用 C 写的效率比用 PHP 写的高很多),所以本文便总结了一些在常见场景中利用 PHP 内置函数的实现方法。 ##取指定键名 对于某些关联数组,有时候我们只想取指定键名的那部分,比如数组...

Php学习笔记 安全设置

1、屏蔽PHP错误输出 在/etc/php.ini(默认配置文件位置),将如下配置值改为Off display_errors=Off 不要将错误堆栈信息直接输出到网页上,防止黑客加以利用相关信息。 正确的做法是: 把错误日志写到日志文件中,方便排查问题。 2、屏蔽PHP版本。 默认情况下PHP版本会被显示在返回头里,如: Response Headers X-powered...

Php学习笔记 复杂业务下的mvc

前言 经常会有人问: 目录如何设计比较好? 代码如何分布好? 怎么写一个可维护的项目? Controller Controller顾名思义是控制器,在入门PHP的时候,就知道Controller代表MVC中的C层,MVC本身的概念就代码分离,教你如何如何将业务分开,但面临着业务的不断发展,代码的复杂度也随之提高,功能与功能之间的链接错综复杂,最后你的MVC就变...

Php学习笔记 在两个大文件中找出相同的记录

####问题 给定两个文件A和B, 分别有x,y行数据, 其中(x, y均大于10亿),设备内存限制100M,该如何找出其中相同的记录? ####思路 处理该问题的困难主要是无法将这海量数据一次性读进内存中. 一次性读不进内存中,那么是否可以考虑多次呢?如果可以,那么多次读入要怎么计算相同的值呢? 我们可以用分治思想, 大而化...

Php学习笔记 在两个大文件中找出相同的记录 1

##引言 给定a,b两个文件, 分别有x,y行数据, 其中(x, y均大于10亿), 机器内存限制100M,该如何找出其中相同的记录? ##思路 处理该问题的困难主要是无法将这海量数据一次性读进内存中. 一次性读不进内存中,那么是否可以考虑多次呢?如果可以,那么多次读入要怎么计算相同的值呢? 我们可以用分治思想, 大而化小。相...

Php学习笔记 内存溢出解决方案

##一.内存溢出解决方案 在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解决方案。 假定日志中存放的记录数为500000条,那么解决方案如下: ini_set(‘memory_limit’,’64M’); //重置php可以使用的内存大小为64M 一般在远程主机上是不能修改php.ini文件的,只能通过程序设置。 注:在safe_mode(安全模式)下...

Php学习笔记 Goto语句

最近遇到了了这样一段有趣的代码: <?php if (true){ echo "expr evaluates to true...",PHP_EOL; }else surprise:{ echo "expr evaluates to false...",PHP_EOL; } 这段代码会输出什么呢?是输出if的内容还是else的内容? 但是他却if和else一起...