FreeBSD 7.0 安装MySQL 5.0.51a

1,去FreeBSD.org下载相应的安装包(packages):

ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/
devel/libtool-1.5.24.tbz
ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/
databases/mysql-client-5.0.51a.tbz
ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/
databases/mysql-server-5.0.51a.tbz

2,装上面下载的三个文件拷贝到同一个目录下,执行下面的命令进行安装:

cd /var/ftp/incoming
pkg_add mysql-server-5.0.51a.tbz

3,提示安装完成,接着执行:

/usr/local/bin/mysql_install_db --user=mysql

4,启动Mysql:

/usr/local/bin/mysqld_safe --user=mysql &

5,修改mysql的密码:

/usr/local/bin/mysqladmin -u root password '123456789'

或者

/usr/local/bin/mysqladmin -u root -h demo.localdomain
password '123456789'

初次安装时候root密码为空. 如果用户root有旧密码,此时会提示输入旧密码.

6,在另一台电脑上测试是否启动成功:

telnet 192.168.232.129 3306

出现错误提示:
FHost ‘192.168.232.1′ is not allowed to connect to this MySQL server
解决办法:

/usr/local/bin/mysql -u root -p
输入密码后进入mysql管理控制台:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED
BY '123456789' WITH GRANT OPTION;

原理是:允许所有用root用户并且输入root密码的用户登入该mysql Server,
如果将’%'换成’10.1.1.1′那么只有10.1.1.1的主机可以登陆.

7,自动启动mysql:

ee /usr/local/etc/rc.d/mysql_start.sh
/usr/local/bin/mysqld_safe --user=mysql &

按 ctrl + [ 保存文件
执行:

chmod +x /usr/local/etc/rc.d/mysql_start.sh

完成mysql安装,并自启动.

JS基础prototype属性的使用

  prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加方法的方法!这一点可能听起来会有点乱,别急,下面我便通过实例对这一特殊的方法作已下讲解:

  首先,我们要先了解一下类的概念,JavaScript 本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类。我们所常见的类包括:数组变量(Array)、逻辑变量(Boolean)、日期变量(Date)、结构变量(Function)、数值变量(Number)、对象变量(Object)、字符串变量(String) 等,而相关的类的方法,也是程序员经常用到的(在这里要区分一下类的注意和属性发方法),例如数组的push方法、日期的get系列方法、字符串的split方法等等.

  但是在实际的编程过程中不知道有没有感觉到现有方法的不足?prototype 方法应运而生!下面,将通过实例由浅入深讲解 prototype 的具体使用方法:

1、最简单的例子,了解 prototype:
(1) Number.add(num):作用,数字相加
实现方法:Number.prototype.add = function(num){return(this+num);}
试验:alert((3).add(15)) -> 显示 18

(2) Boolean.rev(): 作用,布尔变量取反
实现方法:Boolean.prototype.rev = function(){return(!this);}
试验:alert((true).rev()) -> 显示 false

是不是很简单?这一节仅仅是告诉读者又这么一种方法,这种方法是这样运用的。

2、已有方法的实现和增强,初识 prototype:
(1) Array.push(new_element)
  作用:在数组末尾加入一个新的元素
  实现方法:
  Array.prototype.push = function(new_element){
        this[this.length]=new_element;
        return this.length;
    }
  让我们进一步来增强他,让他可以一次增加多个元素!
  实现方法:
  Array.prototype.pushPro = function() {
        var currentLength = this.length;
        for (var i = 0; i < arguments.length; i++) {
            this[currentLength + i] = arguments[i];
        }
        return this.length;
    }
  应该不难看懂吧?以此类推,你可以考虑一下如何通过增强 Array.pop 来实现删除任意位置,任意多个元素(具体代码就不再细说了)

(2) String.length
  作用:这实际上是 String 类的一个属性,但是由于 JavaScript 将全角、半角均视为是一个字符,在一些实际运用中可能会造成一定的问题,现在我们通过 prototype 来弥补这部不足。
  实现方法:
  String.prototype.cnLength = function(){
        var arr=this.match(/[^\x00-\xff]/ig);
        return this.length+(arr==null?0:arr.length);
    }
  试验:alert("EaseWe空间Spaces".cnLength()) -> 显示 16
  这里用到了一些正则表达式的方法和全角字符的编码原理,由于属于另两个比较大的类别,本文不加说明,请参考相关材料。

3、新功能的实现,深入 prototype:在实际编程中所用到的肯定不只是已有方法的增强,更多的实行的功能的要求,下面我就举两个用 prototype 解决实际问题的例子:
(1) String.left()
  问题:用过 vb 的应该都知道left函数,从字符串左边取 n 个字符,但是不足是将全角、半角均视为是一个字符,造成在中英文混排的版面中不能截取等长的字符串
  作用:从字符串左边截取 n 个字符,并支持全角半角字符的区分
  实现方法:
  String.prototype.left = function(num,mode){
        if(!/\d+/.test(num))return(this);
        var str = this.substr(0,num);
        if(!mode) return str;
        var n = str.Tlength() - str.length;
        num = num - parseInt(n/2);
        return this.substr(0,num);
    }
  试验:
     alert("EaseWe空间Spaces".left(8)) -> 显示 EaseWe空间
     alert("EaseWe空间Spaces".left(8,true)) -> 显示 EaseWe空
  本方法用到了上面所提到的String.Tlength()方法,自定义方法之间也能组合出一些不错的新方法呀!

(2) Date.DayDiff()
  作用:计算出两个日期型变量的间隔时间(年、月、日、周)
  实现方法:
  Date.prototype.DayDiff = function(cDate,mode){
        try{
            cDate.getYear();
        }catch(e){
            return(0);
        }
        var base =60*60*24*1000;
        var result = Math.abs(this - cDate);
        switch(mode){
            case "y":
                result/=base*365;
                break;
            case "m":
                result/=base*365/12;
                break;
            case "w":
                result/=base*7;
                break;
            default:
                result/=base;
                break;
        }
        return(Math.floor(result));
    }
  试验:alert((new Date()).DayDiff((new Date(2002,0,1)))) -> 显示 329
     alert((new Date()).DayDiff((new Date(2002,0,1)),"m")) -> 显示 10
  当然,也可以进一步扩充,得出响应的小时、分钟,甚至是秒。

(3) Number.fact()
  作用:某一数字的阶乘
  实现方法:
  Number.prototype.fact=function(){
        var num = Math.floor(this);
        if(num<0)return NaN;
        if(num==0 || num==1)
            return 1;
        else
            return (num*(num-1).fact());
    }
  试验:alert((4).fact()) -> 显示 24
  这个方法主要是说明了递归的方法在 prototype 方法中也是可行的!

===========================================

prototype 属性 :返回对象类型原型的引用。
objectName.prototype
objectName 参数是对象的名称。

用 prototype 属性提供对象的类的一组基本功能。对象的新实例“继承”赋予该对象原型的操作。
          例如,要为 Array 对象添加返回数组中最大元素值的方法。要完成这一点,声明该函数,将它加入 Array.prototype,并使用它。

function array_max( ){  
var i, max = this[0];  
for (i = 1; i < this.length; i++)  
{  
if (max < this[i])  
max = this[i];  
}  
return max;  
}  
Array.prototype.max = array_max;    //加入

var x = new Array(1, 2, 3, 4, 5, 6);  
var y = x.max( );

该代码执行后,y 保存数组 x 中的最大值,或说 6。
所有 JScript 内部对象都有只读的 prototype 属性。可以象该例中那样为原型添加功能,但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。

js中arguments.length的意思

function imagePreload() {
var imgPreload = new Image();
for (i = 0; i < arguments.length; i++) {
imgPreload.src = arguments[i];
}
}
imagePreload('001.gif', '002.gif', '003.gif', '004.gif', '005.gif')

这个是js中的arguments.主要是可以对输入的参数进行跟踪。
这如作者所举出的例子:imagePreload函数出入了5个参数,所以在js代码中的
arguments.length会知道你输入的了5个参数。并可以通过索引器获得五个参数的值。

Memcache for Windows 安装与应用

最近做的一个项目中有一个分类树的页面.因为运用了Ajax异步读取数据(每onclick一下就会请求一下数据库进行查询-_-!!).数据库服务器负载明显的加大.

运维部的同事建议我使用Memcache对数据进行布式内存缓存.

安装部分

1.下载Memcache for win32

下载地址: http://jehiah.cz/projects/memcached-win32/

2.下载php_memcache.dll

下载地址: http://pecl4win.php.net/ext.php/php_memcache.dll
Note:注意你安装的PHP版本来下载相应的dll文件.(我装的是5.2X版本).

3.修改php.ini文件

在 ;Windows Extensions 处加一句
复制内容到剪贴板代码:
; Memcache extension
extension=php_memcache.dll
4.装php_memcache.dll放入到你的扩展文件目录中.一般是php安装目录的ext目录下.

5.重启Apache.打开phpinfo();


如果能找到如上信息.表示安装成功.

--------------------------------------------------------------------------------------------------------------------------

应用部分

1.主要方法

(1) Memcache::getVersion 返回memcache的版本信息.

(2) Memcache::connect 创建一个memcache连接对象.

(3) Memcache::pconnect 创建一个memcacher持久连接对象.

(4) Memcache::close 关闭一个Memcache对象.

(5) Memcache::set 用来添加一个值.
有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过期自动销毁的时间.

(6) Memcache::add 作用和Memcache::set方法类似.
两个方法的区别是如果Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写.

(7) Memcache::get 用来获取一个值.
只有一个参数(key,在Memcache::set时设置)

(8) Memcache::replace 对一个已有的key进行覆写操作.
有四个参数,与 Memcache::set 相同.

(9) Memcache::increment 对保存的某个key中的值进行加法操作.

(10) Memcache::decremen 对保存的某个key中的值进行减法操作.

(11) Memcache::setCompressThreshold 对大于某一大小的数据进行压缩。

(12) Memcache::delete 删除一个key
有两个参数,第一个是key名称.第二个是删除延迟时间

(13) Memcache::flush 清除所有缓存的数据,但是不会削去使用的内存空间.

(14) Memcache::addServer 添加一个可供使用的服务器地址.

(15) Memcache::setServerParams 在运行时修改服务器的参数.

2.附一个简单的例子:
复制内容到剪贴板代码:
$memcache = new Memcache;//实例化 memcache对象
$memcache->connect('127.0.0.1',11211) or die ("Memcache could not connect"); //创建一个memcache连接对象
$sql = "select * from tableName";//SQL语句
$key = md5($sql); //设置唯一键值
if(!($memcache->get($key)))//如果没有获取到相应的key值.则对数据库进行查询操作
{
mysql_connect('127.0.0.1','root','');
mysql_select_db('databaseName'); //平常的数据库连接操作.
$rt = mysql_query($sql);//执行SQL语句
while($row = mysql_fetch_array($rt))
{
$datas[] = $row;//将记录集保存在数组中
}
$memcache->set($key,$datas);//将数组存入key中
unset($datas);//删除数组
}
var_dump($memcache->get($key));//输出测试
?>

WordPress自动保存远程图片

此文章从网络上收集,本人未曾进行测试,不保证一定可以使用!

给WordPress编辑器增加“自动保存远程图片”功能的方法:

自动保存远程图片修改方法如下:

1、在wp-admin/edit-form-advanced.php 第167行

后面加增加
Save pic:

2、修改 wp-admin/post.php,将第7行的
wp_reset_vars(array('action', 'safe_mode', 'withcomments', 'posts', 'content', 'edited_post_title', 'comment_error', 'profile', 'trackback_url', 'excerpt', 'showcomments', 'commentstart', 'commentend', 'commentorder'));

改为
wp_reset_vars(array('action', 'safe_mode', 'withcomments', 'posts', 'content', 'edited_post_title', 'comment_error', 'profile', 'trackback_url', 'excerpt', 'showcomments', 'commentstart', 'commentend', 'commentorder', 'savepic'));
3、在wp-admin/admin-functions.php 的开头增加
function open($file,$type=''){
global $fromurl,$referer;
$cachename=$file;
if($type){
$file=$fromurl.'/'.$type.'/'.$file;
}else{
$file=$fromurl.$file;
}
if($open=file($file)){
$count=count($open);
for($i=0;$i<$count;$i++){
$theget.=$open[$i];
}
}else{
die('请求过多,超时,请刷新');
}
return $theget;
}

再在
$_POST['post_content'] = $_POST['content'];

的后面添加以下代码:
注意,上面的代码有两个地方有,要在最后那个的后面加
if($_POST['savepic']=="checked"){
// begin to save pic;
$img_array = array();
$content1 = stripslashes($_POST['post_content']);
if (get_magic_quotes_gpc()) $content1 = stripslashes($content1);
//echo $content1;//文章内容嘿嘿开始处理了
preg_match_all("/(src|SRC)=\"(http:\/\/(.+).(gif|jpg|jpeg|bmp|png))/isU",$content1,$img_array);//正则开始匹配所有的图片并放入数据
$img_array = array_unique(dhtmlspecialchars($img_array[2]));

完毕。

function cut($file,$from,$end){

$message=explode($from,$file);
$message=explode($end,$message[1]);
return $message[0];
}
function dhtmlspecialchars($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = dhtmlspecialchars($val);
}
} else {
$string = str_replace(’&', ‘&’, $string);
$string = str_replace(’”‘, ‘"’, $string);
$string = str_replace(’<', '<', $string);
$string = str_replace('>‘, ‘>’, $string);
$string = preg_replace(’/&(#\d;)/’, ‘&\1′, $string);
}
return $string;
}
function random($length) {
$hash = ”;
$chars = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz’;
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}

function mkdirs($dir)
{
if(!is_dir($dir))
{
mkdirs(dirname($dir));
mkdir($dir);
}
return ;
}

print_r($img_array);
set_time_limit(0);

foreach ($img_array as $key => $value) {
$get_file = file_get_contents($value);//开始获取图片了哦
$filetime = time();
$filepath = "../wp-content/uploads/pic2/".date("Y",$filetime)."/".date("m",$filetime)."/";//图片保存的路径目录
!is_dir($filepath) ? mkdirs($filepath) : null;
$filename = date("YmdHis",$filetime).random(1).'.'.substr($value,-3,3);
$fp = @fopen($filepath.$filename,"w");
@fwrite($fp,$get_file);
fclose($fp);//完工,哈
$content1 = preg_replace("/".addcslashes($value,"/")."/isU", "/wp-content/uploads/pic2/".date("Y",$filetime)."/".date("m",$filetime)."/".$filename, $content1); //顺便替换一下文章里面的图片地址

}

$_POST['post_content'] = $content1;

// end save pic;
}

现在,你再发表文章时,提交按钮旁边多了个选项

选中“save pic”,再点“发表”,即可保存远程图片了。

总结一下,要修改的文件有:

edit-form-advanced.php
post.php
admin-functions.php

如何使用WordPress内置的分页(Nextpage)功能?

2007-12-09:注,我已经写了一个插件用于含有nextpage或more标签的feed全文输出,详见WordPress插件:whole_feed_output v0.1,为此无需自行修改WP源代码。第4部分的代码修改仅作为参考用。

********************************

看到在论坛上也有一些网友在探讨关于Wordpress文章分页的问题等,而实际上wordpress本身已经内置了文章的分页功能,即通过使用Nextpage标签来将文章分割成多个页面。索性花了点时间好好整理了一下,系统性地写下这篇文章,着重介绍下wordpress内置的nextpage标签分页及相关用法等。望对使用WP的网友有所帮助。 为了测试WP分页,我将此文章分成4页。要阅读全文的话,就慢慢点吧。  文中涉及代码修改等,均只在2.3和2.3.1中测试通过,敬请注意。本文将包括如下几个部分内容。

先来谈谈nextpage标签的作用及使用方法。 

 

1.nextpage标签的作用及使用方法。

nextpage标签,确切地说是,<!- -nextpage- ->代码,是wordpress内置的用于实现文章分页的一个page标签。您可以在一篇文章中插入多个nextpage标签实现多个分页。在文章中插入该标签后,从文章开头至第一个nextpage标签为文章的第一个分页内容,第一个nextpage标签和第二个nextpage标签之间为文章第二个分页的内容,以此类推,直至文章结束。这一点和more标签不同。 

然而,有一点要注意,如果more标签在nextpage标签之前的话,在首页的输出中,还是会被more标签截断的。

[教程]memcached for win32的安装

memcached是由livejournal团队(danga.com)制作的开源缓存软件,是缓存机制的一种实现,用它之所以高效,是因为它是利用了内存,使用好了能够大大加快页面或者是其它程序的执行速度。要注意的是一旦服务器停止,内存中的缓存数据会被清空。

win32下,需要启动memcached服务,首先下载相关的memcached文件(用于启动服务的windows.rar在附件中),解压后可以自己选择,这里我选择的是2.1版本的,将其中的memcached.exe和memcached.ini(里面也就这俩文件)拷贝到某路径下(如:E:\java\memcached2.1),然后通过cmd命令窗口,先转入到该路径,然后按如下步骤输入:

1、memcached.exe -d install

2、memcached.exe -d start

这里第一步是用于安装服务,第二步是用于启动服务,有些默认参数的值是通过memcached.ini里的相关元素的设置值而定的。

如果要停止服务和卸载服务可以用入下命令:

3、memcached.exe -d stop 或 memcached.exe -d shutdown

4、memcached.exe -d uninstall

命令参数解释:

-d 以守护程序(daemon)方式运行 memcached

-m 设置 memcached 可以使用的内存大小,单位为 M

-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数

-p 设置监听的端口,默认为 11211,所以也可以不设置此参数

-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25(增长因子:http://zhengjunwei2007-163-com.iteye.com/blog/963375)
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

memcached.ini文件指定的各参数及值可以根据需要做更改,默认的如下:

bind_addr=127.0.0.1
listener_port=11212
memory=16
max_conns=1024

evict_to_free = 0

说明:

bind_addr是指绑定的IP

listener_port是指监听的端口

memory内存大小

max_conns最大连接数

evict_to_free

在通过命令 memcached.exe -d start 将服务启动后,可以通过一个demo来做测试,这个demo的下载地址如下:

http://www.whalin.com/memcached/#download

运行类com.danga.MemCached.test.TestMemcached前将服务IP和监听端口改为启动服务时所用的IP和监听端口,

如:String[] servers = { "127.0.0.1:11212"};

或者可以用如下的Test类做测试

java 代码

 

  1. package com.danga.MemCached.test;       
  2.       
  3. import java.util.Date;       
  4.       
  5. import com.danga.MemCached.MemCachedClient;       
  6. import com.danga.MemCached.SockIOPool;       
  7.       
  8.       
  9. public class Test {           
  10.     protected static MemCachedClient mcc = new MemCachedClient();          
  11.           
  12.     static {          
  13.         String[] servers ={"127.0.0.1:11212"};          
  14.           
  15.         Integer[] weights = { 3 };          
  16.           
  17.         //创建一个实例对象SockIOPool        
  18.         SockIOPool pool = SockIOPool.getInstance();          
  19.           
  20.         // set the servers and the weights       
  21.         //设置Memcached Server       
  22.         pool.setServers( servers );          
  23.         pool.setWeights( weights );          
  24.           
  25.         // set some basic pool settings          
  26.         // 5 initial, 5 min, and 250 max conns          
  27.         // and set the max idle time for a conn          
  28.         // to 6 hours          
  29.         pool.setInitConn( 5 );          
  30.         pool.setMinConn( 5 );          
  31.         pool.setMaxConn( 250 );          
  32.         pool.setMaxIdle( 1000 * 60 * 60 * 6 );          
  33.           
  34.         // set the sleep for the maint thread          
  35.         // it will wake up every x seconds and          
  36.         // maintain the pool size          
  37.         pool.setMaintSleep( 30 );          
  38.           
  39. //        Tcp的规则就是在发送一个包之前,本地机器会等待远程主机       
  40. //        对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存,       
  41. //        以至这个包准备好了就发;       
  42.         pool.setNagle( false );          
  43.         //连接建立后对超时的控制       
  44.         pool.setSocketTO( 3000 );       
  45.         //连接建立时对超时的控制       
  46.         pool.setSocketConnectTO( 0 );          
  47.           
  48.         // initialize the connection pool          
  49.         //初始化一些值并与MemcachedServer段建立连接       
  50.         pool.initialize();       
  51.                   
  52.           
  53.         // lets set some compression on for the client          
  54.         // compress anything larger than 64k          
  55.         mcc.setCompressEnable( true );          
  56.         mcc.setCompressThreshold( 64 * 1024 );          
  57.     }          
  58.               
  59.     public static void bulidCache(){          
  60.         //set(key,value,Date) ,Date是一个过期时间,如果想让这个过期时间生效的话,这里传递的new Date(long date) 中参数date,需要是个大于或等于1000的值。       
  61.         //因为java client的实现源码里是这样实现的 expiry.getTime() / 1000 ,也就是说,如果 小于1000的值,除以1000以后都是0,即永不过期       
  62.         mcc.set( "test""This is a test String" ,new Date(10000));   //十秒后过期       
  63.                  
  64.     }          
  65.          
  66.     public static void output() {          
  67.         //从cache里取值       
  68.         String value = (String) mcc.get( "test" );          
  69.         System.out.println(value);           
  70.     }          
  71.               
  72.     public static void main(String[] args){          
  73.         bulidCache();         
  74.         output();              
  75.     }        
  76.           
  77. }  

 应用memcached的一个心得:

1、客户端在与 memcached 服务建立连接之后,进行存取对象的操作,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

2、当存入cached的数据超过了cached的容量后会将最长时间没调用的对象挤出,这正好应征了cached的特征。

3、利用memcached常用的做法:在每取得一次cached对象后,重新设置这个对象的cache时间,这样能够使得经常被调用的对象可以长期滞留在缓存中,使得效率增倍。

windows.rar (2.5 MB)

相关教程:

Linux下Memcached的安装及配置:http://blog.haohtml.com/archives/364
基于 PHP5 & JQuery 的 Memcached 管理监控工具:http://www.junopen.com/memadmin/

windows下memcached的安装(修正版)

Memcached是什么:
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
首先我在windows下实现它,过后再在linux试试.
下载memcached-win32php_memcache.dll(要和php的版本对应上),或者(点击这里下载memcached for win32)

1.memcahced下载后,压缩之前发现不到100K,压缩后也不到200K,这东西居然有这么神奇,放到d:\memcached目录,进入目录里面有一个memcached.exe,双击就启动了,让窗口开着,或者在cmd里面d:\memcached\memcached.exe -d start 都可以启动.

2.修改php.ini的配制文件

加入extension=php_memcache.dll 这一行代码,位置无所谓

嗨,我一直都烦配置的东西,不过好东西还是要学习的,以上是转载好朋友的,现保存在说,不知什么时候就用上了

3.php_memcache.dll放到php的安装文件中,一般在php源码的ext目录下

4.重启apache后,查看一下phpinfo(写一个phpinfo()函数就可以看到),如果有memcache,那么就说明安装成功

memcached的基本设置

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

安装memcached服务

d:\memcached\memcached -l 127.0.0.1 -m 256 -d install
d:\memcached\memcached -d start

开始测试一下代码

$mem = new Memcache;
$mem->connect(”127.0.0.1″, 11211);
$mem->set(’key’, ‘This is a memcached test!’, 0, 60);
$val = $mem->get(’key’);
echo $val;

如果输出This is a memcached test!刚表明安装成功.

Memcached中英文参考手册:http://docs.haohtml.com/memcached/Memcached.html

相关教程:

Linux下Memcached的安装及配置:http://blog.haohtml.com/archives/364

Window下Memcached的安装及使用:http://blog.haohtml.com/archives/408

 

修改WINDOWS下的MEMCACHED下的服务端口

一直耿耿于本地的Memcached端口与服务器的不一样,老是要修改配置文件。

看了N久memcached.exe的帮助,在安装服务的时候,都没有办法指定参数。

在命令模式下,可以使用 memcached -p 12345 去指定端口,可服务安装后,却总是只有 -d runservice 的参数。

后来想到,可以通过修改注册表来达到这个修改端口的目的。

然后在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 下面找到一个 ImagePath 的字符串项,正好是服务的执行路径的字符串,双击该串,在后面加入 -m 45 -p 12345 (使用45M内存,12345为端口),再启动服务。

Windows下的Memcache安装

Windows下的Memcache安装

不用说了,这便是memcached在Windows系统下的版本。(点击这里下载memcached for win32)

Windows下的Memcache安装
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装
3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4.下载php_memcache.dll,请自己查找对应的php版本的文件
5. 在C:\windows\php.ini 加入一行 ‘extension=php_memcache.dll
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
7.如果要卸载的话,可以执行c:\memcached\memcached.exe -d install 即可.

 

memcached的基本设置
[blockquote]-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

Memcache环境测试
运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功开始领略Memcache的魅力把!

< ?php
$mem = new Memcache;
$mem->connect(127.0.0.1, 11211);
$mem->set(key, This is a test!, 0, 60);
$val = $mem->get(key);
echo $val;
?>