月度归档:2015年07月

phpize增加php模块

一,phpize的好处
    什么时候我们要用phpize呢?我们在安装php时:
    './configure' '–prefix=/usr/local/php' '–with-mysql=/usr/local/mysql' '–with-zlib-dir' '–with-freetype-dir=/usr' '–with-jpeg-dir=/usr' '–with-png-dir=/usr' '–enable-gd-native-ttf' '–with-gd' '–enable-ftp' '–with-iconv' '–with-gettext' '–with-curl' '–enable-fastcgi' '–with-openssl'
    后面根的参数是我们要的模块,但是随着工作的需要,我们还要在加些模块,又不想重新编译php,这些我们就可以用phpize了。
二,安装php模块
    下面我以soap安装为例子
    cd /home/zhangy/php-5.2.6/ext/soap                #ext目录下面放的是php的模块库
    /usr/local/php/bin/phpize
    #确定php-config文件在不在,调用php-config,安装后.so文件会自动放到extension_dir里面
    ./configure –enable-soap  –with-php-config=/usr/local/php/bin/php-config
    make && make install
    安装完后会有这样的东西
    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ———————————————————————-
    Build complete.
    Don't forget to run 'make test'.
    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

三,查看.so文件,以及修改php.ini
    cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
    ls -al |grep soap
    -rwxr-xr-x 1 root  root   763334 Feb  9 10:51 soap.so
    vi /usr/local/php/lib/php.ini
    在加载模块的地加上一行extension=soap.so

四,重起apache或者phpcgi或者其他

原文:http://blog.51yip.com/php/177.html

Linux 下 安装 PHP 的 PDO_MYSQL 扩展

PDO_MYSQL以下操作都在Linux 系统下操作
1、下载 文件 或者 进入 在PHP源码包中进入ext/pdo_mysql

http://pecl.php.net/package/PDO_MYSQL

2、解压文件
tar zxvf PDO_MYSQL-1.0.2.tgz

3、配置和编译文件
cd PDO_MYSQL-1.0.2
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql
make
make install

注: 我的PHP安装在 : /usr/local/php/ mysql 安装在 : /usr/local/mysql 编译的时候注意你自己的安装目录在哪里
3、安装到PHP配置下

把这个记住,然后打开 php.ini文件,
并添加一行

extension=pdo_mysql.so

memcached使用

下载:http://download.csdn.net/detail/yaoyuan_difang/8865693

php_memcache.dll下载:http://pecl.php.net/package/memcache

To install Memcached as a service, follow these steps (please change all forward slashes to backslashes):

If you’re running Vista, you should set memcached.exe to Run as administrator
Install the service using the command:
    c:/memcached/memcached.exe  -d install
from the command prompt
Start the server from the Services or by running one of the following commands:
    c:/memcached/memcached.exe -d  start
or
    net start "memcached Server"
That is it, now your memcached server is installed and is listening to port 11211. There is one more thing left to do. By default, server is set to 64Mb memory limit, which is too small. To correct, go to Registry Editor and find key

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/memcached  Server .
Change the ImagePath entry to:
    “C:/memcached/memcached.exe” -d runservice -m 512
This way you will use 512 Mb memory limit for your server.

If you are using WAMP, then just turn on php_memcache extension in it. Now we are ready to go testing.

The simplest test is to write something to memcache that will expire in 30 seconds, and then try to retrieve the value from cache.
So write this into your test file:

<?php
    $memcache = new Memcache; // instantiating memcache extension class
    $memcache->connect("localhost",11211); // try 127.0.0.1 instead of localhost 
                                           // if it is not working 
 
    echo "Server's version: " . $memcache->getVersion() . "<br />\n";
 
    // we will create an array which will be stored in cache serialized
    $testArray = array('horse', 'cow', 'pig');
    $tmp       = serialize($testArray);
 
    $memcache->add("key", $tmp, 30);
 
    echo "Data from the cache:<br />\n";
    print_r(unserialize($memcache->get("key")));
?>
If everything went ok, you should see your array written out of memcache. Now you can use this powerful caching mechanism to develop really fast PHP applications. If you need to know more, go to PHP manual Memcached page

原文:http://www.codeforest.net/how-to-install-memcached-on-windows-machine

为什么不能用memcached存储Session

Memcached创建者Dormando很早就写过两篇文章[1][2],告诫开发人员不要用memcached存储Session。他在第一篇文章中给出的理由大致是说,如果用memcached存储Session,那么当memcached集群发生故障(比如内存溢出)或者维护(比如升级、增加或减少服务器)时,用户会无法登录,或者被踢掉线。而在第二篇文章中,他则指出,memcached的回收机制可能会导致用户无缘无故地掉线。

Titas Norkūnas是DevOps咨询服务提供商Bear Mountain的联合创始人。由于看到Ruby/Rails社区忽略了Dormando那两篇文章所指出的问题,所以他近日撰文对此进行了进一步的阐述。他认为问题的根本在于,memcached是一个设计用于缓存数据而不是存储数据的系统,因此不应该用于存储Session。

对于Dormando的那两篇文章,他认为第一篇文章给出的原因很容易理解,而人们经常会对第二篇文章给出的原因认识不足。因此他对这个原因进行了详细地阐述:

Memcached使用“最近最少使用(LRU)”算法回收缓存。但memcached的LRU算法针对每个slab类执行,而不是针对整体

这意味着,如果所有Session的大小大致相同,那么它们会分成两三个slab类。所有其它大小大致相同的数据也会放入同一些slab,与Session争用存储空间。一旦slab满了,即使更大的slab中还有空间,数据也会被回收,而不是放入更大的slab中……在特定的slab中,Session最老的用户将会掉线。用户将会开始随机掉线,而最糟糕的是,你很可能甚至都不会注意到它,直至用户开始抱怨……

另外,Norkūnas提到,如果Session中增加了新数据,那么Session变大也可能会导致掉线问题出现。

有人提出将Session和其它数据分别使用单独的memcached缓存。不过,由于memcached的LRU算法是局部的,那种方式不仅导致内存使用率不高,而且也无法消除用户因为Session回收而出现随机掉线的风险。

如果读者非常希望借助memcached提高Session读取速度,那么可以借鉴Norkūnas提出的memcached+RDBMS(在有些情况下,NoSQL也可以)的模式:

  • 当用户登录时,将Session “set”到memcached,并写入数据库;
  • 在Session中增加一个字段,标识Session最后写入数据库的时间;
  • 每个页面加载的时候,优先从memcached读取Session,其次从数据库读取;
  • 每加载N页或者Y分钟后,再次将Session写入数据库;
  • 从数据库中获取过期Session,优先从memcached中获取最新数据。

关于memcached的更多信息,可以查看这里

原文:http://www.infoq.com/cn/news/2015/01/memcached-store-session