IIS7配置YII2的url重写规则

安装个yii2.0.9玩玩,网上一搜索竟然没有iis的配置方法,见鬼了难道没人用iis了,只能靠自己摸索了,首先要安装我之前写的:IIS7.5伪静态URL_rewrite模块,接着再yii2对应的项目web目录下创建web.config,把一下内容复制进去即可,配置分享如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
 <rewrite>
 <rules>
                <rule name="YII2">
                    <match url=".*" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php?r={R:0}" />
                </rule>
  
 </rules>
</rewrite>
   </system.webServer>  
</configuration>
 </system.webServer>
 </configuration>
发表在 开源代码 | 标签为 | 留下评论

YII2修改默认控制器的方法

安装好yii2.0.9后在/vendor/yiisoft/yii2/web/Application.php的第28行找到了:

public $defaultRoute = ‘site’;

可以不修改框架源码,直接修改配置文件在\yii2\frontend\config\main-local.php的$conifg=[] 里添加了一行代码: ‘defaultRoute’ => ‘index’, 。

然后刷新试试看!

发表在 开源代码 | 标签为 | 留下评论

Yii2.0创建多项目目录方法

默认的高级应用模板包括三个应用

backend – 应用的后台

frontend – 应用的前台

console – 应用的控制台应用

那么如果我们要在增加应用呢?比如在加一个手机端的应用,或者后台和前台应用的名字需要修改。

那么现在就来再增加一个名字为mobile的子应用。

在frontend同目录新建一个名为mobile文件夹.

然后呢把frontend目录下面的东西全拷贝到mobile目录里面

这一步就是修改路径了,修改web目录index.php的包含路径,还有config/main.php的包含路径

修改config/main.php配置项controllerNamespace为mobile\controllers

最后就是加一个别名了,例子可以看common/bootstrap.php的写法,

这里我们不改这个全局文件,当然在这里改也行,我们在/config/bootstrap.php文件添加。

Yii::setAlias(‘@mobile’, dirname(dirname(__DIR__)) . ‘/mobile’);
至此,我们的应用mobile就可以正常访问了,记得目录里的其它各个文件的命名空间声明和引入你要改为由frontend改为mobile。

同理你可以新建无数个,还可可以把默认的三个应用重命名为你想要的名字。

发表在 开源代码 | 标签为 | 留下评论

linux卸载磁盘umount 的时候报错:device is busy

centos例如挂盘目录是/data/

执行[root@abc~]# fuser -m /data
/data:               26962c

直接kill -9或者ps 查看后再kill 知道一个锁定的它的程序都没有

然后就可以卸载了

发表在 服务器 | 标签为 | 留下评论

centos6.5安装nodejs

这里安装的是官方维护版本,安装网络维护版需要安装gcc4.8,就不折腾了,到 wget http://nodejs.org/dist/找了个最新版地址http://nodejs.org/dist/v0.12.9/node-v0.12.9.tar.gz
1. 查看环境
1.1 gcc等c++编译器
    查看当前gcc版本信息
    #gcc -v
    显示:gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
    如果提示:bash: gcc: command not found,就是木有安装,执行如下命令安装gcc
    安装gcc:yum install gcc-c++
1.2 Python2.6以上
    查看当前python版本信息
    #python -V
    显示:Python 2.6.6
1.3 openssl-devel
    查看当前openssl版本信息
    #openssl version
  显示:OpenSSL 1.0.1e-fips 11 Feb 2013
———————————————————-
2. 安装nodejs
2.1 下载&解压
    #cd /usr/local/src
    #wget http://nodejs.org/dist/v0.12.9/node-v0.12.9.tar.gz
    #tar zxvf node-v0.12.9
2.2 编译安装
    #cd node-v0.12.9
    #./configure
    #make && make install
2.3 配置NODE_HOME
    #vi /etc/profile
    设置nodejs环境变量,在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:
    #set for nodejs
    export NODE_HOME=/usr/local/src/node-v0.12.9
    export PATH=$NODE_HOME/bin:$PATH
    :wq保存并退出,编译/etc/profile 使配置生效
    #source /etc/profile
    结果:v0.12.9
    
    安装成功!
