PHP笔记 增强版

1.last_insert_id
在mysql数据库中,显示上一次插入的自增数据,一般
用于获取上次插入的id

2.rawurlencode
将字符编码成url格式,可提高适配性

3.array_map
对数组中所有值进行回调函数处理后生成新数组

4.mysql_real_escape_string
转义 SQL 语句中使用的字符串中的特殊字符,避免sql
注入

5.strip_tags
函数剥去 HTML、XML 以及 PHP 的标签,多用于显示文

6.strtotime
将任何英文文本的日期时间描述解析为 Unix 时间戳

7.2038.1.19
由于Unix时间戳的限制,将会产生下一波的千年虫

8.date_format
mysql函数,根据format 字符串安排date 值的格式,
多用于日期查询

9.feof
检测流上的文件结束符,多用于检测是否到文件末尾

10.highlight_string highlight_file
多用于高亮显示源代码

11.parse_ini_file
解析一个配置文件,并以数组的形式返回其中的设置

12.mcrypt
PHP加解密库

13.exif_read_data
从图片文件中读取EXIF头信息

14.imagestring imagecopymerge
GD库函数。给图片添加水印

15.jpGraph
PHP图表生成扩展,可用于生成验证码

16.保留字
mysql中默认有特殊意义的单词,一般在定义字段和库
名时应避免使用

17.加花括号
在sql语句或者echo时,常给变量加花括号,用于直接
获取变量值

18.单双引号混合
当语句中需要嵌套引用时,应使用单双引号混合的嵌套
方式

19.短标签
<?=?>,开启后可以简写,但移植性差

20.magic_quotes
自动转义开关,一些老版本的PHP默认开启,有一定的
检测必要

21.session_set_save_handler
可将session保存于数据库中

22.explain
调试Mysql语句时使用

23.var_dump
调试数组时使用,可查看数组值及结构

24.ob_start
打开输出缓冲,多用于优化PHP,添加缓存

25.cache_lite
PHP缓存扩展

26.xpath
XML查询语言

27.rest
用于web服务的含状态传输机制

28.phpDocumentor
PHP API文档生成工具

29.PHPUnit
PHP单元测试工具

30.CLI
php命令行模式,可使用php脚本直接运行命令行

MySQL笔记

1.字符串连接
concat()

2.子查询
where xx in ()

3.正则表达式
regexp

4.限制
limit

5.排序
order by

6.两者内
between xx and xx

7.去空格
trim()

8.别名
as

9.当前日期
now()

10.日期
data()

11.时间
time()

12.行数
count()

13.不同行
distinct

14.增
insert into 表名 values ()

15.删
delete from

16.查
select 列名 from 表名

17.改
update 表名 set 列名 = 值

18.空值
is null

19.分组数据
group by xx having xx(having类似where)

20.命令顺序
where,group by,having,order by,limit

21.数据库和数据库管理系统区别
数据库是保存在硬盘的文件,而DBMS如MYSQL,ORACLE等

22.子查询构建
两个不同的表相同的字段

23.内部联结
inner join xx on xx(也称等值联结)

24.外部联结
left outer join xx on xx (包含其余的行,从左边表选择所有行)

25.创建组合查询
union(使用union all不取消重复行)

26.MyISAM和InnoDB引擎区别
前者支持全文检索,速度快
后者支持事务处理

27.模糊匹配
LIKE

28.匹配符
* 0个或多个字符
_ 任意一个字符

29.主键与外键的区别
前者是一个表中唯一的
后者是另外一个表中为了与前者相匹配的

30.全文本搜索
fulltext(需要对表进行索引)
match()(指定被搜索的列)
against()(指定要使用的搜索表达式)

31.使表达式区别大小写
binary

32.视图
虚拟的表

33.存储过程
mysql语句集合

34.游标
cursor(功能类似指针,针对存储过程的结果集)

35.触发器
create trigger(在某个语句事件发生时自动执行)

36.事务处理
保证成批的MySQL操作完全执行或完全不执行

PHP手册笔记 续

1.自动加载类
function __autoload($classname)
{
}
自动加载与实例化类同名的文件
2.重载
改写继承后类的属性和方法
3.Traits
trait myTrait
{
}
use myTrait;
被不同的类都能调用到的方法集合,代替多重继承
4.回调函数
callback
当特定的事件或条件发生的时候,被作为参数调用的函数
5.类型约束
规定函数的参数类型
6.后期静态绑定
static::who();
用于在继承范围内引用静态调用的类
7.对象复制与赋值的区别
$a = $b;
$a = clone $b;
指向的内存空间不同
8.序列化
serialize()
unserialize()
使变量、数组、对象便于在网络中传输(如URL、POST、cookies、数据库等),url中还需调用urlencode()
9.命名空间
namespace
解决重名问题,调用公共空间的方式是直接在元素名称前加 \

 

PHP手册笔记

1.静态变量
static
多次调用只初始化一次
2.全局变量
global
可以全局调用
3.可变变量
$$
变量的值变为新变量名
4.输出类型和数组
var_dump()
可以完整输出数组的key和value
5.判断类型
is_type()
type为类型名,判断是否为此类型
6.新建数组
arr[] = value;
新建一个数组,如已存在,则顺延
7.引用
$a = &$b
改变a值同时改变b值
8.新建数组2
$arr = array(“a” => “aa”,”b” => “bb”,);
使用=>符号赋值
9.赋值cookies
setcookie()
多个值赋给同一个cookie可以是数组
10.魔术引用
magic_quotes_gpc
老版本php默认打开,会给提交的特殊字符加反斜杠,建议关闭
11.常量
define(“FOO”,”something”);
传统上常量标识符都为大写,常量不加$,5.3后新增的const定义常量必须在顶端
12.魔术常量
__FILE__
双下划线开头和结尾
13.对象
$object = new class();
对象是类的实例化
14.执行运算符
$output =`ls -al`;
反引号,执行命令,效果同shell_exec()
15.数组联合
$a + $b
把右边的数组加到左边后面,如果键名一致,则只取左边
16.类型运算符
instanceof
用于确定一个PHP变量是否属于某一类class的实例
17.流程控制的替代语法
if ($a==5):
echo ‘a is equal to 5’;
endif;
把左边的{改为:,把右边的}改为endxx;
18.函数调用
函数无需在调用之前被定义,除非函数是有条件被定义时
19.双冒号
::
访问父类的成员或者访问静态属性
20.对象运算符
->
访问类的成员对象,有别于数组运算符=>
21.特殊的字符串表达方式
heredoc
<<<EOF
EOF
nowdoc
<<<‘EOF’
EOF
两个EOF之间的值不转义
22.抽象类
abstract
只能被子类继承,不能被对象实例化,且抽象方法不能有具体实现
23.构造函数和析构函数
__construct()
__destruct()
前者新建类时初始化属性,后者销毁类时执行命令
24.php中抽象类和接口的概念和区别
不同点:
抽象类中可以有非抽象的方法而接口中只能够有抽象的方法!
一个类可以继承多个接口,而一个类只能继承一个抽象类!
接口的使用方式通过implements关键字进行,抽象类则是通过继承extends关键字进行!
共同点:
都类似于模版
25.final关键字
final
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
26.对象复制
clone object
复制对象
27.命名空间
namespace
只可用于常量、类、函数。类似目录

类Unix操作系统大观

Unix系:
FreeBSD
免费的自由软件,很多外国友人第一款使用的操作系统就是这个(因为windows是收费的)
AIX
IBM出品的小型机操作系统,很多银行、证券公司使用
Mac OS X
苹果公司自主研发的操作系统,目前的最新版本为10.9

Linux系:
Ubuntu
完全免费,连光盘也免费寄送,还有中国特别版的Ubuntu Kylin
Red Hat
L系最著名的发行版,也是Linux系的主要赞助厂商
CentOS
被誉为红帽子的克隆版,广泛被用于服务器领域
arch linux
拥有小巧精悍的特点,常用于配置并不是很高的服务器和开源硬件上
BackTrack
黑客的最爱,搭配无线解密软件,可以破解目前绝大多数的无线密码
Android
安卓理论上说也是linux的一个发行版,因为底层是linux,上层是java

