超实用PHP函数总结整理

1、PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密。 function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), “12”); return $decrypted; }else{ $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); return $encrypted; } } 使用方法如下: //以下是将字符串“Helloweba欢迎您”分别加密和解密 //加密: echo encryptDecrypt(‘password’, ‘Helloweba欢迎您’,0); //解密: echo encryptDecrypt(‘password’, ‘z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=’,1); 2、PHP生成随机字符串 当我们需要生成一个随机名字,临时密码等字符串时可以用到下面的函数: function generateRandomString($length = 10) { $characters = ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’; $randomString = ”; for ($i = […]

服务器故障:No space left on device

今天早上小编抱怨图片无法上传,说Wordpress提示没找到临时文件夹。这个错误从来没听过,ssh到后台发现很多操作都提示no space left on device,最后决定重启时,碰到下面的错误: mktemp: failed to create file via template ‘/tmp/tmp.XXXXXXXXXX’: No space left on device /etc/init.d/apache2: 91: /etc/init.d/apache2: cannot create : Directory nonexistent 运行了df -h后发现磁盘只有使用70%啊,为什么就满了呢?Google了一下,有人说可能是Inode满了。Inode用来对磁盘上每个文件进行信息索引,从而使操作系统通过Inode查询最快地找到磁盘上的文件。当文件夹里有很多小字节的文件时,在磁盘未满的情况下,Inode可能就先被100%占用了。 我做了一个df -hi的命令查询,发现确实/dev/xvda1 IUse百分比已经达到100% 依照网上的教程,我执行下面的命令找到了Inode占用最多的文件夹 for i in /*; do echo $i; find $i |wc -l; done 结果发现root用户文件夹占用Inode最多,又执行下面的命令 for i in /root/*; do echo $i; find $i |wc […]

window.onload和jQuery中的ready函数有什么区别

当页面加载后需要执行一段js时,我一直用jQuery的$(document).ready(),没遇到过任何问题。 前段时间做网页的deeplink,需要在页面加载完成后用js代码跳转至APP打开相应的页面。用了document.ready后发现,如果用户选择不通过APP打开页面,网页上的所有图片都没有显示出来。 一查才发现,自己用的document.ready并非页面加载完成,而是DOM结构载入后完成执行的。这时图片其实还没有加载出来。除了执行顺序外,document.ready和window.onload没什么本质区别。 想要等页面被载入时执行代码,就需要用到window.onload。我将deeplinking的代码放入window.onload后,问题成功解决。

Really?

我们的APP有站内搜索功能,允许用户通过关键词搜索新闻、黄页、分类信息等内容。为了记录最热搜索关键词,我对用户的每次搜索都做了数据库纪录。然后就发现下面这两条(左栏关键词,右栏搜索次数): 这位可爱的用户把搜索栏当成Google在用么?而且虽然没有任何结果,但还是百折不挠地搜了27次。 你永远无法预料你的用户会做出什么事来。

如何利用缓存提高页面加载速度

互联网有一项著名的原则叫“8秒钟原则”,即首页的加载速度超过8秒,有70%的用户就会不耐烦,选择离开。 做网站或APP当然内容是王道,产品提供有价值的内容,才会吸引更多人使用;但如果加载过慢,纵然你的内容再好,也会有相当一部分用户流失。 相对于早期的“静态网页”,现在大家开发网站时都趋向于使用后端语言和数据库通信,为用户实时展现最新文章、最新评论的“动态网页”。这个理念是没错,可当用户访问量增多时,数据库通信将会严重拖慢页面加载速度。假设5秒钟之内有1000名用户访问了你网站的首页,如果你在这5秒没有更新任何内容的话,这1000人访问了1000次数据库,只为了得到一模一样的数据。999次数据库连接通信其实就是在浪费时间和资源。 “动态网页”和数据库的同步其实没必要精确到分和秒。服务器端如果有一个10分钟的缓存机制,将大大减少用户访问时的加载时间。据我的经验,有数据库通信,加载需要3秒钟的页面,使用缓存后可以缩短至600毫秒之内。 php里有一个很轻量、实用的工具叫phpfastcache,用起来简单的不要不要的,只需要$cache->get来获取缓存过的值,如果这个值不存在,那就去数据库里把它抓取出来,用$cache->set把值存入就好了。接下来的10分钟,所有用户访问都在服务器就可以解决,不用连数据库了。当然如果数据不会经常变化的话,缓存有效时间可以设置更久。

如何按相似标签(类别)的数量来排列相关文章?

如何在Wordpress网站的单页post或是custom post type(CPT) 中显示相关推荐?网上有很多教程教你怎么做。大体都是先得到当前post的类别或标签,然后到数据库里抓有相同标签的post出来。 对于一个小的、文章类型单一的博客,这种方法足够了,但对于结构复杂,同一篇post有多个标签时,我们要在有限的空间(一般不会超过10条)为用户提供最有价值的内容,就涉及优先级和排序的问题。如何判断一篇post和当前post的相关程度呢? 我能想到的最好办法就是按他们相同标签的数量来排序了。下面是我在名为商户(”business”)的CPT中显示相关商户推荐的例子。 首先,用wp_get_object_terms 得到当前商户的所有类别和标签数组,将其implode为string,然后运行query语句得出相关商户,按相同类别和标签数量多少来排序。

Mysql并列条件筛选用OR还是IN

假设有一个叫business的table储存了大温地区的全部商户信息,其中有一栏city储存城市信息。我想提取出温哥华、列治文、本那比以及素里的商户,应该如何写query? 之前碰到这样的筛选类型,我一直用的是OR语句,类似这样的形式 WHERE city=’Vancouver’ OR city=’Burnaby’ … 昨天和同事交流,才知道原来还有一种IN语句更简洁高效 WHERE city IN (‘Vancouver’, ‘Burnaby’ …) stackoverflow 上有人做了实验,IN语句运行速度比OR至少快一倍。

判断一个PHP数组为空时应该用empty还是count==0?

研究了一下,不管是用empty还是用count,运行效率方面没什么差别。如果数组为空,count返回0;但如果数组未定义,会收到php notice。所以要在count前面加isset判断。empty()不会有这个问题。 另外,空数组在PHP中相当于false,所以其实两个方程都不需要用,直接用数组本身做判断也可以。