首页 > 编程技术 > php

php5.5使用Opcache加速PHP的配置详解

发布时间:2016-11-25 15:28

在前版本中我们加速php都会使用像php-accelerator zend之类的工具来进行加速优化了,但如果你使用了php5.5版本可以直接使用自带的Opcache加速PHP哦,下面就为大家介绍一下配置步骤吧。
使用腾讯云服务器已经有一段时间了。购买的是腾讯云服务器系统是CentOS6.3版本的Linux发行版。前段时间还一直折腾这HHVM—->来自Facebook开源开发的PHP虚拟机。可惜的是一直没有个结果出来,如今,看来也不用去折腾它了。今天在PHP服务器上加载了Opcache加速模块。感觉良好。经过站长综合SEO查询可以检测出现下的响应时间大大提升了。从之前的400多ms到现在的180多ms左右。
小站程序直接使用Nginx是没有错的,Apache消耗内存太大了,根本不够折腾滴。对于Nginx的fastcgi_cache一直没有解决,不好使。动态页面还是不要缓存来得实在。下面来说下在PHP5.5.0以后版本的PHP启用Opcache加速。
PHP5.5.0以后已经将Opcache集成到源码包里面了。对了,忘记说Opcache是什么来着了。简单说吧,Opcache是PHP的加速器中的一种,由之前的 Zend Optimizer 改名而来,类似国人开发的Xcache差不多,都是讲PHP编译过的结果暂时缓存在内存中以便下次出现同样的请求不重新作PHP编译直接返回结果。
PHP5.5.0以后版本自带Opcache加速器,但默认情况下木有启用。所以编译的使用我们想要启用该PHP加速器就应该添加参数 : –enable-opcache 来制定。对于已经编译安装了PHP5.5.0以上版本但当初又没有启用该加速器的用户可以像PHP添加模块一样编译添加。添加已经编译安装好的PHP模块可参照 这里 。唯一不同的就是opcache的包目录已经自带和在PHP.INI下的配置参数不一样。如下图操作:add opcache mod for your php5

然后再php.ini配置里面添加对应的opcache配置即可:

 代码如下 复制代码
[opcache]
zend_extension = /data/app/php5/lib/php/extensions/no-debug-zts-20121212/opcache.so
opcache.enable=1
opcache.memory_consumption = 64
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
opcache.enable_cli = 1

最后重启你的php-fpm 程序即可。命中率很高滴,很靠谱的:


opcache cache hitstest for enable opcache speed
之前使用xcache缓存的测试图:test my site speed only 421ms
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况了,下面我们来看php5中Xdebug配置安装,希望能帮助到各位。

Xdebug版本下载

http://www.xdebug.com/download.php

注意在下载Xdebug时我们必须查看自己php版本之后与xdebug一样,并且要查看你的php是线程安全或非线程序安全的,否则可以没有用哦。


下载好 php_xdebug.dll 之后我们复制到你的php ext目录,如

D:/phpStudy/PHP5/ext/php_xdebug.dll

这个是我本地的,放好之后再把php.ini文件进行修改,加入下面代码

 代码如下 复制代码

[Xdebug]
zend_extension="D:/phpStudy/PHP5/ext/php_xdebug.dll"
xdebug.collect_return=1
xdebug.show_mem_delta=1
xdebug.show_exception_trace=1
xdebug.idekey="PHPStorm"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.auto_trace=0  错误跟踪提示0关闭,1打开
xdebug.trace_output_name=%s.trace.log
xdebug.trace_output_dir="E:/XDebug/Trace"
xdebug.profiler_enable=0
xdebug.profiler_output_name=%s.profiler.log
xdebug.profiler_output_dir="E:/XDebug/Profiler"

好了最后一步重启apache就可以解决了哦,然后我们来检查一下Xdebug配置安装是否成功了,我们在一个php测试一下phpinfo()

php5中Xdebug配置安装步骤介绍

如果在截图处可看到with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
就代码成功了

现在我们测试一段代码

php5中Xdebug配置安装步骤介绍

是不是非常详细的告诉我们错误信息了呀。

apk格式安装文件是android智能系统的安装文件了,下面我们来看一个利用php实现自定义apk安装包例子,希望能帮助到各位。

需求:

突然收到老大的需求,要对产品进行一次推荐好友安装的活动,每个会员下载自己的专属安装包(里面记录会员的相关信息)。

思路:
经过了解,发现apk安装包原来只是zip的一个马甲,使用php的ZipArchive类可以对文件进行操作。

实现代码:

 代码如下 复制代码

// 源文件
$apk    = "gb.apk";
// 生成临时文件
$file   = tempnam("tmp", "zip");
// 复制文件
if(false===file_put_contents($file, file_get_contents($apk))){
    exit('copy faild!');
}
// 打开临时文件
$zip    = new ZipArchive();
$zip->open($file);
// 添加文件
// 由于apk限定只能修改此目录内的文件,否则会报无效apk包
$zip->addFromString('META-INF/extends.json', json_encode(array('author'=>'deeka')));
// 关闭zip
$zip->close();
// 下载文件
header("Content-Type: application/zip");
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename=\"{$apk}\"");
// 输出二进制流
readfile($file);
// 删除临时文件
unlink($file);