100秒了解10种编程语言

C——
最经典的高级编程语言,至今仍被广泛使用并被认为是执行效率最快的高级编程语言
语法严谨,能够自由操作内存地址
对底层支持好,主流的操作系统均为C语言开发
理论上C++也是由C语言衍生出的

Java——
跨平台性好,利用虚拟机,几乎可以在任何平台上运行
学会了可以开发安卓应用和游戏
很多电梯和家电的开发语言都是Java
很多管理系统,都是用Java开发

C#——
搭配VS,可以快速开发出一个图形界面应用
内置很多的API控件,比如利用Web Brower控件,几分钟就能做一个简单的浏览器

PHP——
大量开源的项目,几乎不用编程就能搭建一个网站
网络上大部分的虚拟主机都是PHP的
可以内嵌命令行
通过现成的组件可以实现快速生成jpg、pdf等

SQL——
严格意义上只能算查询语言
语法简单,一般用于数据库查询
可以进行嵌套查询

Ruby——
日本人开发,所以广泛被作为日式游戏脚本语言
搭配rails可以进行web开发
语法简单易懂,几乎不需要注释

Python——
没有分号等多余符号
结构以缩进划分

Javascript——
严格意义上属于一款脚本语言,但因为node.js的兴起定义有所变化
语法晦涩难懂,但可以通过扩展如coffeescript使其代码更优雅
通用型脚本语言,支持几乎所有浏览器
由于代码在客户端运行,所以十分节省服务器资源
一般与后端脚本语言搭配使用

CSS——
严格意义上属于样式表语言,但是搭配扩展如Less可以支持逻辑、运算等
主要是实现脚本化的设计、布局等
语法简单易懂,可以实现丰富多彩的样式变化
一般和Javascript搭配使用

Go——
可以直接嵌入C语言
支持并发,多线程执行
轻量级,去除了其他编程语言冗余的功能

从HTML+CSS+JavaScript到MarkDown+LESS+CoffeeScript

相信大家对HTML+CSS+JavaScript的黄金组合一定不陌生,可以说,这些技术都是前端开发的必修课。随着技术的不断更新换代,越来越多的高效开发方案层出不穷。例如,用MarkDown替代HTML,用LESS替代CSS,以及用CoffeeScript替代JavaScript。这篇文章,就来探讨一下用MarkDown+LESS+CoffeeScript方案替代传统的HTML+CSS+JavaScript的黄金组合。

对于骨灰级网友来说,一定对HTML有着深厚的感情,因为早期的网页几乎都是用纯HTML编写的,虽然现在发展到了HTML5,但目前用得最多的,还是那些早期的语法。MarkDown,可以使HTML在编写文本内容时更加简洁高效,而在处理非文本内容,完全可以加入HTML语法形成混合编写。MarkDown的优点很多,比如可以自动处理特殊字符,例如&,在W3C验证中,链接中&符的转换往往是最容易忽略的;而对于电子邮件地址,MarkDown直接生成对应的转义字符,可以一定程度地防止邮件机器人的采集。

CSS的发展使网页支持更丰富的样式,但传统的CSS语法过于简单,即使发展到了CSS3,也根本算不上是一门编程语言。而通过LESS,可以扩展CSS的功能,使其支持变量、运算、函数等编程语言特有的高级功能。使用LESS时,可以先生成对应的CSS,也可以调用LESS的JS脚本在客户端编译,甚至可以用node.js直接在服务端编译。

最初看到CoffeeScript这个名词,是从豆瓣阅读上的一本付费CoffeeScript手册开始。CoffeeScript的优点,在于将JavaScript这种类C/Java语法的编写风格,转变为类似Ruby/Python语法的编写风格。这类语法风格的特点是:没有花括号,也没有分号,甚至没有变量和函数前缀,使用缩进来区分主从关系,这样就使语法更加简洁明了。

使用MarkDown+LESS+CoffeeScript的新兴组合方式编写网页,不但大大加快了网页开发的速度,同时使得程序更加优雅易读。相信不久的将来,一定会成为前端开发的最佳实践。

基于开源技术的视频网站开发构想

