windows/linux/php中memcached.exe的安装与配置

 更新时间:2016年11月25日 16:37  点击:2115
文章介绍了关于windows+php中memcached.exe的安装与配置和liunx中 memcached配置 ,大家可根据自己的系统来方法一或方法二来配置哦。

windows+php中memcached.exe的安装与配置

1.Windows版本的下载地址为: http://code.jellycan.com/memcached/

将压缩文件解压到  c:/memcached/

2. 在CMD下输入 “c:/memcached/memcached.exe -d install” 安装。

3. 再输入:”c:/memcached/memcached.exe -d start” 启动。NOTE:以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

4.若指定了 -m,则表示缓存大小为 -m后的数字,单位是 M,例如:

c:/memcached/memcached.exe –l  127.0.0.1  –m  32   – d start

如下设置memcached使用内存问题帮助:

按照上面的安装步骤安装之后,使用memcached –m 200来调整最大内存占用之后会发现没有起作用,总是默认的64MB的内存,在网上搜了一下,原因是注册表中并没有写入信息,可以这样来修改。

1. memcached –d shutdown 首先关闭memcached服务。

2.进入注册表,找到 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/memcached Server, 在其中有一个ImagePath项,值为 “c:/memcached/memcached.exe” -d runservice,在后面加上 -l 127.0.0.1 -m 3000 -c 2048。

3.memcached –d start 启动memcached服务,这样就将memcached的最大内存修改为了3000MB。

如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。

常用设置:

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

linux+php中memcached.exe的安装与配置

首页
http://www.danga.com/memcached

下载地址:
http://danga.com/memcached/download.bml

下载文件
memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
./configure --prefix=/usr/local/memcached-1.2.6
make
make install

注意:

memcache需要这个包libevent,不然安装时要报错:

checking for libevent directory... configure: error: libevent is required. You can get it from http://www.monkey.org/~provos/libevent/

      If it's already installed, specify its path using --with-libevent=/dir/

下载得到文件libevent-1.4.9-stable.tar.gz

tar zxvf libevent-1.4.9-stable.tar.gz

./configure --prefix=/usr/local/libevent-1.4.9-stable.tar.gz
make
make install

由于我安装没有安装在usr下面,所以最后启动memcache报错:

[root@localhost bin]# ./memcached -d -m 10 -p 11211 -u root -l 0.0.0.0
./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

检查libevent安装情况:

ls -al /usr/lib | grep libevent
把 libevent-1.4.so.2 拷贝/链接到 /usr/lib 中,否则 memcached 无法正常加载。

cp libevent-1.4.so.2 /usr/lib/

文章出处:http://www.diybl.com/course/6_system/linux/linuxjq/20071010/77432.html


安装完之后要启动服务
cd /usr/local/memcached-1.2.6/bin
./memcached -d -m 50 -p 11211 -u root -l 0.0.0.0
参数说明
-m 指定使用多少兆的缓存空间;
-p 指定要监听的端口;
-u 指定以哪个用户来运行

本文章提供了一个mysql2xml转换类,可以快速的把xml转换成mysql同时反之也可以把mysql转换成xml哦,下面看代码。

mysql2xml.php类文件:用于备份MySQL数据的!!

 代码如下 复制代码

<?php
class MySQL2XML {
        protected $conn;
        protected $result;
        protected $tables;
        protected $saveFolder = 'datas/';
       
        public function __construct($config = NULL) {
                if($config !== NULL && is_array($config)) {
                        $this->connect($config);
                }
        }
       
        public function connect($config) {
                $this->conn = mysql_connect($config['host'], $config['username'], $config['password']);
                if($this->conn) {
                        mysql_select_db($config['database']);
                        return true;
                }
                return false;
        }
       
