提升PHP运行效率的20个注意事项

1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

2、$row[’id’] 的速度是$row[id]的7倍。

3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

5、注销那些不用的变量尤其是大数组,以便释放内存。

Read more

新出现的钓鱼攻击方式 慎用链接的target=”_blank”属性

早在2014年,就已经有很多安全研究专家表示,target=”_blank”属性是非常不安全的一个属性。而且当初有些关于该属性的安全报告为了引起人们的注意,还特地将标题设置得非常醒目。

现在,许多主流的互联网服务提供商都会在网页的链接地址中加入target=”_blank”属性,而这绝对是一种非常不安全的行为。不仅如此,target=”_blank”属性还将会使广大互联网用户暴露在钓鱼攻击的风险之下。

早在2014年,就已经有很多安全研究专家表示,target=”_blank”属性是非常不安全的一个属性。而且当初有些关于该属性的安全报告为了引起人们的注意,还特地将标题设置得非常醒目。

漏洞实现机制

Read more

在CentOS 5.x中部署LVS-DR模式

LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统。

在下面的案例中,我们用了3台主机,IP地址分别为:

192.168.1.100
192.168.1.101
192.168.1.102

其中,192.168.1.100将安装LVS做为负载均衡器来分发请求,另外2台做为真实提供服务的主机,以DR模式进行部署。

首先,我们应先在192.168.1.101和192.168.1.102上部署好Apache或是Nginx,还有PHP,这里就不详细说明了,可以参考本站的《Nginx + PHP(FastCGI)安装配置笔记》(http://www.sunbloger.com/article/242.html)。

为了便于测试,我们在192.168.1.101上放置一个test.php,代码如下:

并在192.168.1.102上也放置一个同名文件test.php,代码如下:

分别通过浏览器访问http://192.168.1.101:80/test.php和http://192.168.1.102:80/test.php,正常的话会分别显示101和102。

接下来,我们分别在192.168.1.101和192.168.1.102上添加用于LVS的脚本,我们可以将脚本添加到/etc/rc.d/init.d下,作为系统服务随Linux一起启动,方法如下:

lvs-dr脚本代码如下:

 

接下来,我们开始为192.168.1.100安装LVS。

在CentOS下推荐采用yum安装,可以避免内核版本对LVS的影响。

ipvsadm安装完毕后,我们为192.168.1.100添加一个名为lvs-ds的服务启停脚本,代码如下:

将lvs-ds添加到系统服务中:

至此,3台主机部署完毕,开始测试

首先在192.168.1.101和192.168.1.102上分别启动lvs-rs

然后在192.168.1.100上启动lvs-ds

通过http://192.168.1.100:80/test.php来测试LVS工作是否正常,反复刷新页面会看到随机显示101或102就代码部署成功了。

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

PHP开源框架MiniFramework发布0.8.0版

经过半年多时间的打磨,采用PHP语言编写的,超轻量级MVC框架MiniFramework的0.8.0版本于2016年8月14日发布。

新版本的变化主要有:

  • 改写了view的渲染方式
  • 在Params中新增了getPost和getQuery两个方法
  • 在View中新增getLayout()方法,用于在视图中的指定位置调入布局文件
  • 在Action中增加了存放Request实例的属性,供在动作中调用。
  • 在Action中新增_forward()方法
  • 在Request中新增setControllerName()和setActionName()方法
  • 新增Registry类,用于全局存取变量
  • 新增支持Redis的缓存类库
  • 新增使用Memcache或Redis缓存类库时,可通过getMemcacheObj()或getRedisObj()获取实例化对象,便于使用未封装的方法。
  • 向全局函数库中新增了pushJson(),用于输出JSON并终止程序运行
  • 向全局函数库中新增了base64EncodeImage()用于将图片转换为base64编码
  • Bugfix:在Params中的checkInject()里,用preg_match替换ereg
  • Bugfix:针对PHP 5.3.6以前可能存在注入的漏洞进行修补

MiniFramework源码请移步至:https://github.com/jasonweicn/MiniFramework

最新的0.8.0版请移步至:https://github.com/jasonweicn/MiniFramework/releases/tag/miniframework-0.8.0

PHP利用FFmpeg读取视频播放时长和码率等信息

代码如下:

本例中,会用到passthru,可能部分虚拟主机会将此命令禁用。

用PHP实现URL转换短网址的算法

短网址(Short URL) ,顾名思义就是在形式上比较短的网址。在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。

下面是用PHP实现短网址转换的算法,代码如下:

通常我们用四组网址中的第一组即可。

这里需要注意的是,这个算法是不可逆的,因此,通常的做法是将短网址和对应的原网址存入数据库,当访问时,从数据库中取出匹配的原网址,通过301或header进行跳转。

PHP通过反射方法调用执行类中的私有方法

PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。

下面我们演示一下如何通过反射,来调用执行一个类中的私有方法:

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

在PHP中将图片转换为base64编码的方法

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。

这里我们分享一个将图片转换为base64编码格式的方法:

通过上面的方法转换后得到的base64编码字符串,可以存放到数据库中,需要时可以直接从数据库中读取,减少访问图片时的请求数量。

另:这个方法已经包含进MiniFramework的全局函数库中了。

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

关于Memcached对key和value的限制

Memcached中对于键(key)的限制为最大不超过250个字符。同时,对于存储的value最大可以接受的数据不能超过1MB。

我们可以通过修改源代码的方式来改变对于key的长度限制。

方法为:

修改memcached.h文件,找到 #define KEY_MAX_LENGTH 250,将250修改为其他数值,例如:#define KEY_MAX_LENGTH 512

而关于value的1M的限制,可以在启动命令中增加-I 2m这样的参数,就可以将原本1M的限制提升至2M。