宽带的普及给我们的生活带来了极大的便利,其中之一,便是可以通过互联网收看电影、电视。诸如youtube、hulu、niconico等都是国外著名的视频网站,而优酷、土豆、爱奇艺等则在国内占据了大片江山。像Justin TV这类网站,可以说是视频网站中的一朵奇葩,将视频网站带入了在线直播的新纪元。

先来说说实现在线点播所需要的关键技术,一是视频转码,二是视频播放器。视频转码可以通过ffmpeg来实现,不但开源免费,还支持H.264高清转码,同时可以生成视频缩略图;而视频播放器,目前主流的有flow player、JW player等,但这里推荐一款国产的视频播放器——ckplayer,功能极其强大,支持rtmp直播,可以设置前置、后置、缓冲、暂停广告,支持视频拖放,带分享、关灯等功能,基本现在主流视频网站播放器有的功能,都可以通过此播放器实现。

接下来,如果想要实现Justin TV这种在线直播的功能,则需要另外架设流媒体服务器。收费的可以选择ADOBE的FMS,而开源的则有Red5、crtmpserver等。

使用MD5加密密码登录任意账号思路

最近百度网盘的账号密码泄露了,密码全部以MD5方式加密。有些人说MD5是不可逆的,危害不大。这篇文章就来分析一下有了账号的MD5密码,黑客可以做些什么?

首先,来讨论一下获得账号的MD5加密密码的三种主要途径:一是自己入侵网站的数据库,如果数据库中的密码用MD5加密了,自然就获得了MD5加密密码;二是从各种途径获得的泄露出来的网站数据库,比如这次的百度网盘数据库;三是知道明文密码,使用MD5加密工具进行加密。

现在假设已经获得了账号的MD5密码,由于MD5是不可逆的,但可以通过账号密码对照库进行破解。所谓的对照库,其实就是别人事先把收集的密码或者是黑客字典生成的密码进行加密,然后分别把加密前和加密后的密码一一对应起来存入数据库。然后,只要进行数据库查询,或者简单理解为搜索数据库中的MD5加密数据,就能找到对应的明文密码。

当然,这种方法不是万能的,有些强密码可能不在收集之列,所以无法破解。这时黑客就可以换一种思路。简单的说,现在网站验证登陆的方法,主要是对比用户在登陆框中输入的密码和数据库中对应的账号密码,如果一致,就登陆成功。而如果数据库中的密码是经过MD5加密的,这种对比的过程不会解密数据库中的MD5密码(因为MD5是不可逆的),而是用MD5加密用户输入的密码,这样就相当于对比两组MD5加密密码,一致则登录成功。

通过这一原理,我们就可以通过以修改cookie的方式,欺骗网站进行登录。这里,来解释一下cookie。说到cookie,不得不提一下session。这两种技术都可以用于验证用户登录,不同的是,session的数据是存储在服务器,当浏览器关闭后自动注销;而cookie是存储在客户端,可以长期保存。目前大多数网站为了用户登录方便,大多采用了cookie验证的方式。这样,就可以通过修改存储在本机的cookie,在不破解MD5密码的情况下,登录网站。大致过程是先注册一个账号登录此网站,获得网站的cookie模版,然后把里面的ID和密码字段替换成相应的ID和MD5加密密码。这样,下次登录时,网站会对照你本机cookie中的MD5密码和数据库中的MD5密码,如果密码没有修改过,则登录成功。

 

PHP源代码解密利器——dezender使用小贴士

dezender中文名黑刀,是一款由国人开发的php源代码解密工具。解密的算法部分是直接套用了国外牛人开发的程序,dezender则是在其基础上添加了GUI界面,简化了操作。

黑刀dezender
黑刀dezender界面

使用时可以多试试几个解密内核,相信总有一款适合你。如果解密出来函数出现乱码,可以试着勾选调用混淆函数库,这样能提高解密的成功几率。

一般dezender解密并不能达到100%完全解密,大概能解密90%-95%左右,剩下的部分可能会出现一些小bug。目前自己遇到的bug有:empty前的!运算符遗漏;Smarty模板赋值语句被替换为PHP变量。修正bug后基本就和未解密时一样正常运行。