        public function setSaveFolder($folder) {
                if(is_dir($folder)) {
                        $this->saveFolder = rtrim(str_replace("\", "/", $folder),'/');
                        return true;
                }
                return false;
        }
       
        public function setTables($tables) {
                if(is_array($tables)) {
                        $this->tables = $tables;
                        return true;
                }
                return false;
        }
       
        public function query($query) {
                if(!isset($query) || trim($query) == '') return false;
                $this->result = mysql_query($query);
                if($this->result) return true;
                return false;
        }
       
        public function toXML() {
                if(!isset($this->tables)) return false;
                foreach($this->tables as $table) {
                        $file = $this->saveFolder.$table.'.xml';
                        $fp = @fopen($file, 'w');
                        if(!$fp) exit('Can not write file');
                        fwrite($fp, $this->tableToXML($table));
                        fclose($fp);
                        unset($fp);
                }
                return true;
        }
       
        public function tableToXML($table) {
                header("content-type:text/xml;charset=utf-8");
                $xml = "<?xml version="1.0" encoding="utf-8" ?>n<datas>n";
                $fields = $this->getFields($table);
                $datas = $this->getDatas($table);
                $cdata = array();
                foreach($datas as $data) {
                        foreach($data as $key => $value)
                                $cdata[$key][] = $value;
                }
                foreach($fields as $element) {
                        $xml .= "t<fields name="{$element['Field']}" type="{$element['Type']}" null="{$element['Null']}" key="{$element['Key']}" default="{$element['Default']}" extra="{$element['Extra']}">n";
                        foreach($cdata[$element['Field']] as $value) {
                                $xml .= "tt<data>{$value}</data>n";
                        }
                        $xml .= "t</fields>n";
                }
                $xml .= '</datas>';
                return $xml;
        }
       
        protected function getFields($table) {
                $query = "SHOW FIELDS FROM {$table}";
                $this->query($query);
                return $this->fetchAll();
        }
       
        protected function getDatas($table) {
                $query = "SELECT * FROM {$table}";
                $this->query($query);
                return $this->fetchAll();
        }
       
        protected function fetch() {
                if(is_resource($this->result)) {
                        return mysql_fetch_assoc($this->result);
                }
                return false;
        }
       
        protected function fetchAll() {
                if(is_resource($this->result)) {
                        $return = array();
                        $row = NULL;
                        while($row = mysql_fetch_assoc($this->result)) {
                                $return[] = $row;
                        }
                        return $return;
                }
                return false;
        }
}
?>


调用方法:

 

 代码如下 复制代码
<?php
$xml = new MySQL2XML(array('host'=>'localhost', 'username'=>'root', 'password'=>'', 'database'=>'mysql'));
$xml->setTables(array('wp_term_relationships','wp_terms'));//设置备份的表
$xml->setSaveFolder('datas/');//保存备份文件的文件夹
$xml->toXML();//备份开始
?>
文章收藏了一些常用的解决php保存中文sql server 2008里出现乱码办法,有碰到同类问题的朋友可参考本文章。

今天使用php操作数据库时发现插入SQL Server 2008数据库里的中文字段出现乱码,下面是我一开始时的一些情况:

开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据库的编码是GB2312(SQL Server的默认字符编码可能是这个,我不肯定),我用的是微软官方提供的SQLSRV库来连接数据库的(PS:SQL Server 2005开始已经不支持用mssql.dll来连接了),故使用sqlsrv_query($conn, "set names GB2312");语句来设置传给数据库的编码格式的,sql语句这样写了:insert into Opinion (content) values ('aaa中文内容');

  运行这条sql语句,发现执行不成功,用sqlsrv_errors()函数来输出错误信息,得到如下结果:

 代码如下 复制代码
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => An error occurred translating the query string to UTF-16: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . [message] => An error occurred translating the query string to UTF-16: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . ) )

  这是在网页上显示的结果,上面的乱码是原封不动copy下来的。从 “An error occurred translating the query string to UTF-16”可以看出是字符编码转换有问题导致的。于是我使用php的iconv函数来对中文进行强制编码转换,然后执行sql语句,代码如下:

 代码如下 复制代码
$string = iconv('utf-8', 'GB2312//IGNORE', 'aaa中文内容');
$sql    = "insert into Opinion (content) values ( $string)";

  这时候又报错了,错误信息如下:

 代码如下 复制代码
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� ) )

  这个错误信息看不出什么头绪,我又把sql语句输出到网页上看一下是不是sql语句写错了,输出结果如下:

 代码如下 复制代码
insert into Opinion (content) values ( aaa��������)

  咋一看好像没问题,其实是有问题的,注意到后面那个括号里的参数是应该用引号来括起来的(表示它是一个字符串),所以我又修改了sql语句,代码如下:

 代码如下 复制代码
$sql = "insert into Opinion (content) values ( '".$string."')";   为了看清楚我放大点

用单引号把$string括起来,这样之后执行sql语句成功,并且数据库里保存的中文没有乱码。


参考其它的解决办法


若数据库的编码为GB2312,怎样在yii中进行配置才能使得页面的数据显示正常,并且数据库中的数据不能出现乱码:

方法一:

