26

PHP 实现 word/excel/ppt 转换为 PDF的方法

OpenOffice

OpenOffice 是一套开源跨平台的办公软件,由许多自由软件人士共同来维持,让大家能在 Microsoft Office 之外,还能有免费的 Office 可以使用。

OpenOffice 与微软的办公软件套件兼容,能将 doc、xls、ppt 等文件转换为 PDF 格式,其功能绝对不比 Microsoft Office 差。 Continue reading

25

PHP编码规范之PSR-4

Autoloader


关键词 “必须”(“MUST”)、“一定不可/一定不能”(“MUST NOT”)、“需要”(“REQUIRED”)、 “将会”(“SHALL”)、“不会”(“SHALL NOT”)、“应该”(“SHOULD”)、“不该”(“SHOULD NOT”)、 “推荐”(“RECOMMENDED”)、“可以”(“MAY”)和”可选“(“OPTIONAL”)的详细描述可参见 [RFC 2119][] 。

1. 概述


本 PSR 是关于由文件路径 [自动载入][http://tools.ietf.org/html/rfc2119] 对应类的相关规范, 本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外, 本 PSR 还包括自动载入的类对应的文件存放路径规范。

2. 详细说明


  1. 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其它类似结构。
  2. 一个完整的类名需具有以下结构:

    i. 完整的类名 必须 要有一个顶级命名空间,被称为 “vendor namespace”;

    ii. 完整的类名 可以 有一个或多个子命名空间;

    iii. 完整的类名 必须 有一个最终的类名;

    iv. 完整的类名中任意一部分中的下滑线都是没有特殊含义的;

    v. 完整的类名 可以 由任意大小写字母组成;

    vi. 所有类名都 必须 是大小写敏感的。

3.当根据完整的类名载入相应的文件…… Continue reading

25

Composer.json配置文件说明

Java有Maven, Node.js有npm, ROR有gem, 这些语言的程序员在开心地使用包管理工具加速开发效率时,PHPer们还在复制粘贴的黑暗中。PHP在Composer之前,包管理的历史不堪回首。

在相当长的一段时间内,如果应用依赖于第三方库,PHPer需要拷贝这些库的源代码, 或者通过PEAR、PECL安装。如果第三方库又依赖于更多的第三方库,那么很快就会进入依赖的黑洞。直到Composer出现,PHPer们看到了属于PHP的包管理的曙光。 Continue reading

16

PHP日志类

PHP日志Class,抄来的一个php日志类,略有修改
使用实例

PHP日志类 Continue reading

05

织梦tag标签改造

一、织梦tag标签实现显示多个指定栏目的TAG标签

实例:

修改文件 /include/taglib/tag.lib.php 约第66行

改为

说明:在模板中调用时保证getall=’1′,并且typeid的值是使用英文逗号隔开的数字串或单个文章ID即可。

二、织梦tag标签实现文章页显示此文章的顶级栏目的所有下级栏目(支持N层栏目)TAG标签

实例: Continue reading

25

php接口签名生成与验证

在做一些api接口设计时候会遇到设置权限问题,比如我这个接口只有指定的用户才能访问。
很多时候api接口是属于无状态的,没办法获取session,就不能够用登录的机制去验证,那么
大概的思路是在请求包带上我们自己构造好的签名,这个签名必须满足下面几点:
a、唯一性,签名是唯一的,可验证目标用户
b、可变性,每次携带的签名必须是变化的
c、时效性,具有一定的时效,过期作废
d、完整性,能够对数据包进行验证,防止篡改

第一套方法:

第二套方法: Continue reading

14

RSA非对称加密之PHP生成pem公钥私钥对及使用的两个实例

PHP生成pem公钥私钥对

如果不能生成密钥对,则修改验证变量$confs数组中的config值。

最初我不能生成公钥,是因为函数openssl_pkey_export(),只使用一前面两个参数,后台增加了后面两个参数就可以了。原因是:因为openssl_pkey_new($confs)中使用了$confs,那么函数openssl_pkey_export()也必须加入参数$confs。

实例一:

公钥加密(openssl_public_encrypt),
私钥解密(openssl_private_decrypt)。
私钥加密(openssl_private_encrypt),
公钥解密(openssl_public_decrypt)。
都是一个道理,代码类似。

RSA加密解密有个填充方式padding的参数,不同编程语言之间交互,需要注意这个。

padding can be one of OPENSSL_PKCS1_PADDINGOPENSSL_SSLV23_PADDINGOPENSSL_PKCS1_OAEP_PADDING,OPENSSL_NO_PADDING

值得注意的是,如果选择密钥是1024bit长的(openssl genrsa -out rsa_private_key.pem 1024),那么支持加密的明文长度字节最多只能是1024/8=128byte;

如果加密的padding填充方式选择的是OPENSSL_PKCS1_PADDING(这个要占用11个字节),那么明文长度最多只能就是128-11=117字节。如果超出,那么这些openssl加解密函数会返回false。

这时有个解决办法,把需要加密的源字符串按少于117个长度分开为几组,在解密的时候以172个字节分为几组。

其中的『少于117』(只要不大于117即可)和『172』两个数字是怎么来的,值得一说。

为什么少于117就行,因为rsa encrypt后的字节长度是固定的,就是密钥长1024bit/8=128byte。因此只要encrypt不返回false,即只要不大于117个字节,那么返回加密后的都是128byte。

172是因为什么?因为128个字节base64_encode后的长度固定是172。

这里顺便普及下base64_encode。encode的长度是和原文长度有个计算公式:

$len2 = $len1%3 >0 ? (floor($len1/3)*4 + 4) : ($len1*4/3);

 

实例二:

明文超出长度的代码(前提是1024bit的密钥长,OPENSSL_PKCS1_PADDING的填充方式,否则数字要变化)

在实际应用中,分析使用场景,再把两个实例再进行一下结合,相信就会更加美妙了,这里就不多写了。

14

PHP把.cer证书内容转.pem格式字符串的封装函数

IOS的.cer证书内容转为pem格式内容