悄悄地告诉你:
    下载好nodejs源码包,解压后,查看README.md,有详细的安装说明^_^
———————————————————-
3. 简单的例子:
3.1 新建一个js文件:test.js
    console.log(“this is a test for nodejs.”);
3.2 #node test.js
    输出:this is a test for nodejs.
———————————————————-
4. 基于nodejs创建一个web server:
4.1 新建一个js文件:web-server.js
    var http = require(‘http’);
    http.createServer(function (req, res) {
        res.writeHead(200, {‘Content-Type’: ‘text/plain’});
        res.end(‘Hello World\n’);
    }).listen(1888, ‘127.0.0.1’);
    console.log(‘Server running at http://127.0.0.1:1888/’);
4.2 启动server:
    #node web-server.js
    输出:Server running at http://127.0.0.1:1888/
    打开浏览器访问该地址,显示:Hello World
———————————————————-
5. nodejs调试
5.1 node-inspector + chrome
    安装node-inspector
    #npm install -g node-inspector
    安装chrome浏览器
5.2 启动调试
    启动node-inspector
    #node-inspector
    输出:
        Node Inspector v0.10.1
        Visit http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858 to start debugging.
    加载要调试的js脚本
    #node –debug test.js
    在chrome浏览器中访问http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858,开始调试
发表在 服务器 | 标签为 , | 留下评论

原创分享代码js判断浏览器是否手机端包括微信端

需要前端javascript判断是否手机端访问网页,基本都使用userAgent,包括了微端标识micromessenger,代码如下:

if(navigator.userAgent.match(/(iPhone|iPad|Android|ios|SymbianOS|Windows Phone|UC|Kindle|mobile|nokia|samsung|htc|BlackBerry|webOS|micromessenger)/i)){
 if(confirm("确定要跳转到手机端页面吗?"))
 {
 location.href = 'http://m.netpc.com.cn';
 }
}
发表在 开源代码 | 标签为 | 留下评论

jQuery跨域访问方式提示XMLHttpRequest cannot load

$(function($){
 var url = 'http://www.netpc.com.cn/weather/index';
 $.ajax(url, {
 data: {
 'cityname': '北京',
 'dtype': 'jsonp',
 'key': 'xxxx',
 '_': new Date().getTime()
 },
 dataType: 'jsonp',
 crossDomain: true,
 success: function(data) {
 if(data && data.resultcode == '200'){
 console.log(data.result.today);
 }
 }
 });

var url2 = 'http://www.netpc.com.cn/weather/index?callback=?';
 $.getJSON(url2, {
 'cityname': '上海',
 'dtype': 'jsonp',
 'key': 'xxxx',
 '_': new Date().getTime()
 }, function(data){
 if(data && data.resultcode == '200'){
 console.log(data.result.today);
 }
 });

var url3 = 'http://www.netpc.com.cn/weather/index?callback=?';
 $.get(url3, {
 'cityname': '香港',
 'dtype': 'jsonp',
 'key': 'xxxx',
 '_': new Date().getTime()
 }, function(data){
 if(data && data.resultcode == '200'){
 console.log(data.result.today);
 }
 }, 'json');
 });
发表在 开源代码 | 标签为 | 留下评论

mysql更新提示1366 Incorrect string value

晚上以为很简单的update,mysql结果竟然出现了字符编码问题。

执行update `table` set a=’中文I’ where a=1001;的时候出现了1366 Incorrect string value  ‘\x的错误提示。字符编码都一致,可是这样怎么这样呢?

最后使用替换的方式竟然就没错了,UPDATE table SET a=REPLACE(a, ‘1001’, ‘中文I’);

见鬼!谁给解释下?

发表在 数据库 | 标签为 | 留下评论

Mycat双主异常后自动切换

mycat通过dataHost标签的writeType和switchType来定义故障切换方式。
writeType=0,表示所有写都发送到配置的第一个writeHost上,第一个挂了切换到第二个writeHost上,重启后以切换后的为准,切换记录在conf/dnindex.properties
writeType=1,表示所有写都随机发送到配置的writeHost上,mycat1.5以上已废弃不推荐。
switchType=-1,表示不自动切换
switchType=1,默认值,表示自动切换
switchType=2,基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status。
switchType=3,基于galaru cluster的切换机制(合适集群),mycat1.4以上支持,心跳语句为show status like ‘wsrep%’。

server.xml配置如下

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="5">
  <heartbeat>show slave status</heartbeat>
  <!-- can have multi write hosts -->
  <writeHost host="hostM1" url="localhost:3306" user="root" password="root">
    <!-- can have multi read hosts -->
    <readHost host="hostS1" url="localhost:3307" user="root" password="root" />
  </writeHost>
  <writeHost host="hostM2" url="localhost:3308" user="root" password="root"></writeHost>
 </dataHost>

stop第一台写入数据库hostM1后,根据switchType=1会自动切换到hostM2上,当hostM1重启恢复之后,mycat并没有切换回第一个hostM1写入节点,而是需要重新配置主从状态。或者你把hostM2再关闭下,它就会自动切换回hostM1了。根据实际情况使用切换属性。

发表在 服务器 | 标签为 , | 留下评论

MyCAT的读写分离机制和配置

高可用性以及读写分离
MyCAT的读写分离机制如下:
• 事务内的SQL,全部走写节点,除非某个select语句以注释/*balance*/开头
• 自动提交的select语句会走读节点,并在所有可用读节点中间随机负载均衡
• 当某个主节点宕机,则其全部读节点都不再被使用,因为此时,同步失败,数据已经不是最新的,MYCAT会采用另外一个主节点所对应的全部读节点来实现select负载均衡。
• 当所有主节点都失败,则为了系统高可用性,自动提交的所有select语句仍将提交到全部存活的读节点上执行,此时系统的很多页面还是能出来数据,只是用户修改或提交会失败。

dataHost的balance属性设置为:
• 0,不开启读写分离机制
• 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
• 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡。
一个dataHost元素,表明进行了数据同步的一组数据库,DBA需要保证这一组数据库服务器是进行了数据同步复制的。writeHost相当于Master DB Server,而旗下的readHost则是与从数据库同步的Slave DB Server。当dataHost配置了多个writeHost的时候,任何一个writeHost宕机,Mycat 都会自动检测出来,并尝试切换到下一个可用的writeHost。

MyCAT支持高可用性的企业级特性,根据您的应用特性,可以配置如下几种策略:
• 后端数据库配置为一主多从,并开启读写分离机制。
• 后端数据库配置为双主双从(多从),并开启读写分离机制
• 后端数据库配置为多主多从,并开启读写分离机制
后面两种配置,具有更高的系统可用性,当其中一个写节点(主节点)失败后,Mycat会侦测出来(心跳机制)并自动切换到下一个写节点,MyCAT在任何时候,只会往一个写节点写数据。

基本配置:

server.xml 虚拟库的账号和密码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
 <system>
 <property name="defaultSqlParser">druidparser</property>
 </system>
 <user name="my">
 <property name="password">my</property>
 <property name="schemas">testdb</property>
 </user>
</mycat:server>

schema.xml  主要配置主从库的数据库连接地址信息

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!-- schema 中可以有多个table节点,列几个在Navicat中就能看到几个,库里有这里没有的话客户端中也看不到 -->
 <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
 <table name="my" primaryKey="ID" type="global" dataNode="dn1" />
 </schema>
<!-- 数据节点 -->
 <dataNode name="dn1" dataHost="localhost1" database="test" />
<!-- 节点主机信息 -->
 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
<!-- 指定写入数据的主机 -->
 <writeHost host="hostM1" url="192.168.93.132:3306" user="root" password="root">
 <!-- 指定读取数据的主机,可以有多个 -->
 <readHost host="hostS1" url="192.168.93.130:3306" user="root" password="root" />
 </writeHost>
 </dataHost>
</mycat:schema>

 

发表在 数据库 | 标签为 , | 留下评论