1. yii默认的编码方式是utf-8, 若想改变其编码方式需要在main.php文件中加上'charset'=>'GB2312', 这样才能改变函数的输出的编码方式
2. sql server 2000 的编码方式默认为本地GB2312编码方式, 对数据库进行操作时要注意编码的方式
3. web页面的编码相应的需要变为GB2312
4. 文件保存时需要保存为GB2312编码,这样php文件中的中文字符才能正常解析

方法二:

1. 通过iconv函数对数据进行转码

 代码如下 复制代码
iconv('GB2312','UTF-8',$data)

 

一个不错的简单的数据库连接类程序,有需php mysql数据库连接类的同学可参考本文章。
 代码如下 复制代码


<?PHP
require_once("mssql.class.php");
//1.创建类,并连接数据库
$db = new mssql("dns=aaa;uid=sa;pwd=sa;dbname=test");
//2.连接数据库
$conn = $db->config("dns=aaa;uid=sa;pwd=sa;dbname=test");
//3.选择数据库
$dbname = $db->select_db("test");
//4.设置允许调试
$db->debug = true;
//5.执行一条不返回结果的SQL语句
$db->execute("insert into test01(name) values('这是一个测试!')");
//$db->exec("");
//6.执行一条返回结果的SQL语句
$rs = $db->query("select * from test01");
//7.以row方式显示结果
echo "<br>以row方式显示结果集<br>";
while($r = $db->fetch_row($rs)){
 echo $r[0].":".$r[1]."<br>";
}

//8.以array方式显示结果
$rs2 = $db->query("select * from test01");

echo "<br>以array方式显示结果集<br>";
while($r = $db->fetch_array($rs2)){
 echo $r["id"] . ":" . $r["name"] . "<br>";
}

//X.释放
$db->db_close();

?>


 

出现登陆phpmyadmin出现 #2003 - 服务器没有响应最先想到的是你的mysql服务器是不是停止了检查一下,如果是mysql服务器停止服务了重启就可以解决问题了。

1、在APMServ5.2.6出现问题的最简单的解决办法是

在本地计算机无法启动APMServ-MySQL5.1服务,错误1067,进程意外中止”的方法很简单,只要进入“D:\Program Files\APMServ5.2.6\MySQL5.1\bin”文件夹,找到mysqld-nt.exe文件执行即可。
默认情况下,当启动APMServ的时候,在服务中MySql5.1都是没有启动的,需要执行mysqld-nt.exe文件,开启MySql服务


2.我们还是来检查phpmyadmin配置文件看看

方法一:查找

 代码如下 复制代码
$cfg['Servers'][$i]['auth_type'] = ‘config’;
更改为
$cfg['Servers'][$i]['auth_type'] = ‘http’;

访问的时候需要输入用户名和密码

方法二:”#2003 – 服务器没有响应”PHPMYADMIN登陆问题的解决

问题描述:

登陆PHPMYADMIN的时候提示 #2003 – 服务器没有响应
1 本地其它php+mysql程序运行正常;
2 phpmyadmin 以前运行正常,就最近出错.

解决办法:
找到/libraries/config.default.php文件中以下代码段:
复制内容到剪贴板代码:

 代码如下 复制代码
$cfg['Servers'][$i]['auth_type']     = ‘config’;    // Authentication method (valid choices: config, http, HTTP, signon or cookie) 验证方式一般填写cookie
$cfg['Servers'][$i]['user']          = ‘root’;      // MySQL user
$cfg['Servers'][$i]['password']      = ”;          // MySQL password (only needed with ‘config’ auth_type)
将其中的$cfg['Servers'][$i]['password'] 补上相应的正确密码.
3.连接mysql mysql.exe -u root -p -h 127.0.0.1
然后同步密码guoxue_mmkey_com
mysql> SET PASSWORD FOR -> ‘ some_user ‘@’ some_host ‘ = OLD_PASSWORD(‘ newpwd ‘);
结合我们的实际情况,在 MySQL Command Line Client 下运行:
set password for root@localhost = old_password(’123′);guoxue_mmkey_com
guoxue_mmkey_com

如果以上方法都不能解决,建议重新配置PHP,重新安装一次mysql即可,一般都能解决


注意:
检查防火墙是否关闭了3306端口,或者直接关闭防火墙测试是否可以正常连接到MYSQL,开始-运行,输入IISRESET重新启动IIS,保证mysql比IIS早启动

[!--infotagslink--]

相关文章