2015年10月24日星期六

Windows下Memcache的安装及PHP扩展配置 - batsing

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Windows下Memcache的安装及PHP扩展配置 - batsing  阅读原文»

一、下载

找到完整的memcache的Windows安装包,解压放在硬盘上,比如 F:\memcached.exe

二、安装

WIN7 64位双击打开这个exe可能只有一个空的窗口,不能输入任何命令,所以这个exe不是这样用的。要运行cmd控制台,输入 F:\memcached.exe -d install 安装,再输入 F:\memcached.exe -d start 启动。

Tips:如果没有报错信息,则至此memcached已经安装并启动,而且默认是开机自动启动的

三、PHP扩展下载及版本说明

可以在CSDN上找到完整的 php_memcache.dll 扩展包,选择对应自己php版本的扩展 下载链接>> 。注:ts是指线程安全、nts是指线程不安全,可以在phpinfo中的查找 Thread Safety项,若是enabled则为线程安全。

四、PHP扩展配置

如果是使用WAMP集成安装环境,默认情况下 dll扩展文件 放在 /wamp/bin/php/php5.5.12/ext/ 目录下,然后修改php.ini的配置文件。在extension=...dll 那一排的后面增加一句 extension=php_memcache.dll,然后重启apache,查看phpinfo看是否有 memcache。

但是要注意WAMP下的PHP的配置文件不是 /wamp/bin/php/php5.5.12/php.ini ,而是 /wamp/bin/apache/apache2.4.9/bin/php.ini ,也就是说WAMP把真正要用php.ini文件放到Apache的文件夹中去了,这个地方一开始最纠结了。具体配置文件的位置可能被改过,实际上以phpinfo的信息为准。

如果你是修改的是php目录里的php.ini,就会发现memcache扩展并没有被加载,phpinfo中没有memcache的信息,打开wamp中的菜单会看见php_memcache扩展前面有个红色叹号。这是因为 ext 目录里有这个 dll 扩展,而真正的 php.ini 文件里没有写这条扩展。所以要找到真正的php.ini文件去增加这条扩展

五、代码测试PHP是否成功扩展了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;

如果成功则会显示 This is a test!

否则会显示 “Fatal error: Class 'Memcache' not found in ...” 这种类似的报错信息,则需要你继续看看哪个步骤出错了,或者是没有把memcache扩展开启。


本文链接:Windows下Memcache的安装及PHP扩展配置,转载请注明。

二叉链表表示的二叉树和一些基本操作 - CSU蛋李  阅读原文»

设计不同的结点结构可构成不同形式的链式储存结构。由二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,则表示二叉树的链表中的结点至少包含三个域:数据域和左、右指针域

一下是二叉链表的定义和部分基本操作的函数原型说明:

#ifndef BINARY_LINKED_LIST_TREE_H

#define BINARY_LINKED_LIST_TREE_H

//---------二叉树的二叉链表储存表示-----------
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define MYOVERFLOW -2
typedef
int Status;

typedef
char TElemType;

typedef
struct BiTNode
{
TElemType data;
BiTNode
*lchild, *rchild;
}
*BiTree;
//------------基本操作的函数原型说明(部分)------------

Status CreateBiTree(BiTree
&T);
//T表示这个树的根节点的指针
//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造二叉链表表示的二叉树T

Status VisitBiTree(BiTree);
//输出结点的数据域

Status PreOrderTraverse(BiTree T, Status(
*Visit)(BiTree));
//T表示这个树的根节点的指针
//采用二叉链表储存结构,Visit是对结点操作的对应函数
//先序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。
//一旦visit()失败,则操作失败

Status InOrderTraverse(BiTree T, Status(
*Visit)(BiTree));
//T表示这个树的根节点的指针
//采用二叉链表储存结构,Visit是对结点操作的对应函数
//中序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。
//一旦visit()失败,则操作失败

Status InOrderTraverse_2(BiTree T, Status(
*Visit)(BiTree));
//采用二叉链表储存结构,Visit是对数据元素操作的应用函数。
//中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit

Status InOrderTraverse_3(BiTree T, Status(
*Visit)(BiTree));
//采用二叉链表储存结构,Visit是对数据元素操作的应用函数。
//中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit

Status PostOrderTraverse(BiTree T, Status(
*Visit)(BiTree));
//T表示这个树的根节点的指针
//采用二叉链表储存结构,Visit是对结点操作的对应函数
//后序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。
//一旦visit()失败,则操作失败

Status LevelOrderTraverse(BiTree T, Status(
*Visit)(BiTree));
//T表示这个树的根节点的指针
//采用二叉链表储存结构,Visit是对结点操作的对应函数
//层序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。
//一旦visit()失败,则操作失败

Status Destroy(BiTree T);//摧毁T这个节点

Status DestroyBiTree(BiTree &T);
//摧毁二叉树T



没有评论:

发表评论