php安装mysqli扩展模块我们只需要简单的进入生成就可以了,这个模块好像默认在linux系统中是存在的只是没有安装吧,具体安装步骤如下。

在某些时候,比如安装statusNet时,会报错:

Cannot find a database extension. You need at least one of mysqli, pgsql

这表明在php中没有mysqli或pgsql扩展,这里就描述一下mysqli的安装过程。

进入到目录/usr/local/php-5.4.14/ext/mysqli,先运行sudo phpize命令生成configure文件,然后运行以下命令进行安装:

 代码如下 复制代码

./configure –prefix=/usr/local/mysqli –with-php-config=/usr/local/php/bin/php-config –with-mysqli=/usr/local/mysql/bin/mysql_config

make

make install

如果以上没报任何错,则安装成功。

最后再进入到/usr/local/php/etc,修改php.ini,将;extension=php_mysqli.dll修改为extension=php_mysqli.dll即可。

php多线程安装pthreads方法有一点复杂了,下面的安装步骤有一些多,希望能帮助到各位哦。

PHP扩展下载:https://github.com/krakjoe/pthreads
PHP手册文档:http://php.net/manual/zh/book.pthreads.php
安装脚本

 代码如下 复制代码
#!/bin/sh
cd /web/soft/php
if [ -d "pthreads-master" ];then
rm -rf pthreads-master
fi
unzip pthreads-master.zip
cd pthreads-master
/web/server/php/bin/phpize
./configure --with-php-config=/web/server/php/bin/php-config
make
make install
rm -rf pthreads-master
PHPINI="/web/server/php/etc/php.ini"
sed -i '907a extension = "pthreads.so"' $PHPINI
#更新php-fpm配置
sed -i 's%;pid = run/php-fpm.pid%pid = run/php-fpm.pid%' /web/server/php/etc/php-fpm.conf
sed -i 's%;error_log = log/php-fpm.log%error_log = log/php-fpm.log%' /web/server/php/etc/php-fpm.conf
#杀死php-fpm进程
ps aux | grep "php" | grep -v "grep" | awk '{print $2}' | xargs -i kill -9 {}
#启动php-fpm
/web/server/php/sbin/php-fpm
在安装过程中出现错误
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers

解决方法是安装或升级re2c 0.13.4以上版本。
下面我们用rpm包安装此库。
centos-5 32位:http://pkgs.repoforge.org/re2c/re2c-0.13.5-1.el5.rf.i386.rpm
centos-5 64位:http://pkgs.repoforge.org/re2c/re2c-0.13.5-1.el5.rf.x86_64.rpm
centos-6 32位:http://pkgs.repoforge.org/re2c/re2c-0.13.5-1.el6.rf.i686.rpm
centos-6 64位:http://pkgs.repoforge.org/re2c/re2c-0.13.5-1.el6.rf.x86_64.rpm
configure: error: pthreads requires ZTS, please re-compile PHP with ZTS enabled
原因: 我在编译php的时候没有加入 --enable-maintainer-zts ,这个必须要重新编译php,不能动态加载的!
于是我重新编译了php,在原来的编译参数基础上那个加入了 --enable-maintainer-zts ,重新编译安装php即可!
以下为一个示例

 代码如下 复制代码
class test_thread_run extends Thread
{
public $url;
public $data;
public function __construct($url)
{
$this->url = $url;
}
public function run()
{
if(($url = $this->url))
{
$this->data = model_http_curl_get($url);
}
}
}
function model_thread_result_get($urls_array)
{
foreach ($urls_array as $key => $value)
{
$thread_array[$key] = new test_thread_run($value["url"]);
$thread_array[$key]->start();
}
foreach ($thread_array as $thread_array_key => $thread_array_value)
{
while($thread_array[$thread_array_key]->isRunning())
{
usleep(10);
}
if($thread_array[$thread_array_key]->join())
{
$variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data;
}
}
return $variable_data;
}
function model_http_curl_get($url,$userAgent="")
{
$userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
for ($i=0; $i < 100; $i++)
{
$urls_array[] = array("name" => "baidu", "url" => "http://www.111cn.net/ s?wd=".mt_rand(10000,20000));
}
$t = microtime(true);
$result = model_thread_result_get($urls_array);
$e = microtime(true);
echo "多线程:".($e-$t)."\n";
$t = microtime(true);
foreach ($urls_array as $key => $value)
{
$result_new[$key] = model_http_curl_get($value["url"]);
}
$e = microtime(true);
echo "For循环:".($e-$t)."\n";
?>
标签:[!--infotagslink--]

您可能感兴趣的文章: