Flock,你知多少?
PHP 中的 flock 函数可以让你的站点挂了,你信吗?不可能,不就是一个锁文件嘛。
我们所使用的是 Discuz! X3.2 版本,其中这个helper_log::writelog 函数中使用了 @flock($fp, 2); 此时如果你的日志目录(data/log/)使用了NFS(网络文件系统),这将在某些情况下是有问题的。
【转载】MySQL 数据库性能优化之缓存参数优化
在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助。
数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化:
如何使用C++开发PHP扩展(下)
上文中介绍了使用C++编写简单PHP扩展的方法,但是更多的情况是业务中已经有独立的 api 库,形式为 libxxx.a / libxxx.so,PHP程序中需要调用这些 api,所以这时就要编写PHP扩展来实现。这时是使用静态库 libxxx.a ,还是使用 libxxx.so 呢 ?常见的做法是使用静态库 libxxx.a ,下面一步一步介绍:
如何使用C++开发PHP扩展(上)
目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案。当然“如何开发PHP扩展”的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的介绍。C++编程语言功能的强大,促使好多公司后台程序选择使用它,因此碰到的大多数情况是需要我们用C++来扩展 PHP。PHP源码中的扩展骨架工具,默认生成的是支持 C 语言,如果要使用C++开发,有些参数需要另行配置。下面将用一个简单的示例来说明。
C++动态库和静态库
静态库、动态库均指可复用、可独立功能程序代码的集合。静态库是在链接阶段把库代码包含入可执行文件的方式,动态库是在执行阶段把库代码引入可执行文件的方式。
静态库只需保证在开发者的计算机有正确的库文件,生成的可执行文件体积较大。当初正是为了避免此问题,才开发了动态库技术。各有各的长处,各有各的短肋。针对不同的情况,选择不同的方式吧。
编译PHP扩展的两种方式
编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆。
C/C++程序编译有两种方式:动态编译、静态编译。PHP 是使用 C/C++程序开发的一门脚本语言,其扩展编译也就脱离不了前面提到的两种,动态、静态。站在PHP程序的角度,动态编译就是扩展生成一个 .so 文件,然后在 php.ini 中加载这个 .so 文件,此时即可调用其中的函数或者是类方法;静态编译就是在安装 PHP 时把其扩展文件内容编译到 PHP 内部,然后不需要做任何事情,就可以直接调用其中的函数或者还是类方法。这二者有什么优缺点呢?采用静态编译方式,程序在调用其函数/类方法时要快一些;采用动态编译方式,在有新扩展需要添加到PHP中时不需要重新编译PHP,只需要编译该扩展下的文件,然后把 .so 文件引入即可。二者均有利弊,使用时视情况而定是最好的方法。下面用Linux 平台下的操作来说明其编译过程。