APC3.1.9自动安装脚本For DirectAdmin with PHP-CLI

前面发过一个APC Shell Script For PHP-CGI,经过Zeraba的指导,使用apc.php看了下APC的命中率,发现无论怎样,命中数只有“1”,明显APC并没有发挥它应有的用途。同时也发现,不管是什么opcode的PHP组件,都是只能在探针那看个版本……

既然PHP-CGI有问题,那就换PHP-CLI,但是DirectAdmin的PHP-CLI模式也有问题,那就是无法以特定身份去创建执行PHP程序,这就使得用户的网站某些目录需要设置rwxrwxrwx,非常麻烦,而且也不安全。

要解决DirectAdmin的PHP-CLI的问题,大家可以参考:实现DirectAdmin使用PHP-CLI模式的站点独立用户与查看各用户资源占用情况

要给PHP-CLI添加APC,其实和前面CGI的那个方法差不多,只是一些二进制文件的目录有所改变。

这里是使用添加APC的Shell Script的方法:

 注意:

如果你添加APC后无法访问PHP文件,并且在Apache的错误日志(/var/log/httpd/error_log)里面找到如下错误信息:

错误信息

 

这很明显你在使用PHP5.2.17,因为PHP5.2,Zend Optimizer与APC不能共存。因此需要你手动修改php.ini,把加载Zend Optimizer的那行注释掉:

php.ini

如图,在zend_extension=/usr/local/lib/ZendOptimizer_5.2.so这行前面加个英文的”;”,然后重启apache就行了。

如果顺利完成上面几个步骤,访问几个PHP文件,再使用apc.php看看命中率,如果Hits数目那有变化,那证明APC正常了:

APC.PHP

解决PHP加载组件提示:PHP Warning: PHP Startup: Unable to load dynamic library ‘./apc.so’ – ./apc.so: cannot open shared object file: No such file or directory in Unknown on line 0

前面发表了一篇文章:APC3.1.9自动安装脚本For DirectAdmin

给另一台PHP版本为5.2.17的服务器使用时,发现APC组件没有成功加载,PHP探针里面无法检测到,

起初以为路径的问题,于是把php.ini里面的:

更改为:

但是很可惜,仍然不行。

尝试重新编译安装APC,依然是那样。想起有错误日志,于是打开看了下,果然,N行同样的错误记录:

貌似是./有问题,使得PHP在./,也就是自己所在的目录寻找apc.so文件,理所当然是找不到的。不过填的是绝对路径呀,PHP应该是通过绝对路径加载apc.so的,而且另外的IonCube和Zend Optimizer也都是绝对路径。

对比了下IonCube、Zend Optimizer和APC的so文件的目录,IonCube和Zend Optimizer的so文件都是在/usr/local/lib里面,而apc.so是在/usr/local/php5/lib/php/extensions/里面。想起PHP5.3的那台服务器是使用extension=”apc.so”这句代码就能成功加载APC。

这下狂然大悟,一定是extension_dir的问题。于是对比了下PHP5.3和PHP5.2的php.ini的extension_dir的参数,发现都是:

不过关键的是:PHP5.3的在最前面加了个“;”注释掉了,而PHP5.2没注释,于是修改PHP5.2的php.ini,于是加了个“;”把extension_dir = “./”注释掉,再重启apache。

抽薪止沸,F5探针,APC旁边的小红X没了:

APC

APC3.1.9自动安装脚本For DirectAdmin with PHP-CGI

应客户的要求,给LANVMP虚拟主机添加了APC组件,以提高PHP的执行效率。

步骤和其他PHP组件一样,wget,phpize,configure,make,make install,修改php.ini,重启apache。

为了方便下次使用,于是写了个Shell Script共享出来,利人利己。

该Shell Scripts文件的使用方法:

然后使用PHP探针检测下,看到APC处显示3.1.9即表示安装成功。

 

该Shell Scripts的内容如下:

 

 发布本文章后,我才发现DirectAdmin的PHP-CGI无法使用opcode……